Thursday, March 19, 2015

Adding Copyright info a paperclip attachment.

This paperclip processor adds copyright info to the exif data on paperclip attachments when they are processed. It can be used for any exif metadata, and will work whether the file destination is local or a remote object store service (like amazon S3). It requires the paperclip and mini_exiftool gems, and the command line exiftool command line utility.

Sunday, June 15, 2014

Experimenting with Dragon NaturallySpeaking

This blog post is my attempt to experiment with the newest version of Dragon NaturallySpeaking. I previously fiddled around a bit with it back in college. However, this time to give it a real shot. There are three fundamental motivations for this experiment. The first reason, is that I am simply curious of playing with new and interesting technology. And the ability to simply speak to your computer and have it respond in a useful way is interesting. The second reason is to improve my speaking skills. I think that dictation will help me control my speech. The third reason is simply to increase my productivity. Having to work on a computer all day has taken a lot of time and energy away from anything as simple as maintaining my house. And while I'm folding clothes or washing dishes I feel like I could be able to use my voice to do work.

Installation and setup

The initial installation of Dragon NaturallySpeaking was complicated by some confusing profile options. Initially set up the device so that it would take remote recording devices. I did this so that I could use my cell phone's import audio files that can be translated later. However this option by default seem to disable the microphone, and make impossible to be enabled. However quick search on the forum of the problem. I was able to fix this  by setting up a new profile.

However my troubles didn't end there. The headset I bought comes with the option to use a infrared or Bluetooth connection. I want to use the Bluetooth connection because it does require line of sight and has a longer range. This helped in another room and hour when I just don't have access to the computer visually. I'm not sure what the problem is. The headset didn't come with an installed desk. And just by plugging it in all the drivers are installed correctly, or so it appeared. However, now the headset does connection machine but when I catch up using a simple program sound recorder, no audio is recorded.

Initial Impressions

My negative impressions have to do mostly with the foreignness of the interface, and the speed of some of the commands. The foreignness  has to do with how ingrained typing is into my work process. Something as simple as having to form an entire thoughts before starting to express it, is something that I'm having to get used to. Having a suspension for excellent concrete lead to say. And the number of keystrokes like a sort of pace car to go. And not being a public's a practice public speaker and not use to having to form ideas when speaking meetings, in day-to-day conversation, the thoughts are concise and limited in scope. And because the software uses the context intends to guess that what words meant to say when there's some kind of error rest the entire sentence at the same time and not speak haltingly, slurring your words can affect the results negatively. Also, the commands are little strange. However I don't really have anything to compare this to, because this the first time you ever tried to use speech recognition software in a concerted way.

The speed of the software can also be frustrating at times. When executing a command, or trying to perform some keyboard input, the software can take a little bit of time to process that. I'm also a little worried about when getting to larger documents are running out of memory and really crashing I've heard it from other users of the software that this can happen and they care around it  by having two computers working at the same time when looking at working on large documents. I would really prefer not be the case.

However, the positive aspects of this new input method are already apparent. Having to think about the entire bottle beginning to express it has made me control my speech. I can already see it as sort of exercise, accessing parts of my brain that I normally do not. It's a rather interesting way to work with your computer. It's hard to describe.

The performance is much better than I expected. It seems that the longer the sentence I try to say, the better the algorithm performs. And it's been relatively few dictation errors. And I attribute these mostly to my own experience with the practice of dictation, rather than any inherent flaw with the software. I can only imagine that as I use the software more, the error rate will go down and the speed at which I compose logo up.

Future usage and Outlook

In the future I'm hoping that I'll be able to use the Bluetooth headset, and become proficient enough with the software they don't have to be looking at the screen the entire time. I would prefer to be able to walk around, or do the chores as I talked about beforehand, and then only check on the dictation process every once in a while to make sure that everything is going okay. I will also be trying to install the software use it on Linux  there are couple of projects out there that are designed specifically to allow you to run the same command and software under wine. I'll probably post a video with how that works out.

I think that it's obvious that I'll be able to at least generate the first version of a document much quicker. The speed at which I'm able to speak and have the software interpret correctly is extremely high. I haven't actually tested but I've heard other people say that they get something like 230 or 250 words a minute using this dictation software. And I haven't tested while, I think that it's somewhere around 80 or 90 words a minute. And also it feels more natural justice say the thought, rather than having to pound out each individual character of the keyboard.

I have high hopes.

Saturday, May 10, 2014

Affinity for Fedora

After using Fedora for 3 months now, I think I'm converted. I really appreciate the firewall settings, the ease of finding packages and the default start up settings.

Firewall settings

Initially frustrating, I've come to appreciate the default default firewall settings, basically everything is off by default, and installing services doesn't automatically open them up. This isn't something you couldn't do with Ubuntu, or any other linux distro, the tyranny of the default is real. Especially with me, I don't like to spend a lot of time on config. Now I've got profiles set up for the different wifi sources I connection. Its nice knowing that my ssh port isn't open to every wifi I connect to.

Default Startup Settings.

Basically I like not having every daemon I have installed to be running every time I boot up. Even if it doesn't use up a lot of resources, I really just don't like the clutter. By default Ubuntu enables start on boot. this is fine for servers, and for convenience, but I appreciate default off for my laptop.

Tuesday, May 6, 2014

End of Semester

I just finished my first semester of graduate school. Well, more accurately I just took my final and don't have any more classes to attend. I still have a homework assignment to turn in before I'm officially done.

Good God that was a lot of work. 

I'm surprised I was able to keep up as well as I did. I think I did ok, but I definitely abandoned doing reading every night once projects kicked in. Probably explains my poor performance on midterms. It was difficult to work 8 hours (interrupted for 2 by class), then go home and program or read for 3 hours or so. Luckily I was able to get into a groove with the project, and I was able to take some time off.


Despite the difficulty, and compared to my undergraduate years, I feel very engaged in class as well as on the projects. I'm not sure if I lucked out with professors, I'm just taking more interesting classes, or if I'm just more mature than I was 5 years ago. Probably a combination of both.


So far I've yet to figure out what I'm going to study as a thesis, but I'm leaning towards Software Engineering. One of my courses this semester focused on Compilers. It wasn't even my first choice, but it grew on me and ended up being one of my favorite classes ever. I'm going to investigate participating in the Go compiler project, after it is translated to C.


So I've been pretty harsh with my criticisms of Java. And I still this they are valid. However, working on a well organized project, with proper tooling in place. Was a nice change from the Unity work I've been doing at work. Which has very little engineering support. This experience, along with the new Lambda features in Java 8, have made me take another look at Java as a language to dive into.

Tuesday, March 18, 2014

Positive Initial Impression of Fedora

I've used off and on Ubuntu for about 7 years now. And I've been generally happy. However, recently I've found the behavior of Canonical and, more importantly, the lethargic pace of package updates to be off putting.

Really the behavior of Canonical is something I can live with, but it does give me reason to check out other distros. The slow pace of package updates is an actual problem. Yes I do want the newest stable release of Go and Eclipse. And yeah I do want to use the package manager with little or no configuration. Finally, don't like Unity. Didn't want to say it for a while, but yeah, the side bar is annoying, I don't like uninstalling Amazon, and the scopes don't work smoothly enough for me not to just search Wikipedia in chrome.

Consequently in the last year I've tried Arch, Suse, Mint, and finally Fedora.

Arch was high maintenance. It was satisfying setting up my system from such a low level. But, it was not fun debugging my setup every time I needed to install a new library. I experiment with coding, not with my system.I need my OS stable.

Mint is alright. But I've using a Debian based distro for a while wanted to try something different.

Suse was frustrating.

Fedora is pretty good

I installed on my laptop and everything worked right away. This seems to be common for modern linux distros (except arch), but I figure its worth mentioning that I didn't have to spend an hour installing crap after install like I did in 2007.

Fonts look ok. Not quit as sharp as Ubuntu, but definitely way better than Suse after install. Seriously that was basically unreadable.

After installing oh my zsh! installing packages with yum is just as easy as with apt-get. This is another place where Suse didn't cut it. I end up installing a lot libraries that I might not know the name of before hand and this is a big deal, saves me a half a minute here and there.

Package availability is also gigantic. Most projects that offer linux binaries offer Debian and RPM. Other distros (Suse) use .rpm, but I think most developers have Fedora/RedHat in mind when they


Between font readability, the ease of installing (and availability) the packages, and a jingoistic desire to use 'Merican software, Fedora is a winner. I think I'm going to stick with that for a while. At least until SteamOS hits it's stride.


Yum and service don't seem to be tab completing. Annoying. Will have have to see if I can't figure that out.

Thursday, March 6, 2014

Character Networks with Go and d3

I've had the opportunity to create a practical application in Go. I'm working on a research project in grad school that involves constructing character networks from literature text. After In order to get a grasp on what we might be able to "say" about networks in the corpus.

After pre-processing the text with Stanford's Named Entity Recognizer, I then searched the text for people, and began constructing the relationships. Details on the methods will be upcoming. First I wrote the processing code in R, and it took around 10 seconds to run. After rewriting in Go, the processing takes less than one second. I don't think it should be a surprise that it performs better. The important part is that this allows me to create a tool that will update parameters of the algorithm and update the network for display in real time.

Right now the display is being done in using D3's force layout. I think it should work out, but there are some kinks that I need to resolve first.

More to come.

Graduate School and Work

I recently started graduate school. Already I can tell that my work experience is a huge benefit. Before my undergraduate years I had no interest in the inner workings of computers or really any concept of what programming event meant. I really began as a sophomore. Thus it took me until my mid 20s to be comfortable enough with programming and computing to actually begin to absorb higher level concepts. However, it isn't just my computing knowledge that has improved, but my ability to focus on work and absorb information has improved. My level of motivation is also much greater, and while I am now freer to pursue courses that I choose, there is still a marked difference. I suppose that the summation of these improvements in my academic fitness can be summarized by one word, maturity.

When I think back about the amount of time and money (your money, since I was on scholarship funded by taxpayers) it makes me wonder how common this experience is? How often would a 27 year old perform markedly better than their 22 year old counterpart? What about a 23 year old vs. their 19 year old counterpart? Perhaps I was an abnormally dissolute case, but I can't help but wonder if billions of dollars and countless hour are wasted on millions of young people, who kinda don't know what else to do. With the amount of personal dept created, its something worth thinking about. There certainly are properly motivated people, my fiance is a fine example, who really crush as undergrads. And since I have absolutely no evidence I think I will get off the totally baseless, idea that most undergraduates are wasting time.

I'm going to wrap up this totally rudderless rambling. Most jobs, programming included, don't require higher education. Some of the most reliable developers I've work with have no formal programming education. If someone asked me what they should do if they wanted to be a programmer, I would say "get a job". If you want to get into research "go to school". The problem with this advice is the extra crap you have to do to get a bachelors makes starting an undergraduate program after your early 20s a pretty big hassle. So really the upshot is that everything is a risk. If you go to college at a young age, you risk money time, and potentially performing too poorly to continue your education (almost got me). If you go into the work force, you risk your time, and if life sneaks up on you. However, with the proliferation of information and free courses online, I'm leaning further and further towards advising entering the work force, at least for a couple years.