Django

Egads, it’s been a long time since I’ve written a blog post. Yes, let’s blame Twitter for this!! Pithy, short, and easy, tweeting has become the easy way to share thoughts. Of course, not all can be written in just 140 characters, so I need to maintain a blog for deeper, yes, deeper thoughts.

But for now, let me just say one word: Django! Yes, I’ve been doing a lot of Django development over the past year. Enjoying it too. Python is concise, is nice. Not as nice as Smalltalk, of course, but nice enough. And, as a framework, Django delivers a lot of excellent functionality right out of the box. Been very pleased. I’ll have to write up some of my Django apps … when I have time, of cours.e

The 3 P’s of Social Media Marketing

Introduction

Over the past year or so, I have been helping a small cafe in Houston, a tea house, enter into the world of social media marketing, mostly employing Twitter, and recently making use of Facebook. In fact, we were perhaps the first retail establishment in Houston to enter the brave new world of Twitter, and now boast over 1500 followers, making it the 2nd largest restaurant following in Houston. This cafe’s experience with social media has been quite successful, with results far better than advertising in traditional newspapers or magazines, and will continue to be a major participant in social networking space.

Follower count was never the strategy when we entered the Twitter world. I did have a strategy in mind when I first participated, and it was been refined through customer feedback and a few lessons-learned. I think our experiences can be useful to other retail stores, so just wanted to take some time here to share my insights. They can be organized as the 3 Ps of Social Media Marketing:

Passion Personality Place

Continue reading The 3 P’s of Social Media Marketing

nGram Dictionary

On a recent project, had to deal with searching of tens of thousands of product descriptions, with a need to find substring matches quickly.  The select: statement in Smalltalk works like a SQL table scan – okay for small collections, but becomes seconds+ response time with larger lists.

An effective solution to this is an nGram Dictionary.  Strings of words can be broken up into sets of tri-grams, quad-grams, quint-grams, and so on.

My approach to this is a Dictionary indexed by nGram length, each element containing dictionaries of nGram strings of collections of the string objects to be searched.  Thus, indexing results as such:

3 -> ana -> ('banana')
ban -> ('banana', 'band')
4 -> bana -> ('banana')
band -> ('band')
anan -> ('banana')
5 -> banan -> ('banana')
...

Continue reading nGram Dictionary

Decorators as Guards

I’m exploring a new pattern – I’m sure it’s been done before, but it’s new to me, and a useful exercise to get to the next stage with an application I’m envisioning.  The pattern is using Seaside Decorators as security guards.

So, last night, finally squeezed in enough time to my decorator guards into action.  Happy to report they’re working fine.  You can review the demo app yourself at agoric.seasidehosting.st/seaside/ibis .  Login as bob@test.com, password bob, or alice@test.com, password alice. Continue reading Decorators as Guards

Health Care – costs vs. price

It’s oft repeated that health care costs continue to rise at a crazy pace.  While most costs of most products and services have been decreasing, in terms of “real”, inflation-adjusted dollars, health care, like education, have been increasing at record paces.  And, unlike the housing/real estate “bubble”, there doesn’t seem to be an end in sight.  What’s going on?

Most commentators talk about health care cost increases.  However, the evidence I see suggests something different.  Yes, we’re seeing health care price increases.  But cost increases? There’s a difference.

Continue reading Health Care – costs vs. price

The Hottest Summer in Houston

1980 remains the hottest summer in Houston: 14 consecutive 100+ degree days, a high of 107, and 32 days altogether at 100 or above.

Yep, I remember that summer well: I was a lifeguard that year – and by the end of the summer, a coach, swim teacher, a pool cleaner, and a front-desk clerk as well.  I ended up with all the jobs at this local community pool, because workers were dropping like flies!  Seriously, by mid-summer every local kid had quit, and I kept picking up additional job duties; by the end of summer, I was working 12-14 hours a day.

Continue reading The Hottest Summer in Houston

Seaside – how to change a page’s title

I know I’ve seen the answer to this before, but had a hard time tracking it down, so thought it worthwhile to post.

To change the web page’s HTML title (or any other head information) for a web component, create a method updateRoot: .  This method will be called when the component is rendered on the page – remember to always super the call too.

component>>updateRoot: anHtmlRoot
    super updateRoot: anHtmlRoot.
    anHtmlRoot title: 'fooTitle'.
    "do anything else you'd like to Root here too"

Updater examples with Scriptalicious & Seaside

The first of a series of coding vignettes in Seaside.

 Context: a web app with a form containing multiple input fields.  Instead of waiting to submit the form, I want the page to update another element every time an input is changed.  In this example, a total field.  Solution was used for a simple MoneyCounter application:

MoneyCounter>>renderContentOn: html html form id: 'f'; with: [

html table: [
    html tableRow:
     [html tableData: [html text: 'pennies'];
           tableData:
         [html textInput
           id: 'pennies';
 	   "on: #pennies of: self;"
           callback: [:value | self pennies: value];
 	   onChange: (html updater
                       id: 'total';
		       triggerFormElement: 'pennies';
 		       callback: [ :r  |  self renderTotalOn: r])
       ] ]

    etc.

    html tableRow:
      [html tableData: [html text: 'TOTAL'; space];
            tableData: [html span id: 'total' ; with: self total]]]]


MoneyCounter>>renderTotalOn: html

 html render: self total
MoneyCounter>>pennies: value
   pennies := value

MoneyCounter>>total
	^((pennies asInteger * 0.01) +  etc.   )

Continue reading Updater examples with Scriptalicious & Seaside

Tax Savings for Software Companies in Texas

For the past 6 years, one of the major specialties of my company is writing software applications dealing with corporate taxation.  This has usually been internal, custom apps for a corporate tax department, but recently we have entered a partnership with a local accounting firm to do some web service-based applications.

The first of these applications is now available for beta testing, so now I’m reaching out to all Texas-based software development companies to help with testing out this application, as well as potentially save money on your taxes.  You may qualify!

Continue reading Tax Savings for Software Companies in Texas