Archive for 2015

Script day: persistent memoize in bash

One type of task that I often find myself implementing as a bash script, is to periodically generate some data and display or operate on it – maybe through a cron job, watch or simply a loop. Sometimes part of the process is an expensive computation (could be network based, IO intensive or simply subject to throttling by another entity). The way to deal with issues like that in modern programming languages is a caching technique known as “memoization” (based on the word “memorandum”) in the results of an expensive call is retained in memory after the first time, and returned for future calls instead of running the expensive calculation. We also need to clear the cache every once in a while, but that’s another issue.

So, how to implement in bash?

(more…)

Script Day: Cloud-init for MS-Windows, The Poor Man’s Version

Cloud-init is a Linux technology that allows easy setup and automation of virtual machines. The concept is very simple – the VM infrastructure provides some way of setting some custom data for each virtual machine (many providers call this “user data”), and when the operating system starts the cloud-init service reads that configuration, loads a bunch of modules to handle various parts and let them configure the system. As a user it is very convenient – you write a setup scenario using the variety of tools offered by cloud-init, you can store the scenario in a source control to allow to develop the scenario further, then just launch a bunch of machines with the specified scenario and watch them configure themselves.

The situation is much worse on the MS-Windows side of the fence: want to have an MS-Windows server configured and ready to go? Start a virtual machine, connect to is using RDP and Next, Next, Finish until your fingers are sore. Need to deploy a new version? either retrofit an existing image (again, manually) and risk deployment side effects, or do the whole process again from scratch.

Here’s a script to try to help a bit with the problem – at least on Amazon Web Services: a poor man’s cloud-init-like for MS-Windows server automation.

(more…)

Software recommendation: MongoDB UI – Robomongo

I’ve been looking a while now for a good way to manage data in MongoDB database servers. The command line tool is OK, but its not really easy to work with, even doing simple stuff like listing the content of a collection.

For a while I’ve been using Genghis, which has an interesting approach to a local graphical interface: it starts a local web server and invokes a web browser to access that server. The UI is pretty nice and very responsive, but it is kind of flaky and lately has stopped working for me entirely. Also the data density you can get from a nice looking web UI is still much lower then you can get in a well designed desktop UI – and when looking at a lot of data records in a database, data density is very important.

Enter Robomongo:

(more…)

Fix another ‘curl|sh’ bogus installation – Heroku

The Heroku toolbelt (which I don’t remember if its mentioned in the “curlpipesh” tumbler mentioned by Amir in his response to my “Fix RVM” post), is a CLI to manage applications on the Heroku PaaS platform. As is common (and horrible) in this day and age they also offer a ‘curl|sh’ type install on their home page.

While the Debian/Ubuntu specific installer is not entirely horrible – it basically adds the Heroku Toolbelt debian repository to the APT source list, updates the package list and installs it, the “standalone” version is as horrible as it can get: download an unsigned binary from the internet, get root permissions and then do something.

For users of Fedora and other distributions, or just Ubuntu users who don’t like installing external repositories on their system, here is a simpler method to get the Heroku Toolbelt running on your system without root permissions and downloading scripts off the internet:

(more…)

The sorry state of the autonomous car discussion

English: Google driverless car operating on a ...As can be evident across the web (for example in this article), the current discussion fueled by Google’s self driving car news and a the possible development plans of other small and large companies is often concerning itself with the morals of a software driven car1. Which is, frankly, unfortunate.

I think that the only people that should be really bothered by all this talk of “who should the autonomous car kill (in case of an accident)” discussion are the programmers hard at Google and other companies, who are suddenly held to a much higher moral standard than expected of programmers who are responsible, today, to hundreds of lives in each instances – such as programmers for railway systems and passenger jets flight control software.

When you look at the problem from the perspective of autonomous transport control software, that is right now being used to safely transport millions of humans daily, its obvious that the main concern of the designers is to have quantitatively better response (more consistent and faster, in that order) than a human, for adverse situations, but qualitatively better – that is, the systems will not pretend to make decisions morally better than a human would do at any given situation, just perform better on the exact same actions that the human it replaces will have taken anyway.

So when a Google self-driving car programmer comes answer to the “trolley problem” or the “fat man problem” discussed in the linked article, they should not be held to a higher moral standard than the average driver, because that is who they are replacing.

 

  1. that is, immediately after the “ooh, technology is so awesome” debate []

How to circumvent the free Wi-Fi content filter, for fame & profit

I’m very grateful for the free Wi-Fi on the train, the coffee shop or the municipal free Wi-Fi, but the content filter they have on their proxies is sometimes really weird – for example it may blocks one of my favorite podcasts website (the Jupiter Broadcasting network) under the category “streaming media” even though they don’t actually host their video files, but they do let through YouTube and Facebook (where most cat videos are posted these days). So apparently Israeli Rail has an aversion to streaming media so they won’t let me send an email to a small podcast, but I can watch all the cat videos I want. Weird. Also, most VPN services are blocked by default, so no help will be coming from that way1.

So, to fix that, here’s a small workaround using an external proxy – this is rather simple, but it does assume you have all kinds of tools that most users won’t have just lying around – but if you’re a Linux geek you should do just fine.

(more…)

  1. I’ve checked the OpenVPN ports are blocked, as well as all web-based proxies I could find, such as FoxyProxy and Hola. I’ve encountered in the past a weird VPN software that does not use standard UDP or TCP sockets, but instead using GRE packets and I have no idea if that would work, but I’m assuming it won’t as well. []

ממשלת נתניהו החדשה – הממשלה היקרה ביותר, הממשלה המושחתת ביותר

אני בד”כ לא כותב על פוליטיקה בבלוג שלי, אבל באמת קשה לי מאוד לשתוק על מה שקורה היום בישראל: ממשלת נתניהו האחרונה (כך לפחות אנחנו מקווים), ממשלה צרה על הקואיליציה הכי קטנה שאפשר לעשות (שהצליחה גם לארגן את כל חברי האופוזיציה להתנגד לה בכל הצבעה) היא הממשלה שגם קמה על הכי חלוקת שלל. כמות הכסף שבנימין נתניהו מחלק מהקופה הציבוריות היא מדהימה! האמת שעדיין לא ברור לי כמה – זה 6.7 מיליארד שקל לפי כתבה אחת ,9 מיליארד שקל לפי כתבה אחרת או 11.5 מיליארד שקל לפי כתבה שלישית, בכל מקרה זה כמויות לא נתפסות של כסף הובטחו על ידי “ראש הממשלה” לתחומים צרים שמהם ירוויחו (במקרה הטוב) קבוצות קטנות באוכלוסיה הישראלית.

למי שלא מבין כמה כסף פה נזרק למתנות לחברי הקואליציה, בואו נשים דברים בפרופורציה – מדובר בכ-3% מכל תקציב המדינה ב-2015! רק על שוחד בחירות! וגם בכלל לא ברור מאיפה יבוא הכסף– בתקציב 2015 כבר יש גרעון של מעל 3 מיליארד שקל.

אבל הלוואי וזו היתה הבעיה העיקרית. הבעיה העיקרית היא ההבטחה של בנימין נתניהו לזרוק את כל הנורמות החברתיות וההגיינה הציבורית לפח תוך שהוא מעודד שחיתות בכספי ציבור, בצורה שלא היתה כמוה מאז התקופות החשוכות ביותר בתולדות ישראל. (more…)

Fix RVM “run script from the internet to install”

On Wednesday I complained about the latest UN*X fad of installing software by running scripts from the internet, without any regard to how your operating system handles software installation.

Docker, that I complained about last time, at least has a script that takes into account the local software management solution (uses apt for Ubuntu, yum for Fedora, etc), but RVM – the Ruby Version Manager which is a popular tool among rubyists everywhere, just downloads a bunch of executable stuff (granted, most of it are scripts, but the difference is lost on most people) into arbitrary location on your file system. At least it doesn’t install system software, oh wait – it does.

While I can’t help with RVM’s desire to install system level software (that it actually needs because one of the things you want RVM to do for you is to compile ruby versions from source), I can try to help you figure out how to install RVM where you want it and use it how you want it.

(more…)

Docker and the horrible “one line installation” fad

One of the weird things that sane (or some would say “old skool”) system administrators complain about lately is that with the rising popularity of UN*X systems (mostly Mac OS X and Linux) in the world, and in particular in the software development world, people using UN*X system want less and less to understand how to manage their systems and the culmination is the

to install this complicated system level software, just copy and paste simple wget command to your terminal

with Docker being the most horrible example of that behavior. No sane person (who understand UN*X) will ever think that installing Docker by feeding the content of a URL to bash is a good idea, but for some reason this is the documented and recommended way by the Docker people. Other examples are abound, but lets concentrate on fixing the Docker scenario.

(more…)

Best Terminal Emulator Application

Edge-gnome-terminal

Frankly, I don’t think that there is any point of discussion, it is hands down KDE’s Konsole, but as recently I’ve been using GNOME 3.16 as my main desktop environment, I thought it will be useful to have a list of features missing from GNOME Terminal to be a contender:

(more…)