July 14, 2016

Not .NET

Filed under: Personal Blog, Software Blog — marcstober @ 7:10 am

Yesterday I got an e-mail from a recruiter; I get these pretty typically:

I came across your resume in a file of ours…. I am not sure if you are looking around anymore or not but I just partnered up with the company searching for a .NET engineer…

I am long over identifying as a “.NET engineer.”

Let me tell you how I got into this business. First, I taught myself Perl from a book—back when Perl was cool! Then, I taught myself Microsoft Access from book, and also from learning relational databases from the academic side in graduate school. With that I became a citizen developer, learning the programming language that came with Access, Visual Basic for Applications (VBA). I leveraged that experience into jobs that required more serious development on the Microsoft stack, first in Visual Basic 6 and then in C# with the advent of .NET.

C# in particular is a great language and Microsoft despite all the criticism they’ve taken has made some great software. But while I’ve made actual money using Microsoft technologies, I’ve always envied the cool kids working on a LAMP stack or Plone or Django or Ruby on Rails. That is where this work becomes an art form. Or building iPhone apps.

Over the past few years I’ve gotten back to what first got me into technology in the ’90’s, web development. And, finally, I’m at a job where I’m not at all a Microsoft developer; I’m still running IIS but, conspicuously, without ASP.NET.

So no, I’m not interested in your old resume on file that says I’m a .NET Developer. Besides which if you can’t even look me up on LinkedIn and see what I’ve been doing since I talked to your agency ten years ago you’re not a very good recruiter anyway.

Oh, and that first database was to track custom imprinted B’Kol Echad orders. So that I was ever a Microsoft-stack developer was all caused by that other domain I am still passionate about.

March 6, 2016

Compiling aacgain (an exercise in Open Source software archaelogy)

Filed under: Software Blog — marcstober @ 12:07 pm

So I found a lecture that had been recorded and posted online that I wanted to listen to.

The only problem, is, it was very, very, quiet. I had to turn up the volume all the way to hear it all all, and still could barely hear it; not to mention that I almost damaged my ears when I changed to listen to something else.

So, being me, I went looking for an open-source tool that could modify the volume of an audio recording. I found some references to mp3gain, but this was an M4A file which is (basically) an AAC file. It also turns out there is something called aacgain. But what I was finding was source code, which I don’t usually bother with.

Nevertheless, I downloaded and tried to compile it. I was able to compile mp3gain easily, so I was encouraged. aacgain, which I really needed, was more complicated. But, I dug in, and after downloading various things from SourceForge and Google Code, and combining that with an existing copy of the core mp3gain code to Github, I was able to get aacgain up and running.

I say this is an exercise in software archaeology because this useful software was written several years ago and hosted on sites that are no longer the go-to places for open source code. There was a bit of fiddling required to get them running on a modern system. In the end, though, this is one of the promises of Open Source; you’re free to find something useful that no one is actively maintaining and get it working again yourself. It’s not just about the cool new stuff–something old and unmaintained, if Open Source, can still be valuable.

I’ve placed all the source code I cobbled together back in a Github repository for the benefit of anyone else who can use it.

Now off to listen to that lecture!

January 7, 2016

grunt.file.match and grunt.file.isMatch Do Not Access File System

Filed under: JavaScript, Software Blog — marcstober @ 10:05 am

While trying to improve my team’s grunt scripts, I spent a while stuck trying to figure out why grunt.file.isMatch wasn’t working.

I was expecting this to be like a fancy “file exists” check, that would take some pattern and looking in the current directory and subdirectories (as specified by my globbing pattern) to tell me if the file exists. And I couldn’t figure it out, especially since there were two arguments, “patterns” and “filepaths”.

Ultimately, I looked at the source code and figured out I’d gotten in all wrong. Despite being methods of the file object, “match” and “isMatch” don’t look at anything in the file system. They’re just string pattern matching operations: completely deterministic functions that match “patterns” against”filepaths”.

What I’d really wanted to do was something like:

if (grunt.file.expand(“my-dir/**/*.js”).length > 0) { …

Posting this so hopefully the next person searching the web for a solution to the same problem finds this and doesn’t get stuck like I did!

June 15, 2014

My Real Claim to Fame

Filed under: Personal Blog, Software Blog — marcstober @ 10:35 am

In 2009, I answered a CSS question on StackOverflow about word-wrap in an HTML table.

stack-overflow-20-points

5 years later, almost every time I go to the site, I am greeted with new reputation points from people upvoting my my answer. I now have a reputation of 3,602 which the site tells me is in the top 10% overall! My answer, which is the top answer to the question, has been benevolently edited and commented upon and the question protected due to its popularity.

I got lucky. If I had this problem I wouldn’t know the answer today and would go looking for the answer on StackOverflow. Even if someone asked the question today and I did know the answer, someone else would probably answer it before me. I just happened up on an unanswered question to which I’d just happened to figure out the answer in some other work I was doing.

The significance of this is that figuring out these little technical details of user interface implementations really is how I make my living, and it’s also how I leave the Web a little bit of a better place than I found it. As my tagline says, repairing the world, one byte at a time.

(For those who aren’t familiar, StackOverflow is a hugely influential online question and answer forum for computer programming questions. I like to say, only half jokingly, that my job as a software developer isn’t really about knowing how to do anything but about knowing how to find the right answer on StackOverflow.)

June 1, 2014

Who’s Social Now?

Filed under: Business, Consumer, Jewish Organizations, Parenting, Social Media — marcstober @ 2:41 pm

So this was an interesting tweet:

There are times when I wish the religious organizations I’ve been involved with would take some marketing lessons from the retail world. But, sometimes, we should value what we’re doing better: community and social stuff. I mean, the Jewish world is in the business of giving people a way to find community and social on Friday night as we have been for thousands for years. Businesses trying to add community and social features to their website are WAY behind at what community really means.

Indeed, I came across this tweet because I was ordering labels for kids going to summer camp. I am going to let the nonprofit Jewish summer camp meet some our family’s needs for community and social. Try as they might, the e-commerce company trying to be social seems a little forced. But they probably make good labels.

September 12, 2013

One of these EMRs is not like the others

Filed under: Health, Software Blog, Usability — marcstober @ 10:58 pm

winner-thumb healthhub-thumb runner-up-thumb

Above are three thumbnail screenshots of prototype medical applications.

One of them is the winner of a White House competition, winning thousands of dollars and influencing the EMR of the huge VA medical system.

One is a problem-oriented medical record and the runner up.

One is a prototype I designed as part of an Innovation Team project while working at Partners. (We didn’t win a White House award. I guess we were ahead of our time.)

June 28, 2013

Announcing the Release of My First Firefox Extension: More Bookmarks Toolbar

Filed under: Software Blog — marcstober @ 2:53 pm

Announcing the release of my first Firefox Extension: More Bookmarks Toolbar.

Add a second bookmarks toolbar to Firefox, with a separate set of bookmarks.

For example, use it at work for a separate set of bookmarks that only work on the corporate intranet. You can still use the regular bookmarks toolbar for personal sites, and hide and show either or both. (And with Firefox Sync, keep them consistent across my home and work computers.)

See its page or download from addons.mozilla.org.

The source code is on Github.

June 2, 2013

Lawyers vs. Engineers

Filed under: Information Politics, Politics — marcstober @ 11:41 am

Emblem-scales-red

A reaction to: “Attorney General: Aaron Swartz Case Was a ‘Good Use of Prosecutorial Discretion'” at Wired.com.

As you see by the date of the article about the Aaron Swartz case I’ve linked to, I’ve been mulling this blog post over for a while. 🙂

I’ve known a fair number of software engineers/developers (including myself) and also a fair number of lawyers (including immediate family).

It’s tempting to think we all view the world in a similar way: we work in systems governed by complex sets of rules and try to understand how those rules can be applied. But this masks an important difference.

Software systems, however complex they get, are fundamentally deterministic. Computers don’t make judgement calls, and they don’t make mistakes. If you get the wrong result, it’s a bug to be crushed. (Something that distinguishes professional developers from others is that for us, letting an issue go as an insignificant outlier is often more difficult than digging until you find a solution.)

For lawyers, laws aren’t processed by silicon CPU’s, they’re processed by human judges, juries, and prosecutors. For them, individual discretion is not a bug, it’s a feature. Furthermore, there’s a difference between litigators and corporate lawyers. Much as things like EULA’s are the bane of everyone’s existence, we can find common ground with the corporate lawyers who write them, because we get the idea that inputting a certain formula into “the system”–like a magical incantion–should lead us to desired results. Whereas litigators and prosecutors (and sometimes politicians) are much more comfortable in that risky space where one’s fortune can be changed, not simply by whether you followed the letter of the law, but by human judgement in applying it.

The point of the blog post isn’t to say that one worldview is right and the other is wrong, but that it might help everyone to understand that they are different, and that either way of thinking can be used for good or evil. Both sticking to the rules and never making an exception, and fighting to win by bending the rules, can lead to inhumane results. We need to strike a balance.

Learn more from EFF about the CFAA, the law used to prosecute Aaron Swartz, which gives prosecutors the discretion to pursue almost any modern computer usage as “hacking.”

May 13, 2013

Spying on the AP! What’s Wrong With America?

Filed under: Information Politics, Politics — marcstober @ 9:09 pm

When I was in fifth grade, one of my teachers went to visit Russia. I remember her telling us how there were fairly obvious wires going from their hotels rooms to the end of hall where government monitors could spy on guests.

Around the same time, I heard a Soviet joke: An American says, “American is a great country, I can say I hate President Reagan out loud on the street and I won’t get in trouble.” The Russian replies, “So? I can say that I hate that American President Reagan, too.”

The Cold War was in full effect, and spying on citizens, or controlling the press, was supposed to be something they did, our Soviet nemesis that Reagan called an “evil empire,” and what separated us from them, was that we were free, our rights protected.

Perhaps I was naive, but as a child of the ’80’s, this is what I learned as right and wrong. These days, when I hear about something that sounds like the government abusing civil liberties, I’m concerned, but I like to at least consider that maybe there’s another side of the story. Perhaps there was a misunderstanding. Perhaps, from the government’s perspective, they were doing the right thing.

But it’s hard to see how spying on the AP could be seen as doing the right thing. It’s not just a violation of someone’s privacy, it’s a violation of freedom of the press stated in the Constituion. And it’s not just a violation of a website that wants to see itself as “the press,” it’s spying on an institution that is literally the backbone of the free press.

Gov’t obtains wide AP phone records in probe.

March 22, 2013

Google Reader Takeout Reader

Filed under: Consumer, Information Politics, Software Blog — marcstober @ 7:24 am

Enough inkelectrons have been spilled over the Google Reader sunset. I simply offer a simple tool to take your Google Reader data from Google Takeout and convert it into a nicely formatted list of links to browse and re-bookmark/subscribe in your new favorite service (or save as a backup, even if you’ve found a new feed reading service).

Using it is as simple as unzipping your takeout file and dropping a file into the same folder.

  1. Unzip your takeout file.
  2. Download the file (right-click and “Save Link As…”) below and drop it in the Reader directory you just created (the one that has the JSON and XML files from Google).
    reader.html
  3. Double-click on the reader.html file in that directory.

This only displays part of your Google Reader Takeout data. Do not delete any other files!!!

No warranties, express or implied. None of the data in your takeout file is uploaded to me (although I may track usage of this tool).

Next Page »