Hi Max,

Okay now I'm busy feeling pretty stupid. I sincerely appreciate your 
(everyone's) help and patience with me. I'm pretty sure I'm all finished being 
retarded now. I'm going to try not to bother y'all again until I have much 
better (harder) questions :p




Many thanks Max and many thanks to you all,
Gerry



-----Original Message-----
From: "Max Leske" <[email protected]>
To: [email protected]
Date: 01/05/12 02:56
Subject: Re: [Pharo-project] Pharo by Example


I'll try to give you a scenario for a simple project:

 - Click on any class in the browser. You will see the class definition that 
will look somewhat like this (I replaced actual names with placeholders): 
<superclass> subclass: #<name of your class>    
     instanceVariableNames: '<instVar1> <instVar2>' 
     classVariableNames: '' 
     poolDictionaries: '' 
     category: '<name of your project category>'
 - 
For this example let's use this: 
Object subclass: #MyCalculator    
     instanceVariableNames: '' 
     classVariableNames: '' 
     poolDictionaries: '' 
     category: 'GCal'

 - Once you have the class definition you want, hit ctrl+s (or cdm+s on Mac) 
and the browser will show you your new category in the leftmost panel, 
containing your new class MyCalculator which is a subclass of Object.
 - Go to the third panel from the left. This panel contains "protocols" (method 
categories). You will see something like "no messages". Click on that label and 
you will be presented with a method template.
 - Your first method: 
add: aMoney to: anotherMoney 
    ^ aMoney + anotherMoney
 - Again, hit ctrl+s once your finished. Now of course we'll need a money class 
that understands the #+ selector: 
Object subclass: #Money    
     instanceVariableNames: 'value' 
     classVariableNames: '' 
     poolDictionaries: '' 
     category: 'GCal'
 - Define the message #+ for the class Money: 
+ aMoney 
     ^ self value + aMoney value
 - And define the method value: 
value 
    ^ value 

 - Once you save the method #value you'll be asked if you want 'value' to be an 
instance variable or a temporary variable. Make it an instance variable.
 - In the browser below the panel with the classes, click on 'class' to see 
"class side" methods and define the method #value: : 
value: aNumber 
    ^ self new 
        initializeWith: aNumber; 
        yourself 

 - Go back to the "instance side" of the class and define the method 
#initializeWith: : 
initializeWith: aNumber 
    value := aNumber
 - Open the world menu and open a workspace
 - Type this in the workspace: 
MyCalculator new add: (Money value: 30) to: (Money value: 20) 

 - hit ctrl+p to print the result (hopefully 50, I haven't tested the example 
:) )
 
 
You would follow the same steps to enhance your application further. Now you 
should take a look at Monticello to learn how to manage versions of your 
application.

 
Hope this helps a bit.

 
Cheers,
Max

 

 
On 05.01.2012, at 09:26, Gerry Weaver wrote:


Hi Max, 

Okay thanks. I think I get the startup scenario now.  


I come from the other end of the world in terms of software development 
(kernel, C, command line, etc.). I guess the part that's giving me a hard time 
is really the IDE workflow. I want to start writing code, but I feel kind of 
like I'm trying to build a ship in a bottle. What I would expect is that I 
would create some kind of project spec and add my code to that, but instead I'm 
finding this rather strange path. I assume that it's all about defining 
classes, but I'm having trouble figuring out where and how to do that. For 
example, is an application a category or is it just a way to group like 
functionality? Collections look like they are a tool for organizing code? 
Anyway, I'm going to keep plugging away at it. I kind of hoping maybe 
Visualworks will fill in some of the blanks.  


I recently left my job as a full time developer. There are several projects 
that I've been thinking about over the last few years. Since I am now a force 
of one, I'm looking for a higher level (hopefully more productive) language to 
code in.  One of the things that attracted me to Smalltalk was the concept of 
the image and something called "Opentalk". Most of the applications I have in 
mind would be distributed in nature. However, a web interface wouldn't be 
completely out of the question. The FFI is also something that will be critical 
for me. I have quite a bit of C code that I will want to make use of.  


I have watched several of the screencasts, but they seem to leave out the part 
that I am having trouble with. I am still actively searching though. 


Thanks, 
Gerry 


-----Original Message----- 
From: "Max Leske" < [email protected]> 
To: [email protected]
Date: 01/05/12 01:55 
Subject: Re: [Pharo-project] Pharo by Example 

Hi Gerry 

>From your talk of application entry points it seems to me that you might be 
>talking about web development with Pharo. In that case PharoByExample won't 
>help you much. 
Maybe, if you could tell us what you are trying to accomplish, we would be able 
to help you better. Right now, at least to me, it is not clear why you are 
having troubles. I've learnt Smalltalk with PBE and Pharo and found everything 
to be fairly straight forward and clearly explained. 

As for the #init method, the only one I can find belongs to the ParseStack 
object. That is definitely not what you want. What might be confusing you is 
that you don't "execute" a binary like you would in other cases. Pharo is not 
only an IDE but it is also the runtime environment. 

It just occurred to me, that you might be looking for something like: "if i 
double click on the image I want my application X to be launched in the image". 
That can certainly be done but is not the usual way. More often, you will save 
the image with the "start UI" of your application opened, so that when a user 
opens the image he will see one window with your application. 

You also might want to check out the Pharo Screencasts ( 
http://www.pharo-project.org/documentation/screencasts), you might see 
something there that helps you to better understand Pharo. However, from what I 
have experienced I suggest that you just work through PBE and see if your 
questions persist. 

Cheers, 
Max 

On 05.01.2012, at 06:50, Gerry Weaver wrote: 

Hi, 

Perhaps I should just take a shot at explaining what I'm having trouble 
understanding. 


My current take on the environment is that an image is basically a container 
that holds everything in the application. In development mode it also includes 
the IDE and tools. I assume one would typically start by defining a class that 
was a subclass of some system or package class. I assume this process would 
continue until the application logic and data were defined. I also assume that 
there must be a way to indicate the class that represents the top level or 
entry point (main) of the application. That appears to be the init method. Is 
this anywhere close to being correct? 


The problem is that I'm not sure how to get started. I have played around with 
the system browser a bit. I can see that you would create a category and be 
presented with what looks to be a template for a class. I'm confused about the 
fact that the "Pharo by Example" has me creating a package when I don't see 
that in the 1.3 browser. I also don't know how to create additional classes in 
that category or how to tell the environment which class is my application 
entry point. I figure maybe the answer to all of this is a little too much for 
a mailing list question, which is why I didn't start out asking this. Anyway, 
at least this gives you an idea of where I'm stuck. Maybe my brain just isn't 
wired to understand something that may be obvious to others. 


Thanks, 
Gerry 




-----Original Message----- 
From: "Serge Stinckwich" < [email protected]> 
To: [email protected]
Date: 01/04/12 23:04 
Subject: Re: [Pharo-project] Pharo by Example 

On Thu, Jan 5, 2012 at 11:45 AM, Gerry Weaver < [email protected]> wrote: 
Hi, 

I've been trying various downloads, but I haven't found anything that works. I 
guess I may be making it harder than it needs to be, but I really have no idea 
how to proceed. I've been trying to find some doc on basic things like creating 
a package, class, etc., but I'm not having much luck. I assume the docs will be 
updated at some point. Would anyone have a feel for when that might be? I'm not 
in a hurry at all, so I could wait for a couple of more versions. 

Could give us more information about what is not working exactly ? 
Did you upload the file here: 
https://gforge.inria.fr/frs/download.php/27023/PBE-1.0.zip
and try the exemple in the book ? 

Regards, 
-- 
Serge Stinckwich 
UMI UMMISCO 209 (IRD/UPMC), Hanoi, Vietnam 
Matsuno Laboratory, Kyoto University, Japan (until 12/2011) 
http://www.mechatronics.me.kyoto-u.ac.jp/
Every DSL ends up being Smalltalk 
http://doesnotunderstand.org/








 
 




Reply via email to