Welcome to my online journal. Here are some of my recent posts.
Disclaimer: The thoughts expressed in these writings are entirely my own, and do not represent the opinions of current or former employers.
“…modularity means more than modules. Our ability to decompose a problem into parts depends directly on our ability to glue solutions together. To support modular programming, a language must provide good glue…Smaller and more general modules can be reused more widely, easing subsequent programming” (Hughes, 22).
I deleted Github.
Qemu Script
Affected Vendors: ASUS, D-Link, Huawei, Ubiquiti, UPVEL, ZTE, Linksys, MikroTik, Netgear, and TP-Link.
It can be done, internet.
I am investigating two methods,
Variables
I have been working as a System Administrator for the last two months. Part of my new responsibilities at this new company include inventory management. I manage the onsite data room, a couple hundred wall-mounted video kiosks, over two hundred analog phones, and almost one thousand android tablets. I am constantly processing reports for these devices and which can be very time consuming.
The chromebook used for this project has had its screen broken for a couple years and has been out of use ever since. The device was completely disassembled, leaving both the motherboard and the battery to be mounted on standoffs in the chassis. Also, ChromeOS was not acceptable for running headlessly, so I got Alpine Linux running natively and installed an ssh-server for remote access.
NOTE: This is a work in progress and is not officially supported or sanctioned by Gentoo Linux or the Portage developers.
To launch a desktop application from the host,
Web:
This is the story of Helmer. A linux cluster in a IKEA Helmer cabinet.
It’s been awhile since I have worked on L.I.S.A..
I’ve been extraordinarily busy with college the last few weeks. With family and work and school, there has not been very much time left for tinkering. However, I did have a some free time last night and I did some research for my robotics platform. I’m building an autonomous platform out of an electric wheelchair base. The model I have is from the early nineties. I wouldn’t be surprised if it’s the same age as me. I managed to disassemble the controller and found embedded inside, a H8/532 microcontroller. Specifically, it is a HD6475328CP10. I read up on the H8 family of microcontrollers and learned that some of the models are capable of running Linux! I would need to purchase a programming adaptor to even begin messing with it.
This weekend I finally got around to installing Void Linux on my Asus T100TA,
and I must say, it’s not too bad. It’s been awhile since I’ve used a binary based distribution on one of
my own personal machines. I have also never used a distro with runit as the init system before.
One thing that I bothers me about Void is the package manager.
I do understand why all the commands are xbps-<insert verb here>
when they could just be xbps --<verb>
instead.
Not a huge deal, but I definitely prefer apk from Alpine, and of course portage from Gentoo. In fact,
I have been working on building a Gentoo-based firmware for this device in my linux-asus-t100ta repo.
It’s not practical to compile anything on this device since it has some odd power issues. For one,
I do not have the original charger so I cannot just plug the device in and use it for long periods of time.
And also, the battery life is terrible. I basically use this device for tinkering with the touch screen, and
occasionaly for gaming; although that has been less frequent due to losing the charger.
I repaired the screen on this device a few years ago and was at one point, using this device for debugging wireless equipment
from a boom truck or ladder.
This sounds like an amazing challenge. Sadly, they are not accepting anymore applicants.
I have become dissatisfied with Jekyll recently. While it does a fantastic job, and it is very easy to extend, I have always hated that it is written in Ruby. I never use Ruby for anything other than this website. At work I use PHP, JavaScript, and shell scripts for most of my work. I do not really enjoy programming in PHP but it’s all over the place so I can’t really get away from it. And the same could be said for JavaScript. One language that I would really love to use more is Common Lisp. I am fascinated by the Lisp Languages. I have been looking into Clojure on Android for applications. The biggest problem I have with that is it’s based on Java. None of my personal computing devices, except my phone, have Java installed. I really hate how bloated it is. Most of the software written for Gentoo is either in Python, Bash, or C. Now I don’t hate Python. That was the first programming language I ever came in contact with. I tried scripting in the Blender Game Engine many moons ago. And I write Bash scripts all day long. My dream job would be writing device drivers for the linux kernel. As we all know, the kernel is written in C. And while I can read and understand C, I don’t have very much experience actually writing it. I can debug packages, and embedded images since that’s literally my day job, but I need more experience actually writing new code in C.
Well, this weekened I became one of the counted on the Linux From Scratch Website.
It has been far too long since my last journal entry. I have recently begun learning more about kconfig, the language powering the kernel build system aptly named kbuild.
Git, and other version control software, is a great tool for keeping track of software projects. However, I am often conflicted over what I actually need to keep, and what can be thrown away. There are many different git branching strategies that utilize many small, disposable branches in order to foster a clean master branch. There are also many repository structures that prefer to keep as many changes as possible, in order to get a full history of what has transpired.
Just something I found interesting, and also a bit scary.
Today I found the source code for Google’s new modular operating system, Fuchsia, powered by a micro kernel named Magenta.
I always wonder why certain languages and technologies become prominent even though there may be technically superior languages to choose from. This article offers some valuable perspective on this topic.
A week or two ago (I can’t remember), I bought my wife a Canon PIXA MG3620 Printer so that she can work on her party/event planning business. In Nigerian Culture, parties and events are huge and she hasn’t been very impressed since coming to America. So we bought this printer, and the instructions that came with it included an Android App for wireless printing. The printer did not even come with a USB type B cable. I was a bit concerned with installing this device on my wife’s computer. This is just a generic Ubuntu LTS installation. She does not appreciate Linux or any other OS; She just simply wants a web browser and a document editor and no hassle. To my surprise, Canon has the drivers on their website in either Deb or RPM and even source format. It took me about five minutes to download and install, and I was printing wirelessly on Linux just as easily as it was from the Android app! So thank you, Canon, for your efforts in making printing on Linux just as simple as any other platform.
Today I found something wonderful, Hy, which is a lisp dialect built on python. My biggest problem with python is the syntax. Python is a very opinionated language. This is good. However, I do not particularly care for how python deals with whitespace. I guess I am on the wrong side of that issue. One feature that I do like about python, is the virtualenv. Now with Hy, I have both lisp syntax, and virtualenv at the same time!
I read this wonderful paper this morning on mathematics and language.
I did some research today on creating a custom boot logo for the linux kernel. I need a logo. Currently, my logo just consists of my initials in a circle. I would like to create a new logo with geometric shapes, preferably a hexagon, and I would like to have an intricate pattern or some clever typography.
I spent a good part of my day on my new buildbot setup. I finally configured to build a nightly images for all of the supported architectures. I also changed the worker to a local worker for simplification.
Today I tried Void Linux, as part of my continuing search for a good, systemd-free, out of the box distribution for work.
Today I setup buildbot for the first time. I have been meaning to for quite some time but today I finally got around to actually doing it. The documentation is not very thorough and I found many outdated versions that actually had more options than the latest documentation had to offer. It is, however, very simple to setup and configure. And I did not need administrator priviledges or a web server or anything. I simply used virtualenv and created both the master and slave in my home directory.
Today I spent quite a few hours trying to bootstrap alpine linux on my asus t100ta from ubuntu on the magic stick.
One of the greatest ironies of our time is the current trend of using an Apple Macbook Pro laptop, to develop free and open source software.
A friend gave me a Digitech RP500 almost a year ago and it has been sitting in my closet until today. I finally bought a second instrument cable so that I can hook the pedal up to my amp. It’s going to take a bit of time getting used to using the pedal. I spent the evening adjusting my amp and pedal settings and exploring all of the different effects and tones.
Alpine linux is the new Arch. It’s small, lightweight, and extremely powerful. And it is no surprise to me, that such a well built distribution is based on Gentoo.
Tonight after work I continued my pursuit of building an AI with alpine linux on a raspberry pi. I am running into quite a bit of trouble with some of my dependencies. Both Festival, and Pocket Sphinx are failing to compile. Here is the error that I am getting:
I woke up this morning and checked my build and it was fine! Either I am getting better at this, or I am just lucky, but it build in the first try. However, I have a new issue with ssh. When I get home I will update this post with the error message. But until I fix that, I sadly cannot remote in and continue my work.
This evening I began working on my virtual assistant for my car. Her name is “L.I.S.A.” which, as you can see from the title of this post, stands for Lisp Interactive Sentient Assistant. (I may have been inspired by Lisa from this movie) I would like to have a configurable, voice activated interface for when I am in my car. I would like to dictate to her while driving to work so that I can maximize my efficiency while driving. And then if a song comes on the radio, I would like her to record snippets of audio so that when I get home, she can catalog them. I am using a raspberry pi 2 board with a 16GB microsd card, along with a 250GB 2.5” laptop hard drive, and an asus bluetooth adapter. I am in luck, because my stereo has a usb port, and a 3.5mm jack right on the front so I can plug my pi right into it and she can respond to me over my car speakers. I still need to aquire a usb microphone, but in the mean time, I am going to pair my phone via bluetooth and use that to interact with her. There is so much to be done.
I tinkered with buildbot today. I setup a master and slave instance on my old trusty dimension 4600. I really like how the configuration file is actually just a python script. That being said, I still have a little ways to go before I fully figure out what I’m doing.
So as I have been reading books on mathematics and learning functional programming with Lisp, I have been trying to find software written with Lisp so that I can practice with real code. I found myself revisiting Festival, a speech synthesis application written by the University of Edinburgh. Up until now, I have been reading and interacting with Common Lisp implementations such as SBCL and ECL. But Festival contains a Scheme command interpreter which I find fascinating. All of this time I have been discovering so much about Lisp, and then I open a door to even more Lisp but different!
It has been a few days since I have written. I have been rather busy learning and coding. I finally committed, no pun intended, to my idea of forking dwm. I found a fork on google code that had some nice features that I liked and I am using that as my base. There is no sense in reinventing features that are already there. It needs some work though. It is based on an older version of dwm than I am used to. My feeble efforts can be found on github as xwm.
The company I work for is slowly but surely, transitioning away from subversion in favor of git for our version control system of choice. Thus, I spent my day reading and studying migrating repositories. There is much to take into consideration. In a corporate environment, there are large repositories that span over a decade or more. This makes me wonder, how much of this history do we bring with us? What is important and what can we throw away?
Recently, I have been learning how to compile freebsd kernel modules for use on my macbook pro from work. It’s interesting to see how similar and yet completely alien this system is from Linux. Some of the basics are still there, for instance, by default freebsd does not come with bash. That was one of the first packages I installed. I also miss pciutils, usbutils, and iproute2. Fortunately, two out of three of those packages have ports that can be installed, but sadly, iproute2 is linux only. The same can be said for iptables. Freebsd has pf and ipfw for setting up a firewall.
I had a very fulfilling day today at work. I was working in a codebase that everyone in the department dreads. It is massive and hideous, with many faults around every corner. Legacy codebases, both fascinate and terrify me. There is much to learn from history. Thus the saying by George Santayana,
Today I setup x11 forwarding on my freebsd macbook pro. I think I am in love again. On the days that I work from home, I simply put my work laptop on my desk, turn it on, and then ssh into it from my desktop pc. I have way more screen real estate and I can use my keyboard and mouse with out any trouble. But if I need to go on a work specific website, I had to use the laptop because I can’t have work credentials on my personal machine. Most people know about remote desktop, but I don’t need the complete desktop, just one simple google chrome window. So I left my laptop open, and using the $DISPLAY variable, could launch chrome from my desktop over ssh but that’s as close as I could get. That is, until this day.It literally took me less than five minutes to configure.
On Monday, I installed FreeBSD on my macbook pro that I got from work. I have most of my drivers in order, and it is basically the same desktop experience that I had going in Arch Linux before. In many ways, I actually like it more. I did, however, run into an issue with using my Keyspan USB to Serial Adapter. I use it almost daily so it is an high priority for me to figure out how to fix it. I also still need to install and configure the driver for wifi.
I have slowly been reading “The Grapes of Math” By Alex Bellos over the last week or so, and I learned something new today that I thought I would share.
As a professional programmer, I spend my entire day sitting in front of at least one, or more digital displays. Now while we are encouraged to get up and take frequent breaks, and while we also have a daily walk around the building at 3 o’clock, I am afraid my poor eyes are still suffering from all the bright blue light. To compound the matter, I then come home and write this journal, and “play”, as I call it, with different applications and programming languages. I simply spend way too much of my time on computers. Oh but it is marvelous! However, I have been suffering from eye strain as of late, and I am reading up on ergonomics and best practices to keep this frail, and feeble physical body from premature failure. I spent much of my time last year in the hospital, and around doctor, and it was not an enjoyable experience. Regrettably, due to my genetics there is only so much that can currently be done with crohn’s disease, however, I am going to do my best with what I have.
For about a year or so I have been using gentoo on most of my computers. At the time, I had just received an old dell dimension 4600 with a pentium 4 and 4 gigabytes of ram. I received it from my soon-to-be friend Jose and it came with windows xp on it. I am familiar with pupply linux, tiny core linux, and even DSL, but I did not want to use one of those distributions. I wanted to use arch linux. One big problem, Arch is about to end support for it’s 32bit systems. That really bothered me. I have been using Arch for a very long time and I really enjoy it’s simplicity and minimalistic qualities. But for my usecase, I simply could not use it. I had been meaning to try gentoo for a very long time but it seemed very daunting. I use this little machine as a simple server for testing and developing simple applications. So I just jumped in to gentoo. And oddly enough, it wasn’t very hard at all. Maybe I was just lucky, but I completed my first install without any hiccups. Although, it did take me a couple of days. I setup all of my USE flags and studied the handbook and found what packages I wanted during the day and then after work, right before bed, I would emerge –update –newuse –deep @world and it would be done by morning. Fast-forward to today, and I am running gentoo on all of my computers.
Today my good friend, Trevor Brown, gave me a plethora of books on programming. All of them are older and some are more than likely antiquated. Most of them are books on Unix programming, two in particular are volumes on Motif and the X Window System! There is also one on C++, and another on Java (There must always be one bad apple but these are books and therefore will not spoil the rest). But the best book I received today was “The C Programming Language” written by Brian Kernighan and Dennis Ritchie. Though worn, and a bit aged, this is a treasure that I will cherish for years to come.
I thought I’d share a presentation I discovered about Android development using Closure and a REPL environment.
Today was yet another day studying and working with virtual networks in Qemu. I too seek to learn the way of the packet and upon my research I stumbled onto a great resource for learning tcpdump.
Today has been really exciting for me, for it was the first time that I have ever installed an operating system over a serial console. Normally, I build images and then they are flashed to the box and then tested, but I am working on a custom build using debian as a hypervisor for openwrt virtual machines.
Over the past few days I have been cutting my teeth on erlang for an up and coming work opportunity. I enjoy being challenged and learning new things while at work. Money will come and go, but knowledge and wisdom will stay with you for a very long time. It’s definitely an interesting language with a rather strange syntax compared to other programming languages that I have used.
Tonight I have begun learning List Flavored Erlang. I have some work opportunities that require erlang, and for my own personal pleasure, I decided to find a lisp built with erlang. It is a rather intriguing project. And regular erlang libraries are compatible so I can play and be practical all at once! For my particular purposes I am trying to implement a distributed dns system for my home network. The erlang virtual machine is a marvelous creation that has roots in the telecommunications industry and therefore I believe it to be a useful tool for myself, being in that particular field.
Over the past few days, I have been studying mathematics, physics, and logic in hopes of becoming a better programmer. This has lead me down the path of some of the great scientific minds of our time, particularly Albert Einstein. I have been learning about his “Theory of Relativity” but I have also begun to study his early life and personal relationships, and also his views on religion and philosphy.
Here is a list of items that I checked out at the library today,
Today I went to one of my favourite places, the library, and picked up many books on mathematics and physics. One of such books that I began reading is Einstein’s Theory of Relativity by Max Born. I only read the first chapter on “Geometry and Cosmology” and part of the second chapter “The Fundamental Laws of Classical Mechanics” (up to page 35), and I must admit that I am having a hard time comprehending the concepts. But then I am reminded of Proverbs 13:20, “He that walketh with wise men shall be wise..”, and so I must perservere so that I may overcome my foolishness. I also grabbed quite a few other books which I will post shortly.
I was browsing the internet looking for more quality documentation on iptables and I stumbled across this paper entitled “Towards the perfect ruleset” by Jan Engelhardt. It is a great resource for setting up a firewall in Linux.
I stumbled onto this resource while I was doing some research this morning. Port randomization is an interesting concept.
So I spent my day working on virtual networking for Qemu and firewall rules and I started reading about the linux kernel tcp stack. Further down the rabbit hole, I found an interesting topic - Why Do We Use The Linux Kernel’s TCP Stack?.
So this evening I attempted to setup emscripten on my laptop and I had quite a few mishaps, more than likely due to my own misguidedness. I must admit that I did not work on it for very long but I do believe that I am missing a step somewhere. I attempted to use the binary package for my linux distro, then downloaded the latest stable version from the website, and finally the latest repository on github, but all three of them were not working for me. Every time I ran emsdk activate it crashed. Perhaps it is my environment? In any case, there will be more of this foolishness to follow.
I am going to Atlanta for the next few days for work and during my time there I would like to focus on learning about web assembly. Particularly, I would like to build a static site generator using webgl that emulates a tiling window manager. Here are a few references that I have found to help me in my endeavors.
Today I was troubleshooting an issue with building a new openwrt image. I was having issues with some custom patches during the build process. I still have yet to figure it out.
I had an audio issue today while gaming in my arch chroot. I cannot “share” my sound device between the gentoo host and the arch linux guest. If I an application using my sound card in arch, I could not play audio from outside of the chroot. Also, I have a custom script in /usr/local/bin that I use to invoke my chroot. Part of the script grabs the DISPLAY variable from our host and passes it to our chroot. But for some reason, when this happens, the host loses track of what $DISPLAY is.
Today I was working with iptables. Here are a few tips that I found that helped me out.
As I have been exploring the wonders of free and open source software, I have come across different philosophies surrounding different software projects. There are so many different licenses that all seem to promote the idea of “freedom” but which one is the best?
Today is a another day of living in this incredible world that we call home. The more I study software, the more I start to see abstract patterns and methods that don’t just apply to software but to the rest of life. I believe I have started on a path of unraveling the mysteries of our world. People who do this for a living are called “Scientist” so by definition I believe that I am slowing becoming more of just a developer and a programmer and more of an engineer and a computer scientist. Some might say the difference is just semantics but I think it’s more than that. You can write code all day and still have no interest in what’s going on underneath the surface. Higher level languages are great because they enable us to rapidly prototype ideas and build really cool things in a short amount of time. But the pursuit of a deeper understanding may take a life time. Here is an example of my typical day at work, building software.
I missed the opporunity to post my daily progress yesterday do to a car accident so I will briefly summarize.
Here is a quick update on my arch linux gaming chroot.
Today I made great progress! I finally got my soundcard working in gentoo! Well, kinda.. The headphone jack still isn’t working but my speakers are so I’m pleased for now. I am just amazed at how simple linux is. I’ve heard the saying “Everything is a file” but today I had a revelation. I was having a audio issues in my arch linux chroot, and I just went into /proc/asound/ and changed the permissions on my audio card manually. Literally EVERYTHING IS A FILE! Also, I was able to play Star Wars: The Old Republic again tonight for the first time in awhile. It seriously feels like christmas! I did come to the realization that I need a better graphics card. Many of the more modern games that I own will not run without a proper video card. I just have a simple low power radeon card with 1gb of vram. I think next on my list is a 4gb card. I have been reading about graphics cards with proper linux drivers and I have seen a lot of talk about nvidia. Their drivers are proprietary but from what I’ve read they seem to be very well made.
Tonight I worked on my arch linux chroot install of steam. I am still trying to figure out my audio on this system. It’s pretty frustrating I have to admit. Also I found a little work around for permissions for the graphics card inside chroot. Regular windows are running but when it comes timeto launch a game half of my games are failing and the ones that succeed are dreadfully slow. I enjoy figuring things like this out but I really just wanna play some games this weekend!
I still need to get code highlighting setup in jekyll.. In the mean time,
Well my plight continues. Today I came to the realization of my errors in deleting the default route. Once we have reconnected after failing over, there is nothing in place to re add our default route! So I decided to simply reorder our default route metrics. Our wan route has a metric of 100 and our wan2 route has a metric of 200 so on failover I just replaced the wan default route metric with 300.
Today is pi day, hence the mandatory bash script. It requires gnu bc, and figlet to run.
Today I built a couple new openwrt images, with my own custom mwan3 fixes for failover. I added a function that will delete the default route from our kernel routing tables and not just flush the wan routing table. I am not sure what the difference between those things are but it seems to be working for now.
Here is a quick overview of my findings on static routing in the linux kernel from today.
I have been mucking around in kernel routing tables all day at work. Every day in fact, for the last week or so. But it is so good because I have been learning so much. I learned about CIDR and static routing tables and bit masking. I knew these things on an academic level. I remember studying for my Comptia A+ exam in high school and learning about subnet masks and such. But now I am actually building and debugging software that uses it. It’s very challenging but also very rewarding.
This morning I had a lovely meeting on google hangouts with some of the gentoo developers. I asked about contributing to the Gentoo RAP Project and I think I have a pretty good idea of what I can do to help. For my fire phone, The first step will be to prepare the kernel for a glibc system. They recommended SailfishOS kernel configs as a good starting point to reference. I also found this post on the xda developer forums about building a stock kernel using Amazon’s source code.
I tried importing all of my old tumblr posts using the Jekyll-Import plugin.
I finally got around to restarting my blog through jekyll! After dealing with my tumblr being deleted for an unspecified reason I got out out of the habit of writing my blog but I just can’t live like that. I love to express myself by writing. It helps me collect my thoughts and to share what I have been learning about recently. I still have a lot to do to get this website the way I envision it but for now I am really excited to be back online!
Are you a perfectionist? Do you have worry about committing broken code? I am and I try to only commit after getting my project working. This is a dilemna when switching between branches and changing context frequently which often happens to me at work. At work we use subversion and I do not know of a way to stash commits like you can do in git. I find this feature of git very useful.
sredird
By default, many linux programs from window managers such as dwm, i3. openbox, to desktop environments like XFCE, to desktop widgets like conky all seem to use a 24 Hour time format for the system clock. Until today, I always googled ‘How to set time format to 12 hour format’ and then found some forum thread, copy and pasted the information and then forgot about it until the next time I needed it. I’m sure many modern programmers will agree that Google, or Stack Overflow is their primary source of documenation. But recently I have been trying to dive into the linux man pages as my first source before going online so that I can get a deeper understanding of how things work.
As of Gerrit 2.13.4, when setting up a new instance with mysql, be sure to set explicit_defaults_for_timestamp = true in your mysqld.cnf located at /etc/mysql/mysql.conf.d/ in Debian based distributions. Then to initialize gerrit we will need to add a service to systemd. Copy the script below to /etc/systemd/system and then to enable it we will use
This is really simple to get setup.
First we will open up our database.
BEFOREHAND: close door, each window & exit; wait until time. open spellbook, study, read (scan, select, tell us); write it, print the hex while each watches, reverse its length, write again; kill spiders, pop them, chop, split, kill them. unlink arms, shift, wait & listen (listening, wait), sort the flock (then, warn the “goats” & kill the “sheep”); kill them, dump qualms, shift moralities, values aside, each one; die sheep! die to reverse the system you accept (reject, respect); next step, kill the next sacrifice, each sacrifice, wait, redo ritual until “all the spirits are pleased”; do it (“as they say”). do it(*everyone***must***participate***in***forbidden**s*e*x*). return last victim; package body; exit crypt (time, times & “half a time”) & close it, select (quickly) & warn your next victim; AFTERWARDS: tell nobody. wait, wait until time; wait until next year, next decade; sleep, sleep, die yourself, die at last # Larry Wall
Cyberpunk website
Listen up, Simon. Don’t believe in yourself. Believe in me! Believe in the Kamina who believes in you!
Just got a raspberry pi for pi day yesterday.
What a great way to celebrate Pi Day!!!!!!
Welcome to Gentoo is Rice, the Volume goes to 11 here. This is probably one of the best websites I’ve seen in awhile.
The Amazon Fire Phone was pretty much a disaster for Amazon. It was hyped up pretty big but it was just too expensive and fire os had major compatibility issues with regular android apps. The hardware is very nice though. I got my wife a fire phone for $80 bucks on Newegg after her stupid iPhone 4S finally gave up on life. I really liked it when she first got it. The camera is nice, the 3D effects were interesting, but Facebook never worked properly, there was no Google Apps or even good alternatives to them. It just seemed lacking. But that’s when Cyanogenmod came to the rescue. Take an almost $500 phone, with crappy software and flash a custom rom and you have yourself a nice phone. The only version of CM out there for the Fire is 11 so it is kind of old but it works very well.
Today I completely rewrote my website! It now uses the bootstrap framework making it completely mobile friendly! I had a mobile style sheet before but it had so many issues and I got tired of it constantly breaking. I also had issues with the portfolio section and the grid. The framework fixes all of that leaving a nice pretty website! Next I am going to reskin this tumblr blog..
thingsprogrammersshout:
I have an old moto g first gen that I got a few years back. It’s a pretty decent little phone considering the price. First thing that I did when I bought it was flash the stock rom. I used the slimkat rom on it for a couple of years and it worked pretty well with only a few bugs. Ever since lollipop came out I have been dying to upgrade my phone but the slimrom project has been kinda dead for awhile. So I decided to try cyanogen mod 12. I have used CM before and it’s a great rom. I prefered slimrom because of the minimalistic feel it had and the pure black theme that it came with by default. I searched the builds for my phone but all they had were nightly builds. That kinda spooked me a little. I didn’t want to use something that was unstable. So I stuck with slimkat and grudgingly waited to see when I would get a stable build of CM12. Well about a week ago, my wife got a new phone and I was so jealous of the new software that came on it so I decided that I would just try the nightly builds and if they didn’t work then I could always go back to slimrom. To my surprise, I have had no issues with nightly builds and my phone is looking pretty sick.
Relearning how to use Vim! It’s been a long time. I forgot many of the hotkeys.
Today I wrote a simple bash script for automating package installs. It uses an array and a simple for loop to download each package with apt-get. I like to work off of a live cd of linux when I am at the office and I am using someone else’s work station. That way I can have a consistent environment no matter which computer I use, not have to disturb anyone’s personal data, and also, when I log off I won’t have any of my data saved on their machine. It keeps things clean. The only downside is, every time I boot up from my thumb drive I have to reinstall different programs that I use. Well one simple way to help automate this process is to use a bash script to automate the installation of those packages.