<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-16793465</id><updated>2011-11-28T01:48:11.061+01:00</updated><category term='Seaside'/><category term='Smalltalk'/><category term='Dolphin Smalltalk'/><title type='text'>Read the source Luke!</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://readthesourceluke.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16793465/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://readthesourceluke.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Udo Schneider</name><uri>http://www.blogger.com/profile/03800840524438939459</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://udos.s3.amazonaws.com/udos.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>22</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-16793465.post-4002145495094270698</id><published>2009-07-22T15:52:00.001+02:00</published><updated>2009-07-22T15:52:15.839+02:00</updated><title type='text'>Regular DLLs in Smalltalk</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;IMHO this is one of the longstanding feature requests for Dolphin Smalltalk (the other being Unicode support :-)) .&lt;br/&gt;&lt;br/&gt;Up to now it was not possible to create &lt;i&gt;normal DLLs&lt;/i&gt; in Dolphin. The only thing you could do in Dolphin was creating &lt;i&gt;COM DLLs&lt;/i&gt;. But where is the difference between a COM DLL and a normal DLL.&lt;br/&gt;&lt;br/&gt;&lt;big&gt;&lt;big&gt;&lt;b&gt;Normal DLL&lt;/b&gt;&lt;/big&gt;&lt;/big&gt;&lt;br/&gt;&lt;br/&gt;A normal DLL is a &lt;a href='http://en.wikipedia.org/wiki/Portable_Executable'&gt;PE&lt;/a&gt; module which &lt;i&gt;exports&lt;/i&gt; functions. This means its &lt;a href='http://msdn.microsoft.com/en-us/magazine/cc301808.aspx'&gt;export section&lt;/a&gt; contains a list of export function names which point to function ordinals - and these ordinals point to (imagebase-relative) function addresses. After loading a DLL you can get it's address by &lt;a href='http://msdn.microsoft.com/en-us/library/ms683212%28VS.85%29.aspx'&gt;GetProcAddress()&lt;/a&gt;. GetProcAddress does nothing else than trying to find the provided name in the export names table and - if successfull - resolves the address by using the ordinal reference and add the base address (to get an absolute address). However ...&lt;br/&gt;&lt;br/&gt;... Dolphin is not able to create those export tables. This is (IMHO) due to the fact that the export table is part of the DLL stub that Dolphin provides. And except for a few minor changes this stub remains unchanched during deployment. Even if Dolphin could change the export table you'd still have the problem, that the "functions" would actually be Dolphin Callbacks ... and the address of those callbacks are not guaranteed to remain constant.&lt;br/&gt;&lt;br/&gt;So what &lt;i&gt;is &lt;/i&gt;Dolphin able to do?&lt;br/&gt;&lt;br/&gt;&lt;b&gt;&lt;big&gt;&lt;big&gt;COM DLL&lt;/big&gt;&lt;/big&gt;&lt;br/&gt;&lt;/b&gt;&lt;br/&gt;Dolphin is able to create so called "COM Server DLLs". These COM DLLs are DLLs which "export" COM Objects by using a few predefined regular DLL export functions:&lt;br/&gt;&lt;a href='http://msdn.microsoft.com/en-us/library/ms682162%28VS.85%29.aspx'&gt;DllRegisterServer()&lt;/a&gt;, &lt;a href='http://msdn.microsoft.com/en-us/library/ms691457%28VS.85%29.aspx'&gt;DllUnregisterServer()&lt;/a&gt;, &lt;a href='http://msdn.microsoft.com/en-us/library/ms690368%28VS.85%29.aspx'&gt;DllCanUnloadNow()&lt;/a&gt;, &lt;a href='http://msdn.microsoft.com/en-us/library/ms680760%28VS.85%29.aspx'&gt;DllGetClassObject()&lt;/a&gt;.&lt;br/&gt;The first two functions are called to (un-)register the control(s) (and type libs) in the registry. The important stuff is the last function. This is the base to get a COM "Class Factory" which is able to create the COM Instances in the DLL.  On the image side this is realized by the &lt;b&gt;IIPDolphin &lt;/b&gt;interface (implemented by &lt;b&gt;IPDolphin&lt;/b&gt;) and the &lt;b&gt;IIPPlughole &lt;/b&gt;Interface.&lt;br/&gt;&lt;br/&gt;&lt;big&gt;&lt;b&gt;Dolphin COM DLL/Image interaction&lt;/b&gt;&lt;/big&gt;&lt;br/&gt;&lt;br/&gt;If a process loads a Dolphin COM DLL the embedded image is not started automatically. This only happens once the first COM Call hits the DLL (i.e. via &lt;b&gt;DllGetClassObject()&lt;/b&gt;). In this case the image is started and (after some setup) the current &lt;b&gt;IPDolphin&lt;/b&gt;'s &lt;b&gt;#onStartup&lt;/b&gt; method is called. This method queries the current DLL's &lt;b&gt;IIPPlugHole &lt;/b&gt;interface. This &lt;b&gt;IPPlugHole &lt;/b&gt;Interface is then used to inform the DLL about the current &lt;b&gt;IPDolphin &lt;/b&gt;instance.&lt;br/&gt;&lt;br/&gt;At this stage the DLL has a (COM Interface) Pointer to the &lt;b&gt;IPDolphin &lt;/b&gt;instance. This is then used to forward all the COM stuff into the image and thus allow the image to do most of the COM stuff.&lt;br/&gt;The nice thing about this scheme is that except for a few very low level things most of the COM Implementation is in the image - not in the VM.&lt;br/&gt;&lt;br/&gt;&lt;big&gt;&lt;big&gt;&lt;b&gt;You said Regular DLLs! I want them!&lt;/b&gt;&lt;/big&gt;&lt;/big&gt;&lt;br/&gt;&lt;br/&gt;So how to do "real" DLLs in Smalltalk. As we already saw it not possible to change the export table - but without export table no "real" DLL.&lt;br/&gt;&lt;br/&gt;The trick is to alter the export table &lt;i&gt;after&lt;/i&gt; the DLL has been loaded. I found an &lt;a href='http://kobyk.wordpress.com/2008/08/30/unexporting-a-function-from-a-dll-at-runtime-by-name-obfuscation/'&gt;article&lt;/a&gt; dealing with &lt;b&gt;un-&lt;/b&gt;exporting a function after the DLL has been called. So I thought it must also be possible to do it the other way around.&lt;br/&gt;&lt;br/&gt;To make a long story short: &lt;b&gt;It works&lt;/b&gt;.&lt;br/&gt;A bit longer: You have to find the module base address (not that easy ... unless you know how :-) ) and from there walk through the different PE headers until you finally hit a &lt;b&gt;IMAGE_EXPORT_DIRECTORY&lt;/b&gt;. This is a structure which basically points to arrays of names, ordinals and (relative) function addresses. So all you have to do is to build new new arrays (including your own names and their associated &lt;b&gt;ExternalCallback&lt;/b&gt;s) and change the struct ... and as I said. &lt;b&gt;It works .... kind of&lt;/b&gt;.&lt;br/&gt;&lt;br/&gt;&lt;big&gt;&lt;big&gt;&lt;b&gt;What do you  mean with "works .... kind of"?&lt;/b&gt;&lt;/big&gt;&lt;/big&gt;&lt;br/&gt;&lt;br/&gt;There are two things to be aware of:&lt;br/&gt;&lt;br/&gt;&lt;b&gt;&lt;big&gt;When does the export table gets modified?&lt;/big&gt;&lt;/b&gt;&lt;br/&gt;&lt;br/&gt;The export Table of the DLL, as long as it is stored on the disk, does not contain the modified Export Table. It's only modified once the image (at a very early stage) has run. However it seems (&lt;b&gt;PLEASE CORRECT ME if I'm wrong!!!!&lt;/b&gt;) that the image is not started until the first COM call hits the DLL. And you can't expect third party apps to first do a COM call to your library before resolving exported functions.&lt;br/&gt;&lt;br/&gt;So let me state this as clear as possible: &lt;font color='#ff0000'&gt;&lt;b&gt;If you know a way to execute Smalltalk code in a DLL w/o any COM stuff going on or even better execute Smalltalk code in any event once the lib gets loaded ... &lt;big&gt;&lt;big&gt;PLEASE tell me!!!!&lt;/big&gt;&lt;/big&gt;&lt;/b&gt;&lt;/font&gt; I'll do/did the rest.&lt;br/&gt;&lt;br/&gt;&lt;big&gt;&lt;b&gt;Dolphin Smalltalk X6.1 beta does not support DLL deployment!&lt;/b&gt;&lt;/big&gt;&lt;br/&gt;&lt;br/&gt;The current beta is missing the DLL Deployment capability (DLL Stubs are missing). So I did all the testing in 6.0.&lt;br/&gt;&lt;br/&gt;&lt;big&gt;&lt;big&gt;&lt;b&gt;Summary&lt;/b&gt;&lt;/big&gt;&lt;/big&gt;&lt;br/&gt;&lt;br/&gt;Modifing a modules export table is the way to go. This should cover all use cases of DLL symbols being resolved dynamically (via &lt;b&gt;GetProcAddress()&lt;/b&gt;). However I'm quite sure this even works if the dynamic linker does it. And the best thing is ... it's ready!!!!&lt;br/&gt;&lt;br/&gt;So if someone can provide me with a way to get my Smalltalk code running in a DLL in any case as early as possible we will be able to have regular DLLs in Smalltalk. And the great thing is that it's all in Smalltalk - no VM suport needed ("it's turtles all the way down ...").&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;div class='zemanta-pixie'&gt;&lt;img src='http://img.zemanta.com/pixy.gif?x-id=6e1229aa-e708-8773-97dd-eb0d01c3315b' alt='' class='zemanta-pixie-img'/&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16793465-4002145495094270698?l=readthesourceluke.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://readthesourceluke.blogspot.com/feeds/4002145495094270698/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16793465&amp;postID=4002145495094270698' title='11 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16793465/posts/default/4002145495094270698'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16793465/posts/default/4002145495094270698'/><link rel='alternate' type='text/html' href='http://readthesourceluke.blogspot.com/2009/07/regular-dlls-in-smalltalk.html' title='Regular DLLs in Smalltalk'/><author><name>Udo Schneider</name><uri>http://www.blogger.com/profile/03800840524438939459</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://udos.s3.amazonaws.com/udos.jpg'/></author><thr:total>11</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16793465.post-4950580287246242055</id><published>2009-05-09T00:14:00.001+02:00</published><updated>2009-05-09T00:14:04.627+02:00</updated><title type='text'>Blocks in Cocoa ... finally</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;Apple's Objective-C Implementation and the Cocoa class library is once again getting more similar to Smalltalk. After Panther and Tiger introduced a usable MVC-like framework (Cocoa Bindings) Leopard added garbage collection.&lt;br/&gt;&lt;br/&gt;And now it seems that Snow Leopard is getting Blocks as well: &lt;a href='https://developer.apple.com/mac/articles/snowleopard/usingblockswithgrandcentraldispatch.html' target='_blank'&gt;https://developer.apple.com/mac/articles/snowleopard/usingblockswithgrandcentraldispatch.html&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;So it Apple decides to wrap Number and Point as full classes (or do an auto-boxing/un-boxing) IMHO the only remaining difference is the runtime system. In Smalltalk the whole class/method structure is inspectable and changeable during runtime. In ObjC you can query/add classes/methods during runtime. Only removing classes/methods is impossible .... but maybe this will change in Snow Leopard as well.&lt;br/&gt;&lt;br/&gt;&lt;div class='zemanta-pixie'&gt;&lt;img src='http://img.zemanta.com/pixy.gif?x-id=86150e63-c6dc-8048-8702-3065207749c6' class='zemanta-pixie-img'/&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16793465-4950580287246242055?l=readthesourceluke.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://readthesourceluke.blogspot.com/feeds/4950580287246242055/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16793465&amp;postID=4950580287246242055' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16793465/posts/default/4950580287246242055'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16793465/posts/default/4950580287246242055'/><link rel='alternate' type='text/html' href='http://readthesourceluke.blogspot.com/2009/05/blocks-in-cocoa-finally.html' title='Blocks in Cocoa ... finally'/><author><name>Udo Schneider</name><uri>http://www.blogger.com/profile/03800840524438939459</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://udos.s3.amazonaws.com/udos.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16793465.post-4537117712260161798</id><published>2009-05-04T20:33:00.001+02:00</published><updated>2009-05-04T20:33:27.734+02:00</updated><title type='text'>Just got my Smalltalk BYTE issue!!!!</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;&lt;img src='http://lh5.ggpht.com/_LgtWlMgLwpA/Sf80w1OeVoI/AAAAAAAAAPc/cisbx1CXKi4/%5BUNSET%5D.jpg?imgmax=800' style='max-width: 800px; float: left; margin-top: 10px; margin-bottom: 10px; margin-right: 10px;'/&gt;&lt;br/&gt;I got it! I finally got it! I found an auction on EBay where somebody sold the original 1981 BYTE issue introducing Smalltalk to the world!&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Maybe I'm crazy - but I like to collect "original" Smalltalk stuff. I got the green, orange and blue book on Ebay ... and now finally the BYTE issue. What a wonderfull day :-)&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;div class='zemanta-pixie'&gt;&lt;img src='http://img.zemanta.com/pixy.gif?x-id=6da42ee7-7648-8d5c-bde3-ebdba1991fc5' class='zemanta-pixie-img'/&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16793465-4537117712260161798?l=readthesourceluke.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://readthesourceluke.blogspot.com/feeds/4537117712260161798/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16793465&amp;postID=4537117712260161798' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16793465/posts/default/4537117712260161798'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16793465/posts/default/4537117712260161798'/><link rel='alternate' type='text/html' href='http://readthesourceluke.blogspot.com/2009/05/just-got-my-smalltalk-byte-issue.html' title='Just got my Smalltalk BYTE issue!!!!'/><author><name>Udo Schneider</name><uri>http://www.blogger.com/profile/03800840524438939459</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://udos.s3.amazonaws.com/udos.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_LgtWlMgLwpA/Sf80w1OeVoI/AAAAAAAAAPc/cisbx1CXKi4/s72-c/%5BUNSET%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16793465.post-1378069437895731461</id><published>2008-06-11T18:31:00.001+02:00</published><updated>2008-06-11T18:31:28.112+02:00</updated><title type='text'>Extended STS as Dolphin Smalltalk public source code repository</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;I just learned that David Gorisek extended STS for shared repository access. You basically keep your own local (shared) STS repository and publish certain Project Editions to the central repository.&lt;br/&gt;&lt;br/&gt;This allows you (or a team) to keep your working repository separated from the shared one. If (and only then) a project edition is "stable" you can push it to the shared repository. That's really awesome.&lt;br/&gt;&lt;br/&gt;I am working on something similar - although with a different focus: Some of my packages depend on external files (resources, dlls). So I'm concentrating on embedding these files as well - but Davids solution as one huge advantage: It's available and works &lt;b&gt;&lt;i&gt;today&lt;/i&gt;&lt;/b&gt;. I'm working with STS on daily basis and can't live w/o it. So go ahead and try it and publish your goodies. This will help the Dolphin community in general IMHO.&lt;br/&gt;&lt;br/&gt;You can find all the glory details under &lt;a href='http://sts.gorisek.com/sts/WikiPage' target='_blank'&gt;sts.gorisek.com&lt;/a&gt;. This is an WikiDoc server with an additional STS layer. So you can push your stuff to it and also write WikiPages (i.e. with further instructions).&lt;br/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16793465-1378069437895731461?l=readthesourceluke.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://readthesourceluke.blogspot.com/feeds/1378069437895731461/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16793465&amp;postID=1378069437895731461' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16793465/posts/default/1378069437895731461'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16793465/posts/default/1378069437895731461'/><link rel='alternate' type='text/html' href='http://readthesourceluke.blogspot.com/2008/06/extended-sts-as-dolphin-smalltalk.html' title='Extended STS as Dolphin Smalltalk public source code repository'/><author><name>Udo Schneider</name><uri>http://www.blogger.com/profile/03800840524438939459</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://udos.s3.amazonaws.com/udos.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16793465.post-1226613142269204717</id><published>2008-05-22T23:04:00.001+02:00</published><updated>2008-05-22T23:06:03.097+02:00</updated><title type='text'>How to add/modify contextmenu of URLPresenter/IWebBrowser2?</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;&lt;div style=''&gt;I just found a newgroup entry asking how to "&lt;a href='http://groups.google.com/group/comp.lang.smalltalk.dolphin/browse_thread/thread/c2642ce3429eb083#'&gt;add/modify contextmenu of URLPresenter&lt;/a&gt;". So it's time again to give some examples to a goodie I wrote.&lt;br/&gt;&lt;br/&gt;URLPresenterWithContextMenu (in package "US Internet Explorer Extensions") allows you to control &lt;i&gt;which&lt;/i&gt; context menu is displayed in a WebControl:&lt;br/&gt;&lt;ul&gt;&lt;li&gt;If the presenters view &lt;code&gt;#allowContextMenu&lt;/code&gt; aspect is false no context menu will be shown. Neither a custom one nor the default one.&lt;/li&gt;&lt;li&gt;If the presenters view &lt;code&gt;#allowContextMenu&lt;/code&gt; aspect is true it depends on &lt;code&gt;#contextMenu&lt;/code&gt;. If  &lt;code&gt;#contextMenu&lt;/code&gt; is not nil it will be displayed. If it is nil the default one will be used.&lt;/li&gt;&lt;/ul&gt;&lt;br/&gt;Behind the scenes this presenter implements the  &lt;code&gt;IDocHostUIHandlerDispatch&lt;/code&gt; interface to get queries for some UI events. The interesting one here is &lt;code&gt;ShowContextMenu()&lt;/code&gt; which allows you to allow/prevent the display of the default context menu. I'm using this method for the logic using &lt;code&gt;#allowContextMenu&lt;/code&gt; and &lt;code&gt;#contextMenu&lt;/code&gt;.&lt;br/&gt;&lt;br/&gt;However for &lt;i&gt;using&lt;/i&gt; this presenter no digging into COM is needed. Simply use &lt;code&gt;#allowContextMenu&lt;/code&gt; and &lt;code&gt;#contextMenu&lt;/code&gt; as written above.&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16793465-1226613142269204717?l=readthesourceluke.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://readthesourceluke.blogspot.com/feeds/1226613142269204717/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16793465&amp;postID=1226613142269204717' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16793465/posts/default/1226613142269204717'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16793465/posts/default/1226613142269204717'/><link rel='alternate' type='text/html' href='http://readthesourceluke.blogspot.com/2008/05/how-to-addmodify-contextmenu-of.html' title='How to add/modify contextmenu of URLPresenter/IWebBrowser2?'/><author><name>Udo Schneider</name><uri>http://www.blogger.com/profile/03800840524438939459</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://udos.s3.amazonaws.com/udos.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16793465.post-8545337109942307150</id><published>2008-05-22T22:49:00.002+02:00</published><updated>2008-05-22T22:51:42.057+02:00</updated><title type='text'>Embedding link to file in textbox contents</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;&lt;div style=''&gt;I just found a newgroup entry asking how to &lt;a href='http://groups.google.com/group/comp.lang.smalltalk.dolphin/browse_thread/thread/f617b2ac5dceba56#'&gt;add "links" to Textboxes&lt;/a&gt;. So it's time again to give some examples to a goodie I wrote.&lt;br/&gt;&lt;br/&gt;Welcome to "US RichTextEdit Extensions". This goodie enables some capabilites in the Windows RTF control. Surprisingly enough the RTF control already supports Links and is also able to automatically detect URLs and turn them into links. If the link you want is not a URL you have to make them linkable on your own - but thats not very hard.&lt;br/&gt;&lt;br/&gt;Let's see some code:&lt;br/&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;span class="variable"&gt;presenter&lt;/span&gt; := &lt;span class="variable"&gt;RichTextPresenter&lt;/span&gt; &lt;/br&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="message"&gt;showOn:&lt;/span&gt; &lt;span class="literal"&gt;'This is my E-Mail Address: mailto:Udo.Schneider@homeaddress.de . &lt;br /&gt;Just drop me a mail or visit me here: http://readthesourceluke.blogspot.com/'&lt;/span&gt; &lt;/br&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="message"&gt;asRichText&lt;/span&gt;.&lt;/br&gt;&lt;br /&gt;(&lt;span class="variable"&gt;presenter&lt;/span&gt; &lt;span class="message"&gt;view&lt;/span&gt;)&lt;/br&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="message"&gt;autoUrlDetect:&lt;/span&gt; &lt;span class="literal"&gt;true&lt;/span&gt;;&lt;/br&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="message"&gt;link:&lt;/span&gt; &lt;span class="literal"&gt;true&lt;/span&gt;;&lt;/br&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="message"&gt;enableMailtoLinks&lt;/span&gt;.&lt;/br&gt;&lt;br /&gt;&lt;span class="variable"&gt;presenter&lt;/span&gt; &lt;/br&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="message"&gt;when:&lt;/span&gt; &lt;span class="literal"&gt;#linkClicked:&lt;/span&gt;&lt;/br&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="message"&gt;send:&lt;/span&gt; &lt;span class="literal"&gt;#value:&lt;/span&gt;&lt;/br&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="message"&gt;to:&lt;/span&gt; &lt;/br&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[:&lt;span class="variable"&gt;link&lt;/span&gt; | &lt;/br&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="variable"&gt;MessageBox&lt;/span&gt; &lt;span class="message"&gt;notify:&lt;/span&gt; &lt;span class="variable"&gt;link&lt;/span&gt;&lt;/br&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="message"&gt;caption:&lt;/span&gt; &lt;span class="literal"&gt;'Link clicked'&lt;/span&gt;]&lt;br /&gt;&lt;/code&gt;&lt;br/&gt;&lt;br/&gt;So if you have a RichTextPresenter view you can use #autoUrlDetect: to enable/disable the automatic linking of URLs. #link: is used to enable linking in general. So even if #autoUrlDetect is true you won't see any links until you set #link: to true.&lt;br/&gt;&lt;br/&gt;The package also contains a method to make mailto: links linkable.&lt;br/&gt;#enableMailtoLinks parses the text and for mailto: links and hides the mailto: prefix so that only the email address remains. However the link itself still contains the mailto: +  email combinations. This is a good example how to use non-visible pre- and postfixes for link.&lt;br/&gt;&lt;br/&gt;This is i.e. useful if you want to present a "simple link" to the user but need a more descriptive link for your program.&lt;br/&gt;&lt;br/&gt;To capture clicked links you simply have to hook up the the #linkClicked: event in your #createSchemanticWiring method. The event parameter is the complete link - not only the user visible part. So in the mailto: link above you will get a "mailto:Udo.Schneider@homeaddress.de" although only "Udo.Schneider@homeaddress.de" is visible to the user.&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16793465-8545337109942307150?l=readthesourceluke.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://readthesourceluke.blogspot.com/feeds/8545337109942307150/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16793465&amp;postID=8545337109942307150' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16793465/posts/default/8545337109942307150'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16793465/posts/default/8545337109942307150'/><link rel='alternate' type='text/html' href='http://readthesourceluke.blogspot.com/2008/05/embedding-link-to-file-in-textbox.html' title='Embedding link to file in textbox contents'/><author><name>Udo Schneider</name><uri>http://www.blogger.com/profile/03800840524438939459</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://udos.s3.amazonaws.com/udos.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16793465.post-436743352205603558</id><published>2008-04-23T00:35:00.001+02:00</published><updated>2008-04-23T00:37:49.655+02:00</updated><title type='text'>NotifyArea Icons done right (hopefully this time!)</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;I had enough of it. Using the "Traybar" with my NotifyView was a pain in the a.. . I admit it - I'm guilty. So I decided to do it right this time. &lt;br/&gt;&lt;br/&gt;My "US NotifyView" package contains a new and natural way to deal with NotifyArea Icons. No need to hassle with views. Simply create one (or many) instance(s) of NotifyAreaIcon and use simply messages like &lt;code&gt;#show&lt;/code&gt;, &lt;code&gt;#hide&lt;/code&gt;, &lt;code&gt;#icon:&lt;/code&gt; and &lt;code&gt;#message&lt;/code&gt;. That's it. If you want events simply catch &lt;code&gt;#leftButtonPressed&lt;/code&gt;, &lt;code&gt;#leftButtonDoubleClicked&lt;/code&gt;, &lt;code&gt;#rightButtonPressed&lt;/code&gt; or &lt;code&gt;#rightButtonDoubleClicked&lt;/code&gt;.&lt;br/&gt;&lt;br/&gt;Using NotifyAreaIcons also gives you two things which are IMHO not part of any other Dolphin Traybar goodie.&lt;br/&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Survives Image Reload&lt;/b&gt;: If you save/close your image with visible Traybar icons they are restored if you reopen the image&lt;/li&gt;&lt;li&gt;&lt;b&gt;Explorer crash support&lt;/b&gt;: If your explorer crashes and rebuilds it's traybar your icons are re-added as well.&lt;/li&gt;&lt;/ul&gt;&lt;br/&gt;The following code illustrates it a bit more. Simply download the newest version of my goodies (04/23/2008) and enjoy.&lt;br/&gt;&lt;pre&gt;&lt;br/&gt;| &lt;span class='temp'&gt;&lt;span class='variable'&gt;notifyIcon&lt;/span&gt;&lt;/span&gt; &lt;span class='temp'&gt;&lt;span class='variable'&gt;notifyIcons&lt;/span&gt;&lt;/span&gt; |&lt;br/&gt;&lt;span class='comment'&gt;"Create your instance. No need to hassle with Views. Simply create an instance"&lt;/span&gt;&lt;br/&gt;&lt;span class='variable'&gt;notifyIcon&lt;/span&gt; := &lt;span class='variable'&gt;NotifyAreaIcon&lt;/span&gt; &lt;br/&gt;            &lt;span class='message'&gt;icon:&lt;/span&gt; (&lt;span class='variable'&gt;Icon&lt;/span&gt; &lt;span class='message'&gt;fromId:&lt;/span&gt; &lt;span class='literal'&gt;'!APPLICATION'&lt;/span&gt;)&lt;br/&gt;            &lt;span class='message'&gt;message:&lt;/span&gt; &lt;span class='literal'&gt;'My Application'&lt;/span&gt;.&lt;br/&gt;&lt;span class='comment'&gt;"If you want your icon to be displayed, simply send #show"&lt;/span&gt;&lt;br/&gt;&lt;span class='variable'&gt;notifyIcon&lt;/span&gt; &lt;span class='message'&gt;show&lt;/span&gt;.&lt;br/&gt;&lt;span class='comment'&gt;"You can change the tip message and the icon any time by using #icon: and #message: .&lt;br/&gt;If the icon is currently visible it's automatically updated."&lt;/span&gt;&lt;br/&gt;&lt;span class='variable'&gt;notifyIcon&lt;/span&gt; &lt;br/&gt;    &lt;span class='message'&gt;icon:&lt;/span&gt; &lt;span class='variable'&gt;Icon&lt;/span&gt; &lt;span class='message'&gt;defaultApplication&lt;/span&gt;.&lt;br/&gt;&lt;span class='variable'&gt;notifyIcon&lt;/span&gt; &lt;span class='message'&gt;message:&lt;/span&gt; &lt;span class='literal'&gt;'Changed message'&lt;/span&gt;.&lt;br/&gt;&lt;span class='comment'&gt;"You can use this i.e. to display animations"&lt;/span&gt;&lt;br/&gt;&lt;span class='variable'&gt;Icon&lt;/span&gt; &lt;span class='message'&gt;allInstances&lt;/span&gt; &lt;span class='message'&gt;asSet&lt;/span&gt; &lt;br/&gt;    &lt;span class='message'&gt;do:&lt;/span&gt; &lt;br/&gt;        [:&lt;span class='variable'&gt;each&lt;/span&gt; | &lt;br/&gt;        &lt;span class='variable'&gt;notifyIcon&lt;/span&gt;&lt;br/&gt;            &lt;span class='message'&gt;icon:&lt;/span&gt; &lt;span class='variable'&gt;each&lt;/span&gt;;&lt;br/&gt;            &lt;span class='message'&gt;message:&lt;/span&gt; &lt;span class='variable'&gt;each&lt;/span&gt; &lt;span class='message'&gt;identifier&lt;/span&gt; &lt;span class='message'&gt;displayString&lt;/span&gt;].&lt;br/&gt;&lt;span class='comment'&gt;"The icon triggers several messages which you can intercept using the regular&lt;br/&gt;#when:send:to: mechanism"&lt;/span&gt;&lt;br/&gt;&lt;span class='variable'&gt;notifyIcon&lt;/span&gt; &lt;br/&gt;    &lt;span class='message'&gt;when:&lt;/span&gt; &lt;span class='literal'&gt;#leftButtonPressed&lt;/span&gt;&lt;br/&gt;    &lt;span class='message'&gt;send:&lt;/span&gt; &lt;span class='literal'&gt;#value&lt;/span&gt;&lt;br/&gt;    &lt;span class='message'&gt;to:&lt;/span&gt; [&lt;span class='variable'&gt;Sound&lt;/span&gt; &lt;span class='message'&gt;beep&lt;/span&gt;].&lt;br/&gt;&lt;span class='variable'&gt;notifyIcon&lt;/span&gt; &lt;br/&gt;    &lt;span class='message'&gt;when:&lt;/span&gt; &lt;span class='literal'&gt;#leftButtonDoubleClicked&lt;/span&gt;&lt;br/&gt;    &lt;span class='message'&gt;send:&lt;/span&gt; &lt;span class='literal'&gt;#value&lt;/span&gt;&lt;br/&gt;    &lt;span class='message'&gt;to:&lt;/span&gt; &lt;br/&gt;        [&lt;span class='variable'&gt;Sound&lt;/span&gt; &lt;span class='message'&gt;beep&lt;/span&gt;.&lt;br/&gt;        (&lt;span class='variable'&gt;Delay&lt;/span&gt; &lt;span class='message'&gt;forMilliseconds:&lt;/span&gt; &lt;span class='literal'&gt;500&lt;/span&gt;) &lt;br/&gt;            &lt;span class='message'&gt;wait&lt;/span&gt;.&lt;br/&gt;        &lt;span class='variable'&gt;Sound&lt;/span&gt; &lt;span class='message'&gt;beep&lt;/span&gt;].&lt;br/&gt;&lt;span class='variable'&gt;notifyIcon&lt;/span&gt; &lt;br/&gt;    &lt;span class='message'&gt;when:&lt;/span&gt; &lt;span class='literal'&gt;#rightButtonPressed&lt;/span&gt;&lt;br/&gt;    &lt;span class='message'&gt;send:&lt;/span&gt; &lt;span class='literal'&gt;#value&lt;/span&gt;&lt;br/&gt;    &lt;span class='message'&gt;to:&lt;/span&gt; [&lt;span class='variable'&gt;Sound&lt;/span&gt; &lt;span class='message'&gt;bell&lt;/span&gt;].&lt;br/&gt;&lt;span class='variable'&gt;notifyIcon&lt;/span&gt; &lt;br/&gt;    &lt;span class='message'&gt;when:&lt;/span&gt; &lt;span class='literal'&gt;#rightButtonDoubleClicked&lt;/span&gt;&lt;br/&gt;    &lt;span class='message'&gt;send:&lt;/span&gt; &lt;span class='literal'&gt;#value&lt;/span&gt;&lt;br/&gt;    &lt;span class='message'&gt;to:&lt;/span&gt; &lt;br/&gt;        [&lt;span class='variable'&gt;Sound&lt;/span&gt; &lt;span class='message'&gt;bell&lt;/span&gt;.&lt;br/&gt;        (&lt;span class='variable'&gt;Delay&lt;/span&gt; &lt;span class='message'&gt;forMilliseconds:&lt;/span&gt; &lt;span class='literal'&gt;500&lt;/span&gt;) &lt;br/&gt;            &lt;span class='message'&gt;wait&lt;/span&gt;.&lt;br/&gt;        &lt;span class='variable'&gt;Sound&lt;/span&gt; &lt;span class='message'&gt;bell&lt;/span&gt;].&lt;br/&gt;&lt;span class='comment'&gt;"If you don't need the icon anymore (e.g. during #onViewClosed) you can simply hide&lt;br/&gt;it or nil the variable and let GC take care of it"&lt;/span&gt;&lt;br/&gt;&lt;span class='variable'&gt;notifyIcon&lt;/span&gt; &lt;span class='message'&gt;hide&lt;/span&gt;.&lt;br/&gt;&lt;span class='variable'&gt;notifyIcon&lt;/span&gt; := &lt;span class='literal'&gt;nil&lt;/span&gt;.&lt;br/&gt;&lt;br/&gt;&lt;span class='comment'&gt;""&lt;/span&gt;&lt;br/&gt;&lt;span class='comment'&gt;"You can even generate a whole bunch of instances"&lt;/span&gt;&lt;br/&gt;&lt;span class='variable'&gt;notifyIcons&lt;/span&gt; := &lt;span class='variable'&gt;Icon&lt;/span&gt; &lt;span class='message'&gt;allInstances&lt;/span&gt; &lt;br/&gt;            &lt;span class='message'&gt;asSet&lt;/span&gt; &lt;span class='message'&gt;collect:&lt;/span&gt; &lt;br/&gt;                    [:&lt;span class='variable'&gt;each&lt;/span&gt; | &lt;br/&gt;                    &lt;span class='variable'&gt;NotifyAreaIcon&lt;/span&gt; &lt;span class='message'&gt;icon:&lt;/span&gt; &lt;span class='variable'&gt;each&lt;/span&gt;&lt;br/&gt;                        &lt;span class='message'&gt;message:&lt;/span&gt; &lt;span class='variable'&gt;each&lt;/span&gt; &lt;span class='message'&gt;identifier&lt;/span&gt; &lt;span class='message'&gt;displayString&lt;/span&gt;].&lt;br/&gt;&lt;span class='comment'&gt;"If you want to stress test your system, show /all/ icons"&lt;/span&gt;&lt;br/&gt;&lt;span class='variable'&gt;notifyIcons&lt;/span&gt; &lt;br/&gt;    &lt;span class='message'&gt;do:&lt;/span&gt; [:&lt;span class='variable'&gt;each&lt;/span&gt; | &lt;span class='variable'&gt;each&lt;/span&gt; &lt;span class='message'&gt;show&lt;/span&gt;].&lt;br/&gt;&lt;span class='comment'&gt;"Please note, that we don't hide icons here. We simply nil the instance and let GC&lt;br/&gt;take care of it"&lt;/span&gt;&lt;br/&gt;&lt;span class='variable'&gt;notifyIcons&lt;/span&gt; := &lt;span class='literal'&gt;nil&lt;/span&gt;.&lt;br/&gt;&lt;span class='comment'&gt;"You can also force a GC"&lt;/span&gt;&lt;br/&gt;&lt;span class='variable'&gt;MemoryManager&lt;/span&gt; &lt;span class='message'&gt;current&lt;/span&gt; &lt;span class='message'&gt;collectGarbage&lt;/span&gt;&lt;br/&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16793465-436743352205603558?l=readthesourceluke.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://readthesourceluke.blogspot.com/feeds/436743352205603558/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16793465&amp;postID=436743352205603558' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16793465/posts/default/436743352205603558'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16793465/posts/default/436743352205603558'/><link rel='alternate' type='text/html' href='http://readthesourceluke.blogspot.com/2008/04/notifyarea-icons-done-right-hopefully.html' title='NotifyArea Icons done right (hopefully this time!)'/><author><name>Udo Schneider</name><uri>http://www.blogger.com/profile/03800840524438939459</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://udos.s3.amazonaws.com/udos.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16793465.post-7991574266289320648</id><published>2008-04-22T17:43:00.001+02:00</published><updated>2008-04-22T17:43:30.625+02:00</updated><title type='text'>Did you know? Drag&amp;Drop from Inspector to workspace</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;I thought I had a great idea how to improve the IDE. Dragging objects from an inspector to a workspace. This would allow you to work with these objects in a "big" workspace and not within the tiny inspector area. After spending some time browsing the class lib to get a clue how to to it I set a break point and simply dragged and object to a workspace. To my great surprise it worked! Dolphin was doing exactly what I was trying to implement.&lt;br /&gt;&lt;br /&gt;So it turned out that OA already implemented what I wanted!!! Once more it seems that DST is the best IDE one can think of. Even the things one dreams of are already there :-)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;script type='text/javascript'&gt;swfobject.embedSWF("http://udos.s3.amazonaws.com/blog/InspectorDnD/InspectorDnD.swf", "InspectorDnD", "565", "722", "9.0.0", "http://udos.s3.amazonaws.com/blog/expressInstall.swf");&lt;/script&gt;&lt;br /&gt;&lt;div id='InspectorDnD'&gt;&lt;br /&gt;&lt;h1&gt;Flash plugin not installed or too old!&lt;/h1&gt;&lt;br /&gt;&lt;p&gt;&lt;a href='http://www.adobe.com/go/getflashplayer'&gt;&lt;img alt='Get Adobe Flash player' src='http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif'/&gt;&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16793465-7991574266289320648?l=readthesourceluke.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://readthesourceluke.blogspot.com/feeds/7991574266289320648/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16793465&amp;postID=7991574266289320648' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16793465/posts/default/7991574266289320648'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16793465/posts/default/7991574266289320648'/><link rel='alternate' type='text/html' href='http://readthesourceluke.blogspot.com/2008/04/did-you-know-drag-from-inspector-to.html' title='Did you know? Drag&amp;amp;Drop from Inspector to workspace'/><author><name>Udo Schneider</name><uri>http://www.blogger.com/profile/03800840524438939459</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://udos.s3.amazonaws.com/udos.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16793465.post-6585873142105573960</id><published>2008-04-14T18:06:00.009+02:00</published><updated>2008-04-22T17:37:18.061+02:00</updated><title type='text'>Dolphin Smalltak in PSPad</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;IMHO having a good editor and learn to use it is one of the most important things to do when working with computers. And it will save you a lot of time in the long run!!&lt;br /&gt;&lt;br /&gt;A few years back I was using UltraEdit until I discovered &lt;a href='http://www.pspad.com/'&gt;PSPad&lt;/a&gt;. PSPad offers everything I needed and it is free. It also has the concept of scripts written in JScript, VBScript and Python. As the object model also supports COM it's also possible to access external COMponents.&lt;br /&gt;&lt;br /&gt;Some time ago I read a blog entry &lt;a href='http://www.cincomsmalltalk.com/userblogs/troy/blogView?showComments=true&amp;amp;printTitle=Phasing_out_TextPad_in_favor_of_NOTEPAD++&amp;amp;entry=3356852200' rel='bookmark'&gt;Phasing out TextPad in favor of NOTEPAD++&lt;/a&gt; when I got the idea to embed the workspace text functions of Dolphin Smalltalk into PSPad. Here is what I came up with:&lt;br /&gt;&lt;img src='http://udos.s3.amazonaws.com/blog/COMEvaluator/comeval.png'/&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Demo/Installation&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Load the "US Dolphin COM Evaluator.pac" package. The install scripts register the coclass and interface automatically.&lt;/li&gt;&lt;li&gt;Register the type library "dolphineval.tlb". You can do this directly from within Dolphin.&lt;/li&gt;&lt;li&gt;Copy "DolphinSmalltalk.js" into PSPad's Script\JScript directory&lt;/li&gt;&lt;li&gt;Enjoy Dolphin Smalltalk in PSPad!!!&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;script type="text/javascript"&gt;swfobject.embedSWF("http://udos.s3.amazonaws.com/blog/COMEvaluator/COMEvaluator.swf", "PSPad", "854", "738", "9.0.0", "http://udos.s3.amazonaws.com/blog/expressInstall.swf");&lt;/script&gt;&lt;br /&gt;&lt;div id="PSPad"&gt;&lt;br /&gt;&lt;h1&gt;Flash plugin not installed or too old!&lt;/h1&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://www.adobe.com/go/getflashplayer"&gt;&lt;img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Get Adobe Flash player" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16793465-6585873142105573960?l=readthesourceluke.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://readthesourceluke.blogspot.com/feeds/6585873142105573960/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16793465&amp;postID=6585873142105573960' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16793465/posts/default/6585873142105573960'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16793465/posts/default/6585873142105573960'/><link rel='alternate' type='text/html' href='http://readthesourceluke.blogspot.com/2008/04/dolphin-smalltak-in-pspad.html' title='Dolphin Smalltak in PSPad'/><author><name>Udo Schneider</name><uri>http://www.blogger.com/profile/03800840524438939459</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://udos.s3.amazonaws.com/udos.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16793465.post-5082815290997880840</id><published>2008-04-14T17:40:00.001+02:00</published><updated>2008-04-14T17:40:02.044+02:00</updated><title type='text'>Useful components from Terra Informatica</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;I just found to components on &lt;a href='http://www.terrainformatica.com/'&gt;Terra Informatica&lt;/a&gt; which might be worth wrapping them in Smalltalk.&lt;br/&gt;&lt;br/&gt;&lt;b&gt;HTMLayout&lt;/b&gt;&lt;br/&gt;&lt;div align='left'&gt;The first one is a HTMLView called "&lt;a href='http://www.terrainformatica.com/htmlayout/main.whtm'&gt;HTMLayout&lt;/a&gt;". As far as I understand up to know it simply registers it's own window class and communicates via custom window messages and WM_NOTIFY with the host applications. Both things are pretty straight forward in DST&lt;br/&gt;&lt;/div&gt;&lt;br/&gt;&lt;b&gt;TIScript&lt;/b&gt;&lt;br/&gt;The second one is a ECMA-/JavaScript compatible Scripting component called "&lt;a href='http://www.terrainformatica.com/tiscript/'&gt;TIScript&lt;/a&gt;". Browsing through the C header files it seems that embedding and providing (wrapped) Smalltalk objects to it is pretty easy.&lt;br/&gt;Up to now I used BeeBasic as a Scripting Engine. However the vendor seems to have disappeared - so I'm searching for alternatives. And no, &lt;i&gt;WSH is not an alternative&lt;/i&gt;!&lt;br/&gt; &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16793465-5082815290997880840?l=readthesourceluke.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://readthesourceluke.blogspot.com/feeds/5082815290997880840/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16793465&amp;postID=5082815290997880840' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16793465/posts/default/5082815290997880840'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16793465/posts/default/5082815290997880840'/><link rel='alternate' type='text/html' href='http://readthesourceluke.blogspot.com/2008/04/useful-components-from-terra.html' title='Useful components from Terra Informatica'/><author><name>Udo Schneider</name><uri>http://www.blogger.com/profile/03800840524438939459</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://udos.s3.amazonaws.com/udos.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16793465.post-4577311036399010685</id><published>2008-04-13T00:22:00.001+02:00</published><updated>2008-04-13T00:22:35.695+02:00</updated><title type='text'>Ghoul for DST6</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;Sometime ago I patched Ghoul to be compatible with DST6 and wrote Chris about it. As it seems that Metagnostic is down and that there will be no further enhancements of Chris' goodies I decided to release it directly.&lt;br/&gt;&lt;br/&gt;So here we have Ghoul again running under Dolphin DST6:&lt;br/&gt;&lt;img src='http://udos.s3.amazonaws.com/blog/ghoul/20080412_Ghoul_for_DST6.jpg'/&gt;&lt;br/&gt;&lt;br/&gt;You can download the package &lt;a href='http://udos.s3.amazonaws.com/blog/ghoul/Ghoul_for_DST6.zip'&gt;here&lt;/a&gt;. Please note, that you still need a copy of Chris' goodies to have access to the documentation and more.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16793465-4577311036399010685?l=readthesourceluke.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://readthesourceluke.blogspot.com/feeds/4577311036399010685/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16793465&amp;postID=4577311036399010685' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16793465/posts/default/4577311036399010685'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16793465/posts/default/4577311036399010685'/><link rel='alternate' type='text/html' href='http://readthesourceluke.blogspot.com/2008/04/ghoul-for-dst6.html' title='Ghoul for DST6'/><author><name>Udo Schneider</name><uri>http://www.blogger.com/profile/03800840524438939459</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://udos.s3.amazonaws.com/udos.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16793465.post-7782973473283332887</id><published>2008-04-12T23:11:00.003+02:00</published><updated>2008-04-13T11:13:35.967+02:00</updated><title type='text'>External Tools in Dolphin Idea Spaces</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;Based on a request in &lt;a href='http://groups.google.com/group/comp.lang.smalltalk.dolphin/topics'&gt;c.l.s.d&lt;/a&gt; "&lt;a href='http://groups.google.com/group/comp.lang.smalltalk.dolphin/browse_thread/thread/90a360927d7f0e80#'&gt;drag Squeak Shell To Dolphin's IdeaSpace&lt;/a&gt;" I decided to investigate an idea I got from an article at &lt;a href='http://www.codeproject.com/'&gt;codeproject&lt;/a&gt; (&lt;a href='http://www.codeproject.com/KB/dialog/exeHosting.aspx'&gt;Hosting .exe applications into a dialog&lt;/a&gt;). My goal was to get something similar in Dolphin - but packaged in a nice MVP friendly way.&lt;br/&gt;&lt;br/&gt;Here is what I came up with:&lt;br/&gt;&lt;b&gt;&lt;br/&gt;ExternalProcessPresenter/ExternalProcessView&lt;/b&gt;&lt;br/&gt;&lt;br/&gt;This combination allows you to display a external application within a Dolphin View/Presenter. It uses ExternalProcess (from &lt;a href='http://www.nls.net/mp/jarvis/Bob/DolphinGoodies.htm'&gt;Bob Jarvis&lt;/a&gt; Goodies) as it's model. This also means that you cannot wrap already running processes with it. The process has to be started from within Dolphin.&lt;br/&gt;&lt;br/&gt;So you'll need the model first:&lt;br/&gt;&lt;pre&gt;&lt;br/&gt;| &lt;span class='temp'&gt;&lt;span class='variable'&gt;externalProcess&lt;/span&gt;&lt;/span&gt; |&lt;br/&gt;&lt;span class='variable'&gt;externalProcess&lt;/span&gt; := (&lt;span class='variable'&gt;ExternalProcess&lt;/span&gt; &lt;span class='message'&gt;new&lt;/span&gt;)&lt;br/&gt;    &lt;span class='message'&gt;commandLine:&lt;/span&gt; (&lt;span class='variable'&gt;SpecialFolderRelativeFileLocator&lt;/span&gt; &lt;span class='message'&gt;windows&lt;/span&gt; &lt;br/&gt;        &lt;span class='message'&gt;localFileSpecFor:&lt;/span&gt; &lt;span class='literal'&gt;'system32\sol.exe'&lt;/span&gt;);&lt;br/&gt;    &lt;span class='message'&gt;yourself&lt;/span&gt;.&lt;br/&gt;&lt;/pre&gt;&lt;br/&gt;Now we show the presenter:&lt;br/&gt;&lt;pre&gt;&lt;br/&gt;&lt;span class='variable'&gt;ExternalProcessPresenter&lt;/span&gt; &lt;span class='message'&gt;showOn:&lt;/span&gt; &lt;span class='variable'&gt;externalProcess&lt;/span&gt;&lt;br/&gt;&lt;/pre&gt;DONE! This is what you should get:&lt;br/&gt;&lt;img src='http://udos.s3.amazonaws.com/blog/externalProcessView/20080412_ExternalProcessPresenter.jpg'/&gt;&lt;br/&gt;&lt;br/&gt;Cool, isn't it?&lt;br/&gt;&lt;br/&gt;&lt;b&gt;ExternalToolShell&lt;/b&gt;&lt;br/&gt;&lt;br/&gt;It even get's better. I added a Dolphin Smalltalk Integration to manage a set of external tools and run them within IdeaSpaces. Start the external Tools shell from the addition Tools folder and you'll get a shell with a List of known tools on the left. You are able to add and delete external tools and start them via double click. This allows you to e.g. run Squeak within Dolphin:&lt;br/&gt;&lt;img src='http://udos.s3.amazonaws.com/blog/externalProcessView/20080412_ExternalToolShell.jpg' /&gt;&lt;br/&gt;&lt;br/&gt;I hope this is useful for somebody.&lt;br/&gt;&lt;br/&gt;&lt;b&gt;WARNINGS/LIMITATIONS&lt;/b&gt;&lt;br/&gt;&lt;br/&gt;&lt;ul&gt;&lt;li&gt;This goodie is a Hack!!! - even for a Windows app. So you have been warned!!!&lt;/li&gt;&lt;li&gt;Single toplevel Window Applications only: If the application opens multiple top level windows only one will be shown in an IdeaSpace!&lt;/li&gt;&lt;li&gt;Force quit on View close: Currently the process' view is destroyed and the process terminated if the ExternalProcessView is closed. There is no onClose Handling&lt;/li&gt;&lt;li&gt;Redraw problems: Some controls (especially menus) have redraw problems. This is due to the fact that Windows never intended an application to have a MenuBar in a non-TopLevel Window&lt;/li&gt;&lt;li&gt;Focus Problem: When interacting with controls within the window the parent shell (IdeaSpace) looses the focus.&lt;/li&gt;&lt;/ul&gt;&lt;br/&gt;&lt;b&gt;Download&lt;/b&gt;&lt;br/&gt;Just download the newest version of my goodies and have fun!&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16793465-7782973473283332887?l=readthesourceluke.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://readthesourceluke.blogspot.com/feeds/7782973473283332887/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16793465&amp;postID=7782973473283332887' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16793465/posts/default/7782973473283332887'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16793465/posts/default/7782973473283332887'/><link rel='alternate' type='text/html' href='http://readthesourceluke.blogspot.com/2008/04/external-tools-in-dolphin-idea-spaces.html' title='External Tools in Dolphin Idea Spaces'/><author><name>Udo Schneider</name><uri>http://www.blogger.com/profile/03800840524438939459</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://udos.s3.amazonaws.com/udos.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16793465.post-5492049879910794728</id><published>2008-03-28T17:29:00.001+01:00</published><updated>2008-03-28T17:29:29.182+01:00</updated><title type='text'>Autocomplete with Images</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;My Autocomplete extensions are now part of the goodies package. What's new compared to the last version:&lt;br/&gt;&lt;dl&gt;&lt;br/&gt;&lt;dt&gt;Survives Image Reload&lt;/dt&gt;&lt;br/&gt;&lt;dd&gt;This version deals with image exits/loads and (re-)creates the image cache if needed.&lt;/dd&gt;&lt;br/&gt;&lt;dt&gt;New functionalities&lt;/dt&gt;&lt;br/&gt;&lt;dd&gt;Different MessageSend icons depending on whether you are sending a "normal", private, public, deprecated or development system message.&lt;br/&gt;&lt;/dd&gt;&lt;br/&gt;&lt;dt&gt;New Images&lt;/dt&gt;&lt;br/&gt;&lt;dd&gt;&lt;ul&gt;&lt;br/&gt;&lt;li&gt;&lt;img src='http://udos.s3.amazonaws.com/blog/autocomplete/self.png'/&gt;: self&lt;/li&gt;&lt;br/&gt;&lt;li&gt;&lt;img src='http://udos.s3.amazonaws.com/blog/autocomplete/super.png'/&gt;: super&lt;/li&gt;&lt;br/&gt;&lt;li&gt;&lt;img src='http://udos.s3.amazonaws.com/blog/autocomplete/Context.png'/&gt;: thisContext&lt;/li&gt;&lt;br/&gt;&lt;li&gt;&lt;img src='http://udos.s3.amazonaws.com/blog/autocomplete/ClassVariable.png'/&gt;: Class Variable&lt;/li&gt;&lt;br/&gt;&lt;li&gt;&lt;img src='http://udos.s3.amazonaws.com/blog/autocomplete/InstanceVariable.png'/&gt;: Instance Variable&lt;/li&gt;&lt;br/&gt;&lt;li&gt;&lt;img src='http://udos.s3.amazonaws.com/blog/autocomplete/MethodVariable.png'/&gt;: Method Variable (Argument or temp)&lt;/li&gt;&lt;br/&gt;&lt;li&gt;&lt;img src='http://udos.s3.amazonaws.com/blog/autocomplete/MessageSend.png'/&gt;: "Normal" method&lt;/li&gt;&lt;br/&gt;&lt;li&gt;&lt;img src='http://udos.s3.amazonaws.com/blog/autocomplete/PublicMessageSend.png'/&gt;: Public method&lt;/li&gt;&lt;br/&gt;&lt;li&gt;&lt;img src='http://udos.s3.amazonaws.com/blog/autocomplete/PrivateMessageSend.png'/&gt;: Private method&lt;/li&gt;&lt;br/&gt;&lt;li&gt;&lt;img src='http://udos.s3.amazonaws.com/blog/autocomplete/DeprecatedMessageSend.png'/&gt;: Deprecated method&lt;/li&gt;&lt;br/&gt;&lt;li&gt;&lt;img src='http://udos.s3.amazonaws.com/blog/autocomplete/DevelopmentMessageSend.png'/&gt;: Development method&lt;/li&gt;&lt;br/&gt;&lt;/ul&gt;&lt;/dd&gt;&lt;br/&gt;&lt;/dl&gt;&lt;br/&gt;With this goodie it's more important than ever to use good looking class icons (see also &lt;a href='http://dolphinseaside.blogspot.com/2007/11/keep-it-candy.html'&gt;Keep it candy&lt;/a&gt;) as they are not only shown in the Class Browser but in every Autocompletition menu as well :-)&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16793465-5492049879910794728?l=readthesourceluke.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://readthesourceluke.blogspot.com/feeds/5492049879910794728/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16793465&amp;postID=5492049879910794728' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16793465/posts/default/5492049879910794728'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16793465/posts/default/5492049879910794728'/><link rel='alternate' type='text/html' href='http://readthesourceluke.blogspot.com/2008/03/autocomplete-with-images.html' title='Autocomplete with Images'/><author><name>Udo Schneider</name><uri>http://www.blogger.com/profile/03800840524438939459</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://udos.s3.amazonaws.com/udos.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16793465.post-3268897241690993000</id><published>2008-03-28T15:21:00.002+01:00</published><updated>2008-04-14T10:59:58.294+02:00</updated><title type='text'>Filenames from Clipboard and via native Drag&amp;Drop</title><content type='html'>I just found two tiny packages which might help you to improve the native integration of your app with Windows. Both deal with getting file(names) from the user.&lt;br /&gt;&lt;br /&gt;1) Clipboard (US Clipboard Extensions)&lt;br /&gt;You can get filenames from the Clipboard using &lt;code&gt;#getFilenamesIfNone:&lt;/code&gt; or simply using &lt;code&gt;#getFilenames:&lt;/code&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;span class='variable'&gt;filenames&lt;/span&gt; := &lt;span class='variable'&gt;Clipboard&lt;/span&gt; &lt;span class='message'&gt;current&lt;/span&gt;  &lt;span class='message'&gt;getFilenamesIfNone:&lt;/span&gt; [].&lt;br /&gt;&lt;span class='variable'&gt;filenames&lt;/span&gt; := &lt;span class='variable'&gt;Clipboard&lt;/span&gt; &lt;span class='message'&gt;current&lt;/span&gt; &lt;span class='message'&gt;getFilenames&lt;/span&gt;.&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;2) (Native) Drag&amp;amp;Drop (US DragAndDrop Extensions)&lt;br /&gt;This package allows you to get filenames from a Drag&amp;amp;Drop Session using &lt;code&gt;#dragFilenames:&lt;/code&gt;:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;span class='variable'&gt;filenames&lt;/span&gt; := &lt;span class='variable'&gt;aDragDropSession&lt;/span&gt;  &lt;span class='message'&gt;dragFilenames&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;E.g. you can use it in the following D&amp;amp;D code:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;span class='selector'&gt;onDragOverList:&lt;/span&gt; &lt;span class='variable'&gt;aDragDropSession&lt;/span&gt; &lt;br /&gt;    | &lt;span class='temp'&gt;&lt;span class='variable'&gt;filenames&lt;/span&gt;&lt;/span&gt; |&lt;br /&gt;    &lt;span class='variable'&gt;filenames&lt;/span&gt; := &lt;span class='variable'&gt;self&lt;/span&gt; &lt;br /&gt;                &lt;span class='message'&gt;filterFilenames:&lt;/span&gt; &lt;span class='variable'&gt;aDragDropSession&lt;/span&gt; &lt;span class='message'&gt;dragFilenames&lt;/span&gt;.&lt;br /&gt;    &lt;span class='variable'&gt;aDragDropSession&lt;/span&gt; &lt;br /&gt;        &lt;span class='message'&gt;operation:&lt;/span&gt; (&lt;span class='variable'&gt;filenames&lt;/span&gt; &lt;span class='message'&gt;notEmpty&lt;/span&gt; &lt;br /&gt;                &lt;span class='message'&gt;ifTrue:&lt;/span&gt; [&lt;span class='literal'&gt;#copy&lt;/span&gt;]&lt;br /&gt;                &lt;span class='message'&gt;ifFalse:&lt;/span&gt; [&lt;span class='literal'&gt;#none&lt;/span&gt;])&lt;br /&gt;&lt;br /&gt;&lt;span class='selector'&gt;onDropOverList:&lt;/span&gt; &lt;span class='variable'&gt;aDragDropSession&lt;/span&gt; &lt;br /&gt;    | &lt;span class='temp'&gt;&lt;span class='variable'&gt;filenames&lt;/span&gt;&lt;/span&gt; |&lt;br /&gt;    &lt;span class='variable'&gt;filenames&lt;/span&gt; := &lt;span class='variable'&gt;self&lt;/span&gt; &lt;br /&gt;                &lt;span class='message'&gt;filterFilenames:&lt;/span&gt; &lt;span class='variable'&gt;aDragDropSession&lt;/span&gt; &lt;span class='message'&gt;dragFilenames&lt;/span&gt;.&lt;br /&gt;    &lt;span class='variable'&gt;filenames&lt;/span&gt; &lt;span class='message'&gt;notEmpty&lt;/span&gt; &lt;br /&gt;        &lt;span class='message'&gt;ifTrue:&lt;/span&gt; &lt;br /&gt;            [&lt;span class='variable'&gt;self&lt;/span&gt; &lt;span class='message'&gt;addFiles:&lt;/span&gt; &lt;span class='variable'&gt;filenames&lt;/span&gt;]&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;#filterFilenames:&lt;/code&gt; is one of my methods which selects only extensions acceptable for the Application.&lt;br /&gt;&lt;br /&gt;Both packages are part of my goodies which are available on this site.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16793465-3268897241690993000?l=readthesourceluke.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://readthesourceluke.blogspot.com/feeds/3268897241690993000/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16793465&amp;postID=3268897241690993000' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16793465/posts/default/3268897241690993000'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16793465/posts/default/3268897241690993000'/><link rel='alternate' type='text/html' href='http://readthesourceluke.blogspot.com/2008/03/filenames-from-clipboard-and-via-native.html' title='Filenames from Clipboard and via native Drag&amp;amp;Drop'/><author><name>Udo Schneider</name><uri>http://www.blogger.com/profile/03800840524438939459</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://udos.s3.amazonaws.com/udos.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16793465.post-2523230156403198026</id><published>2007-11-21T10:04:00.001+01:00</published><updated>2007-11-21T10:04:02.123+01:00</updated><title type='text'>Dolphin Map - To Do List</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;&lt;ul&gt;&lt;li&gt;Clean up backend code&lt;/li&gt;&lt;li&gt;Polish up the natvie GUI&lt;/li&gt;&lt;li&gt;Built a Seaside frontend&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16793465-2523230156403198026?l=readthesourceluke.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://readthesourceluke.blogspot.com/feeds/2523230156403198026/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16793465&amp;postID=2523230156403198026' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16793465/posts/default/2523230156403198026'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16793465/posts/default/2523230156403198026'/><link rel='alternate' type='text/html' href='http://readthesourceluke.blogspot.com/2007/11/dolphin-map-to-do-list.html' title='Dolphin Map - To Do List'/><author><name>Udo Schneider</name><uri>http://www.blogger.com/profile/03800840524438939459</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://udos.s3.amazonaws.com/udos.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16793465.post-6144233532087091512</id><published>2007-11-21T10:03:00.001+01:00</published><updated>2007-11-21T10:03:08.072+01:00</updated><title type='text'>Dolphin Map Online Repository works</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;The client and server side is ready. Due to Swazoo it was very easy to create a DolphinMap resource to accepts client requests. As the client uses standard HTTP for communication this should also work w/o problems behind firewalls and in proxy setups.&lt;br/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16793465-6144233532087091512?l=readthesourceluke.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://readthesourceluke.blogspot.com/feeds/6144233532087091512/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16793465&amp;postID=6144233532087091512' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16793465/posts/default/6144233532087091512'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16793465/posts/default/6144233532087091512'/><link rel='alternate' type='text/html' href='http://readthesourceluke.blogspot.com/2007/11/dolphin-map-online-repository-works.html' title='Dolphin Map Online Repository works'/><author><name>Udo Schneider</name><uri>http://www.blogger.com/profile/03800840524438939459</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://udos.s3.amazonaws.com/udos.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16793465.post-5813948529303554353</id><published>2007-11-19T12:04:00.001+01:00</published><updated>2008-03-28T17:51:18.855+01:00</updated><title type='text'>Dolphin Map is comming along...</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;DolphinMap just hit its first Milestone. The current version is able to:&lt;br/&gt;&lt;ul&gt;&lt;li&gt;Use a local file based repository&lt;/li&gt;&lt;li&gt;Import Packages (and/or additional files) into Bundles&lt;/li&gt;&lt;li&gt;Sign Bundles with Dolphin Sure certificates&lt;/li&gt;&lt;li&gt;Export Bundles to filesystem&lt;/li&gt;&lt;li&gt;Export Bundles as Zip&lt;/li&gt;&lt;li&gt;Manage Bundles (Update and Delete)&lt;/li&gt;&lt;/ul&gt;&lt;br/&gt;The next step is an online repository which will allow us to move/copy bundles between different repositories.&lt;br/&gt;&lt;br/&gt;Although not yet complete I'm already using it on a daily basis for Zip File creation. You simply define once what's in a bundle (packages and additional files like icons and documentation) and then simply update bundles if anything changes. These bundles can then easily be exported to zip files.&lt;br/&gt;&lt;br/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16793465-5813948529303554353?l=readthesourceluke.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://readthesourceluke.blogspot.com/feeds/5813948529303554353/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16793465&amp;postID=5813948529303554353' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16793465/posts/default/5813948529303554353'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16793465/posts/default/5813948529303554353'/><link rel='alternate' type='text/html' href='http://readthesourceluke.blogspot.com/2007/11/dolphin-map-is-comming-along.html' title='Dolphin Map is comming along...'/><author><name>Udo Schneider</name><uri>http://www.blogger.com/profile/03800840524438939459</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://udos.s3.amazonaws.com/udos.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16793465.post-1314921052822787100</id><published>2007-11-16T17:30:00.001+01:00</published><updated>2007-11-21T00:03:56.707+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Seaside'/><category scheme='http://www.blogger.com/atom/ns#' term='Dolphin Smalltalk'/><category scheme='http://www.blogger.com/atom/ns#' term='Smalltalk'/><title type='text'>My Image Startup script</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;Following a previous post some people asked me how my Image Startup script looks like. Well - here it is. I run this script in a clean image and it sets all the correct bits and pieces and loads all necessary packages.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;span class='variable'&gt;Transcript&lt;/span&gt; &lt;span class='message'&gt;clear&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span class='comment'&gt;"Set personal Settings"&lt;/span&gt;&lt;br /&gt;(&lt;span class='variable'&gt;SmalltalkSystem&lt;/span&gt; &lt;span class='message'&gt;current&lt;/span&gt;)&lt;br /&gt;    &lt;span class='message'&gt;autoFormatMethodSource:&lt;/span&gt; &lt;span class='literal'&gt;true&lt;/span&gt;;&lt;br /&gt;    &lt;span class='message'&gt;showSplashAtStartup:&lt;/span&gt; &lt;span class='literal'&gt;false&lt;/span&gt;.&lt;br /&gt;&lt;span class='variable'&gt;SmalltalkSystem&lt;/span&gt; &lt;span class='message'&gt;current&lt;/span&gt; &lt;span class='message'&gt;tipOfTheDayClass&lt;/span&gt; &lt;br /&gt;    &lt;span class='message'&gt;showTipsAtStartup:&lt;/span&gt; &lt;span class='literal'&gt;false&lt;/span&gt;.&lt;br /&gt;&lt;span class='variable'&gt;SmalltalkSystem&lt;/span&gt; &lt;span class='message'&gt;current&lt;/span&gt; &lt;br /&gt;    &lt;span class='message'&gt;workspaceShellClass&lt;/span&gt; &lt;span class='message'&gt;variableTips:&lt;/span&gt; &lt;span class='literal'&gt;true&lt;/span&gt;.&lt;br /&gt;&lt;span class='comment'&gt;"Connect STS Repositry"&lt;/span&gt;&lt;br /&gt;&lt;span class='variable'&gt;stsRepositryPath&lt;/span&gt; := &lt;span class='literal'&gt;'S:\Dolphin Smalltalk X6\STS Repositry'&lt;/span&gt;.&lt;br /&gt;&lt;span class='variable'&gt;StsManager&lt;/span&gt; &lt;span class='message'&gt;startUpOn:&lt;/span&gt; &lt;span class='variable'&gt;stsRepositryPath&lt;/span&gt;.&lt;br /&gt;&lt;span class='comment'&gt;"Backup Repositry and reorganize"&lt;/span&gt;&lt;br /&gt;&lt;span class='variable'&gt;stsBackupPathStream&lt;/span&gt; := &lt;span class='variable'&gt;ReadWriteStream&lt;/span&gt; &lt;br /&gt;            &lt;span class='message'&gt;on:&lt;/span&gt; &lt;span class='variable'&gt;String&lt;/span&gt; &lt;span class='message'&gt;new&lt;/span&gt;.&lt;br /&gt;&lt;span class='variable'&gt;stsBackupPathStream&lt;/span&gt;&lt;br /&gt;    &lt;span class='message'&gt;nextPutAll:&lt;/span&gt; &lt;span class='variable'&gt;stsRepositryPath&lt;/span&gt;;&lt;br /&gt;    &lt;span class='message'&gt;nextPutAll:&lt;/span&gt; &lt;span class='literal'&gt;'/Repository.BACKUP_'&lt;/span&gt;.&lt;br /&gt;&lt;span class='variable'&gt;Date&lt;/span&gt; &lt;span class='message'&gt;today&lt;/span&gt; &lt;br /&gt;    &lt;span class='message'&gt;printOn:&lt;/span&gt; &lt;span class='variable'&gt;stsBackupPathStream&lt;/span&gt;&lt;br /&gt;    &lt;span class='message'&gt;format:&lt;/span&gt; &lt;span class='literal'&gt;'yyyyMMdd'&lt;/span&gt;.&lt;br /&gt;&lt;span class='variable'&gt;Time&lt;/span&gt; &lt;span class='message'&gt;now&lt;/span&gt; &lt;br /&gt;    &lt;span class='message'&gt;printOn:&lt;/span&gt; &lt;span class='variable'&gt;stsBackupPathStream&lt;/span&gt;&lt;br /&gt;    &lt;span class='message'&gt;format:&lt;/span&gt; &lt;span class='literal'&gt;'HHmmss'&lt;/span&gt;.&lt;br /&gt;(&lt;span class='variable'&gt;StsManager&lt;/span&gt; &lt;span class='message'&gt;current&lt;/span&gt; &lt;span class='message'&gt;databaseConnection&lt;/span&gt;)&lt;br /&gt;    &lt;span class='message'&gt;createBackupOn:&lt;/span&gt; &lt;span class='variable'&gt;stsBackupPathStream&lt;/span&gt; &lt;span class='message'&gt;contents&lt;/span&gt;;&lt;br /&gt;    &lt;span class='message'&gt;reorganize&lt;/span&gt;.&lt;br /&gt;&lt;span class='comment'&gt;"Install Restore as this can't be loaded from STS"&lt;/span&gt;&lt;br /&gt;&lt;span class='variable'&gt;Package&lt;/span&gt; &lt;span class='message'&gt;manager&lt;/span&gt; &lt;span class='message'&gt;install:&lt;/span&gt; &lt;span class='literal'&gt;'S:\Dolphin Smalltalk X6\Solutions Software\ReStore120_D6\SSW ReStore MVP.pac'&lt;/span&gt;.&lt;br /&gt;&lt;span class='comment'&gt;"Packages to ignore"&lt;/span&gt;&lt;br /&gt;&lt;span class='variable'&gt;ignorePackageNames&lt;/span&gt; := #(&lt;span class='literal'&gt;'US ActiveX'&lt;/span&gt; &lt;span class='literal'&gt;'US Speedometer Control'&lt;/span&gt;).&lt;br /&gt;&lt;span class='comment'&gt;"Find all US Packages to be loaded"&lt;/span&gt;&lt;br /&gt;&lt;span class='variable'&gt;loadPackageNames&lt;/span&gt; := ((&lt;span class='variable'&gt;StsManager&lt;/span&gt; &lt;br /&gt;            &lt;span class='message'&gt;current&lt;/span&gt; &lt;span class='message'&gt;getAllPackageNames&lt;/span&gt; &lt;br /&gt;            &lt;span class='message'&gt;select:&lt;/span&gt; &lt;br /&gt;                [:&lt;span class='variable'&gt;eachPackageName&lt;/span&gt; | &lt;br /&gt;                &lt;span class='variable'&gt;eachPackageName&lt;/span&gt; &lt;span class='message'&gt;beginsWith:&lt;/span&gt; &lt;span class='literal'&gt;'US'&lt;/span&gt;]) &lt;br /&gt;                &lt;span class='message'&gt;reject:&lt;/span&gt; &lt;br /&gt;                    [:&lt;span class='variable'&gt;eachPackageName&lt;/span&gt; | &lt;br /&gt;                    &lt;span class='variable'&gt;ignorePackageNames&lt;/span&gt; &lt;br /&gt;                        &lt;span class='message'&gt;includes:&lt;/span&gt; &lt;span class='variable'&gt;eachPackageName&lt;/span&gt;]) &lt;br /&gt;                &lt;span class='message'&gt;asOrderedCollection&lt;/span&gt;.&lt;br /&gt;&lt;span class='comment'&gt;"Load Packages and Prerequsisites"&lt;/span&gt;&lt;br /&gt;[&lt;span class='variable'&gt;loadPackageNames&lt;/span&gt; &lt;span class='message'&gt;notEmpty&lt;/span&gt;] &lt;span class='message'&gt;whileTrue:&lt;/span&gt; &lt;br /&gt;        [&lt;span class='variable'&gt;currentPackageName&lt;/span&gt; := &lt;span class='variable'&gt;loadPackageNames&lt;/span&gt; &lt;br /&gt;                    &lt;span class='message'&gt;removeFirst&lt;/span&gt;.&lt;br /&gt;        &lt;span class='variable'&gt;stsPackage&lt;/span&gt; := (&lt;span class='variable'&gt;StsManager&lt;/span&gt; &lt;span class='message'&gt;current&lt;/span&gt; &lt;br /&gt;                    &lt;span class='message'&gt;getPackageEditionsFor:&lt;/span&gt; &lt;span class='variable'&gt;currentPackageName&lt;/span&gt;) &lt;br /&gt;                        &lt;span class='message'&gt;first&lt;/span&gt;.&lt;br /&gt;        &lt;span class='variable'&gt;prerequisitePackageNames&lt;/span&gt; := (&lt;span class='variable'&gt;stsPackage&lt;/span&gt; &lt;br /&gt;                    &lt;span class='message'&gt;prerequisiteNames&lt;/span&gt; &lt;span class='message'&gt;reject:&lt;/span&gt; &lt;br /&gt;                            [:&lt;span class='variable'&gt;each&lt;/span&gt; | &lt;br /&gt;                            (&lt;span class='variable'&gt;ignorePackageNames&lt;/span&gt; &lt;span class='message'&gt;includes:&lt;/span&gt; &lt;span class='variable'&gt;each&lt;/span&gt;) &lt;br /&gt;                                &lt;span class='message'&gt;or:&lt;/span&gt; &lt;br /&gt;                                    [&lt;span class='variable'&gt;Package&lt;/span&gt; &lt;span class='message'&gt;manager&lt;/span&gt; &lt;br /&gt;                                        &lt;span class='message'&gt;includesPackageNamed:&lt;/span&gt; &lt;span class='variable'&gt;each&lt;/span&gt;]]) &lt;br /&gt;                    &lt;span class='message'&gt;asOrderedCollection&lt;/span&gt;.&lt;br /&gt;        &lt;span class='variable'&gt;prerequisitePackageNames&lt;/span&gt; &lt;span class='message'&gt;isEmpty&lt;/span&gt; &lt;br /&gt;            &lt;span class='message'&gt;ifTrue:&lt;/span&gt; &lt;br /&gt;                [&lt;span class='variable'&gt;stsPackage&lt;/span&gt; &lt;span class='message'&gt;isLoaded&lt;/span&gt; &lt;br /&gt;                    &lt;span class='message'&gt;ifFalse:&lt;/span&gt; [&lt;span class='variable'&gt;stsPackage&lt;/span&gt; &lt;span class='message'&gt;load&lt;/span&gt;]]&lt;br /&gt;            &lt;span class='message'&gt;ifFalse:&lt;/span&gt; &lt;br /&gt;                [&lt;span class='variable'&gt;loadPackageNames&lt;/span&gt; := &lt;span class='variable'&gt;loadPackageNames&lt;/span&gt; &lt;br /&gt;                            &lt;span class='message'&gt;,&lt;/span&gt; &lt;span class='variable'&gt;prerequisitePackageNames&lt;/span&gt;.&lt;br /&gt;                &lt;span class='variable'&gt;loadPackageNames&lt;/span&gt; &lt;br /&gt;                    &lt;span class='message'&gt;addLast:&lt;/span&gt; &lt;span class='variable'&gt;currentPackageName&lt;/span&gt;]]&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16793465-1314921052822787100?l=readthesourceluke.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://readthesourceluke.blogspot.com/feeds/1314921052822787100/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16793465&amp;postID=1314921052822787100' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16793465/posts/default/1314921052822787100'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16793465/posts/default/1314921052822787100'/><link rel='alternate' type='text/html' href='http://readthesourceluke.blogspot.com/2007/11/my-image-startup-script.html' title='My Image Startup script'/><author><name>Udo Schneider</name><uri>http://www.blogger.com/profile/03800840524438939459</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://udos.s3.amazonaws.com/udos.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16793465.post-3576064491967920956</id><published>2007-11-13T18:07:00.001+01:00</published><updated>2007-11-13T18:07:35.556+01:00</updated><title type='text'>New version of Seaside (IDB Package clash fixes)</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;Esteban just published an &lt;a href="http://dolphinseaside.blogspot.com/2007/11/and-again.html"&gt;updated version&lt;/a&gt; of Seaside which fixes the package clash problems I had.&lt;br /&gt;That's IMHO one of the great things in the Dolphin Community: Reaction times are absolutely amazing. I'm loving it.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16793465-3576064491967920956?l=readthesourceluke.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://readthesourceluke.blogspot.com/feeds/3576064491967920956/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16793465&amp;postID=3576064491967920956' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16793465/posts/default/3576064491967920956'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16793465/posts/default/3576064491967920956'/><link rel='alternate' type='text/html' href='http://readthesourceluke.blogspot.com/2007/11/new-version-of-seaside-idb-package.html' title='New version of Seaside (IDB Package clash fixes)'/><author><name>Udo Schneider</name><uri>http://www.blogger.com/profile/03800840524438939459</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://udos.s3.amazonaws.com/udos.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16793465.post-253547096231014879</id><published>2007-11-13T15:24:00.002+01:00</published><updated>2008-04-29T09:48:07.325+02:00</updated><title type='text'>Can't connect to Seaside (SOLVED)</title><content type='html'>It seems that accessing Dolphin/Seaside is &lt;b&gt;only possible using the URL &lt;code&gt;http://localhost:8888/seaside&lt;/code&gt;&lt;/b&gt;. Every other host (e.g. "127.0.0.1" or an external IP) doesn't work. This definitely limits it's use - however I cannot imagine that this is a bug. I think this is intended behavior which I simply do not understand.&lt;br /&gt;&lt;br /&gt;&lt;big&gt;&lt;b&gt;UPDATE:&lt;/b&gt;&lt;/big&gt;&lt;br /&gt;This was indeed intended behavoir - of Swazoo in this case. Swazoo uses "Sites" defined by hostname, ip and port to offer virtual hosting. And these Site definitions are very strict. E.g.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;span class="variable"&gt;site&lt;/span&gt; := &lt;span class="variable"&gt;Site&lt;/span&gt; &lt;span class="message"&gt;new&lt;/span&gt; &lt;/br&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="message"&gt;name:&lt;/span&gt; &lt;span class="literal"&gt;'seaside'&lt;/span&gt;.&lt;/br&gt;&lt;br /&gt;&lt;span class="variable"&gt;site&lt;/span&gt; &lt;/br&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="message"&gt;host:&lt;/span&gt; &lt;span class="literal"&gt;'localhost'&lt;/span&gt;&lt;/br&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="message"&gt;ip:&lt;/span&gt; &lt;span class="literal"&gt;'127.0.0.1'&lt;/span&gt;&lt;/br&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="message"&gt;port:&lt;/span&gt; &lt;span class="literal"&gt;8888&lt;/span&gt;.&lt;/br&gt;&lt;br /&gt;&lt;span class="variable"&gt;site&lt;/span&gt; &lt;/br&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="message"&gt;addResource:&lt;/span&gt; (&lt;span class="variable"&gt;composite&lt;/span&gt; := &lt;span class="variable"&gt;CompositeResource&lt;/span&gt; &lt;/br&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="message"&gt;uriPattern:&lt;/span&gt; &lt;span class="literal"&gt;'/'&lt;/span&gt;).&lt;/br&gt;&lt;br /&gt;&lt;span class="variable"&gt;composite&lt;/span&gt; &lt;/br&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="message"&gt;addResource:&lt;/span&gt; (&lt;span class="variable"&gt;SeasideSwazooResource&lt;/span&gt; &lt;/br&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="message"&gt;uriPattern:&lt;/span&gt; &lt;span class="literal"&gt;'seaside'&lt;/span&gt;).&lt;/br&gt;&lt;br /&gt;&lt;span class="variable"&gt;site&lt;/span&gt;&lt;/br&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="message"&gt;addAlias:&lt;/span&gt; (&lt;span class="variable"&gt;SiteIdentifier&lt;/span&gt; &lt;/br&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="message"&gt;ip:&lt;/span&gt; &lt;span class="literal"&gt;'127.0.0.1'&lt;/span&gt;&lt;/br&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="message"&gt;port:&lt;/span&gt; &lt;span class="literal"&gt;8888&lt;/span&gt;&lt;/br&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="message"&gt;host:&lt;/span&gt; &lt;span class="literal"&gt;'localhost'&lt;/span&gt;);&lt;/br&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="message"&gt;addAlias:&lt;/span&gt; (&lt;span class="variable"&gt;SiteIdentifier&lt;/span&gt; &lt;/br&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="message"&gt;ip:&lt;/span&gt; &lt;span class="literal"&gt;'127.0.0.1'&lt;/span&gt;&lt;/br&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="message"&gt;port:&lt;/span&gt; &lt;span class="literal"&gt;8888&lt;/span&gt;&lt;/br&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="message"&gt;host:&lt;/span&gt; &lt;span class="literal"&gt;'172.16.1.128'&lt;/span&gt;).&lt;/br&gt;&lt;br /&gt;&lt;span class="variable"&gt;SwazooServer&lt;/span&gt; &lt;span class="message"&gt;singleton&lt;/span&gt; &lt;/br&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="message"&gt;addSite:&lt;/span&gt; &lt;span class="variable"&gt;site&lt;/span&gt;.&lt;/br&gt;&lt;br /&gt;&lt;span class="variable"&gt;SwazooServer&lt;/span&gt; &lt;span class="message"&gt;start&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;This site definition will listen only to &lt;code&gt;http://localhost:8888/seaside/&lt;/code&gt;. Even &lt;code&gt;http://127.0.0.1:8888/seaside/&lt;/code&gt; won't work as &lt;code&gt;127.0.0.1&lt;/code&gt; does not equal &lt;code&gt;localhost&lt;/code&gt; for Swazoo (although it does for DNS).&lt;br /&gt;&lt;br /&gt;The solution is to use Site Aliases to allow Swazoo to handle thos situations. E.g.:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;span class="variable"&gt;site&lt;/span&gt;&lt;/br&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="message"&gt;addAlias:&lt;/span&gt; (&lt;span class="variable"&gt;SiteIdentifier&lt;/span&gt; &lt;/br&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="message"&gt;ip:&lt;/span&gt; &lt;span class="literal"&gt;'127.0.0.1'&lt;/span&gt;&lt;/br&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="message"&gt;port:&lt;/span&gt; &lt;span class="literal"&gt;8888&lt;/span&gt;&lt;/br&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="message"&gt;host:&lt;/span&gt; &lt;span class="literal"&gt;'127.0.0.1'&lt;/span&gt;);&lt;/br&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="message"&gt;addAlias:&lt;/span&gt; (&lt;span class="variable"&gt;SiteIdentifier&lt;/span&gt; &lt;/br&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="message"&gt;ip:&lt;/span&gt; &lt;span class="literal"&gt;'127.0.0.1'&lt;/span&gt;&lt;/br&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="message"&gt;port:&lt;/span&gt; &lt;span class="literal"&gt;8888&lt;/span&gt;&lt;/br&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="message"&gt;host:&lt;/span&gt; &lt;span class="literal"&gt;'172.16.1.128'&lt;/span&gt;)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;This allows the site to be called using &lt;code&gt;http://127.0.0.1:8888/seaside/&lt;/code&gt; and &lt;code&gt;http://172.16.1.128:8888/seaside/&lt;/code&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16793465-253547096231014879?l=readthesourceluke.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://readthesourceluke.blogspot.com/feeds/253547096231014879/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16793465&amp;postID=253547096231014879' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16793465/posts/default/253547096231014879'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16793465/posts/default/253547096231014879'/><link rel='alternate' type='text/html' href='http://readthesourceluke.blogspot.com/2007/11/can-connect-to-seaside.html' title='Can&amp;#39;t connect to Seaside (SOLVED)'/><author><name>Udo Schneider</name><uri>http://www.blogger.com/profile/03800840524438939459</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://udos.s3.amazonaws.com/udos.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16793465.post-4670524857118549973</id><published>2007-11-13T15:08:00.001+01:00</published><updated>2007-11-13T15:09:19.947+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Seaside'/><category scheme='http://www.blogger.com/atom/ns#' term='Dolphin Smalltalk'/><category scheme='http://www.blogger.com/atom/ns#' term='Smalltalk'/><title type='text'>Finding my way through Seaside/Dolphin</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;I started to play around with Seaside 2.8 on Dolphin. It seems that there are some dependencies (with my code?) which I am not quit able to trace. When loading the project editions from STS into a clean image everything works ...&lt;br /&gt;However as I'm rebuilding my image daily with a script based on STS package editions I cannot (yet) load project editions manually. I either have to find out how to tackle this dependency problem or extend my script to load the project editions before doing anything else.&lt;br /&gt;&lt;br /&gt;... Stay tuned&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16793465-4670524857118549973?l=readthesourceluke.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://readthesourceluke.blogspot.com/feeds/4670524857118549973/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16793465&amp;postID=4670524857118549973' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16793465/posts/default/4670524857118549973'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16793465/posts/default/4670524857118549973'/><link rel='alternate' type='text/html' href='http://readthesourceluke.blogspot.com/2007/11/finding-my-way-through-seasidedolphin.html' title='Finding my way through Seaside/Dolphin'/><author><name>Udo Schneider</name><uri>http://www.blogger.com/profile/03800840524438939459</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://udos.s3.amazonaws.com/udos.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16793465.post-4788475545452945668</id><published>2007-11-13T10:59:00.001+01:00</published><updated>2007-11-13T12:10:46.457+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Seaside'/><category scheme='http://www.blogger.com/atom/ns#' term='Dolphin Smalltalk'/><category scheme='http://www.blogger.com/atom/ns#' term='Smalltalk'/><title type='text'>Getting the STS/Seaside wrapper up to speed</title><content type='html'>Just started to clean up the dust from a Seaside/STS wrapper I wrote. I stopped working on it when I discovered that uploading files didn't work with the 2.6 Dolphin port. With a &lt;a href="http://dolphinseaside.blogspot.com/2007/11/seaside-28-for-dolphin-candidate.html"&gt;working 2.8 port&lt;/a&gt; right now it's time to start again.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16793465-4788475545452945668?l=readthesourceluke.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://readthesourceluke.blogspot.com/feeds/4788475545452945668/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16793465&amp;postID=4788475545452945668' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16793465/posts/default/4788475545452945668'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16793465/posts/default/4788475545452945668'/><link rel='alternate' type='text/html' href='http://readthesourceluke.blogspot.com/2007/11/getting-stsseaside-wrapper-up-to-speed_13.html' title='Getting the STS/Seaside wrapper up to speed'/><author><name>Udo Schneider</name><uri>http://www.blogger.com/profile/03800840524438939459</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://udos.s3.amazonaws.com/udos.jpg'/></author><thr:total>0</thr:total></entry></feed>
