Manage Your Internal Motivator

Posted by Don 03 Aug 2011 at 06:10PM

One of your greatest assets is your internal motivator.

The best way to check on the health of your internal motivator is to create an environment of as much freedom as possible, then look at what you're motivated to do. Below are some possible responses when you achieve that environment.

"I dont know."

You feel glad for the freedom, but unsure about where to go from here. Your internal motivator is weak from lack of use. Chances are you've been working in order to get away from something rather than working to move toward something. Avoiding fear, such as the fear of being unable to pay bills, is a common motivation and is damaging to your internal motivator. Build your internal motivator strength by moving towards the positive instead.

When you are in a work environment that is damaging to your internal motivator, its important to recognize it and make changes.

turntable.fm

Posted by Don 13 Jun 2011 at 05:01PM

turntable.fm is one of those sites that the moment I read about it, a huge light turned on. of course! its so obvious! the pieces were right in front of us, they just had to be put together in a new way.

what i find especially interesting is live365. live365 has been around since '99. you could create your own streaming radio station and upload your own music to play. once there, anyone could listen. live365 did the hard part of getting arrangements with the record labels to allow this sort of playing. no more than two of the same artists within a half hour or something along those lines.

turntable.fm is a refresh of that idea, this time being much more collaborative and social. in a world of infinite content, curation creates value. this is crowdsourced curation thats easy to consume. i listen to music all day but to one or two favorites streaming stations. I miss out on a lot of innovation. crowdsourced DJing builds real-world social ties because people I know are (sometimes) DJing and I get to hear music I would not normally choose.

Web Parallelism 1

Posted by Don 06 May 2011 at 06:55AM

Looking at different web stacks (ruby mostly), and seeing if/how they work in parallel.

class Plel
  def call(env)
   sleep 1 # snooze
   [200, {'Content-Type'=>'text/plain'}, StringIO.new("Hello World!\n")]
  end
end

run Plel.new
Concurrency Level:      2
Time taken for tests:   1.006 seconds
Complete requests:      2
Failed requests:        0
Write errors:           0
Total transferred:      364 bytes
HTML transferred:       26 bytes
Requests per second:    1.99 [#/sec] (mean)

Two requests take one second. Apparrently Rack will process requests in parallel. How does rack do this?

## config.ru
require 'paral'
run Paral

## paral.rb
require 'sinatra/base'

class Paral < Sinatra::Base
  get '/' do
    sleep 1
    "Hi"
  end
end
Concurrency Level:      2
Time taken for tests:   1.013 seconds
Complete requests:      2
Failed requests:        0
Write errors:           0
Total transferred:      366 bytes
HTML transferred:       4 bytes
Requests per second:    1.97 [#/sec] (mean)

Same result for a sinatra app in rack. Two requests, one second.

went back to the simplest of all webservers, straight webrick

require 'webrick'

class Paral < WEBrick::HTTPServlet::AbstractServlet
 
  def do_GET(request, response)
    status, content_type, body = do_stuff_with(request)
   
    response.status = status
    response['Content-Type'] = content_type
    response.body = body
  end
 
  def do_stuff_with(request)
    sleep 1
    return 200, "text/plain", "Hello World"
  end
 
end

server = WEBrick::HTTPServer.new({:Port=>8081})
server.mount "/", Paral
server.start
Concurrency Level:      2
Time taken for tests:   1.012 seconds
Complete requests:      2
Failed requests:        0
Write errors:           0
Total transferred:      360 bytes
HTML transferred:       22 bytes
Requests per second:    1.98 [#/sec] (mean)

Still just one second. Whats going on with this?

Ruby Parallelism

Posted by Don 06 May 2011 at 05:21AM

Now that multi-core CPUs are the norm, the challenge of taking advantage of those cores is pervasive in web development. Asynchronous software frameworks and libraries like node.js and eventmachine, and concurrency approaches of multiple processes, threads (lightweight processes), and coroutines, is something I'm trying to understand better.

Ruby Parallelism With Threads

First thing I wanted to look at was running methods in parallel in ruby using threads. The following bit of ruby launches two threads that do division twenty million times per thread.

# parallel

work=["A","B"]

# Launch threads
work.map! do |job|
 Thread.new do
   puts "I got #{job}"
   20000000.times { 4.0/2.0 }
 end
end

# Wait for each thread to finish
work.each { |thread| thread.join }

The results of running this code on different ruby interpreters are below.

$ time /usr/local/ruby-enterprise-1.8.7-2010.01/bin/ruby parallel.rb
I got A
I got B

real 0m9.226s
top says RSS 2340k, 1 core

Ruby 1.8 has "green threads" which is a kind of cooperative multitasking.

$ time /usr/local/ruby/1.9.2-p136/bin/ruby parallel.rb
I got BI got A


real 0m7.580s
top says RSS 2648k, 1 core

Ruby 1.9 has operating-system threads, yet only one core is in use (according to top, dual core CPU was 50% busy). Ruby's Global Interpreter Lock keeps things running sequentially.

$ time /usr/local/ruby/rbx-1.2.3/bin/ruby parallel.rb
I got A
I got B

real 0m5.463s
top says 26,000k 1 core

Rubinius, has I believe the same functionality and limitations as ruby 1.9 as far as threading. Look at that memory usage, wow.

$ time /usr/local/java/jruby-1.6.0/bin/jruby parallel.rb
I got A
I got B

real 0m7.130s
top says 29,000k *2 cores*

Java is the winner here for using both cores. The same crazy memory usage. It didnt take any less time to do the same work. Another confusing result.

epdx whuffie

Posted by Don 18 Mar 2011 at 07:49PM

The UNIX multiuser system was the original social network.

$ who
bryceo   ttyp1    Mar 14 03:32   (vps1.cobryco.com)
hugiload ttyp2    Mar 17 13:22   (us02-cip.synopsys.com)
pazzed   ttyp4    Mar 14 03:39   (proxy1.dcu.ie)
jalh     ttyqK    Mar 18 12:01   (sb.med.harvard.edu)

User profiles too.

$ finger bryceo
Login: bryceo                           Name: Jean-Luc Picard
Directory: /home/bryceo                 Shell: /usr/local/bin/bash
Office: U.S.S. Enterprice NCC-1701-D 
On since Mon Mar 14 03:32 (EDT) on ttyp1, idle 2 days 22:17,
    from vps1.cobryce.com
No Mail.
Project:
Nothing sepcific at the moment, at least not on devio.us.

Plan:
Finger?? Really?? Who the HECK uses FINGER anymore?
Come to think of it, why do *I* even remember it?
And while I'm at it, what's with all the questions?
(unix output from devio.us, with usernames changed to protect the innocent)

Something's value can be measured by how much it is shared. Last month I was experimenting with using an IRC Bouncer and setup ZNC. Then I thought hey what if others want a bouncer but dont have a server to run it on? Or just dont want to set one up? So I made a signup page for ZNC on my box that instantly created a ZNC account for whomever wanted it. My approach to sharing limited resources is to start wide open and crank it down if it becomes a problem.

Then another friend wanted to use IRC from work but couldn't because of a networking issue. I gave him a shell account on my server to run screen/irssi. I thought about an account creation screen for anyone who wanted a shell account. There seemed to be an opportunity to ask for something in return for an account.

Zynga and Cityville has an approach to goals in the game, you can pay with social connections or you can pay with credits. Usually people are gifted in one or the other so it satisfies most people. In exchange for a shell account, the system could ask for a Bitcoin payment, or require a minimum connectedness ranking for the tech community that I'm a part of - the Portland tech community.

Building a connectedness rating (if a single vector is even applicable, it might take multiple) is tricky and arbitrary but the Portland tech community has a great catalog of information to help build a rating - epdx.org.

Twitter's Termination of Service 2

Posted by Don 13 Mar 2011 at 10:37PM

Twitter's new terms of service restricts the use of tweets to the determent of the twitter ecosystem.

Specifically I feel overly constrained by:

4. You will not attempt or encourage others to: "use or access the Twitter API to aggregate, cache (except as part of a Tweet), or store place and other geographic location information"

I was just about to archive the contents of my tweetstream for analysis of various sorts, including (eventually) location.

5. A. Your Client must use the Twitter API as the sole source for features that are substantially similar to functionality offered by Twitter. Some examples include trending topics, who to follow, and suggested user lists.

I find that to be crossing the line. If someone making a better source of trending topics, and I have a twitter client, I would want to pull information from that service to enhance the experience of my twitter client.

5. E. You may not use Twitter Content or other data collected from end users of your Client to create or maintain a separate status update or social network database or service.

This sounds like it kills any cross-posting app. If my app collects a status update and posts it to two networks, twitter is now trying to kill that. Its these cross-posting apps that will help the migration from twitter to new status/microblog networks.

Its time to get more serious about moving to a federated system.

Steganography can replace QR Codes 2

Posted by Don 13 Mar 2011 at 09:06PM

Using steganography in an existing image is so much more visually appealing than a QR Code. I'm puzzled as to why it hasnt taken off yet. Perhaps the whole idea is patent encumbered. QR Codes are bulky and ugly to look at. If my business card had my photo on it and my linkedin url were encoded in the photo, that sounds better in just about every way. Whats even better is a small, appealing logo could signify the presence of embedded information in the image.

This morning I thought it could be a killer app to have a wordlens effect in the image-code-reader app so that when one looks at the poster on the wall, the embedded URL would be "written" on the poster. Like Bilbo baggins looking "moon letters" on the map of Lonely Mountain. A royalty-free standard for embedding data into an image would be fantastic and create a spot for one or two "killer" mobile apps.

Three Mobile Opportunities 3

Posted by Don 05 Mar 2011 at 06:30PM

Bluetooth 4.0

I first heard about Bluetooth in 1999 (before I heard about wifi!). It was the most amazing sounding thing. All devices being able to easily communicate with each other, facilitating the Internet of Things. Its 2011 and Bluetooth is used for headsets, keyboards, and mice.

Battery drain and security bugs were two big detrements to Bluetooth adoption during its early years. The most important use case in my opinion, the ability to pass application-level messages between phones that have never met before, is sill not possible. For two bluetooth devices to communicate, they must "pair" which needs user intervention to complete. To even begin paring they must be discoverable. Being discoverable sends usage of the Bluetooth radio way up and becomes a noticeable battery drain. In the very earliest implementation of bluetooth, bluesnarfing was possible, where a phone's address book or other information could be copied without the phones having met before and without user intervention. This created a stigma that has remained with bluetooth discovery to this day.

With the relative popularity of zigbee - a sensor-network style protocol with neighbor discovery, low data rates, and extremely low battery usage - port of Bluetooth 4.0 is returning to its roots as a general purpose low power data transport. Its called Bluetooth low energy and chipset manufacturers are already selling wifi+bluetooth 4.0 chips that are ready for adoption into smartphones.

The smartphone automatic shared-interest app will get its best shot yet, very soon. Define what you're interested in, business, dating, buying or selling goods. When you get near someone who is running the same app on a bluetooth 4 smartphone, it could swap contact info for a later hookup, or start beeping loudly to say "hey someone in this room is selling that DVD you've been looking for. Here is their photo."

IPv6

With IPv6 deployment finally starting to begin, the old set of 4 billion IPv4 addresses is being replaced with the new set of 340 trillion trillion trillion IPv6 addresses. The "limited" IPv4 address space was the driving force behind NAT which keeps individual devices from communicating directly. With the wide array of security holes in Microsoft Windows that existing during the first 10 years or so of the Internet's life and growth, the walled-garden effect of NAT was seen as a benefit, a critical measure of protection from viruses.

What was lost was a fundamental utility of the Internet, that devices should be free to communicate directly with each other. Instead of NAT, the entry points to corporate networks can use packet inspection to filter out unwanted traffic, providing the same safety benefit as NAT but allowing for the possibility of point to point communications that is important for new services, and new efficiencies for existing services to arise on the Internet.

If mobile operators adopt IPv6 addressing for mobile devices, it is one step towards a new class of smartphone apps - M2M or Mobile to Mobile. Voice and Video calls could be more efficient if traffic could pass directly between phones.

GPS II-F

The Global Positioning System, deployed in the 90s, is slowly getting a host of upgrades that improve the ability to acquire a signal, the accuracy of position information, and resistance to interference.

What to watch for? GPS receiver chips that can listen to the new L5 signal from the Block IIF-1 Satellite launched in May 2010.

Meaning 1

Posted by Don 31 Dec 2010 at 02:45PM

I feel my efforts recently have been narrow and rooted in desire rather than meaning. I consider myself fortunate to have control of most of my time. Recently I've been thrown back to quetsions of what am I working on, why is this important.

Maslow's hierarchy of needs helps me put things in perspective, and gives me a tool for thinking about whats important. Numbering the levels from the bottom, I feel secure in levels 1 and 2. Level 3 definitely lacking. Level 4 has a foothold. Level 5 works out in very specific subject areas.

Looking outward at the world in an abstract sort of way, it seems to me that a useful goal is to get as many people as possible as high up the chart as possible. So which group to focus on helping? And does asking that question make sense without having some actual people in mind? Maybe its best to just find whoever is easiest to access and help them. Maybe its better to think about people struggling at the lowest level.

The hammer I'm most comfortable and effective with is software development so i look for those kinds of nails. One good example of which is using Open Street Maps to  improve the road maps in Haiti after the earthquake.

The Everyone Delivers project I work on has a certain social good aspect to it. The economics of transportation will make people living close to the requester the cheapest option for delivery. Meeting people in your neighborhood is assumed to be a good thing, even just once.

Its winter now and while I find the cold invigorating in small amounts, being warm is one of my favorite things. I'd rather be too hot than too cold. It is an obvious way to help, if not an easy way, by keeping human beings sheltered from the elements.

(unfinished)

Web Billing

Posted by Don 28 Dec 2010 at 09:56AM

The site I'm working on has a billing component to it. Important concepts in the site are user and delivery. The site has one piece of billing logic that says a completed delivery costs 50 cents. How should a bill for a given user on a given month be computed?

The naive approach, plan A, is to scan all deliveries that happened within the given month and look for completed deliveries by the given user.

The next step up, plan B, is to keep a separate accounting journal for each user. Each completed delivery gets a journal entry. The journal is scanned for all transactions in that month.

Say the billing logic changes at some point, with plan A the old deliveries would be computed with the new logic. That probably is the wrong thing to do. With plan B, charges going forward would be computed with the new logic. On the other hand, if the logic were found to be faulty, plan A would be ideal and plan B means cleaning up all journal entries.

Another argument for plan B is to allow for adjustments outside the business logic. Perhaps there are transaction fees from paypal that are accounted for seperately. Those can be easily added to a journal, where as plan A could not capture that value. Maybe a specific customer should get a refund of $5 for whatever reason. Its easy to put that into the journal.

Then I think, why implement an accounting journal in the site at all? Aren't there accounting packages that are made for managing credits and debits? I would like the website to speak directly to an accounting package, adding new journal entries as needed. I don't know of an open source account/enterprise-planning/business-intelligence product that works this way. Do you? I imagine there are benefits to using a real accounting package, reports and such made by people who know accounting.