annathepiper: (Final Test)

Testing, testing, testing. I upgraded the hard drive in my computer yesterday, putting in a brand new SSD, and wow booting this thing up is smokin’ fast now.

The overall process I followed was:

  1. Take the computer apart so I could take out the old drive
  2. Put new drive in and put computer back together
  3. Install Catalina as a brand new install
  4. Use Migration Assistant to pull my data off my last Time Machine backup

The first big hiccup I ran into with this were that it took me three tries to get a viable USB installer for Catalina. Fortunately we have other Macs in the house, so all props to Paul for letting me use his downstairs system to generate the third USB installer, which was successful.

The second big hiccup was getting the new install of Catalina to actually see my Time Machine backup. Normally I run Time Machine over our house LAN, and the older laptop that acts as our Time Machine server saves my backups out to a USB drive attached to that. I attached that USB drive directly to my laptop. But Migration Assistant didn’t realize what backup I wanted to use until I specifically went into Finder and mounted the sparsebundle. Once I did that, Migration Assistant went “oh you mean THIS backup” and proceeded to let me actually pull data out of it.

That migration process went smoothly, though the wild vacillation of time estimates was kinda hysterical. It dropped from about “7 hours 57 minutes” (and Dara and I expecting this would have to run overnight) down to about “2 hours 20 minutes”, and then plummeted from there to somewhere around 20 minutes. For way longer than 20 minutes, at which point it also vacillated wildly between 20, 38, 17, 11, 18, and other numbers in the range. The speed at which the drive was operating kept fluctuating too, and we didn’t know why. Dara’s theory was that maybe Migration Assistant had to go up and down through various levels of Time Machine backup to get a good read on all the things it had to pull out. But we don’t know this for sure.

Third big hiccup so far was that the system was confused as to letting my Apple ID log in. I boot the thing up and it goes “hey your Apple ID needs to log in to allow various things to work”. I’m all “cool” and I try to log in with it… only to get an error message that said, and I quote, “An unknown error has occurred.”

This was, shall we say, less than helpful.

So I had to go googling as to what the hell to do to fix that. Tried several unsuccessful things until I landed on this article on AppleToolBox, which provided some terminal-level commands that ultimately did the trick.

Fourth hiccup: Mail initially refused to let me import messages, swearing up and down that I didn’t have enough space in my home directory. It lied. It was also confused as to WTF the actual problem was: i.e., a permissions issue, given that I had created a brand new user on the system when I pulled in my Time Machine data, and it didn’t think the Mail directory was properly owned by that user. So I had to fix that. What ultimately worked for me were steps provided in this Apple forums thread.

Mail also had issues letting me back into some of my accounts, but I think this may have been part and parcel of the Apple ID problem? Once I fixed that and reinstated my various mail accounts, Mail seemed happy accessing them.

Fifth hiccup: the program I use to manage my reminders and tasks, Things, also had a permissions issue. I wound up locating where it stores its database with the help of this article, and fixed the permissions on that, similar to what I did for Mail. (In this case, that meant getting into the terminal, finding the thing, and throwing chown at it.)

As of this writing, these are the things so far that have made the process bumpier than I would have liked. But major functionality on the system now seems to be in place. I am really pleased with how fast the thing boots up now. And hopefully once Catalina finishes going “OH HEY NEW DRIVE LET ME INDEX ALL THE THINGS”, I should see an overall general performance boost. Which should extend the life of this machine a little while longer, until it finally stops getting security updates and I have to upgrade to a new system.

Confirmed working so far:

  1. Apple ID login
  2. Syncing to my phone and iPad
  3. Dropbox
  4. Mail
  5. Logging into various things I usually log into in my browser (social media, mostly, but other frequently visited sites as well)
  6. Things
  7. Password manager
  8. RSS readers (I have two)

Still to check:

  1. Making sure all my documents and photos and other files came over safely off the Time Machine backup (means checking the Desktop, Documents, Music, and Downloads directories just to make sure everything looks in order)
  2. Scrivener
  3. Google Drive
  4. Calibre
  5. LINE (which I use to talk to my guildmates in Dungeon Boss)

Once all the major things have been checked, I’ll feel comfortable with reinstating Time Machine backups. But I wanted to get all this documented while it was fresh in my brain!

(And oh yeah, I can also report that doing a fresh install of Catalina does not appear to have fixed the weirdness in my playlists on my phone and iPad. Boooooooo. Apparently I’ll have to wait for Apple to fix that properly. Oh well!)

Crossposted from annathepiper.org. Original post: http://www.annathepiper.org/2020/02/02/hard-drive-upgrade-for-my-laptop/

annathepiper: (Final Test)

In the ongoing process of doing my code work on my Github, I came across an idea that I’d actually encountered before. But it was one for which I’d never previously had an identifying term, and I was excited to learn about this.

Namely, Page Object Model testing. (Not to be confused with Project Object Model, which is what the POM in a pom.xml file stands for when you’re working with Maven.)

What this is: a way of writing a test framework that separates “code that represents the thing you’re testing” from “code that actually does the testing”. Turns out I’d learned about how to do this at Big Fish, when I picked up the idea and how to implement in Python.

Back in those days, it helped to do this because it let me have test cases that basically said “okay go get me the page I need to test, and stick all the data representing it into this object, which I will then do tests against”. It meant that in setup for tests, all I had to do was go grab an instance of the object that represented the page to be tested. And that meant in turn that the tests themselves were more tightly focused.

I found that it required a bit more organizational work to set up, but that once I had the idea in place, it meant writing future tests became easier. For example, if I had test script A that tested the homepage of the site, and then later needed to write test script B against the same page, I wouldn’t have to rewrite the code that loaded the homepage for testing. Likewise, if something about the structure of the homepage changed, I would only have to change the class that dictated that structure, with possibly only minor changes to any test scripts that needed to deal with it.

I liked this way of organizing code well enough that I have been implementing it on my Github repos. In the Python Selenium demo, specifically.

But, now that I’m done with the initial wave of Selenium tests and am looking at ways to expand the suite in both Java and Python, I started thinking of how to rearrange the organizational structure of both suites and seeing whether I could do a similar structure in Java. That led me to discovering that this whole concept had a name.

And it also led me to being able to implement Page Object Model testing in the Java Selenium repo, too.

What this means in practical terms is that I can think of pages on my test WordPress site in terms of “here is an object that represents an entire page, including child objects”. These child objects would be things that are shared across all pages, like a sidebar, or a footer, or a menu. Their various objects are things I have to implement only once in a Page Object Model system, and then use as necessary in tests that actually look at them on different pages.

So all in all this has been a satisfying area of research.

Some links I’ve used to read up about this:

Page Object Model (POM) | Design Pattern on Medium.com

Getting Started with Page Object Pattern for Your Selenium Tests on Pluralsight.com

annathepiper: (Final Test)

Regarding the last post I put up (here if you’re reading this on annathepiper.org, and here if you’re reading it on Dreamwidth), I thought I’d do another quick post with some definitions of terms I’m throwing around, for those of you who aren’t in the tech industry and might not know what I’m talking about:

API: An API is basically a known set of ways that a program, operating system, or in this case a website makes available for others to hook into and use. For example, Apple has an API for developers to use if they want to create apps for iOS. What I’m doing is playing with the REST API that WordPress makes available as part of the WordPress code.

Service: A service is a thing that sits underneath a website and does a lot of under-the-hood things for it. I described this on Facebook as being part of a website’s engine. It’s not something a user would see just interacting with a site in their browser, but it’s an important thing nonetheless, and it’s there to help the website do its job.

REST API: REST is specifically one type of format an API might take for access to a web service. This Wikipedia page has more if you want to read up on it. But for purposes of this post, I’ll simply say that the REST API endpoints I’ve worked with to date, both in the context of a job and on my personal coding projects, are endpoints that return JSON payloads that I can test against.

JSON: JSON is a file format with a specific syntax and structure. It gets used a lot in web services as it’s reasonably easy to parse, as well as hand back and forth through various steps of a web site’s operation. So when I see a JSON payload come back off a web service endpoint, I can use my test automation to analyze that payload and look for interesting things in it. For example, an HTTP response code, like a 404. Or an error message or error code. OR, if the test is specifically looking for a successful response, I might be looking for an expected title or body of content. Since I know I’m dealing with JSON, I can set up my code to drill down into the payload and look for these specific things.

Endpoint: An endpoint is basically one of several routes you can use to do things with a service. It’s more or less a URL that you can use to make the service report back on various things.

So with all of those identified, does it make more sense now if I say that my demo tests are hitting the documented WordPress REST API endpoints, looking at the JSON I can get back from those endpoints, and analyzing them for various things? Let me know! And let me know if you have any questions. :)

annathepiper: (Final Test)

On a previous job interview loop, one of the people I spoke with gave me good feedback about the work I’ve been putting up on my Github repos. He observed at the time that I had been hitting the low-hanging fruit: i.e., the test cases dealing with good, expected data.

He was right. So I’ve gone back and updated my repos for the WordPress REST API tests to also include negative test cases, i.e., known bad data, to test the error behavior of the endpoints. So here’s what I focused on to do that.

First, several of the endpoints ask for IDs of this, that, and the other thing: post IDs, category IDs, etc. For those sorts of cases, I did these negative tests:

  • IDs that could be valid (i.e., were legit integers), but which did not actually exist as posts.
  • IDs that were specifically not valid, i.e., things that were not integers. E.g., “aaaaaaa”.
  • Using MAXINT as a post ID, just to use a GIGANTIC integer. Practically speaking I’d usually expect this to also be a “this post does not exist” scenario. But I’ve tested things in the past where throwing a thing a value slightly above a limit behaved, but throwing it a value WAY bigger than the limit did not. So I wanted to do this scenario too.
  • Also using MININT as a post ID. This is not only to test using a gigantic thing, but ALSO to test using a gigantic thing that could not actually be a valid post ID (i.e., because it’s a negative number).

Secondly, several of the rest of the endpoints didn’t use IDs, but rather, slug/tags. So for those endpoints, I did negative test cases that were very similar.

  • Slugs/tags that could be valid, i.e., strings, but which did not actually exist in the database (such as using “pancakes” for a category tag).
  • Slugs/tags that could not be valid. E.g., using “pancakes” with additional non-alphabetic characters.
  • Using MAXINT and MININT again.

In all of these cases, I threw the bad data at the endpoints and looked for specific error codes and error messages I was expecting to get in response. I also looked for 404 response codes.

I got the expected behavior by testing the various endpoints manually with bad data, in Postman, and seeing how they responded. That gave me the basic JSON response structure I would need to expect: that there would be both an error code and an error message, and an additional data object that would contain the response code within it. So my test cases looked for all three of these things.

As of this writing, I’ve implemented the negative test cases in Java, Python, and C#. Once I had them working in Java, it was reasonably easy to port them over to the other languages. In all three languages, this has now brought the test case count for the REST API suite from 20 up to 60.

In addition to learning the error behavior of the various endpoints, the most useful thing I’ve picked up on in this part of the project is how to get at MAXINT and MININT in the various languages.

In Java, it’s Integer.MAX_VALUE and Integer.MIN_VALUE. In Python, it’s sys.maxsize or -sys.maxsize–and this is Python 3, specifically. (Apparently, in Python 2, it was sys.maxint, but it changed; if I understand the change correctly, it was because Python 3 doesn’t have a hard and fast integer size limit, because it automatically recasts your number to a long on the fly if you go over the theoretical int limit.) And in C#, it’s int.MaxValue and int.MinValue.

Meanwhile, over in the Selenium test suites, there are fewer opportunities there for negative cases. But I did add some there that throw bad data at the search box, to verify that I get the appropriate messaging if there are no matching results. There’s some room for expansion there as well, to try to test the limits of what the search box can accept. So that’ll be the next place I add more negative cases.

annathepiper: (Final Test)

Back in Ye Olden Times when I went to college, object-oriented programming was barely starting to become a thing. It didn’t help matters that the particular school I went to was behind the times on its computer science program, either. So I didn’t discover until I was actually in the workforce that of all the languages I’d learned about in college, the only one that was at all useful was C.

C# hadn’t been invented yet when I graduated. When I look it up, I see that Microsoft put out the first release of C# around 2000 (source: Wikipedia’s C# page), and by then, I was working at Attachmate. Attachmate was one of the last times I had any opportunity to work with C++, aside from one short contract I had after they laid me off.

Up till then, my only work at Microsoft (my full-time stint there in the early 90’s, and my contract work in the mid-90’s), was pre-C#. My next work at Microsoft, the two back-to-back contracts I had from 2003 to 2005, was straight up testing: a mix of manual testing and running automation written by the team’s actual employees. I didn’t have any opportunity to work with any language directly myself, much less C#.

After that, all of the full time gigs I’ve had were ones functioning outside the Microsoft-based ecosystem. Big Fish in particular was a Python and Java environment. Which has been great for my accrual of Java and Python experience!

But now that I’m back on the job market, I’m seeing regular signs of jobs asking for C# coming across my radar. So far, I’ve had to tell recruiters that I don’t have any professional experience working with the language, or for that matter with modern versions of Visual Studio. (The last time I would have seen any version of Visual Studio would have been that aforementioned short contract. According to my old resumes, round about then, I was mentioning working with Visual Studio 6.0 and Visual Studio .NET.)

I figured, though, that as long as I have time on my hands it would behoove me to try to actually get some hands-on experience with the current release of Visual Studio and with C#. And, since I’ve been told by former Big Fish colleagues that C# is very, very similar to Java overall, I figured I’d try to port my current Java work up on Github over into C#.

As of this writing, I have done this! The code I’ve ported so far is the little test suite that runs the REST API tests against my test WordPress site. This ported code now lives on my Github in its own repo.

Things I have learned from this experience

I do not like Visual Studio as much as I do IntelliJ for an IDE. But since part of this entire point was to practice getting hands-on experience with a current Visual Studio version, I put up with that. And it helped that I figured out a few ways to make Visual Studio less cluttered, by docking the things I need access to off on the side to be hidden until I need them. That frees up most of the screen on my dev laptop for me to see my code.

C# is, indeed, a LOT like Java. It’s simultaneously enough like Java and enough different from Java that the little differences will probably catch me up a lot if I wind up regularly working with this language. Nothing I couldn’t eventually get used to. But it’ll be a thing I’ll need to look out for.

I don’t like that Visual Studio makes me have to re-add a file in git every time I change it. (IntelliJ does not make me do this, even on Windows.) When I went googling about this, I found that this is apparently by design.

I do like the concept of a “namespace” that’s apparently a thing in C#. If I understand it correctly, the idea here is to have a big set of associated files. This seems to simplify matters a bit, and has saved me having to do a few extra import statements.

Oh wait, I’m sorry, not “import”. “Using”. See previous commentary re: differences between C# and Java.

Something else I’m still having to get used to, and this is a question of “quirks of the IDE” as opposed to “quirks of the language”: if I want to run tests in Visual Studio, I have to hit the Test Explorer for that. I can’t build the project directly, otherwise it’ll complain at me. This seems to be because I’ve built my various test classes as class libraries, as per various tutorials I’ve seen on how to set up tests. Which means in turn that Visual Studio won’t let me run them directly. Apparently you only get to run things in Visual Studio if you’re specifically building executables?

Lastly, a quibble of terminology: I don’t like that Visual Studio calls its projects “solutions”. It’s a bit too rah-rah YAY GO SOLVE YOUR PROBLEM for me. And I’m all “yes yes I’m going to STOP TRYING TOO HARD TO HELP ME”, here.

Which, I feel, exemplifies my experience with Microsoft products overall rather well.

Specific libraries I’ve discovered

A lot of this porting work has been “learn how to deal with the language” as well as “learn how to deal with the IDE”. But there’s also been some measure of “find C# equivalents of the technology I’m used to dealing with in Java”. One of these has been TestNG. The recommended C# version of this is apparently NUnit, which seems fine so far. Learning how to deal with this has been just a question of learning its specific syntax for annotating test methods.

Likewise, the current recommended way of doing REST API testing in C# seems to be RestSharp. From what I saw in my googling, apparently there’s now an in-language way of doing this, but I stuck with RestSharp as it seemed a good analog of the Unirest library I learned how to use on the Java side.

Lastly, since I needed to find an equivalent for how Java parses JSON, I went with LINQ to JSON in the JSON.NET/Newtonsoft library. This has been a pretty close match to the json.org libraries you can use in Java, and gives me the same level of ability to parse JSON payloads without having to worry about deserializing them.

(Which took me a bit of work to discover. RestSharp’s docs seemed to really really REALLY want me to deserialize JSON I get back on REST API calls. This is not helpful if all I really want to do is look into the JSON and go “yes, I see the correct value(s) in there”, as opposed to actually saving the stuff out into variables and doing additional things with it.)

What’s next

I also want to port the Selenium-based tests into C#. But since the Java version of these tests specifically uses Selenide as a framework to do its testing, I want to find a C# library that does the same thing. Atata seems promising and I shall investigate it.

Tutorials I’ve found so far for how to do Selenium-based testing in C# talk a lot about how to install Selenium and browser drivers into your Visual Studio. I don’t actually need to do that, given that I already have a Docker grid running. And since I already know how Selenium works, all I really need to know is how to get my C# code pointed at a Selenium grid.

Job descriptions that come across my radar also keep periodically mentioning Cucumber. This is a thing I discovered during my last research project at Big Fish, so I’ve been a bit interested in checking it out. I don’t know yet how well it plays with C#. This may also require investigation.

All in all

This has been a valuable experience so far. I can now say with assurance that if called upon to do so, I can in fact deal with both C# and Visual Studio.

Under no circumstances can I be called an expert, mind you. And I would still not be a good job match for any position that requires multiple years of experience working in the C# realm. But for any position with a bit more flexibility, where they’d be willing to go “oh sure, you have experience with Java and Python and have at least SEEN C#? We can work with this”? I could do that.

Also: given that I’m an amateur musician, I do have to say, I do like that the language is called C#. I play that note a lot on my fiddle and on my winds. I’ll take any little connection to music in this endeavor that I can get. :D

annathepiper: (Final Test)

I now have three active repositories up on my Github account. These are:

misc-configs: This one is for miscellaneous config files that are useful for the tests in the other repositories. What’s in here will mostly make sense to you if you are familiar with a) how to import data into a WordPress site, b) how to import Collections or Environment files into Postman, and/or c) how to use a YAML file to run Docker Compose to launch one or more containers.

wp-test-demo-java: This one is for my demo of testing the REST API endpoints made available by WordPress for any given site. Phase 1 of the work on this demo is complete, in which I test against the endpoints that handle publicly accessible data. I.e., the kinds of things you could find out about a WordPress site if you’re just a visitor to the site.

wp-test-demo-java-selenium: This demo is also using my test WordPress site, but here, I am doing front end testing rather than service testing. I’m using the Selenide Java library to run tests against the site via Selenium, a widely used automation framework for testing web pages. Selenide is a layer on top of Selenium that does the heavy lifting of Selenium setup for me, and frees me up to focus on the test cases I want to run.

This is a work in progress, but as of this post it has 27 test cases in it. There are more to come.

Other projects that’ll be showing up on my Github account include:

  • Phase 2 of the REST API project, which would involve hitting service endpoints that specifically require authentication.
  • Porting the Selenium tests over into Python, and structuring them in such a way as to be similar to the Python test framework we used on my former team at Big Fish. The intent here would be to demonstrate my ability to use Selenium in Python, and to write up a framework for it. (Which will require more work than the equivalent testing in Java!)
  • The teeny WordPress plugin I want to do that’ll make nice Dreamwidth-style user and community name tags in a post or page for me. (This is the one I’ve mentioned before that would be an expansion on the very old plugin that does this for LJ user and community tags.) This would be written in PHP, and the intent HERE would be to show my comfort level with PHP. I haven’t used this language as much in a professional context, but I HAVE used it a lot over the years dealing with my websites, and I can demonstrate that here.

Stretch goals:

  • Do something in JavaScript. What, I don’t know yet, but the obvious possibility would be to port some or all of the previously mentioned Selenium tests.
  • Since I do have a locally running plugin on annathepiper.org that fuels my Roleplay Logs page, time permitting, I’d like to do a more solid version of that. Right now the plugin I’m running is a hack of the previous non-Wordpress-based code, and it talks to a database outside the WordPress structure. A cleaner version of this would actually be properly integrated with WordPress. If I get really fancy, I could do an entry form in the Admin UI for WordPress to allow the addition of new logs, and possibly even reading them in via the Media section of the site. This would, of course, also be written in PHP. More on this as events warrant!

Mirrored from annathepiper.org.

annathepiper: (Final Test)

Good progress on the coding project today! \0/ Things accomplished:

  • Added new test cases involving Categories, Tags, Pages, and Comments, to bring the total number of test cases up to 10
  • Added the ability to run the cases via a Maven configuration as well as TestNG, and updated my pom.xml to use the testng.xml as its suite file
  • Checked all the new test cases and related work into wp-test-demo-java
  • Renamed my wordpress-dev repo to misc-configs, because that’s really what it’s for miscellaneous config files
  • Updated my Postman collection to include all the endpoints for the test cases I wrote today, and checked the new version of that into misc-configs
  • Updated the Readmes on both wp-test-demo-java and misc-configs to more clearly explain what the repos are for, particularly wp-test-demo-java, as I’ll be pointing recruiters at that
  • Installed Jenkins (again) on my dev laptop, so that I can run the automation as a local Jenkins job as well as within IntelliJ, and to keep up my practice using Jenkins

I have decided, too, that I’ll be doing this project in phases.

Phase 1: REST API tests that hit the endpoints that can serve up publicly available data. I.e., the kinds of data you’d see as a user just browsing a WordPress site.

Phase 2: Selenium-based tests that will do front-end type tests. For example, “If I click on this link, does it take me to this expected target page?” Or, “If I click on this thing on the menu, do I get the correct dropdown off of it?”

Phase 3: This is the ambitious part. There are also REST API endpoints for WordPress that’ll let you get at the stuff you’d ONLY see as an authenticated user, such as post revisions and settings and the like. Time permitting, I may learn about the various ways to actually do that authentication properly so that the test suite can actually get at those endpoints.

Right now, though, I’m going to focus on phases 1 and 2.

Mirrored from annathepiper.org.

annathepiper: (Alan YES!)

Spent most of today (very roughly during ‘work’ hours, just to try to keep to the whole idea of coding to a schedule) working on the WordPress testing demo project I talked about in my last post. As of this writing, I have some actual working things checked in up on Github. There’s only one functional test case so far, but it’s a start!

What I accomplished today:

  • Creating a Github repo for this work
  • Read about the API endpoints that WordPress makes available for any given site, some of which are publicly viewable, others of which require you to log in as a valid user
  • Started a Postman Collection to keep track of the endpoints I’ll be playing with for my test site, and checked an initial version of this in on Github
  • Refreshed my memory about how Unirest works, as this was the library we used at Big Fish to talk to various services; maybe not the most current library to use, but it’s the one I know, so I’m going with this for demo purposes
  • Got IntelliJ on the Linux partition of my dev laptop updated to the latest version
  • Built the actual project in IntelliJ, as a Maven project, so it’d have the correct file structure and a pom.xml file I could add dependencies to
  • Started building a client class that will use Unirest to hit those endpoints for my local test site
  • Built a BaseTest class in charge of doing setup used by all the test classes I’ll be making
  • Built a TestPosts class to start the test cases for the “Posts” endpoints in the aforementioned API, and now it even has an initial functional test case!

Now that I have an actual working (if tiny) framework here, I should be able to fill in some test cases reasonably quickly.

Note also that the test suite assumes I am running the WordPress test site locally. For bonus usefulness I should make some sort of healthcheck test case that verifies that the test site is in fact UP.

Mirrored from annathepiper.org.

annathepiper: (Final Test)

Since I continue to have time on my hands and no active leads bringing me in for interviews this coming week (so far), I’m moving forward with laying down the plans for my coding demo.

As I said in my last post about this (here for those of you reading on Dreamwidth), I’ve succeeded in setting up a test WordPress site in Docker.

The rest of this operation is going to look something like this, at least for phase 1 of this project:

  • Actually get some content into that test WordPress site. This will probably involve just doing a database copy down from my backup WordPress site up on angelahighland.wordpress.com. If for some reason I can’t do that, I’ll install a lorem ipsum generator plugin (there are a few for WordPress, I looked) and generate purely random content.
  • Study up on the REST API WordPress makes available for any given install.
  • Once I know what service endpoints are available, use that to scope out what test cases I can do.
  • Write out those test cases in a Java BVT suite, similar to the ones I wrote at Big Fish. Tools I will need for this: IntelliJ, TestNG.

A possible Phase 2 for this project will involve extending the testing to include front-end testing. In other words (for those of you unfamiliar with how web testing works), hitting the pages of the test site in a browser and verifying that expected things are there, and/or that you are able to do certain things (e.g., log in, do a search, leave a comment). Tools I will need for this: Selenium (also in a Docker image), with a side helping of the Selenide framework. This would be a followup on my previous research that I did as one of my last projects at Big Fish.

Possible stretch goal: replicate some of the same test cases in Python, just to brush up on my Python skills. Tools I’d be using in this part of the work: PyCharm.

I’ve been writing out some tasks for myself in Things, by way of a task breakdown, and I suppose this blog post kind of counts as a spec. Ha. :D

And when I’ve got some actual code, I’ll be checking it in on my personal Github account. This will be fun, hopefully, as well as a way to keep my skills active until such time as I can convince somebody to give me another job!

(EDITING TO ADD: This, by the way, is a separate project I’m planning in addition to doing a WordPress plugin! So I’ll have multiple things I can eventually point at by way of demonstrating I can code. What I’m talking about in this post is more along the lines of demonstrating something similar to the last code I wrote at Big Fish.)

Mirrored from annathepiper.org.

annathepiper: (Final Test)

So one of the things I want to do during my between-jobs downtime is practice my coding. And in particular, since I thought it’d be nice to a) start small and b) play with something I’m actually interested in coding (as opposed to, say, just focusing on random interview-type questions which will eventually bore me to tears), I decided I’d try to play with making a small WordPress plugin.

I’ve already done one that I’m running locally on Annathepiper.org: namely, to show y’all my archive of roleplay logs. Eventually I want to do a newer version of that, something that might let me actually practice setting up a simple web service.

For now though I’m going to do something less complicated. There’s a very old plugin called “lj-tag-parser”. This thing has a very simple job: allowing the LJ-style syntax for usernames and communities in your WordPress posts and comments. I’m using it right here on annathepiper.org, which is why you can actually see LJ-style usernames and tags if I write something like, say, userinfoannathepiper.

However, this thing hasn’t been updated in ages. And I thought it’d be nice to expand it to allow Dreamwidth-style syntax in addition to LJ-style, and possibly also allow generation of such tags via shortcodes.

But before I do all of that, I wanted to make sure I could set up a clean WordPress dev install.

In the past, when I’ve played around with dev-type WordPress stuff, I just did this on a separate blog on my annathepiper.org network. But coming at this with my SDET hat on, I thought it’d be cleaner and more appropriate to developing my coding experience if I set it up the way I’d do it in a work environment.

Which means a brand new, clean WordPress dev install. And in particular, using official WordPress and MySQL images from Docker.

For those of you who aren’t in the tech industry, suffice to say that Docker is a tool that lets you do exactly this kind of thing. You can set up a thing you want to play with in its own little container on your system, without having to worry about it interfering with anything else you might be doing. Docker lets you go about this in a few different ways. You can go get official images for things (like, say, the latest WordPress install) and do a single run using that image.

Or, if you want to do something a bit more complicated (like, say, running the official WordPress image AND a MySQL image that you’ll need to actually power the WordPress install), you can chain them together using a thing called Docker Compose.

Docker Compose works by you setting up all the config data you need in a file called docker-compose.yml. I’m still fairly new to the syntax this thing requires, but fortunately, I learned a bit about it while I was still at my previous day job at Big Fish. So I was able to utilize that knowledge to build a file that’d let me set up that clean WordPress dev install I want.

I did have to jump through a few hoops to get all the info I needed, though. Here are some pages that proved useful:

So now, as of this writing, I have a nice little set of Docker containers running on my dev box on Linux. And the nice thing about doing this via Docker, especially, is that I could take this exact same docker-compose.yml, reboot my box into Windows, and use it there too. All I need to be running locally is Docker and Docker Compose. The rest of it comes in with the images I specify!

And for the interested, I have checked in my final docker-compose.yml up on my personal Github account, and you can see it right here.

Mirrored from annathepiper.org.

annathepiper: (Final Test)
For whatever reason, my ability to crosspost from Wordpress-hosted blogs on murkworks.net over to this Dreamwidth account is b0rked. I have a ticket open with the support folks about this, but until we figure out what's going on, I'll need to direct y'all over to the posts I'm making on my home sites in the meantime.

Like this one, which is mostly interesting to any of my pals from my days on MUSHes, since this impacts my old Roleplay Logs archive on annathepiper.org:

http://www.annathepiper.org/2017/10/01/some-housekeeping-updates/

Basically, I had to do some rejiggering of plugins on annathepiper.org, due to things getting deprecated and/or outright vanishing off of the Wordpress.org plugins repo. As a result I got to teach myself how to do shortcodes in a custom Wordpress plugin, which was kinda fun!

As I say in the post over on annathepiper.org, if anybody sees anything funky looking there, do let me know.
annathepiper: (Emperor Fabulous)

If you follow me on Facebook you’ll possibly have seen me periodically posting about how my neighborhood in Kenmore is overrun by wild bunnies in the summer, and this year is no exception. One of the things I quite enjoy about the walk up and down our hill when I’m doing my daily commute is looking for bunnies–whether they’re hanging out openly in someone’s yard, or ducking under bushes, or what have you.

I take pictures of them when I can. Like, say, this one!

You might notice, though, that this picture is kind of soft and fuzzy, and I mean that in a “not just because it involves a bunny” kind of way. The reason for this, I have discovered, is because the iPhone (at least up through the 6’s, as well as the non-Plus 7, according to specs on apple.com) uses digital zoom. And digital zoom gets problematic the closer in you try to zoom.

The common wisdom I’ve seen is that if you want to take a pic with an iPhone, you need to not zoom at all, and crop to get what you want. This is fine if what you’re taking a pic of is pretty close to you. Like this bunny! (This remains my very favorite bunny pic I’ve taken to date.)

But if a bunny is more than two or three feet away from you, you kinda have to zoom to shoot it. Because if you try to get closer, it will very likely sense your presence and bolt.

Which brings me to how I saw Dreamwidth friend cruisedirector posting her own bunny pics! She’s got some nice ones here and here and here, and in general, I’m rather jealous of her zooming abilities! She informed me that Samsung rather gets the credit for this, and if I google zoom specs for Samsung phones, I see things like “10x optical zoom” for the Galaxy S4 and yeah, that’d be why she’s taking better bunny pics than I am. ;D

So then I got all “so what can I do to solve this problem?”

Googling around led me to learning that there are assorted third-party lenses that have been made for the iPhone. The top two contenders I saw in my research were the Olloclip and the Moment, and of the two, camera nerds I read up on have been saying that the Moment is the superior lens.

The problem for me though is that the way the Moment works, they expect you to glue a mounting plate onto the back of your device, and screw the lens into that. I was rather dubious about this–and moreover, decided that I didn’t want to go hunting for one of these, even though I’d read in an article I found posted on the Seattle Times from 2016 that indicated that these lenses would be on sale at the Apple Store in Bellevue.

So instead I opted for the Olloclip. And specifically, I bought this thing, which gives me a telephoto lens and a wide angle one. The telephoto one is the one I’m interested in, since it gives me some optical zoom capability… 2x optical zoom as well as a shallower depth of field. It’s super-easy to pop onto the phone, and I can flip it around to use the wide angle lens. Both lenses can line up with the front and back cameras.

The one drawback here is that I do have to take the phone’s case off, but I’m okay with that.

And so far, the one thing I’m not entirely happy with is that test shots I’ve done with notable amounts of sky in them have caused there to be a bit of a dark halo effect in the corners. So to account for this, I will need to practice aiming and then cropping to get rid of that.

Also, if I change phones and want to continue to have an external lens, I’ll need a different one because this one is specifically designed for the iPhone 6. So far though I’m okay with that, too! My current phone is still perfectly lovely and I won’t be updating it in the near future.

So for now this little toy should be perfectly lovely for my bunny-photographing needs, and I will also be taking it to Quebec with me–because I’m hoping the improved zoom will let me do better at taking pics of musical performances, too. 😀

Here are a bunch of test pics I’ve done with the lens clip so far (and if the thumbnails aren’t coming through for some reason, you can find them directly on flickr here):

Happy with the purchase so far. Playing with this is already fun! Looking forward to learning more!

Mirrored from angelahighland.com.

annathepiper: (Final Test)

Dara has been on a big kick with the turn of the year to get rid of a lot of things we don’t need anymore, and this has rolled over onto me a bit to make the first week of 2017 one of solving a bunch of small problems.

Problem #1: Backups weren’t working correctly on our servers.

How this was solved: Discovering that rdiff-backup wasn’t going to create a directory for me in the backup location if that directory didn’t already exist, unless I gave it a –create-full-path argument. Also discovering that scripts in cron.daily, cron.weekly, and cron.monthly should not actually be in cron format, unlike anything you put in cron.d. Once I figured out both of these things, I was finally able to get backups working properly.

Problem #2: My older laptop got unacceptably warm after a few minutes of use, particularly when booted into Windows 10.

How this was solved: Taking Winnowill apart, which let Dara not only give the inside a good cleaning, but ALSO let her discover that the goop that’s normally supposed to provide some insulation conductivity between the CPUs and the heat sink had dried out. A lot of it had in fact crumbled away. So she ordered some new goop and put new layers of that on the CPUs, and then we put the machine back together.

This made the machine much happier when booting into Windows 10 and actually trying to do things in that OS.

Meanwhile we’re also updating the hard drive from its current 500GB one to a 1T, and going from a Western Digital Blue to a Western Digital Black. Which, Dara tells me, should mean an increase in hard drive performance and hopefully another reduction in the likelihood of it overheating.

In general this should also hopefully increase the lifespan of this machine. Given that I got it way back in 2007, and this box is still chugging along, that’s still a pretty impressive lifespan for a laptop. I was thinking of selling it, but Dara says she’d like to keep the box around just for the sake of having an older and still functional Mac. Eventually it might become our new Time Machine server if Elda gives up the ghost.

All of this did at least also give me a chance to take a picture of what the inside of Winnowill looks like!

Winnie's CPUs

Winnie’s CPUs

Problem #3: The cushion on the left ear of my Bluetooth headphones split a seam.

Apparently this is a thing with Jabra move headphones? A couple weeks ago I noticed that there was a split seam on this ear cushion, and when I googled for it, I found quite a few other users complaining about the same thing. This has happened often enough that Jabra sells replacement cushions, and the replacements are supposedly sewn and not glued. I ordered a pair of the replacements and got the new one for the left ear on there okay with Dara’s help. Keeping the cushion for the right side in reserve on the assumption that this will eventually happen on that side, too.

There are other things I’m in the middle of doing that are more domestic–replacing old bras and old jeans–and Dara and I will also be looking into replacing our mattress. But the techie problems are more interesting, so the post is about those!

Any problems y’all have solved so far with the new year?

Editing to add: By “goop” on the CPU I actually meant, of course, conductivity rather than insulation. Oops! Many thanks to userinfoalinsa for pointing that out.

Mirrored from angelahighland.com.

annathepiper: (Aubrey Orly?)

As y’all know, I’m an Apple user of many years at this point. I’m on my second Macbook computer since 2007, and my third iPhone since 2009. And since fairly tech-savvy, I tend to jump on OS upgrades as they happen. This week, with the release of iOS 10, was no exception.

And, as I’ve posted both here and on my social media accounts, by and large I’m happy with it. With the one big glaring exception that the redesigned Music app is an unholy mess and I would now like to shoot it into the sun. Go see that post for details on that, as well as a few initial observations on a couple of alternative apps I am exploring.

This post is about everything else, assorted observations I made through the process of installing the update on my phone and my iPad, and while using it today on the phone on my commute.

Dara’s best reaction to my live updates:

https://twitter.com/annathepiper/status/775894787694002176

I do indeed figure that any OS update that does not result in my device exploding is probably a win.

During Setup

iOS apparently has two-factor authentication now for logging into your iCloud account. This is a good thing. I approve.

I also noticed that it offered to add the credit card I already had on file with Apple for buying music and such to Apple Pay. I have no fucks to give about Apple Pay but went ahead and let it do this anyway. I may want to test this at some point.

No More Sliding to Unlock

I may be one of the few iOS users on the planet that doesn’t really care about the widgets on the lockscreen. I’m a little sad that “slide to unlock” has become extinct now, because iOS 10 wants you to swipe left to get to widgets, and swipe right to get to the camera. Both of which seem fine to me from a usability standpoint, but I’m tellin’ ya, it’s going to take me a while to get over the muscle memory of needing to swipe left to unlock the phone.

I have an iPhone 6, not a 6s or later, so I don’t get to have the shiny new Raise to Wake functionality. But it is pretty nifty to be able to unlock the phone via Touch ID. Which, come to think of it, I was able to do in iOS 9, I think. I just never ever actually realized that before.

Still, though, this is what it looks like if I swipe left now from my lockscreen.

Widgets! Yay?

Widgets! Yay?

Overall Design

A bunch of font changes all over the place, but aside from the ones in the Music app, so far I’m not seeing anything to annoy me. All of my various apps still look pretty much the same, and none of them appear to have broken. So at least from a design perspective, iOS 10 doesn’t look particularly different from iOS 9 except in the Music app. Nothing here for me to hate, but nothing to get excited over either.

And I’m a little surprised to have found only one new system wallpaper I didn’t recognize. Apparently wallpapers are not something about which iOS 10 concerns itself. I’m a little sad about that, too, because sometimes I do use the system wallpapers. They tend to be a bit better at not making it too hard to read the labels on my apps.

Performance

There does appear to have been a noticeable boost in performance on my devices. Uploading a photo to Facebook and Twitter over the house wifi was smokin’ fast, and even pretty speedy over phone connectivity as well.

Bluetooth

My Jabra Move headphones seem like they’re connecting faster to the phone now, and during the course of today as I played music and podcasts, they held up pretty well. But they started flaking out on me partway through the afternoon, and I’m not sure yet whether that’s the fault of the new OS, or the fault of the headphones maybe running low on battery. I didn’t hear them fire off a low battery warning, so I’ll have to keep an eye on that over the next few days and see if the problem recurs.

Mail

There’s a new filter icon in the Mail app, down in the lower left hand corner, that lets you zoom in on just the unread messages in the mailbox you’re looking at. I don’t know if I’ll find this useful yet, but it seems like something that might be useful to me at some point.

App Deletion

I’m a little vexed that the touted ability to delete the stock apps you don’t find useful is deletion in name only–you can just blow away the icons off the home screen, vs. actually deleting them off the device and therefore freeing up space. But still, I’ll take it. Fewer icons to have to keep track of is nice.

All in All

This doesn’t feel like a particularly revolutionary upgrade to me, and the only thing that’s blatantly different amongst the stuff I actually use and care about, i.e., the Music app, is a significant step downward.

I do not care at all about the new emojis, or the added functionality in the messages app. I certainly don’t care about app functionality within messages. And as I mentioned up at the top of this post, I don’t particularly care about the widgets on the lockscreen either. Since I have a 6, I don’t have the 3D Touch capability that’s supposed to be what makes these widgets so awesome. Y’all will have to look to reviews written by people with newer devices than mine, I think, to get more deets on that. (Try Ars Technica’s comprehensive review, maybe?)

On the other hand, my phone’s general performance does feel faster. I’m seriously disgruntled about the Music app being a dumpster fire now, enough that I’m looking for alternative music apps. But that’s not enough to make me sad that I did the update in general. As Ars Technica says in the headline of their review, if you’ve got a reasonably new device, there’s no particular reason not to update.

(If you’ve got an older device, note also that Ars Technica has an entirely separate post about iOS 10 on the iPhone 5 and 5c, so that might be worth a read to you.)

So if you’re a technophile like me and willing to dive in headfirst to a new OS upgrade, go for it; just be aware of the issues with the Music app. If you’re more conservative though and prefer that a new OS release go through a few cycles of bugfixes, there’s nothing hugely groundbreaking here that I see to argue you out of that.

Final rough grade in general: B+
Final rough grade for the Music app in particular: D-

Mirrored from angelahighland.com.

annathepiper: (Final Test)

Since I was just over on the WordPress.com testing its crossposting functionality via Publicize, I thought that was pretty nifty and have learned that that’s available to self-hosted sites like this one, via the Jetpack plugin.

So this is me testing that! This should be going out to my Facebook, Twitter, Google+, and Tumblr accounts.

(I’m a little irritated that Jetpack apparently does not let you set up to crosspost to Facebook for both your personal timeline AND a page that you manage, which, y’know, is kinda what I need to do. So even if I decide to keep Jetpack around, I will still need Social. Not to mention the older functionality I’m using to throw posts over to Livejournal and Dreamwidth.)

Y’all please let me know if you notice anything weird about site functionality while Jetpack is active. When I turned it on, I suddenly got a huge wave of backlogged comment emails that Social should have sent me and didn’t. So there may be other unexpected side effects. Apologies in advance if anything breaks!

Mirrored from angelahighland.com.

annathepiper: (Final Test)

As I announced yesterday, I have now have a minimal backup version of my author site up on angelahighland.wordpress.com. I’m disgruntled that I have had to do this, and only somewhat reassured by having seen our city council put up this statement pertaining to our ongoing chronic outage problem.

But this does at least mean that now I’ve had a bit of direct experience setting up a site on WordPress.com. Which is useful experience to have, since it tells me things I can share with fellow authors who need to set up a site for their books.

Setting up the site is really easy

All you really need is an account on WordPress.com, to start with. Once you have one of those, when you’re logged in, there’s a “My Site” button up in the upper left part of their site. Clicking on that leads you to the setup wizard you can step through to get a site going. They ask you some basic questions about what your site will be about, so that they can give you a bit of guidance as to what default themes they will suggest for you.

This process includes choosing a theme, and choosing what level of site plan you want. Your options for the latter do include ‘free’, with varying tiers above that that cost different amounts of money depending on what level of service you want from them.

Assuming you quickly choose one of the offered default themes and you choose the ‘free’ plan, setting up your site is only a matter of a couple of minutes. This is even easier than setting up your own site with the code from WordPress.org.

Your site will however be limited in available functionality

If you’ve got any experience setting up your own self-hosted WordPress site at all, you will probably find the limitations on a WordPress.com site annoying. Specifically, you will not be able to install your own plugins. I get why this is the case–they are a commercial site, and accordingly, they need to lock down what they’ll let users install and what they won’t, for security purposes. But if you’re accustomed to the fine-grained level of control hosting your own site will provide you, this will likely be a step down for you.

You do get a small range of plugins available to you, though. You can find those on the My Site sidebar, under Plugins. What’s of immediate interest to me is that they do have a “Publicize” plugin that lets you crosspost out to various social media sites. And there’s a Stats plugin that can show you some basic site stats, along with an extended Google Analytics plugin that you can purchase if you want more data than what the basic plugin will provide you.

A similar level of lockdown is in place on selecting themes. But unless you’re a techie like me, with enough HTML and CSS experience that you can fine-tune a theme to get it the way you want it, this probably won’t be an issue. There do appear to be a wide variety of themes available, both free ones and ones you can purchase. What I don’t see upon initial investigation is whether you can install your own theme–which is why I haven’t ported over the one I’m using here on angelahighland.com. I suspect they won’t let you do that unless you pony up for one of the paid tiers of service.

The My Site sidebar is actually kind of annoying

Again, this is a matter of my being a techie and also used to what I have available via the standard wp-admin sidebar in my self-hosted WordPress site. The My Site sidebar WordPress.com provides you is simplified from that–which I think would probably be a plus for less technically inclined users.

For me, though, it’s an annoying step down. And matters are not improved by how that sidebar seems to perform very badly in Safari, my browser of choice when I’m working on my Macbook at home. I can still get to the standard wp-admin sidebar, but it’s extra clicks to get to, and I don’t get to it by default if I try to edit any of the pages on the site. I have yet to find any way to make this my default sidebar via the UI that WordPress.com provides.

All in all

Despite my being vexed by the difference in available functionality between the WordPress.com UI and what I’m used to with my own self-hosted site, I did appreciate the quickness with which I was able to fire up a site there. And I do know that a lot of authors have their presences there and have found it very useful. John Scalzi, for example, has repeatedly posted on his blog at Whatever that he’s very satisfied with the service they provide him; he’s paying for the upper tier of service and he’s finding it very worth his money.

Anybody got any questions about how the WordPress.com site works, that would help you decide if you want to make a site there yourself? Got any experience of your own with WordPress.com sites that you’d like to share? Drop a comment and let me know!

Mirrored from angelahighland.com.

annathepiper: (Buh?)

There’s a lot of buzz going around about the iPhone 7 losing the headphone jack, as we’ve finally learned will indeed be happening. And, since I’m a long-running user of Apple devices and computers and software, this is naturally of interest to me. As I’ve described on Facebook and elsewhere, I’m finding myself of two minds about the whole thing. So here are some thoughts bouncing around through my head about this.

One: I made the jump to a set of Bluetooth-based headphones some time ago. I did this partly due to recurring irritation problems in my ear (which, I have since learned, may well be influenced by my deviated septum; more on this in another post), but it’s also had the benefit of improved audio quality when I listen to things on my commutes. I’ve also become a fan of not having to worry about cords, even though the headphones I’m using aren’t entirely properly fitted to my ginormous head, even when I’ve got them extended out as far as the headband will let them go. It’s still overall a win for me, and future headphones I purchase are indeed likely to be wireless in some way or another.

That said, I’m eying the price on the new airbuds askance. They’re significantly more expensive than what I paid for the Jabra headphones I’m using now, so I would have to be convinced that the audio quality would be worth the step up in price. And I’m also not convinced that I wouldn’t lose the buds on a regular basis, or that they’d stay securely in my ears. I’ve had a history of the wired earbuds regularly falling out of my ears, and at least with the wired kind, they’re still attached to my phone. One of those wireless airbuds falls out somewhere on my commute, that’s got “likelihood of my stepping on the damn thing as I’m trying to look for where it fell” written all over it. Or, if I’ve got ’em tucked in my backpack’s side pocket along with the phone, the fact that they’re wireless means that if one or both of them fell out while I wasn’t listening to music–as is possible given that on a bus commute, I often wind up turning my backpack sideways in my lap–means the chances of me losing one or both is non-zero. I’m not willing to risk that for something that’d ding me over $150 per purchase.

And while I do have some level of appreciation for audio quality, I’m not quite enough of an audiophile to really care about it, certainly not to the extent of having “risk of losing airbuds” outweighing price.

Two: Other than my commutes, the times I’m most likely to listen to things on my phone are when Dara and I take road trips. We’re very, very fond of listening to Big Finish Doctor Who audio adventures when we go to Canada, or down to Portland for Orycon. Before we upgraded to our current car (the 2015 Honda Fit), we had to plug my phone into the car’s dashboard via an adapter that talked to the cigarette lighter.

Now that we’re driving the Raptor, though, we have several USB jacks at our disposal. So the usual Apple lightning-to-USB cord works just dandy for having the phone talking to the car’s sound system. And I don’t even really need the cord, either, since the car’s systems also talk Bluetooth.

So lack of a headphone jack won’t hurt me there, either.

Three: Since I do use my phone on a regular basis to process Square sales at conventions, the ability for my older swipe-based reader to talk to the headphone jack is kinda not optional. I do have one of the shiny newer readers that read chip-based cards and which talk to the phone via Bluetooth–but those do not actually deal with older, non-chip-based cards. And not everybody has chip-based cards yet, so it’s not like I can get rid of the magstripe reader.

That said, word has it that the magstripe readers will work with the new adapter for the iPhone 7. Which is nice, I suppose. But given that I’ve had experience having swipes not take with the reader plugged directly into the headphone jack, I’m a bit dubious about how reliable trying to do it via an adapter and the lightning port will be. I’ll be interested in further reports on this.

Four: Dara shared with me some things she saw covered in Buzzfeed’s article about this, and I have to admit I’m of two minds about this. From my tech-inclined geek perspective, “freeing up the jack space allows for improvements in battery life, camera functionality, and water resistance” makes sense.

On the other hand, I’m also a fan of “if it ain’t broke, don’t fix it”. And I always have to be a little suspicious of “we’re changing this thing you’ve been using for years because PROGRESS!” In no small part because I can’t help but feel like a lot of tech “innovations” ultimately don’t improve things much for my day to day experience. Like, say, all the browsers deciding we don’t actually need a menu. Or, all the major tech companies deciding we don’t need RSS. (Why yes, I AM still cranky about the axing of Google Reader, why do you ask?)

Now, apparently, traditional headphone jacks are the latest thing that the Tech Powers That Be have decided are outdated. But so far, the arguments provided as to why the future of audio is wireless just aren’t quite cutting it yet with me. And there are a couple of reasons for this.

  1. While I’m certainly not immune to the lure of shiny new technology (as of this writing, I AM currently on my third iPhone in my history of smartphone owning), I also am not a fan of how often I’ve had to replace my headphones. I have gone through a whole hell of a lot of earbuds, because the damn things inevitably wear out. One side or the other dies, and oh hey look I gotta go buy a new pair of earbuds now! And I have no real choice but to throw away the old, now useless pair.

    That was another contributing factor to my switching to the Bluetooth headphones–at least with those, I can hopefully get a lot longer lifespan out of them. And therefore hopefully contribute less to the ongoing electronic waste we’re all building up. I’m going to use this pair of headphones for as long as they’ll last. Because…

  2. …while I am very grateful to have a well-paying day job that lets me afford buying shiny new technology when I want it, I do come out of a background where that wasn’t the case. In my family history, plunking down several hundred dollars for a phone in general would have been absolutely out of the question, without months and possibly years of saving. And when you throw in another $150+ just to buy headphones to listen to music on the phone in question, that’s just a whole extra pile of “yeah no I gotta spend this money on food and rent and gas, thanks”.

I get that Apple’s target demographic is people like me who can afford to buy shiny new toys every so often. But we aren’t everybody. And I’m not convinced that the future of audio is truly wireless, not when there are still a lot of people for whom buying a smartphone at all is a significant hit to the budget. If you’re in that income bracket, you will be way more likely to buy a pair of wired earbuds than you will a fancy wireless pair of pods that you’ll be at risk of losing. The Buzzfeed article mentions cost-benefit analysis; that’s exactly what happens when you’ve only got so much income to spare, and you have to decide what you can afford.

So Apple, if you really want to convince me that wireless is the future of audio, how about making some wireless headphones that aren’t so freggin’ expensive? Because otherwise, your wireless audio future will be shutting out a whole helluva lot of people.

Five: As Dara has pointed out over on her post today, the iPad apparently has no immediate future of losing its headphone jack. Which means we’ll have an potentially interesting split of functionality. Particularly for users like me who have both an iPhone and an iPad, for whom it’ll make little sense to have one pair of headphones to talk to one thing, and a different pair to talk to another.

In short, yeah, I’m of two minds about all of this. For me, it’s all pretty theoretical regardless; my iPhone 6 is still pretty new and perfectly functional, so I will not be justifying a phone upgrade for at least a few more years. (This being my balance between ‘how much I like shiny new tech’ and ‘general practicality and frugality thanks to my history’.) By the time I am ready to upgrade to a newer phone, we’ll probably be on the iPhone 8 or even 9.

But I’ll be keeping an eye on how all this shakes out. It will influence my decision, ultimately, as to what kind of phone I’ll want by the time I’m ready to upgrade phones again. I’ve seen reports that some Android phones are losing their headphone jacks too, so by then, I may not even be able to have that be a dealbreaker. We’ll just have to see whether Apple’s gamble will pay off.

Mirrored from angelahighland.com.

annathepiper: (Path of Wisdom)

Over on James Nicoll’s LJ, this past weekend, I saw this post wherein James was asking for help on an OpenOffice feature–and folks in the comments were advising that he should consider switching over to LibreOffice instead.

The basis for this is that apparently the code base for OpenOffice is not getting actively updated. The last release was back in October of 2015, and there is a known security issue now that hasn’t been fixed in any release of the suite yet. That issue is described here, where it is noted that there is a hotfix patch available, if you’re comfortable with trying to install that.

But more tellingly, also in the comments on James’ thread, I saw a link off to this Ars Technica article that discusses an active possibility that OpenOffice just might be shut down. Apparently Apache’s OO team doesn’t have enough active developers to support the code.

So if you’re an OpenOffice user, you might want to keep an eye on this. At minimum, you should go install the patch discussed on the security bulletin I link to above. And you should think about whether you want to continue to use OpenOffice, or maybe make the switch to LibreOffice instead, since that’s still being actively developed.

Whatever you decide to do, good luck!

Mirrored from angelahighland.com.

annathepiper: (Buh?)

iOS 9.3.5 has just been released, and it’s a very important security update. Important enough that it made the news–because it’s fixing newly discovered security flaws that had the potential to give a remote attacker pretty much complete control of your phone. So jump on this ASAP and get your devices updated, mmkay?

The BBC has covered the story here:

Apple tackles iPhone one-tap spyware flaws

(If you own an older device that’s running an older version of iOS, better check and see if a similar update has been released for your version, too. If your device is capable of updating to iOS 9, you might want to put serious consideration into doing so. If it’s not capable of updating to iOS 9 and Apple hasn’t yet released a security patch to your version, go get on them about that.)

Mirrored from angelahighland.com.

annathepiper: (Final Test)

This blog post link is going around today, in which the writer describes how he signed up for the Apple Music subscription service–and it promptly torched all local music files on his hard drive, including stuff he’d downloaded directly from artists’ websites, and stuff he’d recorded himself.

And I’m seeing a bunch of people on my social media feeds instantly leaping to the conclusion that iTunes and Apple must suck in general, and that OHNOEZ APPLE IS EVIL!!!! Which, no. That’s not a justified conclusion.

Because this isn’t an iTunes issue–I know a bunch of people who’ve told me that iTunes has caused them a bunch of headaches, but this isn’t actually iTunes’ fault. This is Apple Music’s fault.

For those of you who aren’t Apple users, Apple Music is not the same thing as iTunes. It’s their music streaming subscription service, akin to Pandora or Rhapsody. The entire idea here is supposed to be that it can give you access to all of your music on all your computers and devices. Nice idea in theory, but in actual practice, it’s an implementation nightmare–if you’re one of the people falling into the edge case that that blog post describes. A whole bunch of users of the service are never going to have this problem, since they’re probably buying their music from the iTunes store regardless, and that’s the userbase Apple’s trying to target here.

But if you do fall into that set of edge case users, if you’re somebody who frequently buys your music from other sources (say, directly from artists on Bandcamp), and even rarer, if you’re somebody who records your own music and you’ve got that on your computer along with stuff you’ve bought commercially… then yes, this is a huge problem.

What’s happened here is that this particular guy fell into that edge case, and it revealed that Apple’s failure to gracefully handle the problem is a spectacular failure indeed.

But at the end of the day this is still just a spectacular functionality failure, not a sign that OHNOEZ APPLE IS EVIL AND IS GOING TO STEAL MY MUSIC. And I’m not saying this just because I’m a generally loyal Apple user who thinks Apple can do no wrong. This is a spectacular failure and I’m absolutely willing to call it out as such–in no small part because I’m also a QA engineer in my day job, and I am now cringing at the thought of how their QA people must have reacted to this edge case before the service shipped.

What is an edge case? Let me explain by telling you a bit about how a software development cycle works. It goes kind of like this.

  1. The Powers that Be in a software company says to their engineers, “we want a feature that does X”.
  2. The engineering team goes “okay, we’ll do X!” They start doing some designs as to what the feature will look like, and drawing up a specification for the details of how the feature should work.
  3. There’s often some debate between designers, developers, and QA (quality assurance) as to what can and cannot be implemented to make the feature work as requested.
  4. A schedule is worked out as to how long it will take to do the work. A target release date is settled upon.
  5. Developers build the feature and start handing pieces of it off to QA so QA can test it and make sure it actually works as requested, according to the designs and specs.
  6. QA files a bunch of bugs about anything that’s broken.
  7. Development fixes those bugs.
  8. QA verifies that the reported bugs have been fixed.
  9. Repeat until the release date is achieved.

Now, sometimes QA will find issues with a feature that are problematic, but only for a small likely percentage of users. This is called an edge case.

When that happens, the team as a whole has to decide whether it’s appropriate to spend time fixing that edge case, even if QA has already said that this is going to be a problem for X number of users. Even if it’s a serious problem. If the problem only affects a small number of people, then some decisions have to get made as to how the team will proceed.

Sometimes they’ll say, “We can’t code a solution for this edge case because if we do, it’ll keep us from shipping on time and we’ll have to swing back around and fix it later”. And sometimes they do just that. But sometimes “later” never happens. Sometimes teams decide that they just can’t spare the time to fix that edge case, because they have other higher priority work they have to be doing and they don’t have enough people on the team to do everything.

Problem is, sometimes that edge case they didn’t fix will come back to bite its creators in the ass. This is one of those times.

Remember, folks: computer software is written by people. People are fallible. Therefore your software is, every so often, going to fuck up. Sometimes it’s going to fuck up spectacularly. This does not mean that the creators of that software are evil. It just means they’re people.

But at the same time, if a spectacular failure like this happens to you, you’re totally justified in being upset. It’s absolutely frustrating when you lose a bunch of your personal data like that. Certainly if I’d been in the shoes of the blogger I’m linking to above, I’d have been equally pissed off.

Just try to remember if you can that the people who made that software on your computer are still people just like you. They’re really, really not out to destroy your data personally. “Let’s destroy all our users’ data” really doesn’t work as a successful business plan, after all.

Also remember: for gods’ sakes, do backups. If you’re a Mac owner, Time Machine should already be doing this for you. If you’re a PC or Linux user, and you’re not already running regular backups, find out NOW how you can do so. And regardless of what kind of computer you use, if you have super-critical data like personal creative output you’ve done, do extra backups of that stuff.

For example, all of my writing work, in addition to getting backed up by Time Machine, lives on my Dropbox account so that I have backup copies of that not only separate from my computer, but also separate to my house network. If you’re a creative person of any stripe–artist, writer, musician, whatever–I strongly encourage you to consider similar strategies for your creative output.

For more on this, I direct y’all over to Dara’s post on this topic, too. She’s got some in-depth analysis of why Apple chose to implement the Music service this way, and how she and others at the time it rolled out complained about this very edge case. Worth reading if you want a more technical look at how this all works.

Mirrored from angelahighland.com.

Profile

annathepiper: (Default)
Anna the Piper

November 2025

S M T W T F S
      1
2345678
9101112131415
16171819202122
23242526272829
30      

Syndicate

RSS Atom

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Aug. 3rd, 2026 08:06 pm
Powered by Dreamwidth Studios