• Sophia's Poem

    15 May 2012

    Okay, so I’m being a proud dad… my daughter, who is in second grade, wrote this poem:

    Night Secrets

    Kiera, the fairy
    of the night,
    the fairy to return
    the soul of her friend.
    Loyal and caring,
    she sets out.

    Thanks for reading it.

  • Fire Fighters

    05 May 2012

    How Fire Fighters fight fires

    I was sitting at my desk this morning looking up at the ceiling (yes, I’m procrastinating working on the Visi Typer). I saw the water sprinklers that are part of the fire suppression system hear at the awesome StackMob offices. I recalled learning about how fire fighters fight fires.

    I think I was 7 or 8 when I asked why fire fighters have axes. The fire fighter I asked this question of told me that the approach that fire fighters take is to destroy everything that could be fuel for a fire. This was especially important in a city where buildings are close together and fires can spread quickly from one building to another.

    I was dumbfounded… shouldn’t it be a goal of fire fighters to preserve some of the building where the fire is? Shouldn’t the fire fighters work to preserve as much of the building where the fire is?

    As I’ve gotten older, I’ve realized that the cost of each micro-decision to preserve a family picture or a piece of furniture could distract a fire fighter from the larger goal of containing and then extinguishing the fire. The only this that is more important that extinguishing the fire is human life. That now makes sense to me.

    The War on …

    I think our country and our society has adopted the fire fighting mentality for almost all the challenges that face us. We view the challenges that we face as so grave that we are willing to destroy the building to stop it from burning.

    Second World War Legacy

    The United States really came together during WW II. The country pulled itself out of the economic and self-loathing problems of the Great Depression to come together and become The Greatest Generation.

    The US focused and worked together to defeat a particularly terrible foe. Hitler and the Nazis were horrid creatures and they were also extraordinarily skilled and well organized. It took some greatness on the part of the US and England to fight back across the water and rescue Europe.

    There is also the US getting into the war very late and not acting earlier cost many lives.

    In the case of WW II, the US did in fact have to destroy the building to fight hitler. We had to draft soldiers and send them off to war. We had to ration resources (not the free market, but government imposed decisions). We suspended many rights and imposed a lot of restrictions on what people did. Some of those (e.g., the Internment Camps) were tragically wrong decisions.

    It seems to me that the US it trying to relive WW II in every challenge we face. This “destroying the building to put out the fire” mentality has cost us dearly.

    The Communist Threat

    Post WW II, there was the Red Scare.

    The Red Scare led wars in Korean and Vietnam. We had to make sure that Communism didn’t spread further in Asia.

    I grew up at the tail end of the Specter of Communism. By the mid 1970s, being a “Commie” was more of a joke and the House Un-American Activities Committee was disbanded.

    Up through the end of Reagan’s presidency, “Better dead than red” mentality was still part of American culture (I often wonder how the red-state residents feel about that… but I digress).

    The War on Drugs

    The Nixon White House escalated the US anti-drug policy to the status of the War on Drugs. Somehow, the United States determined that a war would pull people together and vanquish the drug problem once and for all.

    Drugs are not something that we can end. We can reduce consumption and we can reduce the societal harms of drugs, and I support both goals. However, dealing with drugs is something that requires constant work rather than a war that should have a definite end.

    Further, treating drug issues as a war means that we’re willing to have collateral damage… we’re will to destroy whatever needs to be destroyed in order to fight the fire or end the war. That is not and cannot be the case with drugs. There will always be drugs and always be people who are addicted to drugs and families and communities damaged because of those addictions. We should have a societal view that every member of the drug use cycle requires our attention and help.

    The War on Terror

    The War on Terror is the new War on Drugs, except this time we’re opening using military force.

    There always have been and always will be terrorists. There will always be people who value their point of view more than human life. There is no way to extinguish these people from the face of the earth.

    On the other hand, there are ways to minimize their impact.

    A full frontal assault on terrorists, especially when there is civilian collateral damage, will not have the desired effect. These kinds of activities will only create a class of people who could be persuaded to follow the vision of people like Osama Bin Laden. The more we hit civilians and attack people who have little or nothing to do with actual terrorist acts against the United States, the more we will offer the lunatics “talking points” to convince others to join them.

    The TSA

    The fire fighting mentality has taken over at the airports.

    We are told we must submit to strip-searches, naked videos, and other forms of humiliation in order to be secure. We are at war with a formless enemy and thus we are all the enemy and are treated as such by the TSA.

    What would happen if the TSA treated us like we all had the same goal?

    What would happen if the TSA stopped destroying anything that could be dangerous because the danger could spread… the fire fighting mentality, and instead treated every passenger as a potential terrorist target?

    Could we work together and in cooperation with the TSA? Could we adopt a less intrusive and more effective? I think we could. For example, with the exception of the racial profiling aspects, Isreal has adopted successful airport security measures.

    The Impending Cyberwar

    Between SOPA, CISPA, and the upcoming changes to CALEA, the US Government is trying to destroy the building to stop people from doing illegal things online.

    I got some news for the government, encryption is easy. Anybody can encrypt anything and deliver it to anyone else.

    Freenet exists and it ain’t going away.

    Encryption exists and it ain’t going away.

    Linux exists and it ain’t going away.

    Anybody who wants to run a computer system or a computer network and exchange information that cannot be read by anyone else can do so. There’s nothing that can stop this.

    If our government spent as much effort to get business to adopt and maintain reasonable security policies as it does worrying about spying on citizens, we’d have a much more secure infrastructure. It is a lot easier to identify the 50,000 or so prime industrial targets in the US or perhaps 150,000 worldwide and give them help with security policies to insure that they are following best practices.

    Further, each time we have a back door into a system, that’s another advertised point to exploit. The exploit may be a technical one or a social one (who actually has access to the data and how do we know to trust those people?).

    All the above laws will do is make every user of the Internet the “enemy” in the name of making us safer. It will drive a wedge between “law enforcement” and the citizens they are supposed to be protecting. It’s an us and them… and when law enforcement is at war with the folks they are supposed to be enforcing the laws to protect, the laws become mis-used.

    We are not at war on the Internet. Yes, there are bad people using the Internet to plan bad things. They will keep doing that. But treating each person on the Internet as a criminal or a potential criminal will not stop the bad guys. It will only reinforce an “us vs. them” mentality and when the building has to be destroyed to save the neighborhood and the neighborhood has the be destroyed to preserve the city, and the city has the be destroyed to preserve the state, we have lost site of why we have laws and what the United States is about.

    Patience (Grasshopper)

    Sometimes, especially in this current time of long-term recession/depression, it’s hard to remember how many resources the United States has. We have natural resources. We have intellectual resources. We have people who generally share common goals. You know what, we can win with patience and perseverance.

    The same is true of Europe.

    Once we accept that:

    • Drugs are not going away, but we can minimize the impact they have on individuals and society, then we can create a plan to reduce the impact of drugs. It’s not a war, but an eternal vigilance just like the eternal vigilance we have against crime in general.
    • Terrorist are not going away, but we can minimize the number of people they draw into their sphere of insanity. Our policy should be one of respecting other peoples and other nations. We should not be imposing our will or our way on others in a heavy-handed way. We can, however, help countries to grow over the long term. What if we invested in nations like we did post-WW II with the Marshall Plan? Could we help countries like we did with South Korea? Yes, it’ll take many generations, but it will ultimately cost less than invading yet another country and dealing with the anger of families who have seen non-combatant loved ones killed by our armies.
    • Air travel is insecure, but we can make more secure by treating passengers as allies rather than assuming that every passenger is the enemy.
    • Bad stuff will always happen online. Let’s teach our kids and our businesses how to be more secure. Let’s build our systems to be more resistant to attack. Let’s use more open systems which have more eyes looking at them so that we all can see how secure things are.

    All in all, I think we need a national dose of patience. We need to chill out. We need to stop calling everything suboptimal a war and we have to stop using to solve every problem.

    If we as a nation led by example, I think we’d be much better off. I think we could show others that patience and talk and cooperation will lead to better long term results than war. Our relationship with Europe was much stronger after WW II than it was after WW I because we stopped treating Germany as the enemy and rather we embraced Germany and created a cross-Atlantic sense that the US and Europe was one unified group. It worked. It took a long time, but it worked. Why not try that kind of strategy with other entities that we’re currently at “war” with?

  • Timeboxing

    23 Apr 2012

    I don’t get a lot done

    A lot of folks look at what I do (be a dad, work on Lift, work on Visi, mentor folks, etc.) and think that I get a lot of stuff done. Truth is, I don’t.

    Or more specifically, I rarely get enough time to put all the stuff I need to put into local brain cache in order to be successful the way I want to be successful.

    Now, many of my functions do not require a ton of brain cache in order for me to appear to be productive. I can answer most questions on the Lift mailing list through because I’ve answered most questions many many times.

    It’s hard when it’s something new

    The problem is mostly Visi. Visi is something new and different. Visi is something that’s not what I’ve done over and over, nor are the patterns for Visi a set of normal patterns. In fact, Visi is explicitly beautifully re-thinking development and that requires a lot of concentration.

    Concentration is hard. (well, D’uh!)

    I read The Flight from Conversation and realized that it’s not just conversation that’s being disrupted from not being “present”, but it’s that hardcore thought process that often takes many hours to get into.

    Changing my patterns

    I’ve decided to change my patterns. I will become the master of my time domain.

    I’ve changed all my email clients to manually poll and I will only check email periodically and at logical breaks in my day (after lunch, etc.) rather than allowing myself to get interrupted by incoming email.

    I’ll scan Twitter once or twice a day and use Pocket to capture the articles I want to read.

    I will read the saved articles for time-boxed periods in the morning (over coffee) and in the evening.

    When I’m with my family, I won’t check email or Twitter, although I may play an iPad game when others are playing iPad.

    I may compose blog posts in my head while I’m walking the dog, but I will only spend 30 minutes a day composing blog posts (as compared with the occasional day where I burn 4+ hours on a single post.)

    I won’t watch TV and watch iPad (or shop or surf)… I will focus on one distraction at a time.

    A 5+ week experiment

    I’m going to try the above focus/time-box experiment between now and the end of May.

    My metric for success is significant feature add to Visi. If I can get rid of distractions and get on with changing the world, hopefully the world will be a better place.

  • Visi 0.1.1 patch

    20 Apr 2012

    A quick patch to Visi

    @tylerweir got Visi into a state where it was not correctly parsing a model, so I added a catch around the outer-most model loop and if an exception is raised, the reason for the error will be printed on stderr.

    @puffnfresh discovered problems pasting code into the Visi edit.

    Those issues are fixed in Visi 0.1.1. And today, you can download Visi 0.1.1 and play with it.

    What is Visi

    Visi is a modeling language targeted at Excel and Access and HyperCard and FileMaker users.

    Visi is a statically typed, functional language that’s beautiful and easy.

    Visi is a language for the Cloud computing and a wide variety of devices.

    Visi is an open source project that you’re encouraged to participate in.


    Thanks for the bug reports, guys.

  • Visi 0.1 for OS X

    18 Apr 2012

    Woo Hoo! Visi 0.1 is available for OS X

    I Love Shipping Software.

    And today, you can download Visi 0.1 and play with it.

    What is Visi

    Visi is a modeling language targeted at Excel and Access and HyperCard and FileMaker users.

    Visi is a statically typed, functional language that’s beautiful and easy.

    Visi is a language for the Cloud computing and a wide variety of devices.

    Visi is an open source project that you’re encouraged to participate in.

    What’s in this release

    The 0.1 release is a Mac OS X wrapper around the core Visi computation engine.

    You are able to define models, load them and save them.

    The parser will parse a model and send messages to the UI to update the list of sources and sinks (inputs and outputs).

    The type checker works correctly and will type check.

    The error display is just a raw “toString” of the error message, so there’s no nice IDE line number jump-to stuff.

    The only types currently supported are String, Number, and Boolean. Data structures and structural typing is not yet supported.

    The computation engine runs correctly such that you can updates sources (inputs) and the sinks will dynamically change.

    There are sample files in the distribution so you can see some basic examples of the code.

    Why this release is important

    The release demonstrates that anyone with Xcode 4.2+ and Haskell 7.4.1 can build the Visi code.

    The release gives people a chance to play with simple models and see how they work.

    Near Future

    On the UI side:

    1. Improve Error Reporting/Highlighting
    2. Dynamic updating of the model as you type
    3. Markdown model display so you can see real pretty models

    On the core engine side:

    1. Get data types working so you can define data and functions/methods to operate on the data
    2. Git integration so that GitHub becomes the place where models are stored and shared
    3. Finish support for structural typing
    4. ObjectiveC integration so that Visi models can define interoperate with OS X and iOS UIs

    What I want from you

    I hope you (yes, you) will download Visi and play with it a little.

    I hope you will join the conversation with questions and comments.

    I hope you’ll enhance the code.
    I’ll be at BayHac ‘12 this weekend if anyone wants to hack on Visi with me!



  • Happy Birthday Apple ][

    17 Apr 2012

    Happy 35th Birthday, Apple ][

    I’m a geek. I’ve always been a geek. It took me a really long time to find a place where I felt like I fit into the world. The Apple ][ was instrumental in helping me find my place and my way. On this, the Apple ][’s 35th birthday, I’d like to share some parts of my early path and thank Steve Wozniak (my teenage hero) and Bill Fernandez (someone I’ve gotten to know over the last 15 or so years) and some of the other early Apple folks for creating a culture and a world where I fit in.

    Not fitting

    Growing up, I never fit in. I was weird. I loved electronics and building and creating things with circuits.

    My peers mocked me.

    My teachers told me I was wasting my time with my ET-3400: “It can’t even do what a calculator can do, why are you wasting your time with it?”

    My school bus driver referred to me as “the kid with laser beams coming out of his head.”

    And it only got worse when I got to high school.

    I didn’t know what I couldn’t do

    In the summer of 1978, I decided I wanted an Apple ][ computer. So, I went to the local Apple retailer run by Marty Marshall and boldly told him that I could write any program in the world for the Apple ][.

    Marty hooked me up with Dick Bouchard who ran communications with Rhode Island Civil Defense (the local FEMA group). Dick had an Apple ][ and needed some programming for it. Dick didn’t have budget, but he gave me the chance to prove myself.

    I spent half the summer in the basement of the Rhode Island state house playing space wars and other games on Dick’s Apple ][. Finally, in late July, Dick came to me and said, “so, when do I get the programs?” So, I started coding in AppleSoft basic and 6502 assembly language and about 2 weeks later, I had the first versions of the programs Dick was looking for.

    Sophomore Year

    I spent Sophomore year in high school working with Dick and writing code for FEMA.

    One day, I was taking a floppy disk drive from Marty’s store (where I worked on weekends) to Dick. A kid on the bus asked me what I had in the box. I said the first seemingly socially acceptable thing that came into my had, “a brick of pot, but don’t tell anyone.” I didn’t get beaten up for carting computer gear around. Lucky me.

    Dick worked some budget magic and my volunteer gig turned into a FEMA contract that paid me enough to buy an Apple ][ computer for myself (this is when an Apple ][ cost $2,400 and a new Ford Pinto cost $3,500.)

    I also got to go to Washington DC, meet the deputy director of FEMA and tour the Langley Virginia FEMA communications center. The big project that FEMA was working on was a distributed, packet-based communications network that was redundant (because packets could be routed dynamically) and highly reliable. I was impressed. I also got a peek at the Internet in 1978.

    Finding a place

    Writing software for the Apple ][ and going to ham radio conferences that were morphing into computer conferences gave me a place. I got to hang out with the kind of people that accepted a laser-beam headed geek like me.

    Yes, I tried to escape technology by getting liberal arts degree and then going to law school. But the joy of creating software still makes me so incredibly happy. I lose myself in the code and come out the other side with nifty stuff that make users happy.

    But it all started with the Apple ][ (I did program other computers before the Apple ][, but it was the Apple that really allowed me to express myself.)

    So, on the Apple ][’s 35th birthday, I’m happy and grateful to the core folks who made the machine and the community and the excitement and the energy and the way of life possible.

    Thank you guys for giving this geek a happy path and a great way to express myself.

  • New iPad Thoughts

    29 Mar 2012

    Got me a New iPad

    One of the key things I do with my iPad is read Kindle books. It’s a great device for reading and for much more. I spend almost as much time staring at the iPad screen as I do at my computer screen every day.

    When the new iPad was announced with a higher resolution screen, I hopped on Apple’s web site and ordered one for myself. Of course, I justify the purchase because I need to insure that Visi.Pro works on the latest and greatest iPad hardware. ;-)

    The new iPad experience

    The new iPad arrived while I was in London. But I got it from my PO box the Monday following the Friday arrival date.

    The first thing about the new iPad is it’s much heavier than the iPad 2. It has the heft of an original iPad, but has that fragile iPad 2 feeling. I wish Apple had packaged the new iPad up like the original iPad… in a slightly beefier package.

    The second thing about the new iPad is the screen is spectacular. There are no words to describe how much nicer the new screen is vs. the iPad 2. It’s a night and day difference. Reading web pages and Kindle books on the new iPad is mind-blowingly excellent. My kids recently turned me onto DragonVale and DragonVale looks so, so, so much better on the new iPad.

    The new iPad feels even more responsive than the iPad 2. The original iPad feels sluggish. The iPad 2 feels “natural.” The new iPad feels supernaturally slick. It’s almost as if it’s anticipating what I want to do. I just love the responsiveness.

    I think the non-numerical naming of the iPad is the right thing to do. It’s just like the MacBook Pro or the MacBook Air. There are different models and the models have different attributes. The models are generally referred to by the release timeframe (e.g., spring 2011 MacBook Air). That kind of naming seems to be more about the product family than a given iteration of the product. I hope Apple applies that same thinking to the iPhone.

    But it’s not all good.

    Steve Jobs would never have released this product

    Steve Jobs was notorious about insisting that his products were amazingly slick. This slickness is an Apple hallmark and in my opinion, a critical part of why Apple has captured the hearts, minds, and wallets of a broad spectrum of consumers. Apple stuff “just works” and is that much better and nicer than competitive products.

    The new iPad runs warm. No, it’s not “too hot to handle” hot… it’s just unexpectedly warm. It’s unexpected that the new iPad doesn’t feel like the iPad 2… and it’s a rough edge that Apple should have dealt with. How? Dunno… that’s the hardware engineer’s job, but I think that Steve Jobs would have insisted that the new iPad not run warm.

    The new iPad takes a dogs age to recharge. Yeah… I know… that’s because it has a bigger battery. But the charger that comes with the new iPad does not deliver a correspondingly larger wattage. I’ve got a mental map of when and for how long I have to charge my iPad. If I’m taking a 5 hour flight, I’ve gotta get the iPad to around 80% and that takes about 3-4 hours. Well… with the new iPad it takes a ton longer. No, I haven’t timed the charge cycle, but it’s more than a few hours ahead of a long event. Once again, this is the kind of rough edge that I don’t expect from Apple.


    If you do a lot of reading or close-up work on your iPad, the new iPad has the most excellent screen you’ll ever seen.

    If you’re buying an iPad to watch movies, play some games, and maybe read your Twitter feed, you’ll be better off buying an iPad 2. The iPad 2 performs very, very well and the screen is really the only thing that differentiates the two machines and the value of the better screen may or may not be outweighed by the heavier, less comfortable, less convenient new iPad.

  • New Blogging Setup

    22 Mar 2012

    Welcome to my new blog… same as the old blog

    I’ve been blogging for about 6 years. It has been fun finding my voice.

    I originally used PHP blogging software to host my blog. It had a sucky editor and it turns out that PHP is pretty darned insecure (yeah, my blog got pwned, sigh).

    So, I switched to Posterous which was very cool. I loved editing blog posts in GMail and mailing them off. It was very convenient, GMail has a great editor (with a spell checker, which is key for me), and I could work on drafts of blog posts where-ever I was.

    With Posterous getting sold to Twitter and because I like trying new things, I’ve changed my blogging setup.

    I’ve decided that I like having control over my content which means that putting up on Posterous or WordPress or somesuch doesn’t excite me. I run my own servers so the idea of hosting isn’t that difficult, except I don’t want something that’s going to have security issues.

    Turns out the combination of Jekyll which takes Markdown and converts it into a nice static site that looks and feels like a blog is awesome.

    With Jekyll, GitHub, Nginx, Mou, and my server hosted at CalPop, I’ve got an excellent, convenient, and secure blogging setup.

    A big thanks to @Sander_Mak and @andyczerwonka for pointing me to Jekyll.

  • Happy 5th Birthday, Lift

    25 Feb 2012

    Happy 5th Anniversary Lift

    It was five years ago that I founded the Lift Web Framework project.

    At that time, the Scala community was very small and academically focused. Lift was one of the first external libraries for Scala and Lift is now the venerable, longest-lived external library in the Scala ecosystem.

    The Lift community has grown to over 3,000 people and more than 50 committers. There are multiple books on Lift and hundreds of sites built on Lift.

    Lift has demonstrated the power of community and a different approach to web frameworks. Lift-powered apps scale. Lift-powered apps are secure. Lift-powered apps don’t make the news because they just work and this frees the developers to add features to the sites.

    Most importantly, though, is the Lift community. It’s a community full of helpful, engaging people who help each other and help grow the quality of Lift as a whole.

    Five years is an excellent milestone and it’s a great starting place for the next phase of Lift.

    Some of Lift’s differences include:

    • DOM manipulation rather than String manipulation. This means that Lift apps are secure because DOM elements can be properly escaped and the internal representation can be converted to the appropriate output format including XHTML and Html5. DOM manipulation means true separation between markup and business logic as well as support for designer friendly templates.
    • Snippets are DOM transformers. Lift templating isolates the dynamic rendering of a web page in snippets that transform incoming DOM to outgoing DOM. This functional approach to templating is composable, easier to maintain, and easier to build complex sites.
    • Stateful. Interactive Lift apps are secure and the developer can focus on business logic rather than serializing state. Lift’s statefulness leads to more scalable and easily managed sites. Lift also allows stateless sites. But with Lift, the developer controls the line between state and interactivity.
    • Comet/server push. Lift pioneered Comet/Server push in web frameworks. Lift’s comet continues to be radically superior to what other web frameworks offer. Lift supports many Comet components per page, all multiplexed through a single connection. Lift’s Comet components support Lift’s DOM manipulation so you don’t get cross-site scripting vulnerabilities in Comet. Lift’s Comet supports versioned push so that if there are multiple incremental changes to a component while the client is disconnected (e.g., mobile broadband on a train), the changes will be delivered in order when the client re-connects.

    Bottom line, Lift does Seven Things better than any other web framework.

    The road to 1.0

    It took 2 years from the time Lift was launched until we launched version 1.0 of the framework. We spent those two years exploring concepts and getting the APIs to a state where they could exist over a long term without significant breakage or deprecation.

    Many apps and sites were built with Lift pre-1.0. Many developers used Lift’s master/SNAPSHOT releases and they were (and continue to be) stable enough to run real, production sites on.

    When we launched Lift 1.0 on February 26th 2009, Lift was mature, stable and well-used. Lift lived up to its billing as secure, scalable, and developer friendly.

    In the last few years, Lift has only gotten better.

    Shifting to Html5, Designer Friendly, and RestHelper

    In 2010, Lift shifted from XHTML-based to supporting Html5. Lift received a bunch of other enhancements to help it mature and grow:

    • Support for Html5 while retaining the core concepts of DOM manipulation such that the way that Lift apps manipulated the DOM did not make a difference. Snippets still transformed incoming DOM to outgoing DOM. The DOM retained the same representation. The change to support Html5 was the template to DOM parser and the DOM to bytes renderer. In fact, XHTML templates can be sent out as Html5.
    • Lift’s templates became “Designer Friendly” where every single template in a Lift app can be valid XHTML or Html5, viewed in a browser and shared between designers and app developers in the same source code repository without “shredding” or non-valid markup.
    • DOM transformation got much easier and more designer-oriented with Lift’s CSS Selector Transforms. The CSS Selector Transforms are functions that transform DOM => DOM and are completely in keeping with Lift’s snippet/view first philosophy.
    • Lift’s RestHelper makes building secure, high performance web services as simple and flexible as Scala’s pattern matching.

    The above changes are a core part of Lift, but other projects and modules built on top of Lift’s powerful core continue to distinguish Lift. For example Reactive Web is the first set of functional-reactive tools for a mainstream web framework. Lift’s abstractions also allowed a developer to make Lift usable from Netty with one day’s worth of effort.

    Committer team maturing

    In addition to Lift’s codebase maturing, Lift’s committer team has also matured. There are over 50 Lift committers. In 2011, David Pollak who founded Lift, stepped down as Lift’s Benevolent Dictator for Life. David continues to commit to Lift and is still the most active member of the Lift mailing list, but as the committer team has grown, it was time for David to become a person among excellent peers, rather than a dictator.

    Lift Co.

    On the 5th anniversary of the Lift project comes the birth of Lift Co.

    Lift Co., founded by two Lift committers, David Whittaker and Andreas Joseph Krogh, provides Lift support with response time SLA, Lift Training, and consulting. Lift Co. provides geographic diversity with folks from the United States, Europe and India on the team. Lift Co. consultants include Lift committers David Pollak and Indrajit Raychaudhuri.

    David and Andreas founded Lift Co. to help grow the whole Lift ecosystem and welcome partnerships with other Lift consultancies so that large-scale Lift adopters have a range of services and service providers to choose from.

    Looking forward

    Lift has grown far beyond what David Pollak expected when he founded the project five years ago. Lift continues to grow and gets better based on the ideas, feedback, and contributions from the whole Lift community. Lift will continue to develop as the best platform to build interactive and secure web applications. Lift will get better, and perhaps slimmer, based on the evolving needs of the whole Lift community.

  • Lift Basics and Broad Shoulders

    08 Feb 2012

    The Lift community is amazing.  It's a collection of more than 3,000 people building amazing apps with Lift.

    The Lift committer group is amazing.  It's a collection of more than 50 people who put time and effort into writing the code in Lift and more importantly into creating an excellent, supportive environment in the Lift community.

    Between the community and the committers, the shoulders that support Lift are indeed very broad and very strong.

    I am honored and excited that Franz Bettag and I will be helping to broaden the knowledge, involvement and support of Lift by offering a 1 day Lift Basics course at Skills Matter in London on March 15th.  This will offer Franz the training necessary to teach "David Pollak's Lift Basics" to audiences in Germany (in German) as well as other places.

    More importantly, it's yet another data point that demonstrates the amazingly broad shoulders that support Lift.  And stay tuned... there will be more announcements that underscore just how broad and strong the support for Lift is.

  • Institutional knowledge is gold

    07 Feb 2012

    Nick Cronin wrote a very interesting piece on how technology enhances labor mobility: http://techcrunch.com/2012/02/04/labor-efficiency-the-next-great-internet-dis...

    I have a different perspective on labor mobility... or more precisely, wether I as an employer would desire fungible talent. I don't.

    Putting aside the functional skills that a given person has, there are important social skills that take time to assimilate. Getting communications and interactions and understanding right takes a fair number of interactions. It's not just something that happens instantly (okay, sometimes you find someone who "speaks your language", but that's not the norm, it's a glorious, but rare, event.) It takes time to cultivate a shared language, a shared set of norms, a shared set of expectations, and only then, can someone work best for a given organization.

    The requirements for shared language (my shorthand for the broader set of social and cultural understandings) is necessary for a worker to work out well within an organization. For example, there are some people who won't show their code until, in their minds, it's perfect. Those people may thrive in one organization but utterly fail in another. This is also true of people that code incrementally (lemme toss this out, get some feedback, and try again.) In both cases (and granted these are extremes), different organizations will do better or worse with each type of developer.

    But, you say, we can settle those kinds of things in an interview.

    No, no you can't. Most organizations use similar words for describing their expectations and norms. Lots and lots of organizations look for "Rock Stars" and "Ninjas" and are "Agile" and the like. Yet, those words mean different things. I've seen companies that have 45 minute "stand up" meetings where the director of engineering gives out daily assignments. I've seen organizations that advertise for "Rock Star Coders" and are frightened and institutionally reject folks that I consider merely good coders because they are so much better than the existing pool of developers that hiring them would cause more friction than the value of the additional good code. It's only in the exploration of the relationship that the parties can come to learn about each other and determine if they have a shared language.

    Yes, you say, that's all good and fine for "knowledge workers" but what about the replaceable humans who sling hammers or assemble cars or take care of our lawns, etc.

    The vast majority of work that humans do requires judgment and understanding priorities and balancing those priorities. The folks flipping burgers at In 'n' Out make lots of judgments. The folks at McDonalds try to remove as many judgments as they can and they will do best hiring people who do not thrive on making decisions. I'm betting there's not a lot of cross-trading between folks who are successful and McDonalds and In 'n' Out.

    In fact, I think one of the things that cost Detroit its leadership in the 1970s (leadership that it has yet to regain) is the view that the assembly line workers were fungible, not smart, not valuable. The mentality led to management/labor friction, anger, waste heat, and ultimately lost leadership. If GM and Ford and Chrysler has viewed every member of the company and the supply chain as a valuable contributor to the creation and delivery of products that make buyers happy, we would live in a different world. But I digress.

    Yes, sometimes you want to have external professionals rather than have them on your staff. Lawyers are one perfect example. Two of many favorite corporate lawyers are Jon Gavenman http://www.cooley.com/jgavenman and John Hession http://www.cooley.com/jhession. I've interacted with a lot of transactional guys in my life, yet these two stand out as working well for me. That doesn't mean they would work out well for everyone. They each speak the same language that I do, but that doesn't mean they speak the same language as everyone. Neither of these guys are interchangeable with any other lawyer.

    But the bottom line for me is that institutional knowledge is gold. It's the core value of any company. That institutional knowledge is not simply knowing the problem space, but also the institutional knowledge of the values of the company, what the priorities of the company are, and how the company deals with adversity. The only way to foster that institutional gold is through long term relationships and the idea that any worker, any member of the team is fungible reduces the value of the business.

  • The transition of scala-tools.org

    03 Feb 2012

    It's been a little slow in coming (those ship dates always slip), but the Sonatype folks will be taking over the hosting of Scala related artifacts from scala-tools.org.

    Currently, Sonatype is rsyncing the entire scala-tools.org repository so that anything published to scala-tools.org will be mirrored up to Sonatype.

    We have transferred the LDAP information for all the scala-tools.org such that you will be able to publish directly to Sontaype's servers.

    In the next week or so, we will be pointing the DNS for nexus.scala-tools.org and other domains over to Sonatype's servers such that existing projects will be communicating directly with Sonatype's servers (we were hoping to do that before the announcement, but, well... things happen.)  We will also be 301-ing all incoming requests for artifacts to Sonatype's servers so that existing projects with existing configuration files will be getting the latest and greatest from Sonatype's servers.

    Between now and mid-June, scala-tools.org will point to Sonatype's servers.  Once the redirects are in place and periodically thereafter, I will be making reminder posts to point configuration files to Sonatype's servers.  I will also send out periodic emails to the folks who have been publishing to scala-tools.org to update their configuration files to point to Sonatype's servers and to remind their communities to update configuration files to Sonatype's servers.

    In mid-June, scala-tools.org will no longer redirect to Sonatype's servers.

    I'd like to thank the Sonatype folks for being so helpful about transitioning the repository from scala-tools.org to the Sonatype servers.  I'd also like the thank Derek who came up for air and helped out with the LDAP stuff.

    More information and technical specifics as they become available.

  • DPP's Lift Office Hours Monday February 6th

    03 Feb 2012

    David Pollak will be available for Lift Office Hours to answer Lift-related questions either in person or on Skype from 11am to 3pm Pacific Standard Time.

    Physical Location:
    541 8th Street
    San Francisco, CA 94121

    Skype: lift-office-hours

    Drop on by, give a call, I'll be glad to help!



  • Why Visi is written in Haskell

    24 Jan 2012

    Visi and Visi.Pro started life based on ideas I had when I was working on Apache ESME.  One of the key features of ESME, a feature I wrote in a couple of hours 'cause I was bored, was "Actions".  Actions allowed a user to declare what to do with messages that arrived in their timeline.  You could filter messages (only show 20% of the messages from my overly chatty co-worker).  You could email messages (if it's an @ message to me and it's from my boss, email it and text me.)  You could cause arbitrary actions by generating HTTP POST requests to external services based on certain criteria (post to Twitter all messages in my timeline with the #Lift tag.)  Actions made ESME different because it allowed a user (not a programmer) to define what to do as stuff flowed into their timeline.  ESME was an SAP ecosystem project and we imagined that items in your timeline would include events generated from ERP systems: shipping exceptions, sales events (closed an order, received payment, etc.) and using Actions to manage the events seemed like a really cool idea.

    ESME was and is based on Scala and Lift.  I do not think ESME could have been written in such a short time with such a small team back in 2008 with any other technology.

    I wanted to start an exploratory project within the then incubating ESME project and see what we could do to create an event based system and event-based grammar for defining complex systems.  The Apache overlords where not happy with the exploration or the fact that I wanted to explore using Git on GitHub, so I shelved the project, but not the idea.

    For the next couple of years, the idea of an "event processor in the cloud that could be managed by anyone" rattled around in my head.  I've got pages in notebooks here and there about how the system could work, what the revenue models were, etc.  In June 2010, I wrote a complete business plan for a cloud-based event management system.  Having revenue from users to pay for the service plus a cut of revenue from data feed providers (a model influenced by Apple's App Store) seemed to make sense.  At that time, I envisioned the system was built on Lift and Scala.

    I got side-tracked in the summer of 2010 assembling a team and writing a business plan, etc. and I put the cloud event thing on the shelf.  I ultimately did not join the team that I assembled and by the time 2011 rolled around, I was up to my eye-balls in family stuff.  My wife went away to run a trial for 4 months (she won $310M for her client) and my mom passed away.  Sometime in the Spring on 2011, I bought an iPad for the kids so they could watch Sponge Bob and other stuff on the flights down to visit my wife in Southern California.

    The iPad changed my world-view on computing devices.  The iPad is, in my mind, the first material change in the way people use computing devices since the Apple ][.  Everything between the Apple ][ (the IBM PC, the Mac, laptops, netbooks, etc.) were incremental advanced on the technology that preceded them.  But the iPad was different.

    It was in May, after I had spent a week with an iPad and no other computing device, that I realized that PCs and the Web were legacy.  This isn't "disappear tomorrow" legacy.  This is "in 15 years, most people will not starting new web app project" legacy.  Just like client-server is legacy, but there's still plenty of Windows-specific client-server code being written.

    It was in May that I added "and a client component that runs on the iPad and iPhone" to my "event processor in the cloud" idea.  Having a client component, a beautiful, rich, interactive, tactile, wondrous client component because the driving force in my thinking.  Chatting with folks like my friend Bill Fernandez (Bill also did some amazing work on ESME) about the idea drove my thinking to making a programming system like HyperCard that was useable by lots of people.  Given my spreadsheet background, especially my real-time spreadsheet background, gave rise to ideas around how to imagine a language for describing event processing and user interactions and such.  Those ideas crystalized into Visi and Visi.Pro.

    One of the gating factors with iOS, the operating system on iPad and iPhone, is that there's no JVM or anything JVM-like.  There's only native code (well, there's LLVM as well, but the Scala-LLVM project is not that far along.)  So my choices of language for the project were reduced to things that compiled to native code.  I no longer have interest in manually managing memory and I like functional programming... it's how my mind has been re-wired.  Plus, I'm a statically typed kind of guy... that meant that my language choices boiled down to OCaml and Haskell.  Both had ARM cross-compilers and both were mature languages with mature ecosystems.  Sadly, because Scala is still the language I'm most comfortable with and the language I'm most productive in, I could not use Scala for Visi.

    OCaml is arguably the easier choice for Visi.  It's conceptually a lot closer to Scala than is Haskell.  The iOS cross-compilation tools for OCaml are much more mature than those for Haskell (although Stephen Blackheath's GHC-iPhone is coming along very nicely.)  Interacting between OCaml and ObjC is much easier than any Haskell/ObjC bridge.  Unfortunately, as many times as I try and as much excellent encouragement I get from Paul Snively, I just can't get into OCaml.  I don't know why and it's purely subjective and it's probably something broken in my brain... but OCaml always feels like an ill-fitting scratchy wool sweater to me.  This is not meant as a criticism of OCaml, but I don't like eating brussel sprouts either... it's just a taste thing.

    So, that left Haskell for me.  Haskell has some really helpful stuff.  The Haskell parser-combinator library is excellent and mature... helpful for writing a language.  Haskell's runtime is amazing in the way that computations (threads) can be suspended nearly costlessly.  This makes as lot of the stuff in Visi easy to write... basically some of the computation logic (including laziness) is already built into Haskell, so rather than writing a lot of the pieces myself, I get them for free.  The cost with Haskell is that pure, lazy, monadic is hard and slow and long-slogging (although it's proved remarkably solid.)

    I revisited the Haskell vs. OCaml decision last week because Paul kindly spent a lot of time discussing the strengths of each language/runtime.  But at the end of the day, Haskell keeps proving itself the right choice for Visi.

    I hope that going through the history of Visi and Visi.Pro and the choices I made in the system and in the tools will help folks understand why Haskell (okay, there's no compelling Haskell vs. OCaml argument that I've made) and more importantly why the choice of platform dictated a language choice other than the language I am most comfortable in: Scala.  Put another way, this is the first time since I wrote Mesa in Objective-C and C++ that I was not serially monogamous with a language. ;-)

  • No, I don't owe you scala-tools.org

    21 Jan 2012

    Apparently I'm a jerk for shutting down scala-tools.org.  Apparently, I'm an egomaniac for deciding not to sell the domain for "more than $0" even though nobody has made a legitimate offer for the domain. [Note: James Iry asked the question on Twitter.  It was a perfectly reasonable question that I answered as best I could in 140 characters. I answered him and there were subsequent posts from others that personally attacked me for not doing things the way they think I should.  Posts from others who attacked me for talking about using scala-tools.org to mourn the losses that I see in Scala-land.  This post is *NOT* aimed at James.  I like James.  I respect James.  James represents some of the very best of the Scala community and he was one of the folks who energized me about Scala and gave me hope that Scala could be a "local maximum of research and practical in computer langages."  I am deeply sorry that James read this post as something about him.]

    I plan to transition the scala-tools.org accounts and such to another provider.  These plans will be rolled out on Tuesday.  There will be ongoing support for a Nexus/Maven repository for the Scala community.  The community will continue to have a place to share components.

    What I do not have an interest in is selling or transferring the scala-tools.org domain.  There is not a way to set a reasonable price for the domain.  The domain has value because of the brand built over the last 3+ years of its existence.  How do you price that?  How do you price the value that the domain has brought to the Scala community as a whole?  Whatever I think that monetary value is, it's likely a few orders of magnitude more than others think the value is.  It's not even worth, in my opinion, trying to price it.

    So, what value does scala-tools.org have to me if not a monetary value?  That's up to me.  Sorry, to say, but it's my domain.  It's something that I've paid for, worked on, recruited others to work on.  Yes, there's a conversation to be had with DavidB and Derek for their work over the years.  There's less of a conversation to be had with Josh because, while he helped out, he also dropped to ball on the Nexus skills transfer to Indrajit and Lukas which precipitated my decision to close scala-tools after Lukas expressed extreme frustration with being ignored.  I also owe some obligation to Indrajit and Lukas for stepping up when I put out the call for help a few months ago.

    To the rest of the community, I owe a reasonable transition to a new hosting solution and that reasonable transition will happen.

    But for those of you who have some notion that my contribution to the community over the years creates an obligation to continue to contribute, to keep giving, to keep doing unpaid, community service for you, you're not living in reality.  The fact that I have given my time and my effort and my cheer leading and my coding and my writing and my servers and time I could be spending with my family (like the first day of my kids' first spring break that I missed because I had to ward off a DoS attack against scala-tools.org and keep the system running) and all of that stuff does not mean I am forever obligated to keep giving my time, my money, my efforts, and the other stuff that I've given in the past.

    My life goal is to leave things better than I found them.  I feel a fierce obligation to that who have relied on me, and thus when I make transitions, I try to make them gracefully so that there's plenty of time for others to make those transitions.

    When I made the decision in late May to do my next startup, http://visi.pro, in a language other than Scala and on a platform other than the JVM, I made sure to have a graceful transition of leadership in the Lift community and I continue to support Lift and the Lift community because I owe an obligation to those who adopted Lift.  

    When it became clear that Josh and Derek were not going be able to continue to support scala-tools.org, I put out a call for more volunteers.  Given that I was phasing out of the Scala community, I could have just shut scala-tools.org down then.  But I asked for help and worked on a transition.

    But now, now when it's clear that it's time to shut scala-tools.org down, there's plenty of "you should do this," "you should do that."  Well guys, where were you when I put out the call for help a few months ago?  What has changed that would make you capable of making scala-tools.org work now?

    More importantly, what gives you the right to insult me personally for making a choice about something I own and something I contributed to mightily?  If you wonder why I'm sad about the state of the Scala community, just read my blog, watch my Scala Lift Off London keynote.

    My way of working through my sadness about opportunities lost, my way of mourning these losses will be expressed on scala-tools.org.  I will use something I had a mighty hand in building to express sadness about what could have been.

    Will this cause some inconvenience?  Maybe.  Will this raise awareness about the issues holding Scala adoption back in a way that I've been unable to do in other ways?  Maybe.  Is this my choice?  Yes.  Do I owe you more than a smooth transition to another domain and another provider?  No.  Do I owe you scala-tools.org?  No.

>> @dpp's Tweets:
I'm a Haskeller