. .

travel

The Way it Wasn't

April 20, 2010 5:52:42.452

You can read plenty of missives about how air travel was once an awesome experience - like many things, it looks like the passage of time has softened the (very) rough edges:

I have a copy of TWA's flight schedule from June 1, 1959. The first jets were being introduced into the fleet, but the vast majority of flights were still on propeller-driven aircraft. There's an ad in the timetable for TWA's low coast-to-coast "excursion fares." Los Angeles to New York was only $168.40 roundtrip, if you traveled Monday through Thursday in Sky Club Coach class. That bargain is roughly equivalent to $1,225 today, before tax.

These fares weren't valid on the fastest aircraft, so you had only two options, neither of which went nonstop. There was the 10:10 a.m. departure from Los Angeles that arrived in New York at 11:41 p.m. that night or the 7:55 p.m. departure that arrived at 10:56 a.m. the next day -- more than 12 hours in the air. This was on a Lockheed Constellation, which, while beautiful, bounced you around in the weather at about 20,000 feet, far below the 35,000 to 40,000 feet you'd cruise at today. Even when the weather was good, that trademark prop vibration left you feeling like you were sitting on a washing machine for hours after you landed.

Sure you say, but at least it was elegant? Well, maybe in first class (and the article doesn't give a price for that). However, back in coach? Just like coach now, you had to bring a box lunch yourself. And bear in mind that a transcontinental flight now, even with one stop, is less than half that time - and you're likely to have some entertainment options, even if it's just seatback power and your own gadgets :)

The "golden age of flying" wasn't quite so golden...

Technorati Tags:

posted by James Robertson

 Share Tweet This

gadgets

How Real is that 4G iPhone

April 20, 2010 6:02:23.507

Steve Rubel thinks that Apple wanted that prototype to be found:

It's been reported that Apple allegedly has teams in the company working on prototypes that will never see the light of day. It does so, it's been said, to maintain secrecy and to occasionally throw people off the trail. That's what I think is happening here. If that's not enough, consider this - Apple appears to strive to maintain the news flow after a product is announced yet before it's available. After the iPad was revealed, it's been reported that Apple kept the few that were in the wild chained down to special tables. So this isn't a company that lets important unreleased devices anywhere near the wild... unless, that is, they want someone to find it.

With any other company, I'd laugh and move along. With Apple, he could easily be right.

Technorati Tags: ,

posted by James Robertson

 Share Tweet This

tv

Another Oops on Our TV

April 20, 2010 7:08:33.491

I'm not sure why, but I find this sort of thing to be very amusing - it cropped up in an ad spot last night:

posted by James Robertson

 Share Tweet This

smalltalk

Using Array Binding with Oracle and ObjectStudio 8: Video

April 20, 2010 9:55:07.782

Today's screencast looks at using Array binding with Oracle and ObjectStudio 8. If you're looking for a particular topic, you can find it with the Media Search application on our site. Here's the script used in the screencast:


"Array binding and Array fetching example."

"Some databases allow client control over the number of rows that will be physically transferred between the server and the client
in one logical bind or fetch. Using array binding and array fetching can greatly improve the performance of many applications by 
trading buffer space for time (network traffic)."


"The following Workspace examples will show the performance improvements 
when using array binding and array fetching in OS8."

"Logon to the Oracle Server."
ObjectStudio.OracleDatabase logOnServer: #'OracleDB' user: #'username' password: #'pwd' alias: #'OracleDB'.

"Get the Oracle database instance."
db := ObjectStudio.Database accessName: #'OracleDB'.

"Drop the test table if existed."
db execSql: 'DROP TABLE TESTTABLE'.

"Create a test table."
db execSql: 'CREATE TABLE TESTTABLE(
	NUMMER int ,
	BEMERKUNG varchar2 (30)
)'.

"Set the number of recrods being inserted."
loopCount := 1000.

"The SQL used to do inerst."
sql := 'INSERT INTO TESTTABLE VALUES (?, ?)'.

"Insert: not using array binding."
insertTime1 := [

	1 to: loopCount do: [ :i|
         db execSql: sql vars: (Array with: i with: 'test').
	].			
] millisecondsToRun.

"Print out the miliseconds spent."
('Insert without using array binding: ' + insertTime1) out.

"Insert: Using array binding."
insertTime2 := [
|bindArray numArray stringArray |
    numArray := OrderedCollection new.
    stringArray := OrderedCollection new.
	1 to: loopCount do: [ :i|
		numArray add: i.
		stringArray add: 'bla'.
	].			
	bindArray := OrderedCollection with: numArray with: stringArray.
    sql := 'INSERT INTO TESTTABLE VALUES (?, ?)'.
    db execSql: sql vars: bindArray.
] millisecondsToRun.

"Print out the miliseconds spent."
('Insert using array binding: ' + insertTime2) out.

"Set times to repeat."
loopCount := 1.

"Set the SQL to do the fetch."
sql := 'SELECT * from TESTTABLE'.

"Default value of arrayFetchSize is 1."
db setArrayFetchSizeTo: 1.

selectTime1 := [
1 to: loopCount do: [ :i|
        db execSql: sql.
    ].
] millisecondsToRun.

"Print out the miliseconds spent."
('Select with arrayFetchSize= 1: ' + selectTime1) out.	

"Set arrayFetchSize to be 100."	
db setArrayFetchSizeTo: 100.

selectTime2 := [
1 to: loopCount do: [ :i|
    db execSql: sql.
	]
] millisecondsToRun.

"Print out the miliseconds spent."
('Select with arrayFetchSize=100: ' + selectTime2) out.

"Set arrayFetchSize to be 500."	
db setArrayFetchSizeTo: 500.

selectTime3 := [
1 to: loopCount do: [ :i|
    db execSql: sql.
	]
] millisecondsToRun.

"Print out the miliseconds spent."
('Select with and arrayFetchSize=500: ' + selectTime3) out.

You can download the video directly here. If you like this kind of video, why not subscribe to "Smalltalk Daily"?

Technorati Tags: , , , ,

posted by James Robertson

 Share Tweet This

social media

We didn't need another Twitter

April 20, 2010 12:37:31.867

At least that's my take away from this news:

Facebook just announced via its Facebook profile that the ultra-lightweight version of its website, Facebook Lite, is no more.

Facebook has some Twitter-like features, but I don't think people go there for the same reason they go to Twitter. facebook is "deeper"; Twitter is more lightweight, and pretty much about "what's happening now". It's not about which is better; they're different, that's all.

Technorati Tags: ,

posted by James Robertson

 Share Tweet This

gadgets

There's Always an Unintended Consequence

April 20, 2010 16:23:42.754

When Apple banned "meta platforms" from the iPad/iPhone recently, I don't think they expected to get a raspberry from educators and Alan Kay - but that's what ended up happening:

Jobs this month personally mailed an iPad to Kay, who praised Apple’s tablet as “fantastically good” for drawing, painting and typing. But Kay declined to give his full evaluation of the iPad to Wired.com until his question of whether Scratch or Etoys, another educational programming language Kay developed for kids, would be usable on the device.

This is a consequence of Scratch being pulled from the app store, which itself was collateral damage from Apple's war on Flash. Now they've ended up in bad place, because they are getting bad PR from sympathetic people (children and educators). If they carve out an exception for Scratch, on the other hand, the rule starts looking even more obviously aimed at Adobe - "If that's ok, why not this?"

I suppose they could go with "meta platforms are ok for educational apps", but that will end up looking silly, too. When they created this rule as a way of targeting Adobe/Flash, I bet they thought they were being pretty clever. Now the chickens are coming home to roost.

It's not just Wired that's noticed, either - the NY Times' Gadget blog has the story, too.

Technorati Tags: , , ,

posted by James Robertson

 Share Tweet This

gadgets

Be Reasonable, Do it My Way

April 20, 2010 22:41:01.923

That's the shorter version of this post by Jeremy Dillworth. As I said earlier today, Scratch being booted off the iPhone OS is an unintended consequence of the new policy. And as to this:

While it would obviously be more convenient if Apple allowed Scratch to run on the iPad as it does on other platforms, that approach is a non-start because of Apple's developer agreement. John McIntosh (author of the iPad/iPhone version of Scratch) should have known that before he even started tinkering with a version of Scratch for the iPad.

Except.... John had a few apps approved, and they only got booted under the new policy. Emphasis on new.

Technorati Tags: , ,

posted by James Robertson

 Share Tweet This

smalltalk

Smalltalk in Cologne

April 21, 2010 7:01:45.268

The Cologne (Germany) Smalltalkers have a meetup scheduled for June 10th at 7pm - follow the link for the address.

Technorati Tags: ,

posted by James Robertson

 Share Tweet This

smalltalk

Using LOBs with Oracle and ObjectStudio 8: Video

April 21, 2010 9:02:56.927

Today's Smalltalk Daily looks at using LOB data in Oracle with ObjectStudio. If you're looking for a particular topic, you can find it with the Media Search application on our site.

Here's the script used in the screencast - or just skip to the video:


"LOB buffer size example."

"When dealing with LOBs, setting the right size of buffers used to transfer 
data between the server and client is important.  For example, if  
the LOBs are large, allocating a big buffer will reduce the network 
round trips when inserting or fetching LOB values."

"The following are examples to demonstrate performance improvement when setting 
the right size of LOB buffers."

"Logon to the Oracle Server."
ret := ObjectStudio.OracleDatabase 
	logOnServer: #OracleDB 
	user: #useid 
	password: #pwd 
	alias: #OracleDB.

"Get the Oracle database instance."
db := ObjectStudio.Database accessName: #OracleDB.

"Drop the test table if existed."
db execSql: 'DROP TABLE TestLob'.

"Create the test table."
res := db execSql: 'CREATE TABLE TestLob (a CLOB, b BLOB, c INT)'.

"Input 2MB CLOB and BLOB."
ClobLength := 2097152. 
BlobLength := 2097152. 
ClobInput := String new: ClobLength withAll: $a.
BlobInput := ByteArray new: ClobLength withAll: 1.

db beginTran.
"Insert the test data."
insertSQL := 'INSERT INTO TestLob (a, b, c) VALUES ( ?, ?, ?)'.

db lobBufferSize: 32768.  "32KB is the default buffer size for read/write Large Objects."

insertTime1 := [
   res := db execSql: insertSQL vars: (Array with: ClobInput  with: BlobInput with: 1).
] millisecondsToRun.

"Print out the miliseconds spent."
('Insert time when lobBufferSize is 32768: ' + insertTime1) out.	

"Set lobBufferSize to 1MB"
db lobBufferSize: 1048576.

insertTime2 := [
   res := db execSql: insertSQL vars: (Array with: ClobInput  with: BlobInput with: 2).
] millisecondsToRun.

"Print out the miliseconds spent."
('Insert time when lobBufferSize is 1048576: ' + insertTime2) out.	

db commit.

db beginTran.

selectSQL := 'select * from TestLob'.

db lobBufferSize: 32768.  "32KB is the default buffer size for read/write Large Objects."

selectTime1 := [
        db execSql: selectSQL answerLobAsProxy: false.

] millisecondsToRun.

"Print out the miliseconds spent."
('Select time when lobBufferSizeis 32768: ' + selectTime1) out.	


"Set lobBufferSize to 1MB"
db lobBufferSize: 1048576.

selectTime2 := [
        db execSql: selectSQL answerLobAsProxy: false.

] millisecondsToRun.

"Print out the miliseconds spent."
('Select time when lobBufferSizeis 1048576: ' + selectTime2) out.	

db rollback.



You can download the video directly here. If you like this kind of video, why not subscribe to "Smalltalk Daily"?

Technorati Tags: , , , ,

posted by James Robertson

 Share Tweet This

yankees

Off to a Good Start

April 21, 2010 11:20:54.916

The Yankees have roared out of the gate - although they have company - the Devil Rays are playing good ball, too. I have to admit that I enjoy seeing the Red Sox keeping the Orioles company down at the bottom :)

Technorati Tags: ,

posted by James Robertson

 Share Tweet This

smalltalk

Updated Dr. Geo

April 21, 2010 16:18:12.116

posted by James Robertson

 Share Tweet This

security

Virus Protection that Works

April 21, 2010 16:24:15.396

I'm guessing that McAfee needed to do a bit more testing on their latest virus scan update:

McAfee's "DAT" file version 5958 is causing widespread problems with Windows XP SP3. The affected systems will enter a reboot loop and loose all network access.

Apparently, it thinks svchost.exe is bad, and blows it away. Oops. On a positive note, a machine that endlessly reboots is pretty safe from viruses :)

Update: This is about as bad as it could get - since affected machines won't boot up with network support, they have to be fixed by hand (i.e., no automated fix from McAfee is possible):

Amrit Williams, CTO of security management system company Big Fix, told USA Today that there's no way to automate the process of fixing affected computers. Every machine will need to be repaired individually, he said, noting the process could take days or weeks.

Technorati Tags: ,

posted by James Robertson

 Share Tweet This

general

iPad Instead of In Car DVD?

April 22, 2010 7:08:31.754

I ran across this speculative post, and think that it makes a ton of sense:

I see the big breakthrough in the back seat, and it could prove to be a serious problem for automakers that charge a ransom for rear entertainment systems. The base iPad costs far less than most DVD options offered by automakers. Ford charges $1,995 for a dual-headrest-mounted DVD system in its Flex crossover. The Acura MDX is $1,900 for its single screen system, which has three wireless headsets and a 9-inch screen that was impressive in size when compared next to the iPad. These prices are par for the course for similar systems from most manufacturers.

Most new cars have multiple charge ports as well, so even when the battery ran low, you would be ok. Now, someone is going to say that any laptop (especially a Netbook) could do the same thing, but: the iPad is simpler. In this space, I'd say that simpler is better.

Those cash cow car entertainment systems might have to start pricing themselves realistically.

Technorati Tags: ,

posted by James Robertson

 Share Tweet This

social media

Looks Like I Have Work to Do

April 22, 2010 7:43:30.754

With the Facebook announcements yesterday, it appears that I have some new work on the Smalltalk to Facebook interface. The authentication scheme seems to be simpler (which is good - I never really got the first version as finished as I'd like).

It looks like it's simpler than the old API - that was a mishmash of old and new ideas, whereas this version seems to be unified around a simple data model, and all the accesses to it are via JSON (much, much nicer than XML, IMHO). I'll take a more comprehensive look at it later today.

Technorati Tags: ,

posted by James Robertson

 Share Tweet This

itNews

The Flash Contest Won't End Soon

April 22, 2010 8:33:41.016

While Apple is trying to kill Flash, Android is embracing it, and so are the next generation Windows phones. I'm not sure what RIM plans with the BlackBerry, but I expect they'll fall in line, too. That'll put Apple on one side, and the rest of the universe on the other. Normally, I'd say that would put Apple in the losing position, but the iPhone is popular enough that it guarantees one thing: a long battle.

Technorati Tags: , ,

posted by James Robertson

 Share Tweet This

smalltalk

Using Statement Caching with Oracle and ObjectStudio: Video

April 22, 2010 9:08:45.940

Today's screencast looks at using statement caching against Oracle (version 9 and up) with ObjectStudio. If you're looking for a particular topic, you can find it with the Media Search application on our site.

The code used is below; To watch, click on the viewer:


"Statement Caching examples. Oracle does not support this feature until 9.0.0, so make 
sure you are using Oracle 9.0.0 and later."

"Information from Oracle: Statement caching refers to the feature that provides and 
manages a cache of statements for each session. In the server, it means that cursors 
are ready to be used without the need to parse the statement again.  It can be 
used with connection pooling, and will improve performance and scalability." 

"The following are two examples, one uses statement caching, the other does not."

"Statement Caching is off be default."
ObjectStudio.OracleDatabase useStatementCaching: false.

"Logon to the Oracle Server."
ObjectStudio.OracleDatabase 
	logOnServer: #'OracleDB' 
	user: #'username' 
	password: #'pwd' 
	alias: #'OracleDB'.


"Get the Oracle database instance."
db := ObjectStudio.Database accessName: #'OracleDB'.

"Set times to repeat."
loopCount := 100.

"Set the SQL to do the fetch."
sql :='select * from sys.all_tables where TABLE_NAME=''DUAL'''.

selectTime1 := [
1 to: loopCount do: [ :i|
        db execSql: sql.
    ].
] millisecondsToRun.

"Print out the miliseconds spent."
('Select without using statement caching: ' + selectTime1) out.	

db logOff.


"Turn on Statement Caching."
ObjectStudio.OracleDatabase useStatementCaching: true.

"Logon to the Oracle Server."
ObjectStudio.OracleDatabase 
	logOnServer: #'OracleDB' 
	user: #'username' 
	password: #'pwd' 
	alias: #'OracleDB'.

"Get the Oracle database instance."
db := ObjectStudio.Database accessName: #'OracleDB'.

selectTime2 := [
1 to: loopCount do: [ :i|
    db execSql: sql.
	]
] millisecondsToRun.

"Print out the miliseconds spent."
('Select using statement caching: ' + selectTime2) out.	

db logOff.



You can download the video directly here. If you like this kind of video, why not subscribe to "Smalltalk Daily"?

posted by James Robertson

 Share Tweet This

blog

Now With Like

April 22, 2010 10:57:23.762

At the bottom of each post there's a Facebook "Like" button now - if you have a Facebook account, hitting that will just up the "like" count for the post over there. It was simple to add (once I fixed the stupid CSS styling issues I had with my copy/paste job).

Technorati Tags: ,

posted by James Robertson

 Share Tweet This

media

Hulu Plus: Stillborn?

April 22, 2010 11:15:21.255

Looks like Hulu's plan to charge for a premium service might not make it out of the gate - ABC (Disney) is undermining the value:

Citing industry sources, Kafka said that Hulu CEO Jason Kilar "tried desperately to get ABC not to introduce its free app," because ABC giving away free content makes subscription-based access to Hulu on the iPad seem less valuable. ABC obviously did not place much weight behind Kilar's concerns, as the network's streaming application was available on the iPad from day one, and has found great success.

Obviously, ABC is only one content provider - but other networks are going to be pressured into doing the same thing - just like all other digital media, the price tends to fall towards zero. Hulu will need a new plan.

Technorati Tags: , , , ,

posted by James Robertson

 Share Tweet This

blog

How the Like Thing Works

April 22, 2010 12:12:54.878

I got a question about the new "like" button - specifically, why "liking" the news stream entry on Facebook doesn't reflect back to the blog (and vice versa).

Well, that's because the two things aren't really linked. Here's how the news stream entries land on Facebook:

  • I post to my blog
  • The server auto-tweets the post for me (to Twitter)
  • I have my Twitter stream linked to my facebook news stream, so that anything I tweet lands in the Facebook news stream

Which means that the blog post and the news entry on Facebook are not the same item. Adding a "like" to one will not add a "like" to the other. To get the two linked, I'd have to do some investigation of the FB api, and see if it would even be reasonably possible :)

Technorati Tags: , ,

posted by James Robertson

 Share Tweet This

development

Static Binding Considered Harmful

April 22, 2010 12:23:37.248

Spotted in Phil Windley's Technometria

The more dynamic the Internet gets, the more data there is floating around, the more we mashup things to create just what we need, the more important late binding becomes--in your life, your programming language, and your Web technology.

I agree with that. The web is an ever changing thing, and dynamic systems are much, much easier to adapt. An early bound system is just too rigid.

Technorati Tags:

posted by James Robertson

 Share Tweet This

smalltalk

Debugging a Frozen Smalltalk App

April 22, 2010 12:47:05.998

I have some advice (via Andreas) over on my Cincom Blog

Technorati Tags: ,

posted by James Robertson

 Share Tweet This

gadgets

The Geek Demographic Hearts the iPad

April 22, 2010 22:16:32.168

Spotted in Wired Top Stories

Just three weeks after its launch, the iPad already accounts for almost 1 percent of Wired.com's overall traffic -- and more than a quarter of our mobile traffic

That's an astonishing percentage given the fact that it's only been out for a few weeks.

Technorati Tags:

posted by James Robertson

 Share Tweet This

smalltalk

Smalltalk Events

April 22, 2010 23:01:45.819

Julian Fitzell has a rundown of a number of upcoming Smalltalk events.

Technorati Tags:

posted by James Robertson

 Share Tweet This

gadgets

How Apple Gets Away with Restrictive Policies

April 23, 2010 7:13:18.584

Numbers like these out of Japan help:

The iPhone, offered by Japan’s third-largest wireless carrier Softbank Corp., accounted for 72 percent of smartphones shipped in the country in the period, the Tokyo-based researcher said in a report yesterday. Taiwan’s HTC Corp. was second with 11 percent, followed by Toshiba Corp. with 6.8 percent, it said.

Lots of people are unhappy with the new development rules for the iPhone/ipad - but has that unrest translated into lower sales? Based on the Wired story I linked to last night, I'd have to say no. Apple has realized something pretty important: their target market loves these devices, and based on the size of the market, there's simply not going to be a "developer strike".

Technorati Tags: , ,

posted by James Robertson

 Share Tweet This

smalltalk

Using Prefetch with Oracle and ObjectStudio: Video

April 23, 2010 8:19:07.058

Today's screencast looks at using Oracle's pre-fetch capabilities with ObjectStudio - note that this is an upcoming feature of ObjectStudio 8.2.1. If you're looking for a particular topic, you can find it with the Media Search application on our site.

The code used is below; To watch, click on the viewer:


"PrefetchRows example. Feature is available in OS8.2.1"

"Prefetch rows is similar to array fatching, but it happens in Oracle client. If 
OCI_ATTR_PREFETCH_ROWS is set then this value multiplied by the row size of 
memory is allocated.  When a call to fetch is made all the memory allocated 
is used to store records from the server. The first call gets back n rows and 
subsequent calls to fetch do not make a network call until all n records have 
been returned from the client."

"The following Workspace examples will show the performance 
improvements when using prefetchRows in OS8."

"Logon to the Oracle Server."
ObjectStudio.OracleDatabase 
	logOnServer: #'OracleDB' 
	user: #'username' 
	password: #'pwd' 
	alias: #'OracleDB'.


"Get the Oracle database instance."
db := ObjectStudio.Database accessName: #'OracleDB'.

"Drop the test table if existed."
db execSql: 'DROP TABLE TESTTABLE'.

"Create a test table."
db execSql: 'CREATE TABLE TESTTABLE(
	NUMMER int ,
	BEMERKUNG varchar2 (30)
)'.

"Set the number of recrods being inserted."
loopCount := 2000.

"The SQL used to do inerst."
sql := 'INSERT INTO TESTTABLE VALUES (?, ?)'.

insertTime := [
|bindArray numArray stringArray |
    numArray := OrderedCollection new.
    stringArray := OrderedCollection new.
	1 to: loopCount do: [ :i|
		numArray add: i.
		stringArray add: 'bla'.
	].			
	bindArray := Array with: numArray with: stringArray.
    sql := 'INSERT INTO TESTTABLE VALUES (?, ?)'.
    db execSql: sql vars: bindArray.
] millisecondsToRun.

"Print out the miliseconds spent."
('Insert using array binding: ' + insertTime) out.

"Set times to repeat."
loopCount := 1.

"Set the SQL to do the fetch."
sql := 'SELECT * from TESTTABLE'.

"Default value of prefetchRows is 1."
db prefetchRows: 1.

selectTime1 := [
1 to: loopCount do: [ :i|
        db execSql: sql.
    ].
] millisecondsToRun.

"Print out the miliseconds spent."
('Select with prefetchRows= 1: ' + selectTime1) out.	

"Set prefetchRows to be 100."	
db prefetchRows: 100.
selectTime2 := [
1 to: loopCount do: [ :i|
    db execSql: sql.
	]
] millisecondsToRun.

"Print out the miliseconds spent."
('Select with prefetchRows=100: ' + selectTime2) out.

"Set prefetchRows to be 1000."	
db prefetchRows: 1000.
selectTime3 := [
1 to: loopCount do: [ :i|
    db execSql: sql.
	]
] millisecondsToRun.

"Print out the miliseconds spent."
('Select with and prefetchRows=1000: ' + selectTime3) out.



You can download the video directly here. If you like this kind of video, why not subscribe to "Smalltalk Daily"?

Technorati Tags: , , ,

posted by James Robertson

 Share Tweet This

web

How Did People Survive Before Firebug?

April 23, 2010 16:05:33.770

I spent a large part of the day updating the look for the media landing pages on the CST website - like the Smalltalk Daily one. It had been using the look we had before the last update, and I hadn't gotten around to changing it. It wasn't that hard; I had a template provided for me, and I only needed to make a few tweaks to the content and stylesheet.

The bigger issue was figuring out what needed to be changed where - and for that Firebug was a lifesaver. Seriously, what on earth did people do before that tool arrived?

Technorati Tags: ,

posted by James Robertson

 Share Tweet This

games

Why I Won't be Buying Final Fantasy

April 24, 2010 9:47:38.615

I keep seeing stuff like this written about it:

so i'm at 25 hours in, at Chapter Ten and here's the scoop. If you're looking for the "Free Roam" and travel stuff that 7, 8, 10 & 12 had, its in the 3rd act of Chapter 11, which sorry to say is a good 30 hours of play into the game.

I don't have a link, because that came across a chat session -but it's consistent with what I read (and hear) from people playing the game. What on earth were they thinking?

Technorati Tags:

posted by James Robertson

 Share Tweet This

social media

The Semantic Web Comes Back

April 24, 2010 18:05:14.355

Dare Obasanjo notes that the semantic web is back, via Facebook and the meta-data that they are getting ready to consume via their new open graph API:

One of the things I find most exciting about this development is that sites now have significant motivation to be marked up with extremely structured data which can then be consumed by other applications.

Technorati Tags:

posted by James Robertson

 Share Tweet This

movies

Kick Ass: Awesome

April 24, 2010 23:46:20.193

I haven't been out to see a movie in awhile - a bunch of us went out for drinks and a movie this evening, and we saw Kick Ass. Great film - some of the action sequences play like Matrix, if you can imagine a costumed 11 year old girl doing the fighting.

The beginning is a bit slow, but once it starts rolling, it really rolls. Highly recommended.

posted by James Robertson

 Share Tweet This

smalltalk

Across Smalltalks Part 2 (Podcast)

April 25, 2010 10:47:55.420

This week's podcast is part 2 of our conversation with Julian Fitzell, about cross dialect Smalltalk code - the approach taken with Grease and Slime for Seaside, and how that might help in other projects.

To listen now, you can either download the mp3 edition, or the AAC edition. The AAC edition comes with chapter markers. You can subscribe to either edition of the podcast directly in iTunes; just search for Smalltalk and look in the Podcast results. You can subscribe to the mp3 edition directly using this feed, or the AAC edition using this feed using any podcatching software. Starting with Episode 185, you can also download the podcast in ogg format.

To listen immediately, use the player below:

If you like the music we use, please visit Josh Woodward's site. We use the song Effortless for our intro/outro music. I'm sure he'd appreciate your support!

If you have feedback, send it to smalltalkpodcasts@cincom.com - or visit us on Facebook or Ning - you can vote for the Podcast Alley, and subscribe on iTunes. If you enjoy the podcast, pass the word - we would love to have more people hear about Smalltalk!

Technorati Tags: , , ,

posted by James Robertson

 Share Tweet This

itNews

It Wasn't Dead Yet?

April 26, 2010 0:10:00.000

Spotted in Slashdot

In a brief press release buried within Sony Japan's website, the company announced that they would be ending sales of the classic 3.5 inch floppy disk in the country in March of 2011. Sony introduced the size to the world in 1981, which saw its heyday in the 1990s. Sony has been one of the last major manufacturers to continue shipments of the disk type they helped develop, but had ended most worldwide sales in March of this year. The company's production of the 3.5 inch floppy ceased in 2009

I had no idea that you could still buy those things. On a slightly more serious note: "back in the day", lots of people did backups on floppies (I well remember the multi-disk flip operation). If you actually have data from that era that you need to access, it's well past time to fire up any old PC's you still have in working condition and transfer the data :)

Technorati Tags:

posted by James Robertson

 Share Tweet This

smalltalk

Array Binding with VisualWorks and Oracle: Video

April 26, 2010 6:48:32.939

Today's Smalltalk Daily looks at using Array Binding against Oracle (version 9 and up) with VisualWorks. If you're looking for a particular topic, you can find it with the Media Search application on our site.

The code used is below; To watch, click on the viewer:


"The following Workspace examples will show the performance improvements when using array 
binding and array fetching in VisualWorks."

"Connect to an Oracle database."
conn := OracleConnection new.
conn username: 'username';
password: 'password';
environment: 'ORACLEDB'.
conn connect.

sess := conn getSession.

"Drop the test table if existed."
sess prepare: 'DROP TABLE TESTTABLE';
	execute;
	answer;
	answer.

"Create a test table."
sess prepare:  'CREATE TABLE TESTTABLE(
	NUMMER int ,
	BEMERKUNG varchar2 (30)
)';
	execute;
	answer;
	answer.

"Set the number of records being inserted."
loopCount := 1000.

"The SQL used to do inerst."
sql := 'INSERT INTO TESTTABLE VALUES (?, ?)'.

"Insert: not using array binding."
sess prepare: sql.
insertTime1 := Time millisecondsToRun: [
	1 to: loopCount do: [ :i|
         sess bindInput: (Array with: i with: 'test');
		execute;
		answer;
		answer.
	].			
].

"Print out the miliseconds spent."
Transcript 
	cr; 
	show: 'Time spent without using array binding: ', insertTime1 asFloat printString.

"Insert: Using array binding."
insertTime2 := Time millisecondsToRun: [
|bindArray numArray stringArray |
    numArray := Array new: loopCount.
    stringArray := Array new: loopCount.
	1 to: loopCount do: [ :i|
		numArray at: i put: i.
		stringArray at: i put: 'test'.
	].			
	bindArray := Array with: numArray with: stringArray.
	sess prepare: sql.
         sess bindInput: bindArray;
		execute;
		answer;
		answer.
].

"Print out the miliseconds spent."
Transcript 
	cr; 
	show: 'Time spent using array binding: ', insertTime2 asFloat printString.

"Set times to repeat."
loopCount := 1.

"Set the SQL to do the fetch."
sql := 'SELECT * from TESTTABLE'.

"Default value of blockFactor is 1."
sess blockFactor: 1.

selectTime1 := Time millisecondsToRun: [
	1 to: loopCount do: [ :i|
		sess prepare: sql;
		execute.
		ans := sess answer.
		res := ans upToEnd.
    	].
].

"Print out the miliseconds spent."
Transcript 
	cr; 
	show: 'Time spent when blcokFactor is 1: ', selectTime1 asFloat printString.

"Set blockFactor to 100."
sess blockFactor: 100.

selectTime2 := Time millisecondsToRun: [
	1 to: loopCount do: [ :i|
		sess prepare: sql;
		execute.
		ans := sess answer.
		res := ans upToEnd.
    	].
].

"Print out the miliseconds spent."
Transcript 
	cr; 
	show: 'Time spent when blcokFactor is 100: ', selectTime2 asFloat printString.

"Set blockFactor to 500."
sess blockFactor: 500.

selectTime3 := Time millisecondsToRun: [
	1 to: loopCount do: [ :i|
		sess prepare: sql;
		execute.
		ans := sess answer.
		res := ans upToEnd.
    	].
].

"Print out the miliseconds spent."
Transcript 
	cr; 
	show: 'Time spent when blcokFactor is 500: ', selectTime3 asFloat printString.


You can download the video directly here. If you like this kind of video, why not subscribe to "Smalltalk Daily"?

Technorati Tags: , , , ,

posted by James Robertson

 Share Tweet This

smalltalk

Scratch on the Podcast

April 26, 2010 8:35:10.000

This Tuesday at 9 PM EDT we'll be doing the podcast - Listen live as we talk to John McIntosh and John Maloney about Scratch.

I'm sure the topic of the new Apple language regime for the iPod and iPhone will come up, but we'll primarily be focused on what Scratch is, and what kind of reception it's had in the educational community

Technorati Tags: , , , ,

posted by James Robertson

 Share Tweet This

management

Reaping What You Sow

April 26, 2010 10:11:55.000

Now Apple is finding out about the kind of distrust their new "our languages only" policy is setting up with developers - witness the rumor that flew around the internet yesterday, ultimately ending in an email that Steve Jobs felt compelled to answer personally:

We heard a rumor last week about Apple making some big changes to the Mac OS X platform, let’s say to 10.7, in order to make it similar to iPhone OS and introduce an App Store for Mac applications that should be approved by Apple first. People started complaining about it, and I guess this would be the worst thing that could happen to a Mac developer, indeed. There are entire business built on top of the open nature of Mac OS X, and Apple just can’t change it anymore

It's a fairly absurd rumor, but - ponder the fact that it started to gain traction. That's the hole Apple has dug itself with some developers. As I've said before, it's too early to tell whether enough developers are angry enough to impact Apple... but this was an interesting data point.

Technorati Tags: , ,

posted by James Robertson

 Share Tweet This

sports

The NFL Needs MoneyBall

April 26, 2010 13:15:43.000

Spotted in Wired Top Stories:

Most NFL teams have a sucky strategy at selecting their draft picks. Why? They're not looking at the numbers and crunching the data.

A few years ago Moneyball showed up, and soon thereafter, it wasn't just teams with less money (like the Oakland A's) that were zeroing in on "the stats that matter". Heck, the Red Sox suddenly became a team that could win a World Series after their new ownership bought into the idea.

Wired thinks it's high time that the NFL followed suit. I'm sure that the long suffering fans of the Detroit Lions would agree :)

Technorati Tags: ,

posted by James Robertson

 Share Tweet This

smalltalk

Argentina Leads the Way

April 26, 2010 15:30:29.000

For the upcoming Google "Summer of Code" projects, four of the five projects are being led by people from the Argentinian Smalltalk community. Looks like the Smalltalks conference series has been doing good things down there :)

Technorati Tags: , ,

posted by James Robertson

 Share Tweet This

gadgets

Something Apple Needs to Provide

April 26, 2010 19:16:18.000

Seriously, Apple - it's 2010 now:

Following Opera's script in building grassroots hysteria to goad Apple into approving a contentious app, developer Greg Hughes is teasing a video of his Wi-Fi Sync app to the peoples of planet internet. As the name implies, the app promises a complete sync of your iPhone or iPod touch with iTunes without having to tether and looks pretty straightforward

Can we get this out of the box?

Technorati Tags: , ,

posted by James Robertson

 Share Tweet This

humor

Wally Explains the 4G iPhone Mess

April 26, 2010 22:18:36.000

Scott Adams hits it out of the park :)

Technorati Tags: , , ,

posted by James Robertson

 Share Tweet This

smalltalk

Using LOBs with Oracle and VisualWorks

April 27, 2010 6:29:36.418

Today's Smalltalk Daily looks at using LOBs with Oracle (version 9 and up) with VisualWorks. If you're looking for a particular topic, you can find it with the Media Search application on our site.

The code used is below; To watch, click on the viewer:


"The following are examples to demonstrate performance improvement when 
setting the right size of LOB buffers."

"Connect to an Oracle database."
conn := OracleConnection new.
conn username: 'username';
password: 'password';
environment: 'ORACLEDB'.
conn connect.
sess := conn getSession.

"Drop the test table if existed."
sess prepare: 'DROP TABLE TestLob';
	execute;
	answer;
	answer.

"Create a test table."
sess prepare: 'CREATE TABLE TestLob (A CLOB, B BLOB, C INTEGER)';
	execute;
	answer;
	answer.

conn begin.
insertSQL := 'INSERT INTO TestLob (a, b, c) VALUES (?, ?, ?)'.
sess prepare: insertSQL.
clobLength := 2097152. "2MB"
blobLength := 2097152. "2MB"
clob := String new: clobLength withAll: $a.
blob := ByteArray new: blobLength withAll: 1.

sess lobBufferSize: 32768.  "32KB is the default buffer size for read/write Large Objects."

insertTime1 := Time millisecondsToRun: [
		sess bindInput: (Array with: clob with: blob with: 1);
		execute;
		answer;
		answer.
].

"Print out the miliseconds spent."
Transcript 
	cr; 
	show: 'Time spent for insert when lobBufferSize is 32KB ', insertTime1 asFloat printString.

"Set lobBufferSize to 1MB"
sess lobBufferSize: 1048576.  "1MB"

insertTime2 := Time millisecondsToRun: [
		sess bindInput: (Array with: clob with: blob with: 2);
		execute;
		answer;
		answer.
].

"Print out the miliseconds spent."
Transcript 
	cr; 
	show: 'Time spent  for insert when lobBufferSize is 1MB: ', insertTime2 asFloat printString.

conn commit.

conn begin.
sess := conn getSession.
selectSQL := 'SELECT * FROM TestLob'.
sess answerLobAsValue. "Get LOBs back as values."
sess defaultDisplayLobSize: 2097152. "We want every byte of the LOBs returned."

sess lobBufferSize: 32768.  "32KB is the default buffer size for read/write Large Objects."
selectTime1 := Time millisecondsToRun: [ | ans1 |
		sess prepare: selectSQL;
		execute.
		ans1 := sess answer.
		ans1 upToEnd.
].

"Print out the miliseconds spent."
Transcript 
	cr; 
	show: 'Time spent for select when lobBufferSize is 32KB ', selectTime1 asFloat printString.

"Set lobBufferSize to 1MB"
sess lobBufferSize: 1048576.  "1MB"

selectTime2 := Time millisecondsToRun: [ | ans2 | 
		sess prepare: selectSQL;
		execute.
		ans2 := sess answer.
		ans2 upToEnd.
].

"Print out the miliseconds spent."
Transcript 
	cr; 
	show: 'Time spent  for select when lobBufferSize is 1MB: ', selectTime2 asFloat printString.

conn rollback.


You can download the video directly here. If you like this kind of video, why not subscribe to "Smalltalk Daily"?

Technorati Tags: , , ,

posted by James Robertson

 Share Tweet This

gadgets

Popularity Breeds Malware

April 27, 2010 8:45:37.000

Well, it looks like we're about to find out just how secure (or not) the iPad is - it's big enough that hackers are starting to target it:

Sabina Datcu, technology writer for anti-virus firm BitDefender, wrote in a blog post today that the threat arrives via an unsolicited email urging the recipient to download the latest version of iTunes as a prelude to updating their iPad software.
"A direct link to the download location is conveniently provided. As a proof of cyber crime finesse, the web page the users are directed to is a perfect imitation of the one they would use for legitimate iTunes software downloads," Datcu said.

And we're off to the races. I wonder whether anti-virus apps for the iPad (once non-Apple background apps are allowed in OS 4) are the next step?

Technorati Tags: ,

posted by James Robertson

 Share Tweet This

law

If I Lived in California...

April 27, 2010 13:46:25.000

Is it just me, or does it appear that California law enforcement has hopped all over the Gizmodo/iPhone thing in a way that the average homeowner who spots his stolen stuff at a flea market can only dream about?

Technorati Tags: ,

posted by James Robertson

 Share Tweet This

smalltalk

More Smalltalk

April 27, 2010 15:48:49.000

I just spotted another Smalltalk implementation:

ChocoSmallTalk is a hybrid SmallTalk/Lisp implementation in Common Lisp. The purpose of this project is an embedded SmallTalk in Lisp, known as a meta-circular implementation of lisp as an add-on. As time permits this project should be usable on ARM based processors on handhelds to make a real lisp-smalltalk machine.

Technorati Tags: ,

posted by James Robertson

 Share Tweet This

podcasting

Live at 9 PM EDT

April 27, 2010 20:51:42.269

We will be live on justin.tv with John McIntosh and John Maloney - talking about Scratch - at 9 PM (10 minutes from this postingig)

posted by James Robertson

 Share Tweet This