Category Archives: Code

Beyond the Grunts and Clicks: An Exploration into Doing Things the Hard Way

I recently had the opportunity to listen to another amazing podcast from 99% Invisible, a program about “design, architecture and the 99% invisible activity that shapes our world.” It got me thinking about how my world is shaped by the way I engage with computers. The podcast is a story about a computer scientist named Doug Engelbart who was, in essence, a crazy brilliant genius. He thought of ways to change how we interacted with computers and, most famously, was the inventor of the computer mouse. He also invented a specialized companion device to the mouse that worked like the one-hand equivalent of a keyboard.

His mouse caught on when his idea was taken over by Steve Jobs and Jobs removed two of the three buttons on Engelbart’s prototype, making the one button mouse Mac users are familiar with to this day. The keyset device never caught on, but the idea of it is still among the more hackery of computer users. Essentially, Engelbart thought computers could be built in a way that would, as Engelbart’s daughter, Christina Engelbart explained “allow us to work with computers more fluently and efficiently,” and beyond what he called “grunt inputs.” On the other side of the tracks, Steve Jobs held the contrasting philosophy that computers should be easy to use for the lowest common denominator or the most simplistic level of engagement. To Job’s credit, his approach of ultimate simplicity has created accessible user interfaces for millions of people who would have otherwise shied away from the wonders of personal computers. However, Job’s philosophy largely falls short of opening up innovative strategies for users to engage with the art of computing.

For me, nose-diving into the world of computer science and more specifically web development was far from a graceful, easy experience. Many, many, mistakes were made and the uphill battle to proficiency has been a long and hard winding road. I could have picked other paths that were much more accessible, but programming intrigues me; it makes me feel good, and I get a lot of fulfillment around the projects I can complete with this ever-growing experiential knowledge. From a million false starts in every programming language under the sun, I finally found comfortability with Ruby in its ease of use and the extensive community of people basically saying “if that doesn’t work, here, try this out.” It was this close-knit collaborative milieu that drew me in and continues to keep me deeply engaged. I bring up this Podcast, and Engelbart specifically, because I am inspired by the idea that computers can change the way we process the world, and more so, computers can assist in alleviating oppressive societal systems, if we know how to use them right. The Steve Jobs cheerleaders of the world seek to keep the public content and entertained; yes, you’ll be able to text all your most complicated feelings with emojis, sure, you can watch netflix from bed and flirt with your sweetie halfway across the world, but does this make us more effective people? Does this make us more ingenuitive? Does this make us smarter?

Engelbart had an intriguing idea: let computers have a learning curve steep enough to give people a new way to work so they are faster and more efficient in the end. But how many people will be left behind from such a steep learning-curve? Things should be hard, but in the right ways. Input devices should be easy, drawing apps should be easy, programming languages should be easy. The basic elements should be simple to pick up and run with, but its the ideas that should be difficult. We should solve harder problems. We should attack the structures around us that try to trade ease of use for giving up our agency to create our own paradigms and ways of engaging with the world. Even more, we should be teaching our friends how to program, how to encrypt their hard drives, how to use Tor, and how to rise above in a world that would rather have us grunt and click our lives into oblivion.

In many respects, the cybernetic techno-dystopia is already asserting itself into the future we never wanted. So where does that put us? By and large, we are at a crossroad between those who know and those who don’t. And once we get better at teaching ourselves how to navigate through the rigid, deceptively simple structures that permeate our lives, we can in turn become the ones who do, the ones who imagine, and the ones who create meaningful, complicated, and beautiful worlds into existence.

A Repost of greggawatt’s guest post on the Whisper Systems blog

Leave a comment

Filed under Code

Installing cx_Oracle on Debian 7.1.0

Written while working on a 64bit Debian 7.1.0 Installation with 64bit Python for an Oracle 11g database 

debian

This is by far one of the most annoying things i have had to do in the past few months, but like all programming related problems, once you crack it, it doesn’t seem so hard anymore. Though i do wish Oracle tried just a bit to make the process easier for developers.

Anyhow here’s my Step by Step on installing cx_Oracle

Requirements

  • Install Python if not installed taking note of whether it is 32bit or 64bit.

NOTE: To find out if your Python installation is 32bit or 64bit, in the shell, enter the command python -c ‘import struct; print(8 * struct.calcsize(“P”))

  • Install package python-dev
  • Install package unzip
  • Install package libaio1
  • Download the Python driver for cx_Oracle from here taking care to select the appropriate package matching your system installation of Python(32bit or 63bit) and version of your Oracle database(11g).
  • Download  zip of Instant Client PackageBasic and Instant Client Package – SDK from here. Be sure to select the version that matches your system installation of Python and your Oracle Database version e.g Python 32bit and Oracle 11g.

Stepsdownload (1) 

  • Move and extract the zips Instant Client Package – Basic and Instant Client Package – SDK in the location /usr/local/bin
  • Enter the following commands directly into your linux shell
    • export ORACLE_HOME=/usr/local/bin/instantclient_11_2 
    • export LD_LIBRARY_PATH=/usr/local/bin/instantclient_11_2 
  • Inside the directory /usr/local/bin/instantclient_11_2 create symbolic links to the library files by typing:
    • ln -s libclntsh.so.11.1 libclntsh.so
    • ln -s libnnz11.so libnnz.so 
    • ln -s libocci.so.11.1 libocci.so 
    • ln -s libocijdbc11.so libocijdbc.so 
  • Go to directory cx_Oracle was downloaded into and extract it.
  • Enter the cx_Oracle directory and directly in the linux shell run the commands
    • python setup.py build
    • python setup.py install 
  • In linux shell type python -c ‘import cx_Oracle 
  • If no error message is seen the Install is successful
  • Jubilation \o/ download

Happy Hunting.

 

Leave a comment

Filed under Code

PhoneGap Error Handlebars Template is not rendered

Been spending the last couple of days exploring the wonderfull world of HTML5 which inevitably led to HTML5 mobile applications.

What’s cool about them is that they provide multiplatform support. Yup, one app to rule them all.

Any how a few days in following this tutorial i get the error

Handlears Template is not defined in main.js

Spent a couple of other frustrating days trying all sorts solutions until i found this on the StackOverflow

Basically all i needed to do was move the Handlears js script tag above the main js script tg in my index.html file.
So simple after months of frustrating back and forth. That’s just how it goes i guess

Leave a comment

Filed under Code

Django OperationalError: no such table

For the past few weeks i have been working with RapidSMS on an application and dealing with a particularly frustrating error in early set up
django.db.utils.OperationalError: no such table: django_digest_partialdigest
Searched and read the documentation till i found it all came down to how the apps were ordered in the INSTALLED_APPS setting of the settings.py file. Tables for those apps are generated in the order they are listed so if you list App2 above App1 when App2 tables require the existance of App1 tables, you will encounter the error above.
All i did was move django_digest up the list in the INSTALLED_APPS setting in the settings.py file and the problem was fixed.

1 Comment

Filed under Code

ECommerce the African Way

E-Commerce in Africa is a graveyard for many startups with technically sound approaches but flimsy business plans and even flimsier execution.
This field in particular presents a host of problems covering a wide range of fields from the lack of a cheap, efficient postal delivery system in the region, to the lack of an efficient online payment system.
This however has not stopped many startups from throwing their hats into the ring and bringing forth a multitude of applications all seeking to gain a foothold in online trade. And not startups alone, Google entered the fray a couple of years ago with Google Trader, a marketplace that aimed to connect buyer to seller at no fee to either of them.
Many have tried and the graves are many on the path. This though has not stopped many others from trying, OLX and Souq for example are some of the more recent companies to foray into this industry.
And yet for all of them amid press conferences and venture capital funding is a sad disappointing disconnect between their vision and what the people need, or perhaps more importantly what they want or what service they would pay money for. Granted they present very good systems and OLX in particular has shown impressive growth but most of these systems are missing something.
The strongest case in this region for an online trading platform has been the used car market where buyers browse cars available from japan and other markets before paying for and importing them. Another compelling manifestation of online trade in some form has been the communities on social networking site Facebook where sellers post what they’re selling and buyers get in touch with them.
This we believe is where the future lies, tapping into that community and activity and finding a way for people to do this on an even bigger scale. Facebook for all it’s technical witchcraft cannot allow for searches into posts which means people must browse the often lengthy stream in search of what they want.
This form can be improved upon, seller ratings, featured products, discounts from big name stores with featured listings, the possibilities are many. The difference between this and the other Ebay clones currently on market is that with over 1000 daily return users, these communities are what E-Commerce in the region is right now, an online street market where buyers and sellers meet and haggle over prices. This is not a bad thing, we should not seek to innovate people out of this into a more structured market place and have them sending money online when there is no present need for them to do so.
Perhaps a time may come when this process needs to evolve but the focus right now should be to use technology to support and encourage this expression of trade online the way the people want it to be, and for us (Coin Media and OutofIdeas ) it is. This week marks the beginning of a what we hope will be a long term partnership with Trade Links Africa, one of the first and currently biggest and most active of these market places. Together with them we will embark on an exciting journey to imagine what this marketplace can be and empower the community there to buy more, talk more, haggle more in the sounds and expression of what an African market has always been, a community.
It really has always been about the people, nothing tops that. See you at the market.

Leave a comment

Filed under Code

Web2Py and GAE

Been having a couple of other issues in deploying the app i am currnetly working on to web2py

For starters after deploying the app locally using
google_appengine/dev_appserver.py ~/web2py ,
i was getting the following error
no module named gaehandler
The way to fix this is to look inside the web2py handlers folder(web2py/handlers) and move gaehandler.py to the root folder i.e web2py/.
The all handlers were moved to the handlers folder, any others you need will be found in there.
When this was fixed, this sprung up
AppEngine does not index by: text
This was raised because i use SQL Smartgrid in my app and is fixed by changing referenced fields in my model from the ‘text’ type to ‘string’.
Once these were fixed, dead and burried, i finally deployed to the google servers using the command below. You will notice it uses Oauth, this makes for a much much easier authentication during repeated  deployment and upgrades

google_appengine/appcfg.py --oauth2 update ~/web2py

2 Comments

Filed under Code

Google App Engine Error; Unable to bind localhost:8080

Been getting this error when deploying my application to Google App Engine.

When/If you encounter this, use the command
 
fuser -k 8080/tcp
You may have to try running it with sudo i.e sudo fuser -k 8080/tcp .
On your console/command line. This will kill the process that was keeping port 8080 busy and everything should run fine.
Tried changing Google App Engine’s default bind address and port but that was proving too problematic.
I am running kubuntu(Ubuntu KDE Flavour) with default settings and configs.

Leave a comment

Filed under Code