These are some scripts and tips I used in my daily developement with Pharo Smalltalk in the last years. Hope you find them useful:
Parsing XML with DOM
You can instantiate and parse a XML DOM parser with one line of code:
(XMLDOMParser parseFileNamed: 'fao_country_names.xml')
firstNode
allElementsSelect: [ : each |
each localName = 'geographical_region' ].
NeoCSV
You can quickly parse a CSV file using
NeoCSV with just a snippet for most tasks:
(NeoCSVReader on: 'myfile.csv' asFileReference readStream)
separator: Character tab;
do: [ : row | " do something with row "
row
first;
second;
third ]
or using a one-liner
'myfile.csv' asFileReference readStreamDo: [ : stream |
(NeoCSVReader on: stream) upToEnd ]
Lorem Ipsum
You already have the first paragraph of "Lorem ipsum" available in Pharo.
String loremIpsum
Profiling
If you are developing UI you can have the Time Profiler (Pharo) opened in any method by enclosing your code between:
TimeProfiler new openOnBlock: [
" Your code ... "
]
Open File Dialog
Opening a File Dialog for specific file type is a one-liner:
UIManager default chooseFileMatching: #('*.xml').
Spec
Spec is a relatively young UI Specification library. You can prototype UI's easily by using Dynamic Composable Models, for example:
| view layout |
" Configure the Spec models "
view := DynamicComposableModel new
instantiateModels: #(labelA LabelModel textA TextInputFieldModel labelB LabelModel textB TextInputFieldModel);
extent: 500@200;
title: 'Title'
yourself.
" Configure the Spec layout "
layout := SpecLayout composed
newColumn: [ : r | r
add: #labelA; add: #textA;
add: #labelB; add: #textB ];
yourself.
" Set up the widgets "
view labelA text: 'A'.
view labelB text: 'B'.
" Open the Window "
(view openDialogWithSpecLayout: layout)
centered;
modalRelativeTo: World.
Morphic Window and Controls
If you need a basic container Morph window, just evaluate:
| s |
(s := SystemWindow labelled: 'Window')
openInHand.
s addMorph: (StringMorph new
contents: 'Comments:';
color: Color black)
frame: (0@0.0 corner: 1@0.2).
But you can have a control like a TextArea without container
| o ptm |
o := Object new.
ptm := PluggableTextMorph on: o text: #printString accept: nil.
ptm height: TextStyle defaultFont height + 6.
ptm acceptOnCR: true; openInHand.
And instantiated differently
(PluggableTextMorph on: Workspace new
text: #contents
accept: #acceptContents:
readSelection: nil
menu: #codePaneMenu:shifted:) openInHand.
FTP
Udo Schneider recently wrote an
FTP/WebDAV Plugin for the Pharo FileSystem, and you get almost for free a FTP client using the File Browser
fs := FileSystem ftp: 'ftp://ftp.mozilla.org'.
FileList openOn: fs workingDirectory.
fs close.