. .

advertising

SeaBreeze 5.0 Announced at ESUG 2011

August 22, 2011 16:20:10.000

Georg Heeg is announcing SeaBreeze 5.0 at ESUG 2011:

Unlike other software products, web applications are visible world-wide by default. To be beneficial for users world-wide, especially for the increasing number of users from non-English speaking countries, companies involved in the internationalization of their business have to consider website localization. Website localization is indispensable to make the webside a global success. However, base Smalltalk systems, Seaside and previous versions of seaBreeze are minimally prepared for localization. The presentation explains fundamentals of Internationalization (I18N) and Localization (L10N) and deduces an Internationalization and Localization Model in Smalltalk, implemented in SeaBreeze. Concepts of localization processes and tools are demonstrated, including Machine Translation (MT) and Translation Memories (TM). A demo of seaBreeze 5.0 concludes the presentation.

Technorati Tags: , ,

posted by James Robertson

 Share Tweet This

st4u

ST 4U 123: Reusing the Post Editor

August 22, 2011 9:51:43.118

Today's Smalltalk 4 You continues the VA Smalltalk Seaside tutorial by reusing the post tool to edit existing posts. If you have trouble viewing it here in the browser, you can also navigate directly to YouTube. To watch now, click on the image below:

Edit Posts.

If you have trouble viewing that directly, you can click here to download the video directly. If you need the video in a Windows Media format, then download that here.

You can also watch it on YouTube:


In this section we'll reuse the posting tool we've already built to edit existing posts.

First, we'll modify the #renderPostOn: method in BlogListView - we want an edit link to appear for logged in users:


renderPost: post on: html
	html div
		class: 'post';
		with: [html strong: [html text: post title].
				html break.
					self session currentUser 
						ifNotNil: [self renderEditLinkOn: html for: post.
										html break].
					html
						html: post content;
						break;
						text: 'Posted on: ', post timestamp printString;
						break]

We check the session, and if there's a logged in user, we drop in an edit link. Next, we need that #renderEditLinkOn:for: method in BlogListView:


renderEditLinkOn: html for: post
	html anchor
		callback: [self openEditorOn: post];
		with: 'Edit'

That creates our link - we still need to write the code for using the link:


openEditorOn: post
	| editor |
	editor := BlogPostView new.
	editor post: post.
	(self 
		show: editor)
		onAnswer: [:ans | ans ifTrue: [BlogStorage default updatePost: editor post]]

Here we again see the #show:OnAnswer: control flow in VA Seaside use - but we are using the answer. recall that the post editor answers true or false - we use that in this code to determine whether or not to save the post. Since the view used in #show:onAnswer: is done at the end of that, we revert back to the main view in either case. Finally, the #updatePost: method in BlogStorage is a placeholder - in this example, all storage is in memory only:


updatePost: aPost
	"no op, since it's all in memory"

	^self

That's it - we are now reusing the post tool for editing.

That about wraps it up for today - next time, we'll get into the posting tool itself. To see that in action, let's login:

login

Note the new Edit link - try going through the blogView link - you won't see it:

edit

Follow the edit link for one of the posts - you'll see something like this:

edit post

Need more help? There's a screencast for other topics like this which you may want to watch. Questions? Try the "Chat with James" Google gadget over in the sidebar.

Technorati Tags: , ,

Enclosures:
[st4u123-iPhone.m4v ( Size: 5792419 )]

posted by James Robertson

 Share Tweet This

smalltalk

JTalk Moves Forward

August 22, 2011 9:21:32.278

JTalk (Smalltalk on Javascript) seems to be moving forward nicely - you can try the browser yourself now.

Technorati Tags:

posted by James Robertson

 Share Tweet This

news

Chargers are Coming?

August 22, 2011 9:19:24.618

Anyone reading this blog knows that I'm an electric car skeptic, and this Wired article about how "chargers are coming" doesn't change that. Consider this, near the end of the piece:

So the cars are coming. The infrastructure will follow. There’s no way of knowing at this point just what it will look like, but it almost certainly won’t look like the fueling infrastructure we’re using now. There are nearly 160,000 gas stations in the United States. We simply cannot match that, EV advocates said, nor do we need to. EV advocates say we need to move beyond our habit of driving until the tank is empty. Driving an EV means plugging in at night and topping off when you can during the day. It’s called “opportunistic charging,” and it is second-nature for EV owners.

I've been doing that with laptops for years, and it's not terribly enjoyable. Second nature or not, it's still a pain to wander around looking for a plug. It would be more than a pain to add an hour to a trip because I had to hunt for a plug. Sure, airports are adding plugs, and the thought is, car chargers will proliferate the same way. Here's the problem, as I see it, taken from personal experience:

I travel to Dallas regularly now. My morning commute (hotel to worksite) is usually in the 18-20 mile range (Grand Prarie is kind of a hotel desert). That's well within the range of an EV you say, so renting one should be a no brainer. Except... I drive out to visit my sister once a week when I'm there, and that's a 70 mile round trip. That starts getting to be a problem range-wise, especially when you factor in the need to run AC full blast for many, many months in the Dallas area - the normal range of an EV is going to drop like a rock when you have to run AC constantly. Sure, I can plug the car in at her house, but: am I expected to make my stay a few hours longer than planned just so that I can drive back to my hotel? What if I need to drive to the local Apple store - I have Apple Care, and I could have a transient issue crop up. That's not a short haul, either.

Now consider urban driving - especially given the new urbanist desire to have less parking, and to have whatever parking there is be street parking. How do you charge in that situation? Retailers are going to start happily adding charge stations in the parking lots? For one thing, see this article about Costco. For another, consider what services like Amazon are already doing to big box retailers - margins in retail have always been slim, and I expect the only change in that space will be negative. Borders will not be the last, or only, big box vendor to get hammered out of existence by online shopping.

I could be wrong, but I see EVs as a niche application. For urban (or near urban) dwellers who need to drive a little, they might make sense (then again, a Smart Car makes even more sense for that need).

Technorati Tags:

posted by James Robertson

 Share Tweet This

podcastAAC

IM 42: Fluid Positioning for VisualWorks (AAC)

August 21, 2011 23:38:52.757

Welcome to episode 42 of Independent Misinterpretations - a Smalltalk and dynamic language oriented podcast with James Robertson, Michael Lucas-Smith, and David Buck.

This Dave Buck and I speak about the automated layout tools he's been working on for VisualWorks. The podcast is being posted in two parts; episode 43 will be out next week with part two. If you want a visual idea as to what we're talking about, Dave posted a video update recently

You can subscribe to the podcast in iTunes (or any other podcatching software) using this feed directly or in iTunes with this one.

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. You can also download the podcast in ogg format.

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

If you have feedback, send it to jarober@gmail.com - or visit us on Facebook - you can subscribe in iTunes using this iTunes enabled feed.. If you enjoy the podcast, pass the word - we would love to have more people hear about Smalltalk!

Technorati Tags: , ,

Enclosures:
[im42.m4a ( Size: 16388787 )]

posted by James Robertson

 Share Tweet This

podcast

IM 42: Fluid Positioning for VisualWorks

August 21, 2011 23:38:13.097

Welcome to episode 42 of Independent Misinterpretations - a Smalltalk and dynamic language oriented podcast with James Robertson, Michael Lucas-Smith, and David Buck.

This Dave Buck and I speak about the automated layout tools he's been working on for VisualWorks. The podcast is being posted in two parts; episode 43 will be out next week with part two. If you want a visual idea as to what we're talking about, Dave posted a video update recently

You can subscribe to the podcast in iTunes (or any other podcatching software) using this feed directly or in iTunes with this one.

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. You can also download the podcast in ogg format.

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

If you have feedback, send it to jarober@gmail.com - or visit us on Facebook - you can subscribe in iTunes using this iTunes enabled feed.. If you enjoy the podcast, pass the word - we would love to have more people hear about Smalltalk!

Technorati Tags: , ,

Enclosures:
[im42.mp3 ( Size: 11856407 )]

posted by James Robertson

 Share Tweet This

esug11

ESUG Gets Going

August 21, 2011 10:32:02.272

Camp Smalltalk at ESUG 2011 has kicked off - sounds like a fair amount of work is getting done:

Stéphane Ducasse got proceedings off to a flying start yesterday with an intensive introduction to Smalltalk for newcomers. Today, work continues on a number of projects including SUnit, Seaside, Pier, Gofer, SLAPS (an LDAP server implementation) and Spoon.

Technorati Tags:

posted by James Robertson

 Share Tweet This

smalltalk

Learn Smalltalk - 2 Day Webcast Course

August 21, 2011 10:17:52.012

Dave Buck will be teaching a 2 day online Smalltalk course September 26-27th - you can get more information and register on his website.

Technorati Tags: ,

posted by James Robertson

 Share Tweet This

smalltalk

PDF Reading and Writing in Smalltalk

August 21, 2011 8:06:38.000

Christian Haidar has developed a PDF reader/writer in VisualWorks 7.8:

Support for PDF as defined by the ISO standard PDF 32000-1:2008

Look at Document class in Package [PDF Development] to find simple demos to get you started.

Best load order for development:

  1. bundle {Values Development}
  2. bundle {Fonts Development}
  3. bundle {PDF Development}

Technorati Tags:

posted by James Robertson

 Share Tweet This

smalltalk

What's Going on With Xtreams-Grid?

August 20, 2011 19:32:34.374

I just spoke to Arden Thomas, the Product Manager for Cincom Smalltalk. here's what he told me: Xtreams continues to be open source software. The grid implementation, on the other hand, is not open source - it's "take two" on what Cincom has been calling Polycephaly.

There was apparently concern over the naming - using the Xtreams name would have developers presume that the software - like Xtreams itself - was open source.

That's the good news, as it were - the entire kerfuffle (mentioned here) is a misunderstanding. The bad news? The utter lack of communication from Cincom. Yes, Arden graciously spoke to me about this, but I'm sure that he doesn't want to make personal phone calls to every single person with a question about this sort of thing. When questions like this arise, there really ought to be some kind of statement, even if it only amounts to "we regret the confusion, we'll have more details out shortly". The vast well of silence approach leads to questions, and worse - leads to people coming up with their own answers.

Ultimately, this kind of thing is a management failure. I'm happy that Arden was willing to reach out to me on this, and he deserves kudos for that.

Update: Here's the kind of community behavior that they are creating - I saw this at the end of a VWNC mailing list post, where someone was trying to explain how to solve a problem:

I'm not sure what the rules are on posting the code, and so I'm just providing the references.

When people are thinking that way, it's not a good thing.

Technorati Tags: ,

posted by James Robertson

 Share Tweet This

smalltalk

A Good Question About Xtreams

August 20, 2011 12:24:36.078

I saw this (that link will pass through a small registration UI if you haven't visited the archives before, I think) pop up in the VWNC mailing list today:

WANTED for xtream coolness and usefulness: Xtreams-Grid The delinquent has last been seen on the 11th of July, when he disclosed his shocking crimes. He left his home and went into hiding shortly after. Every hint is appreciated. Please call 1-800-GRID or report here.

While it's amusing, it's also a good question. I saw the grid announcement as well, and then... nothing. I know it's not the developers of that code keeping it quiet on purpose; that's not their style. So it's a Cincom question. Anyone? Bueller?

Update: I spoke to Arden Thomas, CST Product Manager about this. Details here.

Technorati Tags: ,

posted by James Robertson

 Share Tweet This

development

We Know Less About UI Design Than We Think We Do

August 20, 2011 12:14:08.448

It's easy to read an article like this one - which notes that the vast majority of people don't know that ctrl/command-F executes a search - and chuckle about our superiority. What it should do is makes us sit back and think, because it's clear that the "simple" UI's that are presented to people aren't as simple as we think they are. There's a reason that the touch interface pioneered by Apple with the iPod, iPhone, and iPad has caught on so well - it finally operates the way most people want a device to operate. There's a lesson in there somewhere.

Technorati Tags:

posted by James Robertson

 Share Tweet This

stupidity

Not Getting It

August 19, 2011 15:42:23.881

Thilo Weichart may not be the dumbest man on the planet, but he'd be up there in any competition. He's scared by the - wait for it - Facebook "like" button:

Weichert argues that data from any user who clicks the ‘like’ button including those who are not Facebook users (which seems to be the crux of the problem for Weichert) is immediately transmitted to a server in the United States. Weichert told German newspaper FAZ that his concern is that “Facebook can track every click on a site, how long I’m there, what I’m interested in.”

Here's a hot tip for this clown: try not clicking on the button. There, I fixed it.

posted by James Robertson

 Share Tweet This

smalltalk

Spoon 3 Alpha

August 19, 2011 11:49:18.081

Craig Latta has been busy:

Hey there, I’ve released Spoon 3 alpha 3. I look forward to tearing through a few more alphas in the coming days at ESUG! :) See you soon.

Technorati Tags:

posted by James Robertson

 Share Tweet This

st4u

ST 4U 122: Hello World in AidaWeb

August 19, 2011 9:38:32.870

Today's Smalltalk 4 You looks at AidaWeb - and building a simple "Hello World" application in it. We'll get into more useful AidaWeb work in a future screencast. If you have trouble viewing it here in the browser, you can also navigate directly to YouTube. To watch now, click on the image below:

AidaWeb

If you have trouble viewing that directly, you can click here to download the video directly. If you need the video in a Windows Media format, then download that here.

You can also watch it on YouTube:

Technorati Tags: , ,

Enclosures:
[st4u122-iPhone.m4v ( Size: 6075178 )]

posted by James Robertson

 Share Tweet This

management

Lost Investment

August 19, 2011 0:33:06.415

This is the sort of thing that really, really makes you wonder. First, HP dropped Windows for their tablets, bought Palm, and announced that WebOS was the future. Then they promoted the heck out of the TouchPad. Now... this:

In a dramatic turn of events, Hewlett-Packard said on Thursday that it will stop selling hardware based on the webOS it acquired from Palm. As part of its broad statement on Thursday regarding plans to consider spinning out its PC business, HP said “that it plans to announce that it will discontinue operations for webOS devices, specifically the TouchPad and webOS phones.”

That is one heck of a lot of wasted money...

Technorati Tags: , ,

posted by James Robertson

 Share Tweet This

smalltalk

The New CST Eval License

August 18, 2011 18:50:09.276

There are some curious things about the new license for the eval (not NC; they apparently changed things) version of VW and OS. I didn't look at the license carefully when installing (I know, but really - who does?). After seeing some discussion in the mailing list, I dug the license out of the product directory, and wow - it's a lot more restrictive than it used to be. Take this, for instance:

Licensor hereby grants to you, and you do hereby accept, a nonexclusive and nontransferable license to use the Product only as is authorized in this License Agreement. The Product may be used only at a single location on computers owned, leased or otherwise controlled by you in the manner and subject to the terms set forth in this License Agreement. You agree that you will not deploy, assign, sublicense, transfer, pledge, lease, rent, allow access to or share your rights under this License Agreement. You agree that your rights under this License Agreement do not cover deployment and are not to pass to a successor through merger or consolidation.

Technically speaking, you can't create a runtime image and deploy it even for personal, non-commercial use on one machine. That's kind of silly; I can accomplish the same thing by running a development image, so it's not clear to me who or what they think they are protecting here.

More importantly, this takes any and all community projects that might consider using VW or OS and just stops them dead. If you have been using the NC, the safest route is probably to stay with the latest version that was downloadable (7.7.1 if you grabbed it before they had it offline). As a curious side note, the old license is still the one they have on the website, which makes the whole thing even more confusing.

The amazing thing about this is that Smalltalk is already a niche product - the primary problem is that there aren't enough developers using it. How this encourages more people to grab it and give it a try is beyond me. Instantiations has the open source license path, if you are building open source applications - that leaves a door open to people who want to try something out using VA. Gemstone makes it even easier - you pay them for Gemstone/S when you hit a wall with the (CPU limited) version they have up for download.

Meanwhile, Cincom reminds me of the opening scene in "The Hitchhikers Guide to the Galaxy" - where the aliens remind humanity that the bypass plans have been locked in a basement on a distant planet for 50 years, and gosh, that should have been obvious enough.

Technorati Tags: , ,

posted by James Robertson

 Share Tweet This

js4u

JS 4U 83: append and prepend in JQuery

August 18, 2011 8:36:59.435

Javascript 4 U

Today's Javascript 4 You. Today we look at appendTo() and prependTo() in JQuery. If you have trouble viewing it here in the browser, you can also navigate directly to YouTube.

Join the Facebook Group to discuss the tutorials. You can view the archives here.

To watch now, click on the image below:

prepend/append

If you have trouble viewing that directly, you can click here to download the video directly. If you need the video in a Windows Media format, then download that here.

You can also watch it on YouTube:

Technorati Tags: , ,

Enclosures:
[js4u83-iPhone.m4v ( Size: 2117323 )]

posted by James Robertson

 Share Tweet This

smalltalk

Fun with Fuel

August 17, 2011 16:17:42.000

Mariano has some fun things to show off with Fuel at ESUG:

The first thing it come to my mind, was the following: debug something from the workspace and in the middle of the debugging, serialize the debugger into a file. Then open another image, materialize the debugger, and continue debugging. The good news is that it worked from the first shoot! Nice! I will show it in ESUG. Now, the second thing was something that was in my head since a couple of months: use Fuel to get a byte array representation of an object graph and store/retrieve it from a NoSQL database. Of course, there are several NoSQL databases, and even several wrappers for Pharo. For my experiments I choose Riak because I read it may have the best results. Runar Jordahl did the binding for such database and as many cases, the API is using HTTP protocol. Thanks to Sven Van Caekenberghe, we have now a wonderful HTTP library in Pharo Smalltalk: Zinc. Obviously, Riak client for Pharo uses Zinc.

Wish I could be at the conference or, failing that, that there was live streaming like last year :)

Technorati Tags: , ,

posted by James Robertson

 Share Tweet This

marketing

Registration Considered Harmful

August 17, 2011 14:24:08.124

Marketing departments spend a lot of time telling you how they need registration screens "for leads" (believe me - a lot of the arguments I had at Cincom centered around that topic). Meanwhile, out in the real world, here's what actually happens:

That's not a rhetorical question -- the answer is 45% of you will just bail out on the purchase, rather than give them an email address, wait for confirmation, click on the confirmation email, etc. When one "unnamed company" decided to finally get rid of that annoying piece of s*** and just let customers shop in peace, they found an extra $300,000,000 in sales by the end of the year. In the first month alone, they generated an additional $15,000,000.

But trust your marketing department - those "leads" are "priceless".

Technorati Tags: ,

posted by James Robertson

 Share Tweet This

st4u

ST 4U 121: Adding a Post Editor

August 17, 2011 9:27:15.791

Today's Smalltalk 4 You continues the VA Smalltalk Seaside tutorial with a posting tool. That gets us into flow control using #show:onAnswer:, as we need to know whether a post was submitted or cancelled on the new form we'll create today. If you have trouble viewing it here in the browser, you can also navigate directly to YouTube. To watch now, click on the image below:

Seaside Flow.

If you have trouble viewing that directly, you can click here to download the video directly. If you need the video in a Windows Media format, then download that here.

You can also watch it on YouTube:


Today we'll start making use of the login UI and custom session by creating a posting tool for the blog server. We'll be following the same pattern of development we did for the Login UI; that also means that we'll be looking at #show:onAnswer: in more depth today. Last time we used it in more or less the simplest case (i.e., we threw away the answer). Today we'll be doing more normal application flow control. To get started, define a new subclass of WAComponent:


WAComponent subclass: #BlogPostView
	instanceVariableNames: 'post'
	classVariableNames: ''
	poolDictionaries: ''

Next, we need to define a new component that will be used to login - BlogLoginView. This will be a second entry point into the application, but only for authorized users. Today, we'll be setting it and the custom session up:


WAComponent subclass: #BlogLoginView
	instanceVariableNames: 'user'
	classVariableNames: ''
	poolDictionaries: ''

We'll need to initialize any new instances of the post tool - we want them to hold an instance of BlogPost:


initialize
	"Initialize a newly created instance. This method must answer the receiver."

	super initialize.
	post := BlogPost new.

The control flow we'll set up with rendering will be a lot like the login UI< but we'll have to pay attention to the answer value this time:


renderContentOn: html
	html form: [
		html table: [
			html
				tableRow: [self renderTitleFieldOn: html];
				tableRow: [self renderContentFieldOn: html];
				tableRow: [self renderOwnerFieldOn: html];
				tableRow: [self renderButtonsOn: html]]]

renderTitleFieldOn: html
	html
		tableData: [html text: 'Title: '];
		tableData: [html textInput on: #title of: self post]

renderContentFieldOn: html
	html
		tableData: [html text: 'Content: '];
		tableData: [html textArea on: #content of: self post]

renderOwnerFieldOn: html
	html
		tableData: [html text: 'Owner: '];
		tableData: [html textInput on: #owner of: self post]

renderButtonsOn: html
	html
		tableData;
		tableData:
			[html submitButton
				callback: [self answer: true];
				value: 'Save'.
			html submitButton
				callback: [self answer: false];
				value: 'Cancel']


Notice how we send back an answer object (a boolean) in the callbacks. That makes the post tool operate a lot like a UI dialog with an accept and button. The real action kicks off from our main UI in BlogServerView. If we have a user in the session (i.e., we came in via the login UI), then we display a new menu option:


initializeMenuComponent
	menuComponent := BlogMenuView new.
	self session currentUser ifNotNil: [menuComponent addEntry: 'New Post' withAction: [self addPost]].
	menuComponent addEntry: 'All Posts' withAction: [self allPosts].
	menuComponent addEntry: 'Today''s Posts' withAction: [self todaysPosts].

The action for this link is #addPost - here's that method:


addPost
	| editor |
	editor := BlogPostView new.
	self show: editor onAnswer: [:ans | 
		ans 
			ifTrue: [BlogStorage default posts addFirst: editor post].
		self show: BlogServerView new onAnswer: [:ans2 | ]]

This is where we make use of the non-continuation control flow. We use #show:onAnswer: to move to the post tool, and we provide an answer block that examines the answer. On true, it saves the post. We don't worry about false, because either way, we proceed back to the main post view. That's all there is to flow control in Seaside when you aren't using Continuations. In many respects, it's a lot simpler.

Let's take a look at how the changes operate. First, this is the main view when we didn't login. Notice the lack of the posting option:

Main View

Now we'll go to the login UI and login:

Login

That takes us back to the main view, but now we show our new posting option:

Posting Option

Follow that link:

Post Tool

Now add the post and save it - you should see something like this:

New Post

That's it for today - but we've now seen how flow control works when using Seaside in VA Smalltalk.

Need more help? There's a screencast for other topics like this which you may want to watch. Questions? Try the "Chat with James" Google gadget over in the sidebar.

Technorati Tags: , ,

Enclosures:
[st4u121-iPhone.m4v ( Size: 7258281 )]

posted by James Robertson

 Share Tweet This

smalltalk

Dynatree for Seaside

August 17, 2011 7:35:30.000

Need a JQuery Tree Widget for your Seaside App? Torsten has the answer:

I've wrapped the MIT licensed dynatree widget as part of the JQueryWidgetBox project. So if you need a tree in your web app just try it.

Technorati Tags: , ,

posted by James Robertson

 Share Tweet This

games

New Mass Effect 3 Trailer

August 16, 2011 22:06:03.313

posted by James Robertson

 Share Tweet This

smalltalk

Smalltalk in Toronto

August 16, 2011 18:33:19.093

The next TSUG meeting on September 12 will have a speaker explaining why Bombardier is using Smalltalk:

The next meeting of the Toronto Smalltalk User Group is Monday, September 12. Stephen Smith will present a progress report a Pharo / Seaside project at Bombardier.

Technorati Tags:

posted by James Robertson

 Share Tweet This

js4u

JS 4U 82: Inserting before/after a page element

August 16, 2011 10:34:37.103

Javascript 4 U

Today's Javascript 4 You. Today we look at text replacement using JQuery. If you have trouble viewing it here in the browser, you can also navigate directly to YouTube.

Join the Facebook Group to discuss the tutorials. You can view the archives here.

To watch now, click on the image below:

insert before/after

If you have trouble viewing that directly, you can click here to download the video directly. If you need the video in a Windows Media format, then download that here.

You can also watch it on YouTube:

Technorati Tags: , ,

Enclosures:
[js4u82-iPhone.m4v ( Size: 2110478 )]

posted by James Robertson

 Share Tweet This

smalltalk

Upgrading From 7.6 to 7.8

August 15, 2011 15:58:35.148

I started a serious look at upgrading our codebase from VW 7.6 to VW 7.8 today (at least, until the next crisis appears on the horizon). The first thing I did was locate this workspace script I created late last year:


"report to a file"
file := 'mesOverrideReport.txt' asFilename writeStream.
file nextPutAll: 'For VW 7.6 with MES Loaded'; cr; cr.

"find all the overridden classes"
overriddenClasses := SmalltalkWorkbench sortedClasses select: [:each | Override isOverriddenClassOrNameSpace: each].

overriddenClasses do: [:each |
	file nextPutAll: each fullName	asString.
	file cr; tab.
	file nextPutAll: each instVarNames printString.
	file tab.
	file nextPutAll: each instVarNames size printString.
	file cr; cr].
file close.

Once I had that, I created a little class that imported that data, massaged it a bit, and then grabbed the equivalent data for the 7.8 classes (I had to load a few packages to get all of that to happen. The crux of my check was to ask the objects I created this question - if the 7.6 class had more instance variables, but they otherwise matched (or vice versa for the 7.8 class), then loading the class definitions (remember, these are overrides of class definitions) would be smooth. Doing that reduced my problem space from 29 classes down to 7, and a quick manual check of those reduced it to 2. One of those was obsoleted in 7.8 (per the release notes), so I can either change the code, or just load in our (now obsolete) override.

That left me with one class where the shape had changed in a reall incompatible way, and that will entail going back to 7.6 and changing the class definition. I'll then push that into my local repository (I created a SQLLite Store to manage the tons of useless intermediate versions I'll create). That should let me at least load the code into 7.8. Lots of things will be broken, of course - there are all the method overrides to deal with. Half the battle is getting the code to load though, and I'm most of the way there now.

Technorati Tags: ,

posted by James Robertson

 Share Tweet This

st4u

ST 4U 120: Flow in a VA Seaside App

August 15, 2011 9:49:21.910

Today's Smalltalk 4 You continues the VA Smalltalk Seaside tutorial with a closer look at the Login UI we created last time. In VA, we don't have full continuaton support, so the stock #call: usage you might normally see doesn't work - instead, we use #show:onAnswer:. That' a standard part of Seaside, but it behaves a bit differently. If you have trouble viewing it here in the browser, you can also navigate directly to YouTube. To watch now, click on the image below:

Seaside Flow.

If you have trouble viewing that directly, you can click here to download the video directly. If you need the video in a Windows Media format, then download that here.

You can also watch it on YouTube:


In this section we'll add the login UI for our posting tool (not written yet), and start making use of the custom session we set up last time. Next time, we'll get to the posting interface. One of the main things we'll look at today is how Seaside in VA differs a bit from Seaside in other Smalltalks - the lack of support for full continuations (meaning, you can't use #call:). In fact, if you try to use #call:, you'll get an exception (which can make following other tutorials a bit rough at times). As it happens, the lack of full continuation support in VA isn't much an issue with the current version of Seaside - which well see in a moment.

First, let's define the BlogLoginView class:


WAComponent subclass: #BlogLoginView
    instanceVariableNames: 'user '
    classVariableNames: ''
    poolDictionaries: ''

Note the user variable - we'll be checking that against the registered users (set up with workspace code in our example). That means we need to initialize that:


initialize
	"holds current user"

	super initialize.
	user := BlogUser new

Next, we'll render the form, and see how things differ a bit without #call::


renderContentOn: html
	html div
		class: 'login';
		with: [html paragraph: [html strong: [html text: 'Login to Post/Edit']].
				html form: [html table: [html tableRow: [self renderUsernameOn: html].
							html tableRow: [self renderPasswordOn: html]].
						self renderButtonsOn: html]]

renderUsernameOn: html
	html
		tableData: [html text: 'Username: '];
		tableData: [html textInput on: #username of: self user].

renderPasswordOn: html
	html
		tableData: [html text: 'Password: '];
		tableData: [html passwordInput on: #password of: self user].

renderButtonsOn: html
	html div with: 
		[html submitButton
			callback: [self validateLogin];
			value: 'Login'.
		html submitButton
			callback: [self show: BlogServerView new onAnswer: [:ans | ans]];
			value: 'cancel']

validateLogin
	| userOrNil |
	userOrNil := BlogStorage default users
		detect: [:each | each username = self user username and: [each password = self user password]]
		ifNone: [nil].
	self session currentUser: userOrNil.
	self show: BlogServerView new onAnswer: [:ans | ans]

There are a few things going on here worth noticing. First, see how we store data in Seaside forms? Using a symbol and a reference to the object, we map directly. That makes form handling in Seaside much, much easier than it is in many other web frameworks. Next, look at the password method above - note how easy it is to hide the password. Finally, in #renderButtonsOn: and #validateLogin, note the use of #show:onAnswer: rather than #call:

When using a continuation (#call:), control passes to the new component, and then the code returns to the point of the #call: when that component yields control. Using #show:onAnswer:, we don't get that behavior - instead, control passes to the block (the second argument) when the new component yields control. The end result is much the same, so Seaside operates as it normally does - but you do end up with less memory overhead due to fewer context stacks lurking in memory. The upshot at this point is this: use this pattern when developing Seaside apps in VA. You don't have to limit it to VA though; #show:onAnswer: is fully portable.

That about wraps it up for today - next time, we'll get into the posting tool itself.

Need more help? There's a screencast for other topics like this which you may want to watch. Questions? Try the "Chat with James" Google gadget over in the sidebar.

Technorati Tags: , , ,

Enclosures:
[st4u120-iPhone.m4v ( Size: 7258281 )]

posted by James Robertson

 Share Tweet This