I love this. The way that they use youtube as a social media platform in order to present what they do and literally created a website out of the video. The way that they suck you in by telling a story about ‘Billy’. The way that they use ‘Cat on keyboard’ to describe their vision. Be sure to check out the ‘clients by media’ area and look at ‘indescribbable’. Muffin Bottoms On Strike!!!
Archive for May, 2009
BooneOakley.com - Home Page
The Vendor Client relationship - in real world situations
I have dealt with every single one of these types of clients before, and have been amazed with how frequently people will expect creative industry folks to do things that they would not ask their mechanic or doctor to do. Why is there a different level of expectation and total lack of respect for the time and talent of designers and developers vs. other professions? Why does it always seem to be a negotiation whenever giving prices? Would you expect your doctor to work on spec?
For more information on spec work, and why it is bad for the creative industry as a whole, go here:
Quantum Cryptography / Quantum Key Distribution (QKD)
I’ve been reading up on security options for a financial services client of mine… and came across Quantum Key Distribution. Great stuff if you’re needing a secured point to point fiber optic network. The principle behind this stuff is that it uses quantum mechanics instead of the ‘mathematical difficulty’ normally associated with other classical cryptographic methods. Two devices (one on each side of the conversation) transfer photons as shared keys. One example of how QKD uses quantum mechanics is the idea that any quantum object that is observed (measured) changes, and so therefore we are able to detect when a photon ‘key’ is observed while in transit. Hack attempts can be detected (and prevented) in this manner because if the shared key is observed, the change makes it useless. This is important because using classical methods of cryptography, there is not really any way to determine if someone is ‘listening’, capturing packets for decryption. Another principle in use is ‘Quantum Entanglement’, which essentially ‘connects’ two quantum objects (in this case photons). This technology is currently in use, but primarily by governments and large corporations like banks.
http://en.wikipedia.org/wiki/Quantum_cryptography
This is a company in New York that sells QKD devices:
http://www.magiqtech.com/MagiQ/Products.html
I’d love to play with a couple of them.
Tab Dump!
Great article on working with li and ul … css styling for them, etc…
http://devsnippets.com/article/styling-your-lists.html
Free classes at Stanford for iPhone:
http://www.stanford.edu/class/cs193p/cgi-bin/index.php
Great iPhone tutorials:
http://www.iphonedevcentral.org/home.php
Decompiler for flash files:
http://www.flash-decompiler.com/mac.html?a=1
Article with a list of some useful websites:
http://www.smashingapps.com/2009/05/13/13-really-useful-and-free-websites-to-make-your-lives-easier.html
Your business card is crap!
This guy makes some good points, but I think there is a bit of grace to be had here for the fact that he said himself that he has spent the last 20 years developing his own business card. Honestly, is that it’s probably not even just his card that he’s spent the last 20 years developing. My guess is that it has taken him close to that amount of time just to figure out who he is in terms of what he has to offer. I’m sure that he started out with some really crappy cards as he went along.
While I think that it is important to have a great business card, perhaps it is a matter of focus on the video itself, but he neglected to mention how important it is to have a solid vision for what your actual offering is. It is a lot easier to build a great business card when there is a good foundation there to begin with.
I’m not excusing things either here, but to be perfectly honest, he seems to be a one man operation where he is the primary decision maker for what is ultimately his product. Try going through a company restructuring, look at the titles on an organizational chart during this process and you’ll understand what I’m talking about. Even without restructuring, a given title for any organization is never exactly what that person winds up doing for a living. I applaud him for coming up with a great card, and not only a great card… but what seems to be a unique offering, but I would imagine that with larger organizations it would be more challenging to build that sort of vision into every small detail of the company.
Pattie Maes & Pranav Mistry: Unveiling the “Sixth Sense,” game-changing wearable tech
Incredible video of ‘Minority Report’ like interface using wearable technology. Similar in nature to Microsoft’s ‘Surface’ technology, except you’re not anchored to hardware, as you can take it with you anywhere. This thing is genius.
I Love Browsershots.org (and distributed computing)!
From the browsershots.org website:
“Browsershots makes screenshots of your web design in different browsers. It is a free open-source online service created by Johann C. Rocholl. When you submit your web address, it will be added to the job queue. A number of distributed computers will open your website in their browser. Then they will make screenshots and upload them to the central server here.”
4 Platforms (Linux, Windows XP, Mac, Debian).
Almost 80 browser / version / OS combinations.
What I love most about the site… is not just what it can do, though it is pretty fantastic. What I really love is it’s use of distributed computing. The ‘distributed computers’ that they are using are actually computers that have been volunteered for use by folks on the web. Browsershots.org makes available a downloadable installation (written in Python) that is responsible for receiving screenshot requests and then fulfilling those requests, uploading them to the mother ship after it is completed. Genius.
Since the early-90’s and the RSA Challenge, I’ve been fascinated by the concept of distributed computing, particularly volunteer / open source distributed computing that makes use of available cycles / resources on people’s otherwise unused computers. Seti@Home uses this method to ‘listen’ to the results of mountains of data coming from space telescopes around the globe in a search for extra terrestrial life. FightAIDS@Home helps to identify candidate drugs that have the right shape and chemical characteristics to block HIV protease. Many of these projects have latched onto IBM’s ‘World Community Grid‘ program, running on the ‘BOINC‘ platform at about 2 Petaflops, and over 500,000 volunteered computers.
Service Oriented Architecture (SOA) with web services provides a great method for accomplishing some of these things. Now I want to build a distributed computing application.
Factory Method
Factory methods are responsible for manufacturing objects.
From ‘Gang of Four’:
‘Frameworks use abstract classes to define and maintain relationships between objects. A framework is often responsible for creating these objects as well’
Coldspring as a framework has an excellent implementation of the Factory Method pattern.
Example:
Let’s say I am building an application that has ‘CDs’ as objects.
If I am using a Service / Gateway / DAO pattern in my application… (I know that many folks rail against the 5:1 approach, but let’s just say for sake of argument that transfer is not a good fit for this application.), I have quite a bit of code to write just to get to a point where all of my required objects are instantiated:
<cfset datasource="library">
<cfset cdBean = createObject("component", "extensions.com.jimrising.cd.cd").init(title: "Joshua Tree", artist: "U2")>
<cfset cdDAO = createObject("component", "extensions.com.jimrising.cd.cdDAO").init(dsn: #datasource#)>
<cfset cdGateway = createObject("component", "extensions.com.jimrising.cd.cdGateway").init(dsn: #datasource#)>
<cfset cdService = createObject("component", "extensions.com.jimrising.cd.cdService").init(cdDAO: cdDAO, cdGateway: cdGateway)>Note that the ‘cdService’ depends on the injection of the cdGateway and cdDAO. Coldspring handles this dependency injection nicely as well.
In order for me to create a new ‘cd’, and then save it to the database:
<cfset cdService.save(cdBean)>
The issue is one of persistence. In order for me to use these objects throughout my application, without the Factory Method, I would need to instantiate them each time I needed them. Using the Factory Method and a little setup within Coldspring, these objects persist and I’m able to access them through the factory, without needing to know all of the dependencies or subclasses:
<cfset application.serviceFactory.cdBean.init(title: "Joshua Tree", artist: "U2")> <cfset application.serviceFactory.cdService.save(cdBean)>
Note that the DAO, Service, and Bean have already been instantiated, and so saving a new ‘cd’ object to the database (from anywhere within your application) is a simple matter of building the bean and saving it through the service within the serviceFactory.
Here is what the XML configuration (services.xml) looks like for ColdSpring:
<beans> <bean id="cdGateway" class="extensions.com.jimrising.cd.cdGateway"> <constructor-arg name="dsn"><value>${dsn}</value></constructor-arg> </bean> <bean id="cdDAO" class="extensions.com.jimrising.cd.cdDAO"> <constructor-arg name="dsn"><value>${dsn}</value></constructor-arg> </bean> <bean id="cdService" class="extensions.com.jimrising.cd.cdService"> <constructor-arg name="cdDAO"><ref bean="cdDAO" /></constructor-arg> <constructor-arg name="cdGateway"><ref bean="cdGateway" /></constructor-arg> </bean> <bean id="cdBean" class="extensions.com.jimrising.cd.cd" /> </beans>
And the simple one time instantiation of the serviceFactory within your application.cfc onRequestStart() method:
<cfset application.defaultProperties.dsn = "myDsn"/>
<cfset application.serviceFactory = createObject('component','coldspring.beans.DefaultXmlBeanFactory').init(structnew(),application.defaultProperties)/>
<cfset application.serviceDefinitionLocation = expandPath('/config/services.xml')>
<cfset application.serviceFactory.loadBeansFromXmlFile(application.serviceDefinitionLocation)/>Odd Railo Issue (Communications link failure … java.io.EOFException)
I was working last night on an application built on the following platform:
Railo 3.0
Centos 5.1
Apache2
MySql 5
The application isn’t doing anything crazy… just some queries and some file uploads. I kept getting this though:
Communications link failure due to underlying exception: ** BEGIN NESTED EXCEPTION ** java.io.EOFException STACKTRACE: java.io.EOFException at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:1956) at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:2368) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2867) at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1616) at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1708) at com.mysql.jdbc.Connection.execSQL(Connection.java:3249) at com.mysql.jdbc.Connection.execSQL(Connection.java:3178) at com.mysql.jdbc.Statement.execute(Statement.java:711) at railo.runtime.type.QueryImpl.<init>(QueryImpl.java:175) at railo.runtime.tag.Query.execute(Query.java:406) at railo.runtime.tag.Query.doEndTag(Query.java:340) at …
It took me a bit, but I finally figured out how to handle it…
In /etc/my.cnf
Adjust the ‘wait_timeout’ directive to a reasonably high number. It is in seconds… and default is set to 30 seconds.
wait_timeout = 1200
The second thing you want to do is make sure that within the Railo Web Administrator’s datasource dialog, your ‘Connection timeout (in minutes)’ is set to a number that is significantly lower than MySql’s ‘wait_timeout’. What this does is it makes sure that Railo properly closes inactive database connections before MySql does.