Category Archives: musings

Sometimes you just want to tell people what’s on your mind. That’s the kind of stuff you’ll find here. Usually just a blab about something.

In need of a project…

I’ve been thinking over and over about joining some sort of open source project. But my problems (among many others) are:

  • I’m nervous about joining an existing project and not cutting it.
  • I don’t have a ton of time I can commit to a busy, fast-moving project.
  • I kind of like the idea of doing something completely from the ground up. (Ok, not completely‚ÄĒjust doing something my way.

I’ve gravitated toward WordPress before because I know PHP, HTML, JavaScript, and CSS pretty well. But I decided it wasn’t for me. The Ghost project seems neat, but I think they have different views about blogging than I do. I mean, I like most of the interface well enough, but I don’t really want a split screen. I want to type in just Markdown, preview on the fly, then maybe have split screen to do final edits if need be. But really, the whole point of Markdown is to just write and not worry about HTML. With Ghost, I’m constantly looking back and forth between the two views. Plus, I still don’t have spell check. ūüôĀ

So I think I might start building my own blogging platform. From the ground up. Just because. It’s not going to be better, it will just be mine.

Fighting Fire…

I learned something very disappointing today. I learned that the Amazon AppStore is nowhere near the Google Play app store. And that it isn’t easy, maybe not even possible, to put the Google Play store on a Kindle Fire. And there aren’t Google Apps on Amazon’s AppStore.

And the worst part of all, my favorite app, JuiceSSH isn’t available on the Amazon AppStore. I was really hoping that I could use the tablet for more than just movies and games. Not that I have any lack of devices. It’s just nice to be able to do as much as possible with the smaller devices.

But if you want to watch movies and play Candy Crush, then the Fire can do it.

Frustration just being secure…

Working at a company that makes a third of the world’s computer memory, you would think that I would be working with the latest technologies every day. Well, that’s not really the case. I deal mainly with software, developing and maintaining the stuff. And while the hardware under my desk might be top notch (i7 quad-core with 24 GB of RAM), the software running on it is probably 10 years old.

In order to get Python 2.7, I had to compile it myself. I also compiled Git. We have a NFS mounted home directory, so it’s available on all Linux boxes on the network. But that meant that I had to compile for both i686 and x64_86. Oh, and I can’t get root access on my box or get something better like Ubuntu 14.04.

Well, in this latest round, I’m trying to install some Ruby, Rails, and Node.js, along with the related packages. Well, everything was going great until I started the main install, and I got a weird error trying to download from Github over HTTPS. It wasn’t the proxy (I already had that setup correctly). I dug in and found two problems:

  1. The certificates on my machine were out of date, so I couldn’t download from some sites.
  2. The OpenSSL on my machine was so old, it didn’t support SHA-256 (which, funny enough, all new certificates will probably have, as most certificate authorities are phasing out SHA-1).
    So I tried to go down the road of compiling OpenSSL, Curl, and Git with support for the newer digest, as well as update the CA certificates. Oh, the nightmare this has been. Everything seems to go fine, but then Git just doesn’t work over HTTP/HTTPS. No error message — it just stops.

And all of this is to get OpenProject running on Linux because our sys admin gave me a old Windows box with a Core Duo processor to install OpenProject on, and now OpenProject doesn’t support Windows at all, and a Virtual Box Ubuntu server won’t run fast enough.

Anyway, that’s a long boring story. My point is: how can a technology company be so bad with software? Oh, the horror stories I could tell…

Welcome to Ghost…

Well, I did it. I successfully migrated my blog to Ghost. It was a bit of a wild ride. I’m going to jot down a few of the nerdier lessons learned, on the off-chance someone else runs into the same problems and happens upon this post.

Exporting from WordPress

Exporting the WordPress data was easy. I just used the Ghost export plugin for WordPress. I first exported all comments to Disqus, and I didn’t worry about images, since I don’t have that many and I didn’t really care if they were lost. I guess there are ways to save the images as well, but I didn’t bother. One caveat that you might also run into: tag descriptions cannot be more that 200 characters, so trim these first or you’ll be editing JSON by hand.

Installing Ghost

I chose to download from GitHub, in case I wanted to make any changes. I made my own fork as well. Anyway, that was the easy part. Just make sure you follow the right instructions (there are extra steps if you download from GitHub, in a “contributing” section). Once I did that it was a piece of cake.

The only tricky thing was that all off the post dates were way off, so I had to adjust the dates by +7 hours. Otherwise, all of my permalinks were broken. But now BYU students can still find the MRH.

Apache Reverse Proxy

I run Apache, including a few other blogs and other tools in PHP, so I needed to figure out a way to forward all https traffic to Ghost. I tried using a socket. That was a mistake. Apache’s Unix domain socket support is questionable, and documentation is nonexistant. Save yourself the pain and just use TCP/HTTP forwarding. I set Apache to redirect any HTTP traffic to mchasej.com, so I just had to worry about the SSL/HTTPS forwarding. But be sure to add the following line to your Apache conf file, or you’ll end up with endless redirect loops:

RequestHeader add X-Forwarded-Proto https

I’m sure that there’s a variable for the “https” but since this is a *:433 virtual host, it didn’t matter.

Ok, I guess that wasn’t as hard as it needed to be. Honestly, I probably spent a good 1-2 hours trying to get the socket thing to work. And before that, I spent 5-6 hours setting up SSL between my webhost and home server’s MySQL servers, as well as resyncing the slave. That was trickier than it needed to be, mostly because it left out the important detail that the CN for the requests had to be different between the CA, server, and client certificates. But now that’s finally secure. That wasn’t even something I thought of, then I stumbled upon the settings and realized that everything between my master and slave was plaintext. Oh, and tip: setup the slave certs through the CHANGE MASTER TO MASTER_SSL_CA=… command and not through the my.cnf file.

Well, I’m done with the nerdy stuff for now. I’m really excited to start using Ghost. The only thing I’m not happy with is the lack of browser spell-check support. Other than that, I’m tickled pink with this new blogging platform. My new little laptop handles it better as well.

Why can’t it be more simple…

So I looked into using Discourse for comments. Another project using Ruby (on Rails). So that’s not my favorite idea.

I’ve started to think what I would most want from a blogging platform. ¬†One thing I don’t really care about WordPress right now (any maybe it’s just this theme) is that my content seems to take a back seat to the sidebars and widgets. But this is the WordPress default theme of 2014. So…

So here’s my wishlist (in no particular order):

  1. Simple — I don’t need a lot of fluff. ¬†I don’t need Facebook integration or anything like that.
  2. Lightweight — I need something that runs a little better on my new laptop. WordPress is feeling bloated.
  3. Comments — While I don’t get a lot of comments, I think blogs need comments. Comments with moderation.
  4. Minimal — I want a minimal theme, nice crisp font. Nothing flashy.
  5. Easy — Something that I can drop on a server and not have to run 5 different languages to get it going. Apache and PHP are easy, so WordPress does have an up here.

So Ghost is most of these things. I’m not sure how easy it is. I’m working a lot with JavaScript lately, so I could probably add anything I really wanted. Plus, it might prove to become an open source project that I could actually contribute to. There are no comments, but this might just have to be the way it is for a while. I’m not even sure anyone reads my blog anymore.

So that’s what I might be doing tomorrow: taking care of a sick wife and installing Ghost.

I just want to watch Clue…

Come on Netflix! ¬†I know that when you say you’re stuck at 25% that it really means that you’re lying to me and that you’re at 0%.

Anyways, that’s not important. ¬†But it does mean that I can focus on blogging. ¬†I was hoping to do both, but this will have to do. ¬†I’m testing my new 11.6″ laptop out on WordPress. ¬†It’s not a very powerful machine, so I’ve already abandoned the visual editor. But it’s doing fine with the text editor. And I like Markdown anyway (actually, I prefer CommonMark–I’m not a fan of Gruber).

I’ve been using more and more open source tools at work. And it has peaked my interest in becoming involved in some open source communities and projects. I’ve thought about getting involved with WordPress, but it’s such a huge project. Plus, it feels like it’s getting bloated. And it’s probably overkill for my readership of one and the seldom that I write.

I started looking at Jekyll. It’s perfect, except it’s written in Ruby–I don’t like Ruby. Then I started looking at Octopress. Same problem, plus it doesn’t seem to be actively developed.

Then (just a few minutes ago), I stumbled upon Ghost…

And with just 5 minutes with their trial, I’m sold. I’ll be switching to Ghost in the near future. Ghost with Discourse for comments.

I’m mostly likable…

This post is a story. ¬†A story about the workplace. ¬†I generally try to avoid the topic of work ever since I started working at a company that has bi-yearly confidentiality training. ¬†But this story is about my interactions with people, not anything product-related, so I think I’m safe.

It’s been a bit of an interesting year. ¬†Around the end of last year, I was extremely¬†busy. ¬†But around the beginning of this year, there was a project that I needed to be moved to (I was still busy, but not as bad). ¬†Another engineer had had the project for 4+ months and was struggling to get the software on a new platform into a production-worthy state. ¬†In all fairness, he was completely out of his element. ¬†Our manager had decided to let him spin his wheels–sink or swim–and he sunk. ¬†When I got brought in to audit the code, I found numerous errors, and many code releases went out without fully resolving these errors. ¬†I took over, and the previous engineer was given a workload that required far less development–because it was maintaining programs that I had worked on for the past two years. ¬†The majority of the maintenance that I was doing was given to a second engineer so that I could focus on the new program/platform.

In two weeks, I had completely overhauled the program, stripping out all unnecessary bloatware and simplifying the work of future engineers. ¬†I don’t mean to toot my own horn, but it was simply a difference in skill sets–having the right man for the job.

Unfortunately, during the auditing process of the first engineer’s attempt to develop the code, I called out a lot of his mistakes. ¬†You have to understand: multi-million dollar decisions could be made based on the data gathered by these programs–we can’t afford to release bad code, literally. ¬†But at one point, there was even a slight confrontation between this coworker and myself. ¬†We had had a meeting a few days previous, and he had been given an action item to change a number of things in the code. ¬†I took it upon myself to modify a script that I had written to check the code for needed changes. ¬†I modified the script, but this engineer didn’t ask me for the data. ¬†Instead, he made a couple changes and then made a program release. ¬†When I caught the error–that the agreed-upon changes had not been made–I sent out an email to him and our manager(s). ¬†His quick response was that he thought the script had been run and that everything was fine–basically, he pushed the blame over to me because I was in charge of this script that should have done his work for him.

As fate would have it, neither his manager nor our common manager was at work that day. ¬†I was mad. ¬†I don’t remember now if it was the same day or the next, but at one point I asked him point-blank, face-to-face if he was blaming me. ¬†Oh, he quickly backed down from that one. ¬†No, he wasn’t blaming me (now). ¬†And then later he has the gall to say to me that “he would appreciate it if we didn’t use raised voices” in further discussion. ¬†I had to just turn on my heel and walk back to my desk before I hit him in the face. ¬†(Don’t worry, this coworker is still alive, and I happily help him at least once a week, albeit, slightly amazed at the simple debugging that stumps him–he’s not a programmer.)

So when I took over his project, there may have been some feeling that I took it from him or got him kicked off the project. ¬†And that’s partly¬†true. ¬†I told my boss to put me on the project. ¬†But it wasn’t because of any ill-will. ¬†I wanted the best for our team and the best for our company. ¬†I wanted the program done right. ¬†And yes, I was the guy sitting on the bench, yelling, “Put me in coach! ¬†Put me in!” ¬†I wanted to jump on that sinking ship and save it. ¬†And I did. ¬†I threw out any work the previous engineer had done (it was in a completely wrong direction,¬†an example of “better to start over than try to salvage”). ¬†I started with a fresh fork of the program (we borrow code from another group). ¬†And I’m not exaggerating when I say that I had a stable production release within two weeks. ¬†My coworker, bless his heart, did not understand the program, didn’t really know what he was doing, and he was only able to complete a fraction of the total program requirements. ¬†I mean no disrespect, but I can say with complete confidence that he never would have gotten the program where it needed to be.

Well, most of this is water under the bridge. ¬†It’s been over 4 months since this all went down. ¬†And like I said, my coworker comes to me for help with his current work. ¬†And I like him–he’s a nice guy. ¬†Not a great programmer, but very few people are. ¬†I sometimes get frustrated that he’s working 100% of his time on something that used to be ~10% of my time, but I’m doing my best to deal with the fact that not everyone works at the same rate. ¬†But despite my griping, I want to get along and work well with him. ¬†And I think I do. ¬†At least I hope I do.

So fast-forwarding to today. ¬† I think me and this coworker above get along alright–we’re able to work together as necessary at the very least. ¬†(I mean, we’re not hanging out on the weekends, but I don’t think we have much in common anyway.) ¬†So the surprising part of this story (and really the part that prompted this post) is what happened with a different coworker. ¬†Engineer A above actually interviewed with our group before I joined the company. ¬†He was hired into a different group originally. ¬†Engineer B used to work with engineer A back at their previous employer. ¬†I believe it was engineer B that referred engineer A to the company. ¬†Engineer B was my cube-mate for almost two years. ¬†We got along pretty well. ¬†Eventually, engineer A was placed into our group by upper management. ¬†And that’s how we all ended up working together.

Then one day during the drama/excitement mentioned previously, walking to lunch together, another coworker made a joke or comment about engineer A’s code or something. ¬†(As both this coworker and I had been brought in to audit and help with engineer A’s project when we both had more than full workloads, we were frustrated with A and kind of surprised at some of the errors he had made–and we talked about this at lunch sometimes.) ¬†It wasn’t something awful, but I remember thinking, “Oh no. ¬†We probably shouldn’t talk about this around B,” and I quickly changed the subject. ¬†But I must have been right, because after that day, B stopped having lunch with us. ¬†And after I took over A’s project, he really turned a cold shoulder. ¬†I tried several times to invite him to lunch, each time being declined. ¬†He no longer just talked to me in the cube. ¬†If we did chat, I was the one initiating the conversation, and it was short. ¬†There were¬†a lot¬†more whispered conversations between A and B. ¬†Generally, the atmosphere that had been friendly turned very cold. ¬†I flat-out told my best coworker (as I will call him) that I don’t think B likes me. ¬†A couple¬†interactions in the last few¬†weeks have cemented this in my mind. ¬†Nothing horrible–just¬†chilled.

Now, I know I’m not prefect. ¬†Heck, I’m writing a long blog post about work drama. ¬†But I like to think that I’m a mostly likable person. ¬†I know that I’m confident about my skills, and that might seem cocky or arrogant to some. ¬†And that might rub some people the wrong way, especially when that attitude puts me in a place to take over your project (or your coworker/friend’s project). ¬†But it’s also the attitude that makes some coworkers happy to hear that I’ll be handling work that will directly affect them (or¬†disappointed to hear that you no longer handle work that affects them). ¬†I’m not going to give 10% just so that someone else’s 100% looks better. ¬†I’m going to give 110%, and if that put me ahead, then that’s life. ¬†That shouldn’t be held against me. ¬†I didn’t have a vendetta against A. ¬†I just saw a sinking ship, that’s all.

You can’t win ’em all. ¬†If someone doesn’t like you because you worked to help your company and your team, even if some feelings and egos might have been bruised, then that’s not really someone whose approval or appreciation should be sought. ¬†It is what it is, I guess.

But when all that’s said and done, it would still be nice to be liked.

The cloud dilemma…

(I started this back a couple days.)

Ever since I set up my own server, I’ve been debating abandoning all cloud services that I can. ¬†I’ve already stopped using Facebook (because it’s Facebook more than because it’s a cloud service). ¬†But I’ve also considered switching from Gmail to a personal email server. ¬†It’s scary how important my email account is. ¬†But of course, I’m also nervous about the security of the server itself. ¬†(Of course, the recent heart bleed vulnerability affected almost everyone, and I probably patched my server faster than the majority of the internet.) ¬†(At least once I knew about it‚ÄĒthanks xkcd!)

Where do you draw the line? ¬†When does it become more important to own your data, to own your email address? ¬†Because whoever owns your email address also owns most of your other accounts across the internet. ¬†I mean, if Google said tomorrow, “The data center with our Gmail servers exploded yesterday. ¬†We don’t have any backups, and we’ve decided to simply drop the service and all support. ¬†It’s in the terms. ¬†Have a nice day,” what would we do? ¬†Ok, I know that this is unlikely, but who says it can’t happen? ¬†I mean, Google decides to stop supporting services all the time.

This is something I think about every once and a while.  And yet I keep using Gmail.

It’s been a couple days, and I thought of a very good reason for me to use Gmail, as well as anyone else who’s able to setup their own personal email server: credibility. ¬†My thought is that if I were to attempt to use an email message that is stored only on computers under my control (other than possibly the sender, who may have lost/destroyed any trace of sending the message, or may be simply withholding it) as evidence of some kind, it could be easily argued that I could have created a fake email on the server, since I have root access. ¬†The same cannot be said of Gmail, as I do not work for Google, nor do I know anyone personally who does. ¬†So a message sent to me from a bank or online payment system confirming payment (for example) must be authentic, and could be used as proof of payment.

That was a long thought, but that’s what it comes down to: the fact that I do not own the server storing my email gives the messages credibility. ¬†(At least I hope it does, since I am not a lawyer, and I don’t care enough to research this‚ÄĒI would rather go to bed.)

Dear Adobe…

Last night, I was using Adobe Acrobat 9 on my wife’s MacBook. ¬†Doing a little OCR on a scanned PDF. ¬†And it was awesome. ¬†But my computer is about 5x faster, so I thought, “Hey, I’d really like this on my computer.”

And so I searched Amazon.com for “adobe acrobat” (obvs). ¬†Then I thought, “HOLY CRAP!” ¬†I debated whether I could get past the student verification, and when I realized that was a negative, I thought, “Better not get rid of this Mac‚ÄĒit’s got a lot of expensive software on it!”

In case you’re wondering, there are 5 useful features of Adobe Acrobat:

  1. You can rotate pages (and save the file).
  2. You can make a PDF into a form.
  3. You can reorder and renumber pages.
  4. You can reduce the size of your PDF by compressing images and reducing the fonts saved in the file.
  5. You can OCR a scanned PDF, which makes the text selectable (and a cool feature, ClearScan, actually makes fonts based on the image figures to reduce the file size and make it more readable).

Everything else it can do? ¬†Just fluff. ¬†Ok, signing a document is handy if you actually need to do that. ¬†And changing the properties is also useful. ¬†So we’ll make it 8 useful features. ¬†5 + 2 + 1 extra for something someone else might use.

You don’t need Acrobat to create PDFs, just edit them. ¬†And it’s not worth $300. ¬†$50? ¬†Definitely. ¬†Heck, don’t tell Sav, but I probably would have bought it if it had been $50. ¬†All I wanted to do was reorder and rotate some pages in our HOA’s CC&Rs, then do that fancy OCR stuff (OCR isn’t new, but it’s handy). ¬†But if it came to it, to save $300 bucks, I would go down to the courthouse and scan them myself, or even type the whole things up myself. ¬†And then I could print my own PDF. ¬†Heck, I’d do it in \LaTeX and would be able to create awesome PDFs.

My point is, what’s the point of selling $300 software if you could sell 10x more by reducing the price to $50? ¬†Heck, I’m sure they’d sell more than twice as much if it was just half the price. ¬†Could have made $50 last night, but instead I’m going to learn how to do everything Adobe Acrobat can do with open source software, and then I won’t ever have to buy Acrobat. ¬†$50 now is better than $300 never.

Currently listening to “Wing Cap Theme” by Nintendo (from Super Mario 64)

Eureka, but without the nudity…

…like¬†Archimedes.

I started this a while back, and for some reason, I never finished it.  So here it is, though kinda boring.

One of the most rewarding parts of my job is solving problems with software. ¬†Usually it’s Python scripts or webpages written in PHP and Javascript. ¬†Today, it was Python. ¬†And it was a good one. ¬†Been working on it for about a week, and today I got it working. ¬†And it works perfectly (once I worked the bugs out of it). ¬†There’s still a bit of tweaking and improving to do, mostly to purge the data of human error. ¬†There’s nothing quite like the feeling of writing a couple hundred lines of code from scratch and seeing it work, gathering hundreds of megabytes of information and outputting a usable data file. ¬†I love it.