I follow quite a few blogs, podcasts, and YouTube channels related to software engineering, and a common theme I’ve noticed between several of the producers of the more inspirational content I follow is that they recommend doing something to get yourself out there, be it maintaining a blog, speaking at conferences, starting a podcast, etc. So that’s exactly what I plan to do. I haven’t had much luck with finding or starting Meetups in my area, and I’m not in the US or Europe so making it to any major conferences is also challenging, which leaves me with blogging and podcasting. The idea of podcasting seems interesting to me, but I’m quite certain that I lack not only the physical equipment but also the time and energy required to produce something that’s actually of a decent quality. With that in mind, I plan to put that idea on the back burner for a few years and instead focus on blogging. There are a few things I’m going to try to keep in mind while doing this:

Your unique experiences and perspective may bring something new to the table

Another idea I’ve picked up from the people I pay attention to is that you shouldn’t be afraid to produce content about a topic that’s already got hundreds of other pieces of content in various formats published online. Just because something has already been written or said a hundred times before, doesn’t mean that you don’t have anything to add. Even if you don’t, the way you present the topic you’re choosing to create content for may help someone who hasn’t yet been helped by some of the existing content out there.

Producing content pushes you to truly know the subject

I often hear and read that teaching is a great way to truly solidify your knowledge because while you may know how to do something, you may not necessarily know why to do it that way, particularly in computer sciences where there are often many different ways to solve a problem or accomplish a task. By pushing yourself to explain a given topic, you force yourself to dig deep and gain a better understanding of it.

Producing content allows you to demonstrate expertise

As for me, a self-taught developer with only a couple of years of experience at the time of writing, finding creative ways to demonstrate my knowledge is a must. Even if you have a degree and several years of experience, I imagine it’s still valuable to produce content to demonstrate your knowledge of a given subject.

With the above points in mind, I’m going to work towards writing more frequently throughout 2019. I don’t want to write too often, as I’m afraid that would diminish the quality of my posts. Instead, I plan to set a personal goal to publish a quality post once a month, for 12 consecutive months. I figure giving myself a month to prepare and publish something should be plenty of time to produce something decent. Perhaps I should also set a simple reward for accomplishing that to encourage myself to keep going forward, like a donut for each time I publish a blog post on-time or a new audiobook or something along those lines. I could do something a little bigger for the 12th post. I’ll think of something and edit this post later.

While I don’t have a Chromebook, I recently bought a Samsung Dex, which for those of you who aren’t aware of what that is, it basically allows you to take your Samsung phone, dock it, connect a mouse, keyboard, and external monitor, and use the phone as if it were a desktop computer. Seeing as I still actively develop and use Simple Markdown, I wanted to take a look at how I could make it compatible with Dex so that I could give it a go. Much to my surprise, Android emulators have the multi-window functionality built-in. Samsung has provided us with a neat little guide to take a standard emulator and convert it for desktop use, but I’ll give you the quick points below.

Create an emulator based on the Nexus 6P running Android Nougat.
Ensure that you have adb on your PATH, and open up the terminal. Run the following:

adb shell

This will drop you into the terminal session for your emulator, where you’ll run the following commands:

su
setenforce 0
settings put global enable_freeform_support 1
cd /data/local/tmp
mkdir permissions && cd permissions
cp -a /system/etc/permissions/* ./
sed -e "s/live_wallpaper/freeform_window_management/" android.software.live_wallpaper.xml > freeform.xml
mount --bind . /system/etc/permissions
stop
start
reboot

Once the emulator reboots, run your app. Tap the Recent Apps button and you should notice a new icon next to the close button.

Tap that, and your app should launch in freeform mode. Last but not least, you’ll need to adjust the view density to get the resolution closer to that of a Chromebook (or Dex). Rotate the emulator into landscape mode and run adb shell to get into the device’s terminal again. From there, run the following:

wm density 160
wm size 1080x1920

Now, you should be looking at your app as if it were running on a Chromebook! Interestingly enough, I was able to replicate a bug that was plaguing some of my Chromebook users that occurred by resizing the window. Here’s a screenshot of Simple Markdown in action:

I barely managed to squeeze these updates into the end of January, despite a busy post-holiday season for me. Simple Markdown is still not polished enough for me to call it a 1.0 release yet, as there are still plenty of rough edges to smooth out, and a few new features I’d like to add. You can grab the current revision from the Play Store or the GitHub releases page. In this update, version 0.3.1, you can expect the following:

tl;dr

  • A couple of new features
  • Bug fixes
  • Code cleanup

New features

  • Settings: you are seeing the beginnings of some customization. I’ll try to keep things simple with it in the spirit of the app, but I also know that it’s nice to have a little control over your apps.
  • Auto-save: files are now automatically saved whenever you leave the app. No need to tap the “Save” button any more! Note: this is enabled by default but can be disabled from the settings.
  • New files: you can now quickly reset your working file to switch into another file. No need to close and re-open the app any more!
  • Auto-capitalization: the editor will automatically capitalize new sentences so you can leave the Shift key in peace!
  • Adaptive icon!

Bug fixes/reliability improvements:

  • Fixed horizontal scrolling for code blocks. This is disabled by default, since it conflicts with the swipe to view the preview or go back to editing feature. For now, you can quickly enable/disable swiping from the menu by tapping “Lock Swiping”, but I hope to make this automatic in the future so you don’t have to think about it anymore. I’ll be sure to write about it when I’ve got it 🙂
  • Fixed title setting on opening new files.
  • Cleaned up some unneeded/unused code.
  • Added more tests to prevent regressions.
  • Fixed a bug with physical keyboards where holding down Backspace could cause a crash

I’m going to continue working on Simple Markdown as I have time, and as always, don’t hesitate to reach out to me if you run into any problems or have any suggestions or requests for improving the app! You can get in touch through the contact page on my site or from the GitHub issues page.

A few months ago, I published an app called SimpleMarkdown, which, as you can probably guess from the title, is a markdown editor. I had a strange bug that I couldn’t quite figure out no matter how much I searched it and eventually I had to put it on the back burner as I got overwhelmed with work. Gotta pay the bills somehow. Anyways, what was happening was the app would randomly crash due to a memory leak that was happening in the WebView, which is what I use to render the preview of the markdown. I couldn’t quite pin what was causing it, but you can see the full stack trace in the GitHub issue. The exception message was as follows:

Activity com.wbrawner.simplemarkdown.view.activity.MainActivity has leaked IntentReceiver org.chromium.content.browser.accessibility.LollipopBrowserAccessibilityManager$1@9a08817 that was originally registered here. Are you missing a call to unregisterReceiver()?

Naturally, this confused me, as I wasn’t registering any IntentReceivers in the Fragment nor in the Activity. This was also a pretty big show stopper, as I myself had lost at least one or two blog posts due to not saving the file before I ran into the crash. I can only imagine how frustrated other users were. I finally had the time to look into this again and I decided that I’d give it another go before just pulling out the preview functionality altogether. I’d rather have a small feature set in a stable app than a feature-packed app that doesn’t do the job it sets out to do properly.

After a little searching, I came across this GitHub issue, where user vickychijwani was experiencing the same issue in a similar app of his called Quill. He discovered that by removing the WebView from its parent View prior to calling WebView#destroy(), he no longer experienced the crash. I tested this myself, and sure enough, I’m no longer experiencing the crash myself! In fact, I was able to get through writing this blog post from my tablet using SimpleMarkdown and haven’t run into any issues whatsoever. Kudos to you, vickychijwani!

Just to play it safe, I’ve added Crashlytics to the next release, so that I can see any and all crashes, and make sure I squash the bug completely. I’ll be adding a privacy policy for SimpleMarkdown accordingly. Crashlytics only reports the device, version of Android, and stack trace If this makes you uncomfortable with using SimpleMardown, please feel free to build the app from source (it’s not very difficult and you can reach out to me if you need any assistance.)

Anyways, if you haven’t already, check out SimpleMarkdown and let me know what you think!

In my post on Progressive Web Apps, I opened by saying that I had always wanted to get into Android development but hadn’t “taken the time to learn Java and get to it”. So, I decided enough is enough and I want to pursue my goals. I recently read through Donn Felker’s 5-day newsletter on how to become a World-class developer, and one of the things he recommends is to write an app, even if it’s already been done before, to practice and also to have something to put into your portfolio. (Side note: even if you don’t want to be an Android dev or even a dev, I’m sure you can get something out of Donn Felker’s blog and newsletter. You should definitely check him out). So, that’s exactly what I did. Donn also recommends getting out into the community, whether that be through blogging, Meetups, conferences, whatever. It’s not so easy for me to get to Meetups or conferences down here in Mexico, so that leaves me to blog for now.

As part of an initiative to get myself to blog more often, I decided to write a markdown app. The other markdown apps I tried seemed OK, but they all had a thing or two I just didn’t like. Either crashing, having confusing or unappealing interfaces, lacking features, or even sending my personal data back home, I felt the need to come up with my own solution. It’s currently in a beta state but I finally feel comfortable sharing it (after rewriting it about 4 times over). I still have plenty to learn and I’m sure there are places in the code that could be simplified or improved, so if you have any suggestions then please share!

In addition to getting myself to blog a bit more, I also wanted to get some hands-on time with a few popular libraries like RxJava and Dagger, to name a couple. I listen to the Fragmented podcast and recently signed up over at Caster.io so I’m always hearing about them but I hadn’t yet given them a chance. Another thing I wanted to put into practice was the MVP architecture, since MVC wasn’t doing it for me and I really want to work on testing.

Anyways, please check out the app in the Play Store and give me some feedback 🙂

Portfolio linkGet it on Google Play

Legal notice because laws:

Google Play and the Google Play logo are trademarks of Google Inc.

tl;dr sgit + arc welder = git on chromebook

Anyone who has used a Chromebook knows the downsides of doing so. As a standard user, there probably aren’t many, unless you’re an iPhone user or a Microsoft Office user (though even Office has online web app versions of its products). As a developer, however, the lack of tools that are easily available is rather disdaining. Now, you can enter dev mode and use crouton, or wipe your Chromebook and replace ChromeOS with Linux, but these have their drawbacks.

Read More

tl;dr – Say Time for Chrome in the Chrome Web Store

One of the features of macOS that I really appreciate is the ability to have the Mac announce the hour. I find it incredibly helpful to stay on schedule and keep track of time. Unfortunately, on Windows and Linux, this isn’t as simple to set up. On Windows, the only method I have found involves using Windows Task Scheduler to run a VBScript/PowerShell script/.bat file/.exe file, which can be a nuisance and in my experience doesn’t work very well and isn’t convenient to configure (I don’t really care to have the hour announced at 2am). On Linux, you can use the saytime package, though I’m not sure it’s available on all distros, so you could use the espeak package, combined with the date package, and come up with a cron job that runs on your preferred intervals, which isn’t so bad but still a bit of an inconvenience to set up. To make things simpler for those of us who aren’t on macOS, I wrote a Chrome extension to do just that!

Read More

For the longest time, I’ve wanted to get into Android development. While I haven’t yet taken the time to learn Java and get to it, I have been looking into progressive web apps. They’re actually rather exciting. Essentially, they seek to make web apps feel like native apps, to improve the user experience and increase conversions. I’m not really selling anything but I do like to provide a positive user experience to anyone who is interested in what I have to say, so I’ve taken the time to set this up. I’ll go over a couple of steps I took to make my interval timer app a progressive web app.

Read More

For the longest time, I have neglected to put my vim configuration under some sort of version control. I suppose it’s not been a top priority for me to maintain the configuration that I’ve taken so much care to set up until now. Since I started using vim about a year ago, I’ve really only kept my configuration, along with the plugins that I like, stored on a backup drive and on my server. This is of course not the greatest set up. I admittedly haven’t been using vim as much lately because I’ve sort of viewed it as inferior to the likes of PHPStorm or even SublimeText. Curiosity got the best of me though, and I decided to do some research into whether or not vim could handle some of the functions that my GUI code editors can. To my surprise, vim is more than capable of handling all the tasks I currently use the other editors for, and even has a few goodies that I didn’t think of.

Read More

A week ago I had a bit of downtime, because I decided to switch hosts. Previously, I was using DigitalOcean, with a droplet running Ubuntu 14.04. I paid $10 a month for a 30GB SSD, 1 CPU core, and 1GB of RAM. This used to be alright for me, because I was just running this website, which doesn’t really get a lot of traffic. Recently however, this hadn’t quite sufficed. I’ve been really researching the best way to move some of my work to the cloud.

Read More