There's been quite a bit of discussion lately about Equity Bank (the largest bank in Kenya, and a real innovator) becoming an MVNO (mobile virtual network operator).
Their goal isn't totally clear but it's obvious that mobile platforms and money are irreversibly linked nowadays. The technology they're using is called thin-SIM from Taisys.
Safaricom and the GSMA are against the technology and are claiming that it will introduce security holes into the mobile money system. However, the thin-SIM is no more or less of a security issue than the phone itself (over which GoK and Safaricom have absolutely no control). Fake thin-SIMs are more of a concern than fake phones though - as they would be much more frequently shared (and for which it would be much more cheap to make malicious versions).
[ The following text is an excerpt from an email written to the Skunkworks mailing list - a list for Kenyan technologists]
This is a pretty good article to check out (or just read my summary below):
There's been an ongoing discussion over the past year about getting one laptop to every child in Kenya and how the ICT industry here thinks about that. Many people feel that, to the degree that this is a good idea at all, laptops should be assembled in Kenya. I don't agree and below is a summary of the thoughts I posted to that group.
Supporting industry and helping kids with a final product are two independent things. The more money that goes into spinning up manufacturing capacity, the less money that goes into getting the technology to the kids. Kenya can't magically produce laptops cheaper than China can.
As a consequence of the Kenya Communications Act, CCK has drafted a new regime for administering the apex .ke country-code top-level domain (ccTLD). It is still not clear if the CCK has an opinion on arbitrary second-level domain names under .ke from any of the documents, but in addition to a new license for the apex registry (.ke itself) and second-level domain registry (.co.ke), there are also licensing documents for registrars who will be allowed to lease domains to the general public (example.co.ke and possibly example.ke).
For those who are unaware, registries take on core responsibilities around rules and regulations regarding domains and registries need to be held to very high standards. Registrars are merely sales organizations that resell (or really, lease) domains from the registry. Typically, a registry does not sell to the general public and a registrar has no core maintenance or administration role with regards to the domains it sells.
As a background, [generic top-level domains (gTLDs) include .com, .org, .mil, .net, etc... In addition to the generic domains, each country has a TLD referred to as a country-code TLD (ccTLD): .uk, .ke, .de. There are also now internationalized domains (IDNs) such as .中国 and .香港.
First off, we should all be thankful to CCK for having a public comment period at all. It's very atypical for Kenyan government departments to give time for proper feedback. Sometimes one sees gazetted rules in the newspapers dated one-month back so that they go into effect immediately. CCK really deserves a round of applause for recognizing that releasing rules in that way is less than ideal.
Visiting Gandi (a registrar, not a registry) to see what TLDs are broadly available is a great way of understanding the current topology of domains globally - and which ones are well represented around the world. Unfortunately, CCK rules continue to deny companies like Gandi from reselling the .ke TLD and therefore, the number of registrations is very low.
Norfolk Island (a very small semi-autonomous territory east of Australia) has .nf and allows those domain names to be registered for $1,420 and renewed for $230/year thereafter. Large multinationals like Google seem to pay up for "google" under any TLD so this is probably a good strategy for a very small country to capitalize on its ccTLD when there is no chance of broad adoption.
Barbados maintains a semi-restricted ccTLD, .bb and has very little uptake - seemingly intentionally. The rationale for this appears to be that Barbados wants to assert strong authority over the domain name so that end-users know that hosts have met certain criteria in order to have been able to leverage the .bb ccTLD at all. The goal is not to have mass adoption .bb domains in this scenario.
Austria has a long history with its TLD (.at). It is currently managed as a public-private partnership that was spun out of a loose coalition of Austrian ISPs. They have a permissive registrar license not requiring registrars to be located in-country and therefore have many sellers of the .at domain name around the world and many registrants.
It is out of the scope of this article to discuss all of what CCK is trying to change with these documents but I'd like to discuss some obvious points:
Although some ccTLDs (.uk) do not allow second-level domains (like bbc.uk), many have moved to allowing second-level domains (like donteat.at). Second level domains can sell well (ca.ke might work or would it be a flu.ke?) and earn money for the top-level registry. They also overcome the often meaningless divisions between companies (.co.ke), organizations (.or.ke) and 'others'. CCK has not made it clear what the future is for second level domains under .ke, but this needs to be a discussion and I would strongly favor second-level domains for .ke in order to increase adoption. Note that allowing domains like 'example.ke' does not mean that 'example.co.ke' or 'example.go.ke' couldn't continue to exist.
Registrars act as an intermediary between the registry (the organization that administers the definitive database of all .ke domains, handles complaints, enforces regulations, etc...) and the domain holder. Typically, an end-user leases a domain name from a registrar on a renewable annual basis and the registry administers the database. Unlike many other countries, CCK will require that all registrars be Kenyan-owned.
Although it's totally reasonable that the dot KE registry be explicitly under Kenyan authority, I don't think it's in the best interest of the industry to force registrars to also be locally domiciled. It may be good for a narrow group of local registrars to protect their business registering domains, it is bad for boosting the overall number of .ke domains registrered. The vast majority of domain registrars globally are non-Kenyan and excluding them from being able to lease the domains means that .ke will continue to be a niche asset. Kenya uses foreign contractors for many specialized activities (building airports, laying roads, improving container ports) and there is no reason to treat potential .ke registrars any differently - especially when the cost is impact is a continuing low uptake of the .ke TLD.
In addition to the exclusion of most of the global registrar industry from participating, the "APPLICATION FOR DOT KE DOMAIN NAME REGISTRY SERVICES PROVIDER AND DOT KE SUBDOMAIN NAME REGISTRAR SERVICES PROVIDERS UNDER THE UNIFIED LICENSING FRAMEWORK" document places myriad burdens on even local registrars including the need to:
Note: It's been pointed out to me that my determination might be wrong. This document may only refer to registries (although it seems very clear that it's referring to registrars). I really can't say for sure and we would all be grateful if the CCK would clarify what it means here.
Although the officious application requirements are very bad for the uptake of the .ke TLD, many of the requirements are also intrusive. It makes sense for the main registry provider of .ke to be rigorously vetted and part of a public bidding process, but it is counterproductive to place the same high bar in front of the hundreds of registrars who should instead be welcomed into the program in order to sell more .ke domains. Requirements that should be stricken are:
Again, the documents are confusing so it's not really clear what CCK intends.
The research by CCK vis-a-vis the regulation and administration of ccTLDs globally as evidenced in these documents appears pretty minimal. Most of the background appears to come from other Kenyan law rather than other Internet governance regulation. I would hope that those who drafted the text read at least five or six sets of comparable documents from other countries - of which there are over 100. This is something which can easily be addressed and is well worth the time of the CCK researchers to not only read these regulations, but to reference them in an executive summary that should be attached to these drafts.
]]>I recently responded to a query about security in the cloud and whether certain security-conscious apps should be deployed on an IaaS layer in East Africa. Here is my response:
I was recently reading this form for a work permit for non-Kenyans:
Today somebody asked me to tell them more about Kili, the public cloud we're trying to build in Kenya. I said that I can tell them a bit about Kili by telling them a bit about myself.
Agile development requires a couple of different meetings in order to get things done. Most people know about the daily standup meeting where all the members of the team stand and one at a time say what they did the day before and what they plan to do that day. Ideally you pass around a token (conch shell anyone?) and only the person holding the token can speak.
The other important meeting is called 'estimation'. This is held every sprint (week or two) and it's when cards are estimated by the people who will likely do them. Only those people can estimate (usually with point values of 1, 2, 3 and maybe 5).
Both of these meetings are absolutely critical to a team's success in the agile scenario.
There is a third meeting that some groups forget about but which is no less important. In fact, I would say it's the most important meeting and it can even be used without the rest of the process on a non-development project (for instance with a sales team).
First of all, get everyone in the room or simply commandeer the entire office. This is a group event and nobody on the team should be missing it (unless they're busy playing Starcraft of course). Don't be lame and exclude certain staff. If you don't value their input enough to have them in the meeting, let them go entirely. If there's a senior person who doesn't even want to come to the first meeting - know in your heart that that person doesn't value you and start looking for another organization to work at or start thinking long term about ejecting that senior figure from the group. Hiring and firing is an important part of all organizations - face it head on.
There is an exception to the 'invite everybody' rule and that's if an invitee might make other people feel 'unsafe' and otherwise keep members of the group from speaking up. This might happen if you're a consultant called in to fix something. If you're consulting, they've called you in to fix the problem. Don't invite the toxic character but do make sure he or she knows the outcome of the retrospective meeting and work with them to fix the problem. Hopefully you can fix the situation and earn your keep - or you can at least identify the problems for upper management who can then make tough decisions. If this is your team, this situation is really bad.
Anyway, once everybody is together, let them know this will take 1 hour (1:15 if it's 10+ people and it's the first time). Don't let meetings go more than 5 minutes over time - you really don't deserve the respect of that person who didn't come if you can't even end the meeting on time.
Cellphones and computers off.
Supplies:
* Post-it notes or index cards with tack/putty/magnets to stick them on a whiteboard.
* Bunch of markers to write on the cards.
Make sure to start things off by asking about safety and make sure that everyone is comfortable enough to speak. This is the organizer's responsibility. Everybody gets a stack of cards or block of post-it notes.
On each card, participants write about the previous 2-3 weeks (every 2-3 weeks is a good cycle for these meetings) with "things that worked" or "things that didn't work". Let them brainstorm for a solid 10 minutes or until there's not much else to write. When people have written all their cards, they all get put on the board either on the left side reserved for "things that worked", and the right side for "things that didn't work".
Some people add a 'puzzle' section on the right side of the board for things that people didn't understand (i.e. what's that giant box that got delivered last week and is sitting in the corner of the room shaking every couple of minutes?).
The organizer then reads the cards out loud one by one. If one is similar to another that has already been read, he puts them together in a cluster on the board. If the organizer needs clarification, she asks whoever wrote the card to offer more details to the group.
When all the cards are grouped on the board, each person gets a chance to vote on the cards they think are important by adding a dot. Each person gets a total of 3 votes (feel free to put 3 votes on one card).
It's nice to vote for "things that worked" but over time, people are going to focus on "things that didn't work" because those are the things people want to make better.
Now the organizer takes the top 3-5 cards and moves them to the upper right side of the board in order. Only the top 3 are typically discussed but sometimes there's time to talk about #4 or even #5 so it's best to just move them to the upper right as well if the vote count is close.
Starting with the top, you open the floor to discuss each item one by one. Give about 5-7 minutes to explain what didn't work and why it matters. At the end of the discussion (shut it down if it's taking too long), ask for a volunteer to be the point person to address the problem ahead of the next retrospective meeting. The volunteer DOES NOT HAVE TO FIX whatever didn't work. The volunteer just has to move forward with putting together the solution to the issue: getting the right people together, finding out how to fix it, assigning people to fix it, or of course, just fixing it.
Each session gets a bit easier and smoother and this is when the point people assigned to unwind (or at least start to unwind) the things that didn't work from the previous session get to talk about their progress. If progress isn't sufficient, the person keeps at it (or maybe somebody more senior takes over) until there's some sort of resolution. Not everything always gets fixed but the team sees how they were able to push forward problems and get them addressed - and that's an amazing step forward for most organizations
Just do it! If after you read this article, you're worried about buy-in and getting people on board, let the powers that be know that this is a great way to build a better organization and that the staff will really respond positively. And as with all things in the agile process, don't think too hard about it - just do it. You can always say "that was stupid" and never do one again. If a group can't try something just once to see if it works, it won't grow and be able to innovate. The capacity to experiment and innovate, sine qua non.
]]>I just got another one of these VC email solicitations for an 'exclusive event'. At least youngStartup has the transparency to tell me upfront what the presentation fee is, but I find it disturbing that for $1,500 I can buy a "Top Innovator" award. Varud.com has only ever been a blog. About 2 years ago I worked on an idea for a social network based around future events and their outcomes - but it never materialized. It certainly doesn't merit an award. I'm surprised that people from Bain, etc.. could get suckered into attending an event like this. Obviously, the best ideas won't be presenting here, only the ones with money to play.
Don't get me wrong, established companies pay to present all the time. That's part of how they market. However, a startup spending $1,500 for something like this either doesn't know what it's doing (much better to spend that money on your product or more strategic marketing) or isn't well run - or it's already well-funded. Jason Calcanis has already written about this extensively. His message is that there are plenty of free ways to get an audience for your ideas. The most important thing is for you to have a partner whose skills complement your own and the time and money to work on your project. If you don't have the partner, worry about that first. If you have the partner and not the time and money, make your pitch awesome and then start pitching to whoever will listen - for free. Just getting in front of user groups and meetups is a huge step. At the same time, work on your product. If, after 6 months, you're not getting any traction, step back and reevaluate everything from the ground up.
Note: In order to not make this an ad hominem attack, I've taken out the sender's name.
]]>Hey Adam - Let me know if you'd like to have Varud. recognized as one of 60 Top Innovators presenting at The 2010 New England Venture Summit being held on December 14-15 at the Hilton in Boston Dedham.
As you may know, this exclusive venture capital summit will bring together over 450 VCs, Corporate VCs, private investors, investment bankers and CEOs of emerging companies and will feature high-level networking, face 2 face meetings and over 40 VCs on interactive panels.
Partial list of VCs confirmed to speak includes:
Neeraj Agrawal, General Partner, Battery Ventures | Omar Amirana, MD, Partner, Oxford Biosciences | Christian Bailey, General Partner, incTANK Ventures | Michael Balmuth, General Partner, Edison Ventures | Dr. Jonathan Behr, Principal, PureTech Ventures | Tom Cain, Special General Partner, Sail Venture Partners | Carlos Cesta, Director, Verizon VC | Jon Chait, Partner, Dace Ventures | Andrew D. Clapp, Managing Partner, Arctaris Capital | Issam Dairanieh, US Director, BP Alternative Energy Ventures | Ohad Finkelstein, Partner, Venrock | Patrick J. Fortune, Ph. D., Partner, Boston Millennia Partners | Liron Gitig, Principal, FTV Capital | Jeffrey Glass, Managing Director, Bain Capital Ventures | Greg Kats, Managing Director, Good Energies | Alan J. Koenning, Fund Manager, UPS Strategic Enterprise Fund | Venetia Kontogouris, Managing Director, Trident Capital | John Lawrence, Partner & CFO, Longworth Venture Partners | David J. Martirano, Co-Founder and General Partner, Point Judith Capital | Chuck McDermott, General Partner, Rockport Capital Partners | Robert McNeil, Ph.D., Managing Director, Sanderling Ventures | Jeffrey B. Moore, Vice President, MP Healthcare Venture Management | Ira Nydick, Senior Technology Analyst, Panasonic Venture Group | Brendan O’Leary, General Partner, Prism VentureWorks | Patrick O'Neill, P.E., Investment Associate, Connecticut Innovations | Joseph Riley, Managing Member, Psilos Group Managers | Praveen Sahay, Founder & Managing Director, WAVE Equity Partners | Gavin B. Samuels, M.D., MBA, Senior Partnering Director, Teva Innovative Ventures | Bart Stuck, Managing Director, Signal Lake | Steven St. Peter, Managing Director, MPM Capital | Scott Requadt, Transactional Partner, Clarus Ventures | Chris Risley, Operating Partner, Bessemer Venture Partners | Jake Tarr, Managing Director, Kinetic Ventures | Louis A. Toth, Senior Managing Director, Comcast Interactive Capital | Markus Thill, Managing Director, Robert Bosch Venture Capital | Tracy S. Warren, General Partner, Battelle Ventures | Tom Whiteaker, AVP, Hartford Ventures | Caleb Winder, Vice President, Excel Venture Management | Bilal Zuberi, Principal, General Catalyst Partners and many more.
Our screening committee is busy reviewing the submissions and will be selecting the remaining companies by this coming Monday. If interested, I would need you to fill out the summary outline and submit by the end of Monday.
I've included the details of the opportunity - let me know if you'd like me to send over the summary outline.
Featured Company Benefits include:
* Recognition as a Top Innovator 60 company
* Access to leading VCs, Corporate VCs, private investors and investment bankers
* Presentation slot
* Three Complimentary passes for company executives
* Additional discounted registrations
* Two page Company Profile published in event guide distributed to all attendees and investors
* Media Exposure
* Two complimentary passes to attend “Featured Company” Coaching Session with active VCs providing feedback
* Two passes to opening reception
Fee to present: $1,485 (there is no fee to apply).
Regards,
Adam
XXXXX
Senior Associate
youngStartup Ventures
Phone: XXXXX
Email: XXXXX
URL: www.youngstartup.com
from south.modelsinspector import add_introspection_rules
in your fields.py file (which should be holding the custom field MyCustomField, in my case in the util app). add_introspection_rules([], ["^util.fields.MyCustomField"])
We use MongoDB for high volume logging. After what we need is logged, we use Python/PyMongo to transform the data into chunks suitable for Postgres. Postgres is our central data store used for our Django application and all its associated models.What were the other NoSQL storage solutions were evaluated and why MongoDB was chosen against the others?
Cassandra was the other one that we got pretty far with. In terms of maturity and scalability, Cassandra appeared to be the winner. However, Cassandra has extremely limited query capabilities that weren't sufficient for us. In addition, MongoDB has plans to focus on scalability which suited our needs fine.Robustness: How long you have been running MongoDB in production ?
Have not run it in production yet.Did you encounter any issues on stability front (any crashes or restart needed) ?
One issue is how best to keep it 'living' without human intervention. So far, the tools have been very straightforward and simpler than solutions for other products. However, we haven't tested the quality of backups under high load nor have we really pressured the system in the wild. We architected MongoDB in our system so that we could lose it and all we would lose is incoming data while it was down, not historical data or reporting capabilities (which is ok for us for a few hours).Performance: What has been your experience on performance side like (queries/sec for the hardware configuration being used)?
We hit 30 inserts per second on a high cpu (the lowest 64 bit) Amazon ec2 instance. However, the bottleneck was in our Python listener, so we don't know how much higher MongoDB could go. We suspect quite alot as the load average was under .2 during this test.Did the performance degraded when datasize grew?
We haven't sufficiently tested this yet.Scalability: What is the rough datasize (number of records, number of collections, size on the disk?) Mongo is being used for?
The goal is to hit 1k inserts/second with real time processing (i.e. using their upsert functionality which is something like INSERT ... ELSE UPDATE) and to hold onto 10M+ records in a collection. If we weren't confident in that being possible, we would not have chosen MongoDB.Does all the data sit in one MongoDB server or you are using MongoDB in a clustered environment ?. If being used in sharded environment, would like to know your experience because MongoDB does not support auto-sharding out of the box?
We are using sharding, but again, we have not pushed it to the limit. Although it does not support auto-sharding, manually setting up a shard is pretty straightforward. This is one of the advantages Cassandra has.DataReplication/Persistence: Did you use data-replication in Mongo? What has been the general experience with it?
We are planning to use replication but are not. As referenced above, we have the option of losing MongoDB for a few hours and not incurring a major business penalty.Regarding persistence of data, did you encounter any issues given that MongoDB does lazy writes to the file system?
No, but again it has not been pushed enough for me to feel confident that this is a non-issue. We are planning using XFS however which does have journaling to account for problems at the file block level.Search: Did your application required text-searches on the documents stored in Mongo? Since MongoDB does not support text-search out of the box, how did you take care of search?
We aren't using full text search. Our goal with regards to that is to setup Sphinx or something similar when we need something like that. That seems like the right architectural solution.Support: Regarding resolving issues related to Mongo, did you rely on the open-source community or signed up for the paid-support? What has been your experience ?
Community.Client-side tools: Which libraries did you use talking to MongoDB server ? We have web-app to be running in Python and there are two libraries available for Python.
PyMongo.Would be great if you can share(pointers) to client-side tools you are using with MongoDB ?
The Mongo interface is a bit chunky (the way it uses JSON for everything), so often I just use PyMongo since all of our real code uses that anyway. Our plan is to only have a small number of collections so any necessary queries would happen through our code, not in an ad hoc way requiring a client gui or something like that.]]>
{% cycle 'row1' 'row2' %}
And the Python code behind it:
To take their example, if you write a tag that cycles different styles for list items, and two threads hit that tag node, you might get cycling that crosses the thread boundaries. Typically, one client request is getting one request, and another the other. One client in that example would get two odd styles, and the other would get two even styles - even though in Django 1.1, since the template tag node was not cached, each user would get an odd, even cycle of their styles - the expected behavior.class CycleNode(Node): def __init__(self, cyclevars): self.cycle_iter = itertools.cycle(cyclevars) def render(self, context): return self.cycle_iter.next()
sudo mv weekly/310.locate monthly/sudo mv /etc/periodic/weekly/310.locate /etc/periodic/monthly/
To even conceive of this movie strikes one as deeply contingent: a revisionist historical plot about an anti-Nazi band of assassins bent on revenge for the atrocities committed during WWII punctuated by low comedy and grand action.
Quentin Tarantino does a masterful job of creating an homage to 30s film, a movie divided into vignettes painting characters in broad strokes, men - good and bad, a classic setting of occupied France, and a grand finale so full of deep satisfaction for the viewer it's hard not to grin with a thorough sense of exaltation at the meting out of deeply deserved retribution.
The characters are: the Apache/Appalachian mongrel ready to lead his Jewish charges into battle (Brad Pitt), the stunning Film Noir heroine whose family was murdered by the Gestapo, a Negro projectionist reminiscent of Sidney Poitier, two Jewish machine gunners/head bashers (among other heroes), the evil Nazi 'Hunter', a German turncoat actress, and the Nazi high command. [Some might find these descriptions offensive but I'm trying to stay true to the dialogue]
It's an affecting movie that allows the viewer to feel a sense of schadenfreude. The opening introduces us early on to the very real, very straightforward atrocities committed by the Nazis on a regular basis. All of the action takes place in France - allowing one to feel a sense of normalcy unavailable to other theaters of the war closed to thorough mental examination. The Concentration Camps, Normandy, Dresden - these are zones of European slaughter on such a scale that it renders the feeling person's senses numb.
At this point, we are introduced to a team of Americans sent behind enemy lines to terrorize the Nazi troops. The critical mark of their attacks is scalping the dead to instill fear in the other units. Early on we are desensitized to the murder - scalps are taken, swastikas are carved into foreheads, skulls are crushed with baseball bats. All of this is a reminder of the base anger of war - death comes on a wave of righteous hate. We are red in tooth and claw regardless of who killed first.
We are then moved forward to the main storyline. A plot has been hatched by the Allies and independently by the Jewish Heroine who is dropped into the fortuitous situation of hosting a gala cinema opening at her theater for the German high command.
Twists and turns bring us to the final conclusion which really does leave the viewer almost revelatory at the outcome.
My main concern is how the early violence is used to prepare people for happiness at murder. The villains are so beyond reform that there isn't a scintilla of restraint in the viewer's vicarious thrill at the slaughtering of all who are hated. This is unlike a horror movie or a drama - the viewer is deeply invested in the outcome - and roots for it.
Is this war? I now see that we cannot live in a state without war. It is the final act of hatred and condemnation and it will be with us as long as humanity knows right and wrong.
]]>This will give you the number of times each label appears in ExampleModel.objects.values('label','other_info')]]>>>> for item in NoticeQueueBatchByUser.objects.filter(user=3).values('label','on_site'):... d[item['label']] += 1...>>> d.items()[(u'pagedisplay_violation', 4)]>>>
>>> from collections import defaultdict
>>> d = defaultdict(int)
>>> for item in ExampleModel.objects.values('label','other_info'):
... d[item['label']] += 1
...
>>> d.items()
[(u'key_1', 4),(u'another_key',2)]
>>>
One of the happy things I saw today is that the boycott of Fox (and in particular Glenn Beck) is actually picking up steam. Companies like WalMart, UPS Stores, etc... have decided to join the campaign.
I don't think you need to sign up here:
But perhaps just contact one or two companies with which you do business and let them know that you're dissatisfied with their support of this low-brow vitriol. And yes, it is their responsibility to vet their advertising outlets.
I remember seeing Glenn Beck when he was on CNN Airport while waiting to re-enter the country (yes, real Americans explore the world) as he was telling Arabs to get out of the country and accusing them en masse for all America's ills.
Sadly, Glenn Beck reaches the most vulnerable people in our society - those with limited IQ. We need to help them.
]]>Wow! Django 1.1 has finally been released. This has been a great effort by the authors and should be a huge boon to the community.
http://www.djangoproject.com/weblog/2009/jul/29/1-point-1/
I'm already doing everything with 1.1 so when this anti-fraud product is ready, it will be on there. Key features (for me) include grouping and advanced admin customization methods.
]]>Now, onto getting Pinax installed for development purposes:
I really don't like how things have gone with Pinax installation in the past few months. I'm going to give my own take on things. Pinax has moved to GitHub and so should you.
First, create an account at GitHub. Then, fork Pinax so you have your own copy to work with. For me, I have my development version here. If you want this repository to be private, you can pay GitHub $7/month - well worth it if this is a corporate gig.
Now you can follow the Pinax directions from your own fork.
$ curl -O http://github.com/AdamN/pinax/raw/master/scripts/pinax-boot.py
$ python pinax-boot.py --development ../Documents/workspace/WhateverYouNamedProject/src/pinax
$ source ../Documents/workspace/WhateverYouNamedProject/src/pinax/bin/activate
(pinax)$ cd ../Documents/workspace/WhateverYouNamedProject/src/pinax
(pinax)$ pip install --requirement src/pinax/requirements/external_apps.txt
At this point, if you have an existing installation of Pinax on your machine, you may get an error about django-wikiapp being the wrong version. In a new command line tab, run:
pip install django-wikiapp==0.1.2
If it says it's already installed, you may need to delete the existing django-wikiapp in the directory shown by the error in the pip install command above. Now it's time to start a project:
(pinax)$ pinax-admin clone_project basic_project myproject
You now have a Pinax site in myproject/ directory
(pinax)$ cd myproject
(pinax)$ ./manage.py syncdb
(pinax)$ ./manage.py runserver
Now, go to your browser and navigate to http://127.0.0.1:8000
Hopefully, you now see a Pinax website in all its glory.
]]>Today I decided to see if I could do a proof of concept Django/Pinax deployment for an anti-fraud advertising service. Since they already use PHP for their legacy codebase and since the existing developer uses Eclipse and the Zend Plugin for debugging, I decided to use Eclipse for the proof of concept (since I have to convince that person to switch to Django).
First things first. Update your Mac to the latest and greatest software and JVM. A new JVM literally came out today so that's what I did.
Now, go download the bleeding edge release candidate Eclipse for Java EE Cocoa Version - Galileo. Some people will probably want something else, but I say that Cocoa apps are way nicer than Carbon ones and anyway, I went with Galileo. The Java EE version has web development tools built in there which I thought would be important. Feel free to comment below with a leaner way to do this - I'm not using Java.
Now, grab the new version of Subversion (if you're using Subversion). I got, and highly recommend, version 1.6.2. I usually don't get the latest SVN packages but when trying 1.4.x it did not work.
Spin up Eclipse and grab some plugins. You'll need the PyDev and Subclipse plugins. Go to Help > Install New Software, and install these:
Get the 1.6 series of Subclipse here:
http://subclipse.tigris.org/update_1.6.x
PyDev for debugging and highlighting:
http://pydev.sourceforge.net/updates/
For Subclipse, you'll get alot of options. Just install everything (again, I'm usually lean but I tried not installing everything and had issues - I would just do it all).
Now, run through the fantastic Getting Started guide on the PyDev website. It's written for Windows and a previous version, but you should be able to get through everything.
When you've gone through that, it's time to get your existing SVN project into the project you created for PyDev above. Just right-click on the project and select 'Import'. From there, choose SVN and import from your svn repository (if you have one - otherwise, skip this).
I will get to Pinax on the next post, when I figure it out :-)
]]>Whew, it's been a long time since a post. Here's a small presentation about Amazon Web Services:
http://docs.google.com/EmbedSlideshow?id=dgqmn3rs_80hmx2dfcs
I found this funny line in the proxy statement of TTWO:
"The Sisters of St. Joseph of Nazareth, Michigan has submitted a stockholder proposal for consideration at the Annual Meeting..."
Basically, a convent is an investor in the producers of Grand Theft Auto and Bioshock :-)
I like their proposal though - cut out some of the fat cat pay until we see some performance improvements in the bottom line.
]]>I have alot to do right now - so what better time than now to write about stuff that has nothing to do with anything. Recently, Brad Feld and Albert Wenger have thrown themselves into the ring with comments about the future of 'the cloud' and whether it's ready for real usage. It most definitely is ready.
First of all, let's just give everybody a little primer on what cloud computing is. Cloud computing is very simple: it's a network of computers (cloud) that can be used by people or organizations to run software at a metered price. In theory, the price could be free, but just like free electricity, it costs somebody something.
Why is this a big deal? We had that in the 70s. It's true, the whole point of VAX and UNIX systems was to allow multiple programs to run on the same physical infrastructure without interfering with everybody else. The problem with those time sharing implementations is that they share many different high level resources. In the olden days (and still), you had one root user who had ultimate control, and was trusted. Now, everybody will say at this point, "Hmm, I understand, it's a trust issue." There is most definitely a trust problem but that's not the root of it (no pun intended). The problem is sharing. Just like with little children, sharing precedes trust.
Do you know what's great about your desktop? What's great is that you get to decide whether you want to install Skitch or not. You get to decide if you like a solar system for your wallpaper. You know what's not great about a shared system, you are constrained by having to share it with others who have different needs. If you want Python 2.5.2 instead of Python 2.5.1, open a ticket with the owner of the system and wait. In the meantime, make your program work on Python 2.5.1 because you have to - and add a little bit more clutter to a cluttered world.
Cloud computing doesn't change the fundamentals of sharing a server, it just reduces the amount of stuff that is shared. In a large system, if you are a small user (i.e. not a top 1,000 site), you can basically pretend that the machine is infinite. What you are sharing is simply the CPU, the memory, the hard drives, etc... However, you get minimum amounts of those things that nobody else can infringe upon, and which are commodities at this point. Most importantly, you're not sharing anything for which there are many different options. Somebody could in theory say, "I want to program for an ARM processor, but the cloud doesn't support that". However, very few are doing large scale Internet deployments on something other than x86/SPARC using standard device architectures. With the cloud, I simply don't have to share as much.
All the arguments against the cloud miss the point. One has to view it in a real world context. There are only a few alternatives to cloud computing. One is to share it with other people the old fashioned way (see above). Except for cost considerations, this is not a better option because other people are stepping on your turf. The other option is to get a dedicated server. The problem with the dedicated server is that you only have one of them. There's no redundancy at the machine level. If the network device goes, you're out of luck. You're getting the gain of having your own system while giving up the economies of scale that go with sharing.
Cloud computing is about sharing what everybody agrees are standard (CPUs, Memory IO, etc..) while not having to share things like high level language libraries - for which many options may be necessary.
]]>Recently, I've been helping a seed-level company find somebody to be their head of technology. This is a company that's been around for over a year, has revenue, and has 3 full time employees and 2-3 part time people.
Because the CEO isn't a tech person, there's a slight difference with his decision making versus mine. Luckily, I can understand a programmer's work output and judge it objectively. Unfortunately, for non-tech people, that is not possible. So, he found a part time CTO, let that person make an app with some contract workers, and is now in the situation of trying to move beyond that situation by having somebody full time in the same office. It's a great growth step and everybody is in favor (including the CTO who understands that his location and time commitment aren't ideal for the next year).
Here are my requirements for somebody in this position. All people considering such a hire, even in the beginning, should consider these needs:
Do not, I repeat, do not, hire somebody who doesn't meet 5 of these 6 criteria. Did I say that clearly? Do not, I repeat, do not, hire somebody who doesn't meet 5 of these 6 criteria. Ideally, meet all the requirements. Obviously, the second to last requirement is geared towards a small startup with less than $1MM and looking to create an Internet software company.
Another important issue is education and credentials. The person should have a B.S. degree in something with some sort of computer science course work. If you went to a top school and think you are stuck with, or can get away with, somebody who didn't go to a similar calibre school, you're just putting yourself in a poor position. The head of technology is probably the most important person in the company in addition to the CEO and the sales/marketing lead. If that person is not your peer, or the peer of your younger self, you won't respect them - and that will take you nowhere.
]]>