New Pharo user, some questions

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
21 messages Options
12
Reply | Threaded
Open this post in threaded view
|

New Pharo user, some questions

dboeren
Now that my image is working properly again and the fires have been put out, I wanted to introduce myself a bit better...

My name is David Boeren.  I first learned Smalltalk back in college many years ago, we used Smalltalk V in an object oriented programming class I took which was first-half Smalltalk, second-half C++.  This would be about 1992 I think?  In recent years I've mainly been using Java, with occasional Python dabblings.  I remember installing Squeak once or twice over the years, but to be honest it felt a bit clunky, perhaps this was just an early primitive version or whatever.

Recently, I've been getting the itch to try out some different languages.  I was kind of looking at Scala or Clojure, one co-worker suggested Erlang, and so forth.  But after doing a brief review I ended up coming back to Smalltalk which even after all these years still stands right up with the cutting edge I think.  Sure, there are a few things that I think would be a little different if it were designed today like tuple support or whatever, but it feels like the right choice for something I'm going to use mainly for "fun" projects and the interactive environment is awesome.


One thing I wanted to ask about is the status of getting Pharo running on iOS (or at least iPad).  I found some old posts but nothing much within the last couple of years.  I know there were app store policy issues in the past but I think that Apple has opened things up a bit since then, you can now get Pythonista in the app store, or Codea.  Is there still an obstacle or is it just something that hasn't been gotten around to yet?  I'd love to get it running on my iPad Mini and be able to transmit code back and forth between there and my laptop to work on it wherever I'm at.


Second, I'm running into an oddity and I'm not sure what I'm doing wrong or whether this is a bug of some sort, this has to do with trying to replace unicode characters in a string which seems like it should be a straightforward operation.  Here is my code:

        "Fetch the raw JSON data from dtdb.co"
        response := 'http://dtdb.co/api/cards/' asUrl retrieveContents asString.

        "Clean up the data a bit to make it a little more regular"
        response := response copyReplaceAll: 'null' with: '""'.
        response := response copyReplaceAll: '\u2022' with: ','.
        response := response copyReplaceAll: '\u009e' with: 'e'.

Basically I'm just pulling some JSON data and then doing a few string replacements to make the data suit my needs.  The first one works.  The second one works.  Since the third one ALSO uses a \uXXXX code I would expect it to work too, but it does not - the accented characters are still there.

To get a bit more visibility into this, I copied the CopyReplaceAll code from SequenceableCollection into a scratch class method and adding some Transcript output:

copyReplaceIn: aString All: oldSubCollection with: newCollection
        "Answer a copy of the receiver in which all occurrences of
        oldSubCollection have been replaced by newCollection "

        | startSearch currentIndex endIndex |

        Transcript show: 'start' ; cr.
        startSearch := 1.
        [(currentIndex := aString indexOfSubCollection: oldSubCollection startingAt: startSearch) > 0]
                whileTrue: [
                        Transcript show: 'Found at index ' ; show: currentIndex ; cr.
                        endIndex := currentIndex + oldSubCollection size - 1.
                        aString := aString
                                        copyReplaceFrom: currentIndex
                                        to: endIndex
                                        with: newCollection.
                                startSearch := currentIndex + newCollection size].
        Transcript show: 'done' ; cr.
        ^ aString

A minimal test seemed to work:
HelloWorld copyReplaceIn: 'R\u00e9my Lapointe' All: '\u00e9' with: 'e'.

start
Found at index 2
done

Testing this with the real data worked too:
HelloWorld copyReplaceIn: ('http://dtdb.co/api/cards/' asUrl retrieveContents asString) All: '\u00e9' with: 'e'.
start
Found at index 22379
Found at index 22500
done


However, when I went back to using the regular copyReplaceAll:With: method it does not work and I'm not sure why.  When it executes this:
aString indexOfSubCollection: oldSubCollection startingAt: startSearch

The value comes back as 0 even though it's the same data from 'http://dtdb.co/api/cards/' asUrl retrieveContents asString (I added a "self halt" to be able to step into the method and view the variable values), and I'm not sure what the difference is.  There shouldn't be a limit on the size of the collection, should there?  The whole thing is around 116k which is big but not ridiculously so.  It is however big enough that the debugger can't show the whole value, or at least I haven't found a way to do so.


And last, is there a good video tutorial for the Pharo beginner on how to use the various browsers, debugger, tools, etc... that come with Pharo?  I would like to start learning more about the best ways to use these in my development processes.  I'm also having a lot of trouble finding the correct classes and message for what I want to do, searching online w/ Google often seem to turn up outdated information (or for a different smalltalk flavor) and it can take a while to figure out the correct way to do things.  Is there a good central reference for the APIs somewhere?  I know that you can search in the browser but I usually don't know the name to search for.  It would be good to have a handy reference detailing how to do all the commonplace stuff.

Thanks!
Reply | Threaded
Open this post in threaded view
|

Re: New Pharo user, some questions

Edward Povazan
Hello,

Smalltalk has been on iOS for a while:
https://www.mobilewikiserver.com/Fraction.html
though the apps are by John McIntosh who did the initial port (I think).

I don’t know if there is a formal way of making iOS apps with Pharo/Squeak.
I guess https://github.com/johnmci/Scratch.app.for.iOS would be a starting point.

I am in a similar boat as you are - Pharo is my playground for getting hard ideas done. Then I go back to ObjC when I know what I am doing.
Would really like to use Pharo day to day - one day!

Cheers,
-Ed



On Dec 10, 2014, at 12:26 PM, dboeren <[hidden email]> wrote:

> Now that my image is working properly again and the fires have been put out,
> I wanted to introduce myself a bit better...
>
> My name is David Boeren.  I first learned Smalltalk back in college many
> years ago, we used Smalltalk V in an object oriented programming class I
> took which was first-half Smalltalk, second-half C++.  This would be about
> 1992 I think?  In recent years I've mainly been using Java, with occasional
> Python dabblings.  I remember installing Squeak once or twice over the
> years, but to be honest it felt a bit clunky, perhaps this was just an early
> primitive version or whatever.
>
> Recently, I've been getting the itch to try out some different languages.  I
> was kind of looking at Scala or Clojure, one co-worker suggested Erlang, and
> so forth.  But after doing a brief review I ended up coming back to
> Smalltalk which even after all these years still stands right up with the
> cutting edge I think.  Sure, there are a few things that I think would be a
> little different if it were designed today like tuple support or whatever,
> but it feels like the right choice for something I'm going to use mainly for
> "fun" projects and the interactive environment is awesome.
>
>
> One thing I wanted to ask about is the status of getting Pharo running on
> iOS (or at least iPad).  I found some old posts but nothing much within the
> last couple of years.  I know there were app store policy issues in the past
> but I think that Apple has opened things up a bit since then, you can now
> get Pythonista in the app store, or Codea.  Is there still an obstacle or is
> it just something that hasn't been gotten around to yet?  I'd love to get it
> running on my iPad Mini and be able to transmit code back and forth between
> there and my laptop to work on it wherever I'm at.
>
>
> Second, I'm running into an oddity and I'm not sure what I'm doing wrong or
> whether this is a bug of some sort, this has to do with trying to replace
> unicode characters in a string which seems like it should be a
> straightforward operation.  Here is my code:
>
> "Fetch the raw JSON data from dtdb.co"
> response := 'http://dtdb.co/api/cards/' asUrl retrieveContents asString.
>
> "Clean up the data a bit to make it a little more regular"
> response := response copyReplaceAll: 'null' with: '""'.
> response := response copyReplaceAll: '\u2022' with: ','.
> response := response copyReplaceAll: '\u009e' with: 'e'.
>
> Basically I'm just pulling some JSON data and then doing a few string
> replacements to make the data suit my needs.  The first one works.  The
> second one works.  Since the third one ALSO uses a \uXXXX code I would
> expect it to work too, but it does not - the accented characters are still
> there.
>
> To get a bit more visibility into this, I copied the CopyReplaceAll code
> from SequenceableCollection into a scratch class method and adding some
> Transcript output:
>
> copyReplaceIn: aString All: oldSubCollection with: newCollection
> "Answer a copy of the receiver in which all occurrences of
> oldSubCollection have been replaced by newCollection "
>
> | startSearch currentIndex endIndex |
>
> Transcript show: 'start' ; cr.
> startSearch := 1.
> [(currentIndex := aString indexOfSubCollection: oldSubCollection
> startingAt: startSearch) > 0]
> whileTrue: [
> Transcript show: 'Found at index ' ; show: currentIndex ; cr.
> endIndex := currentIndex + oldSubCollection size - 1.
> aString := aString
> copyReplaceFrom: currentIndex
> to: endIndex
> with: newCollection.
> startSearch := currentIndex + newCollection size].
> Transcript show: 'done' ; cr.
> ^ aString
>
> A minimal test seemed to work:
> HelloWorld copyReplaceIn: 'R\u00e9my Lapointe' All: '\u00e9' with: 'e'.
>
> start
> Found at index 2
> done
>
> Testing this with the real data worked too:
> HelloWorld copyReplaceIn: ('http://dtdb.co/api/cards/' asUrl
> retrieveContents asString) All: '\u00e9' with: 'e'.
> start
> Found at index 22379
> Found at index 22500
> done
>
>
> However, when I went back to using the regular copyReplaceAll:With: method
> it does not work and I'm not sure why.  When it executes this:
> aString indexOfSubCollection: oldSubCollection startingAt: startSearch
>
> The value comes back as 0 even though it's the same data from
> 'http://dtdb.co/api/cards/' asUrl retrieveContents asString (I added a "self
> halt" to be able to step into the method and view the variable values), and
> I'm not sure what the difference is.  There shouldn't be a limit on the size
> of the collection, should there?  The whole thing is around 116k which is
> big but not ridiculously so.  It is however big enough that the debugger
> can't show the whole value, or at least I haven't found a way to do so.
>
>
> And last, is there a good video tutorial for the Pharo beginner on how to
> use the various browsers, debugger, tools, etc... that come with Pharo?  I
> would like to start learning more about the best ways to use these in my
> development processes.  I'm also having a lot of trouble finding the correct
> classes and message for what I want to do, searching online w/ Google often
> seem to turn up outdated information (or for a different smalltalk flavor)
> and it can take a while to figure out the correct way to do things.  Is
> there a good central reference for the APIs somewhere?  I know that you can
> search in the browser but I usually don't know the name to search for.  It
> would be good to have a handy reference detailing how to do all the
> commonplace stuff.
>
> Thanks!
>
>
>
> --
> View this message in context: http://forum.world.st/New-Pharo-user-some-questions-tp4795325.html
> Sent from the Pharo Smalltalk Users mailing list archive at Nabble.com.
>


Reply | Threaded
Open this post in threaded view
|

Re: New Pharo user, some questions

kilon.alios
In reply to this post by dboeren
I cant answer your JSON question but I can answer the other two questions a) iOS b) Pharo video tutorial

a) as far iOS is concerned, yes pharo runs fine on it. I am not so sure about the new vm Cog but there are 2 commercial pharo apps by the same developer on Apple Story one is called DrGeo , which is a very cool app for teaching kids and grown apps about geometry and iStoa which is another educational app. So yes pharo looks fine on iOS platform. 

b) about video tutorial , I am actually making a series of tutorial that I call "Pharo Video Tutorial" using Pharo 3 and now I am using Pharo 4 , I like to teach people the cutting edge and you can find a playlist with those tutorial here


you can ommit the first one is about a general intro to pharo and the second which is how to install pharo , the rest are all 100% practical and I try to keep the blah blah to a minimum.  Excluding the first hour you have a total of 3 hours cut down to 10 minutes more or less video tutorials that will give you a very solid introduction to Pharo. Is an ongoing effort so subscribe to be notified about new tutorials. 

On Wed, Dec 10, 2014 at 10:26 PM, dboeren <[hidden email]> wrote:
Now that my image is working properly again and the fires have been put out,
I wanted to introduce myself a bit better...

My name is David Boeren.  I first learned Smalltalk back in college many
years ago, we used Smalltalk V in an object oriented programming class I
took which was first-half Smalltalk, second-half C++.  This would be about
1992 I think?  In recent years I've mainly been using Java, with occasional
Python dabblings.  I remember installing Squeak once or twice over the
years, but to be honest it felt a bit clunky, perhaps this was just an early
primitive version or whatever.

Recently, I've been getting the itch to try out some different languages.  I
was kind of looking at Scala or Clojure, one co-worker suggested Erlang, and
so forth.  But after doing a brief review I ended up coming back to
Smalltalk which even after all these years still stands right up with the
cutting edge I think.  Sure, there are a few things that I think would be a
little different if it were designed today like tuple support or whatever,
but it feels like the right choice for something I'm going to use mainly for
"fun" projects and the interactive environment is awesome.


One thing I wanted to ask about is the status of getting Pharo running on
iOS (or at least iPad).  I found some old posts but nothing much within the
last couple of years.  I know there were app store policy issues in the past
but I think that Apple has opened things up a bit since then, you can now
get Pythonista in the app store, or Codea.  Is there still an obstacle or is
it just something that hasn't been gotten around to yet?  I'd love to get it
running on my iPad Mini and be able to transmit code back and forth between
there and my laptop to work on it wherever I'm at.


Second, I'm running into an oddity and I'm not sure what I'm doing wrong or
whether this is a bug of some sort, this has to do with trying to replace
unicode characters in a string which seems like it should be a
straightforward operation.  Here is my code:

        "Fetch the raw JSON data from dtdb.co"
        response := 'http://dtdb.co/api/cards/' asUrl retrieveContents asString.

        "Clean up the data a bit to make it a little more regular"
        response := response copyReplaceAll: 'null' with: '""'.
        response := response copyReplaceAll: '\u2022' with: ','.
        response := response copyReplaceAll: '\u009e' with: 'e'.

Basically I'm just pulling some JSON data and then doing a few string
replacements to make the data suit my needs.  The first one works.  The
second one works.  Since the third one ALSO uses a \uXXXX code I would
expect it to work too, but it does not - the accented characters are still
there.

To get a bit more visibility into this, I copied the CopyReplaceAll code
from SequenceableCollection into a scratch class method and adding some
Transcript output:

copyReplaceIn: aString All: oldSubCollection with: newCollection
        "Answer a copy of the receiver in which all occurrences of
        oldSubCollection have been replaced by newCollection "

        | startSearch currentIndex endIndex |

        Transcript show: 'start' ; cr.
        startSearch := 1.
        [(currentIndex := aString indexOfSubCollection: oldSubCollection
startingAt: startSearch) > 0]
                whileTrue: [
                        Transcript show: 'Found at index ' ; show: currentIndex ; cr.
                        endIndex := currentIndex + oldSubCollection size - 1.
                        aString := aString
                                        copyReplaceFrom: currentIndex
                                        to: endIndex
                                        with: newCollection.
                                startSearch := currentIndex + newCollection size].
        Transcript show: 'done' ; cr.
        ^ aString

A minimal test seemed to work:
HelloWorld copyReplaceIn: 'R\u00e9my Lapointe' All: '\u00e9' with: 'e'.

start
Found at index 2
done

Testing this with the real data worked too:
HelloWorld copyReplaceIn: ('http://dtdb.co/api/cards/' asUrl
retrieveContents asString) All: '\u00e9' with: 'e'.
start
Found at index 22379
Found at index 22500
done


However, when I went back to using the regular copyReplaceAll:With: method
it does not work and I'm not sure why.  When it executes this:
aString indexOfSubCollection: oldSubCollection startingAt: startSearch

The value comes back as 0 even though it's the same data from
'http://dtdb.co/api/cards/' asUrl retrieveContents asString (I added a "self
halt" to be able to step into the method and view the variable values), and
I'm not sure what the difference is.  There shouldn't be a limit on the size
of the collection, should there?  The whole thing is around 116k which is
big but not ridiculously so.  It is however big enough that the debugger
can't show the whole value, or at least I haven't found a way to do so.


And last, is there a good video tutorial for the Pharo beginner on how to
use the various browsers, debugger, tools, etc... that come with Pharo?  I
would like to start learning more about the best ways to use these in my
development processes.  I'm also having a lot of trouble finding the correct
classes and message for what I want to do, searching online w/ Google often
seem to turn up outdated information (or for a different smalltalk flavor)
and it can take a while to figure out the correct way to do things.  Is
there a good central reference for the APIs somewhere?  I know that you can
search in the browser but I usually don't know the name to search for.  It
would be good to have a handy reference detailing how to do all the
commonplace stuff.

Thanks!



--
View this message in context: http://forum.world.st/New-Pharo-user-some-questions-tp4795325.html
Sent from the Pharo Smalltalk Users mailing list archive at Nabble.com.


Reply | Threaded
Open this post in threaded view
|

Re: New Pharo user, some questions

Edward Povazan
Unfortunately, the iOS apps cannot mark memory as ‘executable’ so that prevents JIT.

On Dec 10, 2014, at 1:53 PM, kilon alios <[hidden email]> wrote:

I cant answer your JSON question but I can answer the other two questions a) iOS b) Pharo video tutorial

a) as far iOS is concerned, yes pharo runs fine on it. I am not so sure about the new vm Cog but there are 2 commercial pharo apps by the same developer on Apple Story one is called DrGeo , which is a very cool app for teaching kids and grown apps about geometry and iStoa which is another educational app. So yes pharo looks fine on iOS platform. 

b) about video tutorial , I am actually making a series of tutorial that I call "Pharo Video Tutorial" using Pharo 3 and now I am using Pharo 4 , I like to teach people the cutting edge and you can find a playlist with those tutorial here


you can ommit the first one is about a general intro to pharo and the second which is how to install pharo , the rest are all 100% practical and I try to keep the blah blah to a minimum.  Excluding the first hour you have a total of 3 hours cut down to 10 minutes more or less video tutorials that will give you a very solid introduction to Pharo. Is an ongoing effort so subscribe to be notified about new tutorials. 

On Wed, Dec 10, 2014 at 10:26 PM, dboeren <[hidden email]> wrote:
Now that my image is working properly again and the fires have been put out,
I wanted to introduce myself a bit better...

My name is David Boeren.  I first learned Smalltalk back in college many
years ago, we used Smalltalk V in an object oriented programming class I
took which was first-half Smalltalk, second-half C++.  This would be about
1992 I think?  In recent years I've mainly been using Java, with occasional
Python dabblings.  I remember installing Squeak once or twice over the
years, but to be honest it felt a bit clunky, perhaps this was just an early
primitive version or whatever.

Recently, I've been getting the itch to try out some different languages.  I
was kind of looking at Scala or Clojure, one co-worker suggested Erlang, and
so forth.  But after doing a brief review I ended up coming back to
Smalltalk which even after all these years still stands right up with the
cutting edge I think.  Sure, there are a few things that I think would be a
little different if it were designed today like tuple support or whatever,
but it feels like the right choice for something I'm going to use mainly for
"fun" projects and the interactive environment is awesome.


One thing I wanted to ask about is the status of getting Pharo running on
iOS (or at least iPad).  I found some old posts but nothing much within the
last couple of years.  I know there were app store policy issues in the past
but I think that Apple has opened things up a bit since then, you can now
get Pythonista in the app store, or Codea.  Is there still an obstacle or is
it just something that hasn't been gotten around to yet?  I'd love to get it
running on my iPad Mini and be able to transmit code back and forth between
there and my laptop to work on it wherever I'm at.


Second, I'm running into an oddity and I'm not sure what I'm doing wrong or
whether this is a bug of some sort, this has to do with trying to replace
unicode characters in a string which seems like it should be a
straightforward operation.  Here is my code:

        "Fetch the raw JSON data from dtdb.co"
        response := 'http://dtdb.co/api/cards/' asUrl retrieveContents asString.

        "Clean up the data a bit to make it a little more regular"
        response := response copyReplaceAll: 'null' with: '""'.
        response := response copyReplaceAll: '\u2022' with: ','.
        response := response copyReplaceAll: '\u009e' with: 'e'.

Basically I'm just pulling some JSON data and then doing a few string
replacements to make the data suit my needs.  The first one works.  The
second one works.  Since the third one ALSO uses a \uXXXX code I would
expect it to work too, but it does not - the accented characters are still
there.

To get a bit more visibility into this, I copied the CopyReplaceAll code
from SequenceableCollection into a scratch class method and adding some
Transcript output:

copyReplaceIn: aString All: oldSubCollection with: newCollection
        "Answer a copy of the receiver in which all occurrences of
        oldSubCollection have been replaced by newCollection "

        | startSearch currentIndex endIndex |

        Transcript show: 'start' ; cr.
        startSearch := 1.
        [(currentIndex := aString indexOfSubCollection: oldSubCollection
startingAt: startSearch) > 0]
                whileTrue: [
                        Transcript show: 'Found at index ' ; show: currentIndex ; cr.
                        endIndex := currentIndex + oldSubCollection size - 1.
                        aString := aString
                                        copyReplaceFrom: currentIndex
                                        to: endIndex
                                        with: newCollection.
                                startSearch := currentIndex + newCollection size].
        Transcript show: 'done' ; cr.
        ^ aString

A minimal test seemed to work:
HelloWorld copyReplaceIn: 'R\u00e9my Lapointe' All: '\u00e9' with: 'e'.

start
Found at index 2
done

Testing this with the real data worked too:
HelloWorld copyReplaceIn: ('http://dtdb.co/api/cards/' asUrl
retrieveContents asString) All: '\u00e9' with: 'e'.
start
Found at index 22379
Found at index 22500
done


However, when I went back to using the regular copyReplaceAll:With: method
it does not work and I'm not sure why.  When it executes this:
aString indexOfSubCollection: oldSubCollection startingAt: startSearch

The value comes back as 0 even though it's the same data from
'http://dtdb.co/api/cards/' asUrl retrieveContents asString (I added a "self
halt" to be able to step into the method and view the variable values), and
I'm not sure what the difference is.  There shouldn't be a limit on the size
of the collection, should there?  The whole thing is around 116k which is
big but not ridiculously so.  It is however big enough that the debugger
can't show the whole value, or at least I haven't found a way to do so.


And last, is there a good video tutorial for the Pharo beginner on how to
use the various browsers, debugger, tools, etc... that come with Pharo?  I
would like to start learning more about the best ways to use these in my
development processes.  I'm also having a lot of trouble finding the correct
classes and message for what I want to do, searching online w/ Google often
seem to turn up outdated information (or for a different smalltalk flavor)
and it can take a while to figure out the correct way to do things.  Is
there a good central reference for the APIs somewhere?  I know that you can
search in the browser but I usually don't know the name to search for.  It
would be good to have a handy reference detailing how to do all the
commonplace stuff.

Thanks!



--
View this message in context: http://forum.world.st/New-Pharo-user-some-questions-tp4795325.html
Sent from the Pharo Smalltalk Users mailing list archive at Nabble.com.



Reply | Threaded
Open this post in threaded view
|

Re: New Pharo user, some questions

Sven Van Caekenberghe-2
In reply to this post by dboeren

> On 10 Dec 2014, at 21:26, dboeren <[hidden email]> wrote:
>
> "Fetch the raw JSON data from dtdb.co"
> response := 'http://dtdb.co/api/cards/' asUrl retrieveContents asString.

Why no do

NeoJSONReader fromString: 'http://dtdb.co/api/cards/' asUrl retrieveContents

?

You'll get the data back, nicely parsed and converted to proper Pharo strings.

Sven
Reply | Threaded
Open this post in threaded view
|

Re: New Pharo user, some questions

hernanmd
In reply to this post by dboeren

2014-12-10 17:26 GMT-03:00 dboeren <[hidden email]>:
\u009e

\u00e9
Reply | Threaded
Open this post in threaded view
|

Re: New Pharo user, some questions

dboeren
In reply to this post by Sven Van Caekenberghe-2
That's the next line of code after what I quoted:

"Parse the JSON data returned by the api"
data := NeoJSONReader fromString: response.

But, prior to the JSON parsing I was doing a couple of string replacements to patch up the data.  The system I'm moving the data into doesn't accept accented characters or bullets, and it wants empty strings instead of nulls.

All the JSON stuff works fine.  It's just the string operations with copyReplaceAll:with: that aren't working as expected for some reason.

Or are you saying that the data I get from from asUrl retrieveContents is not a "proper string" and maybe that's why it's not working?


On Wed, Dec 10, 2014 at 6:34 PM, Sven Van Caekenberghe <[hidden email]> wrote:

> On 10 Dec 2014, at 21:26, dboeren <[hidden email]> wrote:
>
>       "Fetch the raw JSON data from dtdb.co"
>       response := 'http://dtdb.co/api/cards/' asUrl retrieveContents asString.

Why no do

NeoJSONReader fromString: 'http://dtdb.co/api/cards/' asUrl retrieveContents

?

You'll get the data back, nicely parsed and converted to proper Pharo strings.

Sven

Reply | Threaded
Open this post in threaded view
|

Re: New Pharo user, some questions

dboeren
In reply to this post by kilon.alios
Sorry, I may not have been clear with my iOS question.  What I'm interested in is running the development environment on iPad, not just a deployed app (although that is handy too).  There are other apps that let you write code, compile it, and run it all on your iOS device without needing a computer or external compiler so I'm thinking that if they pass the app store criteria that perhaps Pharo or another Smalltalk could also do so.

Thanks for the video link, I'll check it out.


On Wed, Dec 10, 2014 at 4:53 PM, kilon alios <[hidden email]> wrote:
I cant answer your JSON question but I can answer the other two questions a) iOS b) Pharo video tutorial

a) as far iOS is concerned, yes pharo runs fine on it. I am not so sure about the new vm Cog but there are 2 commercial pharo apps by the same developer on Apple Story one is called DrGeo, which is a very cool app for teaching kids and grown apps about geometry and iStoa which is another educational app. So yes pharo looks fine on iOS platform. 

b) about video tutorial, I am actually making a series of tutorial that I call "Pharo Video Tutorial" using Pharo 3 and now I am using Pharo 4 , I like to teach people the cutting edge and you can find a playlist with those tutorial here


you can ommit the first one is about a general intro to pharo and the second which is how to install pharo , the rest are all 100% practical and I try to keep the blah blah to a minimum.  Excluding the first hour you have a total of 3 hours cut down to 10 minutes more or less video tutorials that will give you a very solid introduction to Pharo. Is an ongoing effort so subscribe to be notified about new tutorials. 

On Wed, Dec 10, 2014 at 10:26 PM, dboeren <[hidden email]> wrote:
Now that my image is working properly again and the fires have been put out,
I wanted to introduce myself a bit better...

My name is David Boeren.  I first learned Smalltalk back in college many
years ago, we used Smalltalk V in an object oriented programming class I
took which was first-half Smalltalk, second-half C++.  This would be about
1992 I think?  In recent years I've mainly been using Java, with occasional
Python dabblings.  I remember installing Squeak once or twice over the
years, but to be honest it felt a bit clunky, perhaps this was just an early
primitive version or whatever.

Recently, I've been getting the itch to try out some different languages.  I
was kind of looking at Scala or Clojure, one co-worker suggested Erlang, and
so forth.  But after doing a brief review I ended up coming back to
Smalltalk which even after all these years still stands right up with the
cutting edge I think.  Sure, there are a few things that I think would be a
little different if it were designed today like tuple support or whatever,
but it feels like the right choice for something I'm going to use mainly for
"fun" projects and the interactive environment is awesome.


One thing I wanted to ask about is the status of getting Pharo running on
iOS (or at least iPad).  I found some old posts but nothing much within the
last couple of years.  I know there were app store policy issues in the past
but I think that Apple has opened things up a bit since then, you can now
get Pythonista in the app store, or Codea.  Is there still an obstacle or is
it just something that hasn't been gotten around to yet?  I'd love to get it
running on my iPad Mini and be able to transmit code back and forth between
there and my laptop to work on it wherever I'm at.


Second, I'm running into an oddity and I'm not sure what I'm doing wrong or
whether this is a bug of some sort, this has to do with trying to replace
unicode characters in a string which seems like it should be a
straightforward operation.  Here is my code:

        "Fetch the raw JSON data from dtdb.co"
        response := 'http://dtdb.co/api/cards/' asUrl retrieveContents asString.

        "Clean up the data a bit to make it a little more regular"
        response := response copyReplaceAll: 'null' with: '""'.
        response := response copyReplaceAll: '\u2022' with: ','.
        response := response copyReplaceAll: '\u009e' with: 'e'.

Basically I'm just pulling some JSON data and then doing a few string
replacements to make the data suit my needs.  The first one works.  The
second one works.  Since the third one ALSO uses a \uXXXX code I would
expect it to work too, but it does not - the accented characters are still
there.

To get a bit more visibility into this, I copied the CopyReplaceAll code
from SequenceableCollection into a scratch class method and adding some
Transcript output:

copyReplaceIn: aString All: oldSubCollection with: newCollection
        "Answer a copy of the receiver in which all occurrences of
        oldSubCollection have been replaced by newCollection "

        | startSearch currentIndex endIndex |

        Transcript show: 'start' ; cr.
        startSearch := 1.
        [(currentIndex := aString indexOfSubCollection: oldSubCollection
startingAt: startSearch) > 0]
                whileTrue: [
                        Transcript show: 'Found at index ' ; show: currentIndex ; cr.
                        endIndex := currentIndex + oldSubCollection size - 1.
                        aString := aString
                                        copyReplaceFrom: currentIndex
                                        to: endIndex
                                        with: newCollection.
                                startSearch := currentIndex + newCollection size].
        Transcript show: 'done' ; cr.
        ^ aString

A minimal test seemed to work:
HelloWorld copyReplaceIn: 'R\u00e9my Lapointe' All: '\u00e9' with: 'e'.

start
Found at index 2
done

Testing this with the real data worked too:
HelloWorld copyReplaceIn: ('http://dtdb.co/api/cards/' asUrl
retrieveContents asString) All: '\u00e9' with: 'e'.
start
Found at index 22379
Found at index 22500
done


However, when I went back to using the regular copyReplaceAll:With: method
it does not work and I'm not sure why.  When it executes this:
aString indexOfSubCollection: oldSubCollection startingAt: startSearch

The value comes back as 0 even though it's the same data from
'http://dtdb.co/api/cards/' asUrl retrieveContents asString (I added a "self
halt" to be able to step into the method and view the variable values), and
I'm not sure what the difference is.  There shouldn't be a limit on the size
of the collection, should there?  The whole thing is around 116k which is
big but not ridiculously so.  It is however big enough that the debugger
can't show the whole value, or at least I haven't found a way to do so.


And last, is there a good video tutorial for the Pharo beginner on how to
use the various browsers, debugger, tools, etc... that come with Pharo?  I
would like to start learning more about the best ways to use these in my
development processes.  I'm also having a lot of trouble finding the correct
classes and message for what I want to do, searching online w/ Google often
seem to turn up outdated information (or for a different smalltalk flavor)
and it can take a while to figure out the correct way to do things.  Is
there a good central reference for the APIs somewhere?  I know that you can
search in the browser but I usually don't know the name to search for.  It
would be good to have a handy reference detailing how to do all the
commonplace stuff.

Thanks!



--
View this message in context: http://forum.world.st/New-Pharo-user-some-questions-tp4795325.html
Sent from the Pharo Smalltalk Users mailing list archive at Nabble.com.



Reply | Threaded
Open this post in threaded view
|

Re: New Pharo user, some questions

Sven Van Caekenberghe-2
In reply to this post by dboeren

> On 11 Dec 2014, at 04:41, David Boeren <[hidden email]> wrote:
>
> That's the next line of code after what I quoted:
>
> "Parse the JSON data returned by the api"
> data := NeoJSONReader fromString: response.
>
> But, prior to the JSON parsing I was doing a couple of string replacements to patch up the data.  The system I'm moving the data into doesn't accept accented characters or bullets, and it wants empty strings instead of nulls.

You can do the replacements after parsing too, just manipulating the generated data structures. I would say that is conceptually more correct.

> All the JSON stuff works fine.  It's just the string operations with copyReplaceAll:with: that aren't working as expected for some reason.
>
> Or are you saying that the data I get from from asUrl retrieveContents is not a "proper string" and maybe that's why it's not working?
>
>
> On Wed, Dec 10, 2014 at 6:34 PM, Sven Van Caekenberghe <[hidden email]> wrote:
>
> > On 10 Dec 2014, at 21:26, dboeren <[hidden email]> wrote:
> >
> >       "Fetch the raw JSON data from dtdb.co"
> >       response := 'http://dtdb.co/api/cards/' asUrl retrieveContents asString.
>
> Why no do
>
> NeoJSONReader fromString: 'http://dtdb.co/api/cards/' asUrl retrieveContents
>
> ?
>
> You'll get the data back, nicely parsed and converted to proper Pharo strings.
>
> Sven
>


Reply | Threaded
Open this post in threaded view
|

Re: New Pharo user, some questions

philippeback
In reply to this post by dboeren

Pharo on iPad.

http://youtu.be/7MNsUiCc5FQ

Le 10 déc. 2014 21:26, "dboeren" <[hidden email]> a écrit :
Now that my image is working properly again and the fires have been put out,
I wanted to introduce myself a bit better...

My name is David Boeren.  I first learned Smalltalk back in college many
years ago, we used Smalltalk V in an object oriented programming class I
took which was first-half Smalltalk, second-half C++.  This would be about
1992 I think?  In recent years I've mainly been using Java, with occasional
Python dabblings.  I remember installing Squeak once or twice over the
years, but to be honest it felt a bit clunky, perhaps this was just an early
primitive version or whatever.

Recently, I've been getting the itch to try out some different languages.  I
was kind of looking at Scala or Clojure, one co-worker suggested Erlang, and
so forth.  But after doing a brief review I ended up coming back to
Smalltalk which even after all these years still stands right up with the
cutting edge I think.  Sure, there are a few things that I think would be a
little different if it were designed today like tuple support or whatever,
but it feels like the right choice for something I'm going to use mainly for
"fun" projects and the interactive environment is awesome.


One thing I wanted to ask about is the status of getting Pharo running on
iOS (or at least iPad).  I found some old posts but nothing much within the
last couple of years.  I know there were app store policy issues in the past
but I think that Apple has opened things up a bit since then, you can now
get Pythonista in the app store, or Codea.  Is there still an obstacle or is
it just something that hasn't been gotten around to yet?  I'd love to get it
running on my iPad Mini and be able to transmit code back and forth between
there and my laptop to work on it wherever I'm at.


Second, I'm running into an oddity and I'm not sure what I'm doing wrong or
whether this is a bug of some sort, this has to do with trying to replace
unicode characters in a string which seems like it should be a
straightforward operation.  Here is my code:

        "Fetch the raw JSON data from dtdb.co"
        response := 'http://dtdb.co/api/cards/' asUrl retrieveContents asString.

        "Clean up the data a bit to make it a little more regular"
        response := response copyReplaceAll: 'null' with: '""'.
        response := response copyReplaceAll: '\u2022' with: ','.
        response := response copyReplaceAll: '\u009e' with: 'e'.

Basically I'm just pulling some JSON data and then doing a few string
replacements to make the data suit my needs.  The first one works.  The
second one works.  Since the third one ALSO uses a \uXXXX code I would
expect it to work too, but it does not - the accented characters are still
there.

To get a bit more visibility into this, I copied the CopyReplaceAll code
from SequenceableCollection into a scratch class method and adding some
Transcript output:

copyReplaceIn: aString All: oldSubCollection with: newCollection
        "Answer a copy of the receiver in which all occurrences of
        oldSubCollection have been replaced by newCollection "

        | startSearch currentIndex endIndex |

        Transcript show: 'start' ; cr.
        startSearch := 1.
        [(currentIndex := aString indexOfSubCollection: oldSubCollection
startingAt: startSearch) > 0]
                whileTrue: [
                        Transcript show: 'Found at index ' ; show: currentIndex ; cr.
                        endIndex := currentIndex + oldSubCollection size - 1.
                        aString := aString
                                        copyReplaceFrom: currentIndex
                                        to: endIndex
                                        with: newCollection.
                                startSearch := currentIndex + newCollection size].
        Transcript show: 'done' ; cr.
        ^ aString

A minimal test seemed to work:
HelloWorld copyReplaceIn: 'R\u00e9my Lapointe' All: '\u00e9' with: 'e'.

start
Found at index 2
done

Testing this with the real data worked too:
HelloWorld copyReplaceIn: ('http://dtdb.co/api/cards/' asUrl
retrieveContents asString) All: '\u00e9' with: 'e'.
start
Found at index 22379
Found at index 22500
done


However, when I went back to using the regular copyReplaceAll:With: method
it does not work and I'm not sure why.  When it executes this:
aString indexOfSubCollection: oldSubCollection startingAt: startSearch

The value comes back as 0 even though it's the same data from
'http://dtdb.co/api/cards/' asUrl retrieveContents asString (I added a "self
halt" to be able to step into the method and view the variable values), and
I'm not sure what the difference is.  There shouldn't be a limit on the size
of the collection, should there?  The whole thing is around 116k which is
big but not ridiculously so.  It is however big enough that the debugger
can't show the whole value, or at least I haven't found a way to do so.


And last, is there a good video tutorial for the Pharo beginner on how to
use the various browsers, debugger, tools, etc... that come with Pharo?  I
would like to start learning more about the best ways to use these in my
development processes.  I'm also having a lot of trouble finding the correct
classes and message for what I want to do, searching online w/ Google often
seem to turn up outdated information (or for a different smalltalk flavor)
and it can take a while to figure out the correct way to do things.  Is
there a good central reference for the APIs somewhere?  I know that you can
search in the browser but I usually don't know the name to search for.  It
would be good to have a handy reference detailing how to do all the
commonplace stuff.

Thanks!



--
View this message in context: http://forum.world.st/New-Pharo-user-some-questions-tp4795325.html
Sent from the Pharo Smalltalk Users mailing list archive at Nabble.com.


Reply | Threaded
Open this post in threaded view
|

Re: New Pharo user, some questions

kilon.alios
In reply to this post by dboeren
That is what a pharo app is , its just a copy of the ide, the language and the tools together with some additional code. 


You can hide the IDE from the user of course but it would be still there unless you remove it. 

If you plan to distribute the exposed IDE you need to check with Apple license terms because I think they still have restrictions on this. So your limitation is Apple and not Pharo ;) 

Of course if you want to use the IDE only for yourself you have no issues there and you dont need Apple's permission. Of course since people dont code Pharo on their ipads (I am not a fa of the idea myself I like my 27'' iMac too much :D) you most likely run into unresolved problems. 

So I would not recommend Pharo on iOS personally even though people have done this , but you can try it yourself and make your own mind ;)

On Thu, Dec 11, 2014 at 6:06 AM, David Boeren <[hidden email]> wrote:
Sorry, I may not have been clear with my iOS question.  What I'm interested in is running the development environment on iPad, not just a deployed app (although that is handy too).  There are other apps that let you write code, compile it, and run it all on your iOS device without needing a computer or external compiler so I'm thinking that if they pass the app store criteria that perhaps Pharo or another Smalltalk could also do so.

Thanks for the video link, I'll check it out.


On Wed, Dec 10, 2014 at 4:53 PM, kilon alios <[hidden email]> wrote:
I cant answer your JSON question but I can answer the other two questions a) iOS b) Pharo video tutorial

a) as far iOS is concerned, yes pharo runs fine on it. I am not so sure about the new vm Cog but there are 2 commercial pharo apps by the same developer on Apple Story one is called DrGeo, which is a very cool app for teaching kids and grown apps about geometry and iStoa which is another educational app. So yes pharo looks fine on iOS platform. 

b) about video tutorial, I am actually making a series of tutorial that I call "Pharo Video Tutorial" using Pharo 3 and now I am using Pharo 4 , I like to teach people the cutting edge and you can find a playlist with those tutorial here


you can ommit the first one is about a general intro to pharo and the second which is how to install pharo , the rest are all 100% practical and I try to keep the blah blah to a minimum.  Excluding the first hour you have a total of 3 hours cut down to 10 minutes more or less video tutorials that will give you a very solid introduction to Pharo. Is an ongoing effort so subscribe to be notified about new tutorials. 

On Wed, Dec 10, 2014 at 10:26 PM, dboeren <[hidden email]> wrote:
Now that my image is working properly again and the fires have been put out,
I wanted to introduce myself a bit better...

My name is David Boeren.  I first learned Smalltalk back in college many
years ago, we used Smalltalk V in an object oriented programming class I
took which was first-half Smalltalk, second-half C++.  This would be about
1992 I think?  In recent years I've mainly been using Java, with occasional
Python dabblings.  I remember installing Squeak once or twice over the
years, but to be honest it felt a bit clunky, perhaps this was just an early
primitive version or whatever.

Recently, I've been getting the itch to try out some different languages.  I
was kind of looking at Scala or Clojure, one co-worker suggested Erlang, and
so forth.  But after doing a brief review I ended up coming back to
Smalltalk which even after all these years still stands right up with the
cutting edge I think.  Sure, there are a few things that I think would be a
little different if it were designed today like tuple support or whatever,
but it feels like the right choice for something I'm going to use mainly for
"fun" projects and the interactive environment is awesome.


One thing I wanted to ask about is the status of getting Pharo running on
iOS (or at least iPad).  I found some old posts but nothing much within the
last couple of years.  I know there were app store policy issues in the past
but I think that Apple has opened things up a bit since then, you can now
get Pythonista in the app store, or Codea.  Is there still an obstacle or is
it just something that hasn't been gotten around to yet?  I'd love to get it
running on my iPad Mini and be able to transmit code back and forth between
there and my laptop to work on it wherever I'm at.


Second, I'm running into an oddity and I'm not sure what I'm doing wrong or
whether this is a bug of some sort, this has to do with trying to replace
unicode characters in a string which seems like it should be a
straightforward operation.  Here is my code:

        "Fetch the raw JSON data from dtdb.co"
        response := 'http://dtdb.co/api/cards/' asUrl retrieveContents asString.

        "Clean up the data a bit to make it a little more regular"
        response := response copyReplaceAll: 'null' with: '""'.
        response := response copyReplaceAll: '\u2022' with: ','.
        response := response copyReplaceAll: '\u009e' with: 'e'.

Basically I'm just pulling some JSON data and then doing a few string
replacements to make the data suit my needs.  The first one works.  The
second one works.  Since the third one ALSO uses a \uXXXX code I would
expect it to work too, but it does not - the accented characters are still
there.

To get a bit more visibility into this, I copied the CopyReplaceAll code
from SequenceableCollection into a scratch class method and adding some
Transcript output:

copyReplaceIn: aString All: oldSubCollection with: newCollection
        "Answer a copy of the receiver in which all occurrences of
        oldSubCollection have been replaced by newCollection "

        | startSearch currentIndex endIndex |

        Transcript show: 'start' ; cr.
        startSearch := 1.
        [(currentIndex := aString indexOfSubCollection: oldSubCollection
startingAt: startSearch) > 0]
                whileTrue: [
                        Transcript show: 'Found at index ' ; show: currentIndex ; cr.
                        endIndex := currentIndex + oldSubCollection size - 1.
                        aString := aString
                                        copyReplaceFrom: currentIndex
                                        to: endIndex
                                        with: newCollection.
                                startSearch := currentIndex + newCollection size].
        Transcript show: 'done' ; cr.
        ^ aString

A minimal test seemed to work:
HelloWorld copyReplaceIn: 'R\u00e9my Lapointe' All: '\u00e9' with: 'e'.

start
Found at index 2
done

Testing this with the real data worked too:
HelloWorld copyReplaceIn: ('http://dtdb.co/api/cards/' asUrl
retrieveContents asString) All: '\u00e9' with: 'e'.
start
Found at index 22379
Found at index 22500
done


However, when I went back to using the regular copyReplaceAll:With: method
it does not work and I'm not sure why.  When it executes this:
aString indexOfSubCollection: oldSubCollection startingAt: startSearch

The value comes back as 0 even though it's the same data from
'http://dtdb.co/api/cards/' asUrl retrieveContents asString (I added a "self
halt" to be able to step into the method and view the variable values), and
I'm not sure what the difference is.  There shouldn't be a limit on the size
of the collection, should there?  The whole thing is around 116k which is
big but not ridiculously so.  It is however big enough that the debugger
can't show the whole value, or at least I haven't found a way to do so.


And last, is there a good video tutorial for the Pharo beginner on how to
use the various browsers, debugger, tools, etc... that come with Pharo?  I
would like to start learning more about the best ways to use these in my
development processes.  I'm also having a lot of trouble finding the correct
classes and message for what I want to do, searching online w/ Google often
seem to turn up outdated information (or for a different smalltalk flavor)
and it can take a while to figure out the correct way to do things.  Is
there a good central reference for the APIs somewhere?  I know that you can
search in the browser but I usually don't know the name to search for.  It
would be good to have a handy reference detailing how to do all the
commonplace stuff.

Thanks!



--
View this message in context: http://forum.world.st/New-Pharo-user-some-questions-tp4795325.html
Sent from the Pharo Smalltalk Users mailing list archive at Nabble.com.




Reply | Threaded
Open this post in threaded view
|

Re: New Pharo user, some questions

kilon.alios
In reply to this post by philippeback
can you resize the pharo windows ? I saw you struggle with it there 

It also looks like its crawling there , which iPad is this , which generation ? 

On Thu, Dec 11, 2014 at 10:09 AM, [hidden email] <[hidden email]> wrote:

Pharo on iPad.

http://youtu.be/7MNsUiCc5FQ

Le 10 déc. 2014 21:26, "dboeren" <[hidden email]> a écrit :

Now that my image is working properly again and the fires have been put out,
I wanted to introduce myself a bit better...

My name is David Boeren.  I first learned Smalltalk back in college many
years ago, we used Smalltalk V in an object oriented programming class I
took which was first-half Smalltalk, second-half C++.  This would be about
1992 I think?  In recent years I've mainly been using Java, with occasional
Python dabblings.  I remember installing Squeak once or twice over the
years, but to be honest it felt a bit clunky, perhaps this was just an early
primitive version or whatever.

Recently, I've been getting the itch to try out some different languages.  I
was kind of looking at Scala or Clojure, one co-worker suggested Erlang, and
so forth.  But after doing a brief review I ended up coming back to
Smalltalk which even after all these years still stands right up with the
cutting edge I think.  Sure, there are a few things that I think would be a
little different if it were designed today like tuple support or whatever,
but it feels like the right choice for something I'm going to use mainly for
"fun" projects and the interactive environment is awesome.


One thing I wanted to ask about is the status of getting Pharo running on
iOS (or at least iPad).  I found some old posts but nothing much within the
last couple of years.  I know there were app store policy issues in the past
but I think that Apple has opened things up a bit since then, you can now
get Pythonista in the app store, or Codea.  Is there still an obstacle or is
it just something that hasn't been gotten around to yet?  I'd love to get it
running on my iPad Mini and be able to transmit code back and forth between
there and my laptop to work on it wherever I'm at.


Second, I'm running into an oddity and I'm not sure what I'm doing wrong or
whether this is a bug of some sort, this has to do with trying to replace
unicode characters in a string which seems like it should be a
straightforward operation.  Here is my code:

        "Fetch the raw JSON data from dtdb.co"
        response := 'http://dtdb.co/api/cards/' asUrl retrieveContents asString.

        "Clean up the data a bit to make it a little more regular"
        response := response copyReplaceAll: 'null' with: '""'.
        response := response copyReplaceAll: '\u2022' with: ','.
        response := response copyReplaceAll: '\u009e' with: 'e'.

Basically I'm just pulling some JSON data and then doing a few string
replacements to make the data suit my needs.  The first one works.  The
second one works.  Since the third one ALSO uses a \uXXXX code I would
expect it to work too, but it does not - the accented characters are still
there.

To get a bit more visibility into this, I copied the CopyReplaceAll code
from SequenceableCollection into a scratch class method and adding some
Transcript output:

copyReplaceIn: aString All: oldSubCollection with: newCollection
        "Answer a copy of the receiver in which all occurrences of
        oldSubCollection have been replaced by newCollection "

        | startSearch currentIndex endIndex |

        Transcript show: 'start' ; cr.
        startSearch := 1.
        [(currentIndex := aString indexOfSubCollection: oldSubCollection
startingAt: startSearch) > 0]
                whileTrue: [
                        Transcript show: 'Found at index ' ; show: currentIndex ; cr.
                        endIndex := currentIndex + oldSubCollection size - 1.
                        aString := aString
                                        copyReplaceFrom: currentIndex
                                        to: endIndex
                                        with: newCollection.
                                startSearch := currentIndex + newCollection size].
        Transcript show: 'done' ; cr.
        ^ aString

A minimal test seemed to work:
HelloWorld copyReplaceIn: 'R\u00e9my Lapointe' All: '\u00e9' with: 'e'.

start
Found at index 2
done

Testing this with the real data worked too:
HelloWorld copyReplaceIn: ('http://dtdb.co/api/cards/' asUrl
retrieveContents asString) All: '\u00e9' with: 'e'.
start
Found at index 22379
Found at index 22500
done


However, when I went back to using the regular copyReplaceAll:With: method
it does not work and I'm not sure why.  When it executes this:
aString indexOfSubCollection: oldSubCollection startingAt: startSearch

The value comes back as 0 even though it's the same data from
'http://dtdb.co/api/cards/' asUrl retrieveContents asString (I added a "self
halt" to be able to step into the method and view the variable values), and
I'm not sure what the difference is.  There shouldn't be a limit on the size
of the collection, should there?  The whole thing is around 116k which is
big but not ridiculously so.  It is however big enough that the debugger
can't show the whole value, or at least I haven't found a way to do so.


And last, is there a good video tutorial for the Pharo beginner on how to
use the various browsers, debugger, tools, etc... that come with Pharo?  I
would like to start learning more about the best ways to use these in my
development processes.  I'm also having a lot of trouble finding the correct
classes and message for what I want to do, searching online w/ Google often
seem to turn up outdated information (or for a different smalltalk flavor)
and it can take a while to figure out the correct way to do things.  Is
there a good central reference for the APIs somewhere?  I know that you can
search in the browser but I usually don't know the name to search for.  It
would be good to have a handy reference detailing how to do all the
commonplace stuff.

Thanks!



--
View this message in context: http://forum.world.st/New-Pharo-user-some-questions-tp4795325.html
Sent from the Pharo Smalltalk Users mailing list archive at Nabble.com.



Reply | Threaded
Open this post in threaded view
|

Re: New Pharo user, some questions

dboeren
In reply to this post by Sven Van Caekenberghe-2
I could, but if I do it before parsing, I only have to do the string replacement in one place.  If I do it afterward, I have to apply it to every field separately which I think makes the code look messier.  Anyway, I have tried applying it at the individual field level as a test but it didn't work there either.  My primary concern at this point is just to get it working which has nothing to do with JSON at all, this is purely a string operation.


On Thu, Dec 11, 2014 at 1:37 AM, Sven Van Caekenberghe <[hidden email]> wrote:

> On 11 Dec 2014, at 04:41, David Boeren <[hidden email]> wrote:
>
> That's the next line of code after what I quoted:
>
>       "Parse the JSON data returned by the api"
>       data := NeoJSONReader fromString: response.
>
> But, prior to the JSON parsing I was doing a couple of string replacements to patch up the data.  The system I'm moving the data into doesn't accept accented characters or bullets, and it wants empty strings instead of nulls.

You can do the replacements after parsing too, just manipulating the generated data structures. I would say that is conceptually more correct.

> All the JSON stuff works fine.  It's just the string operations with copyReplaceAll:with: that aren't working as expected for some reason.
>
> Or are you saying that the data I get from from asUrl retrieveContents is not a "proper string" and maybe that's why it's not working?
>
>
> On Wed, Dec 10, 2014 at 6:34 PM, Sven Van Caekenberghe <[hidden email]> wrote:
>
> > On 10 Dec 2014, at 21:26, dboeren <[hidden email]> wrote:
> >
> >       "Fetch the raw JSON data from dtdb.co"
> >       response := 'http://dtdb.co/api/cards/' asUrl retrieveContents asString.
>
> Why no do
>
> NeoJSONReader fromString: 'http://dtdb.co/api/cards/' asUrl retrieveContents
>
> ?
>
> You'll get the data back, nicely parsed and converted to proper Pharo strings.
>
> Sven
>



Reply | Threaded
Open this post in threaded view
|

Re: New Pharo user, some questions

philippeback
In reply to this post by kilon.alios


On Thu, Dec 11, 2014 at 12:01 PM, kilon alios <[hidden email]> wrote:
can you resize the pharo windows ? I saw you struggle with it there 

It also looks like its crawling there , which iPad is this , which generation ? 

This is an iPad2. Pure Morphic is fine, what is not is Nautilus. I guess with AltBrowser it would be fine.

I've had a game I wrote for kids (internal stuff done for my wife's kids help practice) and it was fine with drag and drop and all.

Now for games on iOS I do use Monkey-X. But I'd love to have a Pharo set of classes that would be gaming specific. We could have very fast plugins for all the game engine and script it with Pharo. Kind of what one does with Lua.

The touch paradigm is different from what one can do on a desktop. It is not that Pharo has to work on an iPad. What would be nicer is to have an image running on it and to which one would connect remotely for remote coding.

What I was interested in with the bluetooth keyboard project is to see how to have a kind of dynabook style thing. But Apple has crippled a lot of things, like for an external keyboard support like this one has to use internal undocumented APIs for the gsEvents and this will prevent anything to go to the AppStore. And then one sees apps like iAWriter which has such keyboard support, that's weird.

Also, as a result, you realize that there is no ESC key on an iPad, that you miss a ton of keys that you take for granted on a desktop.
Also, all keyboard scancodes are different in various brands and it is a true ball of knots. No wonder Apple has one supersimplified protocol for input that prevents your from doing powerful keyboard based things. Meh.

Long story short, Android looks much better in that regard, and that's where I am looking at these days.

I've got a new Galaxy Alpha Octocore thing and frankly, it blows any iPhone 6 out of the water. I am done with iOS I'd say.
When going to places, there are so much more Android devices than iDevices... These Android things are like the beige boxes of the 90's.
You know who won at the time.

So, next holidays, I'll have a look at CogDroid from JB. When one can buy a full quad core stick PC with 2G of RAM and 8G of storage for less than $50, well, choice is clear.


That's where I want Pharo to run.

Phil
 

On Thu, Dec 11, 2014 at 10:09 AM, [hidden email] <[hidden email]> wrote:

Pharo on iPad.

http://youtu.be/7MNsUiCc5FQ

Le 10 déc. 2014 21:26, "dboeren" <[hidden email]> a écrit :

Now that my image is working properly again and the fires have been put out,
I wanted to introduce myself a bit better...

My name is David Boeren.  I first learned Smalltalk back in college many
years ago, we used Smalltalk V in an object oriented programming class I
took which was first-half Smalltalk, second-half C++.  This would be about
1992 I think?  In recent years I've mainly been using Java, with occasional
Python dabblings.  I remember installing Squeak once or twice over the
years, but to be honest it felt a bit clunky, perhaps this was just an early
primitive version or whatever.

Recently, I've been getting the itch to try out some different languages.  I
was kind of looking at Scala or Clojure, one co-worker suggested Erlang, and
so forth.  But after doing a brief review I ended up coming back to
Smalltalk which even after all these years still stands right up with the
cutting edge I think.  Sure, there are a few things that I think would be a
little different if it were designed today like tuple support or whatever,
but it feels like the right choice for something I'm going to use mainly for
"fun" projects and the interactive environment is awesome.


One thing I wanted to ask about is the status of getting Pharo running on
iOS (or at least iPad).  I found some old posts but nothing much within the
last couple of years.  I know there were app store policy issues in the past
but I think that Apple has opened things up a bit since then, you can now
get Pythonista in the app store, or Codea.  Is there still an obstacle or is
it just something that hasn't been gotten around to yet?  I'd love to get it
running on my iPad Mini and be able to transmit code back and forth between
there and my laptop to work on it wherever I'm at.


Second, I'm running into an oddity and I'm not sure what I'm doing wrong or
whether this is a bug of some sort, this has to do with trying to replace
unicode characters in a string which seems like it should be a
straightforward operation.  Here is my code:

        "Fetch the raw JSON data from dtdb.co"
        response := 'http://dtdb.co/api/cards/' asUrl retrieveContents asString.

        "Clean up the data a bit to make it a little more regular"
        response := response copyReplaceAll: 'null' with: '""'.
        response := response copyReplaceAll: '\u2022' with: ','.
        response := response copyReplaceAll: '\u009e' with: 'e'.

Basically I'm just pulling some JSON data and then doing a few string
replacements to make the data suit my needs.  The first one works.  The
second one works.  Since the third one ALSO uses a \uXXXX code I would
expect it to work too, but it does not - the accented characters are still
there.

To get a bit more visibility into this, I copied the CopyReplaceAll code
from SequenceableCollection into a scratch class method and adding some
Transcript output:

copyReplaceIn: aString All: oldSubCollection with: newCollection
        "Answer a copy of the receiver in which all occurrences of
        oldSubCollection have been replaced by newCollection "

        | startSearch currentIndex endIndex |

        Transcript show: 'start' ; cr.
        startSearch := 1.
        [(currentIndex := aString indexOfSubCollection: oldSubCollection
startingAt: startSearch) > 0]
                whileTrue: [
                        Transcript show: 'Found at index ' ; show: currentIndex ; cr.
                        endIndex := currentIndex + oldSubCollection size - 1.
                        aString := aString
                                        copyReplaceFrom: currentIndex
                                        to: endIndex
                                        with: newCollection.
                                startSearch := currentIndex + newCollection size].
        Transcript show: 'done' ; cr.
        ^ aString

A minimal test seemed to work:
HelloWorld copyReplaceIn: 'R\u00e9my Lapointe' All: '\u00e9' with: 'e'.

start
Found at index 2
done

Testing this with the real data worked too:
HelloWorld copyReplaceIn: ('http://dtdb.co/api/cards/' asUrl
retrieveContents asString) All: '\u00e9' with: 'e'.
start
Found at index 22379
Found at index 22500
done


However, when I went back to using the regular copyReplaceAll:With: method
it does not work and I'm not sure why.  When it executes this:
aString indexOfSubCollection: oldSubCollection startingAt: startSearch

The value comes back as 0 even though it's the same data from
'http://dtdb.co/api/cards/' asUrl retrieveContents asString (I added a "self
halt" to be able to step into the method and view the variable values), and
I'm not sure what the difference is.  There shouldn't be a limit on the size
of the collection, should there?  The whole thing is around 116k which is
big but not ridiculously so.  It is however big enough that the debugger
can't show the whole value, or at least I haven't found a way to do so.


And last, is there a good video tutorial for the Pharo beginner on how to
use the various browsers, debugger, tools, etc... that come with Pharo?  I
would like to start learning more about the best ways to use these in my
development processes.  I'm also having a lot of trouble finding the correct
classes and message for what I want to do, searching online w/ Google often
seem to turn up outdated information (or for a different smalltalk flavor)
and it can take a while to figure out the correct way to do things.  Is
there a good central reference for the APIs somewhere?  I know that you can
search in the browser but I usually don't know the name to search for.  It
would be good to have a handy reference detailing how to do all the
commonplace stuff.

Thanks!



--
View this message in context: http://forum.world.st/New-Pharo-user-some-questions-tp4795325.html
Sent from the Pharo Smalltalk Users mailing list archive at Nabble.com.






--
---
Philippe Back
Visible Performance Improvements
Mob: +32(0) 478 650 140 | Fax: +32 (0) 70 408 027
Blog: http://philippeback.be | Twitter: @philippeback

High Octane SPRL
rue cour Boisacq 101 | 1301 Bierges | Belgium

Pharo Consortium Member - http://consortium.pharo.org/
Featured on the Software Process and Measurement Cast - http://spamcast.libsyn.com
Sparx Systems Enterprise Architect and Ability Engineering EADocX Value Added Reseller
 

Reply | Threaded
Open this post in threaded view
|

Re: New Pharo user, some questions

hernanmd
In reply to this post by dboeren
2014-12-10 17:26 GMT-03:00 dboeren <[hidden email]>:
\u009e

You have a typo there. It should be

\u00e9

#copyReplaceAll:with: is working without problems.

Cheers,

Hernán


2014-12-11 10:45 GMT-03:00 David Boeren <[hidden email]>:
I could, but if I do it before parsing, I only have to do the string replacement in one place.  If I do it afterward, I have to apply it to every field separately which I think makes the code look messier.  Anyway, I have tried applying it at the individual field level as a test but it didn't work there either.  My primary concern at this point is just to get it working which has nothing to do with JSON at all, this is purely a string operation.


On Thu, Dec 11, 2014 at 1:37 AM, Sven Van Caekenberghe <[hidden email]> wrote:

> On 11 Dec 2014, at 04:41, David Boeren <[hidden email]> wrote:
>
> That's the next line of code after what I quoted:
>
>       "Parse the JSON data returned by the api"
>       data := NeoJSONReader fromString: response.
>
> But, prior to the JSON parsing I was doing a couple of string replacements to patch up the data.  The system I'm moving the data into doesn't accept accented characters or bullets, and it wants empty strings instead of nulls.

You can do the replacements after parsing too, just manipulating the generated data structures. I would say that is conceptually more correct.

> All the JSON stuff works fine.  It's just the string operations with copyReplaceAll:with: that aren't working as expected for some reason.
>
> Or are you saying that the data I get from from asUrl retrieveContents is not a "proper string" and maybe that's why it's not working?
>
>
> On Wed, Dec 10, 2014 at 6:34 PM, Sven Van Caekenberghe <[hidden email]> wrote:
>
> > On 10 Dec 2014, at 21:26, dboeren <[hidden email]> wrote:
> >
> >       "Fetch the raw JSON data from dtdb.co"
> >       response := 'http://dtdb.co/api/cards/' asUrl retrieveContents asString.
>
> Why no do
>
> NeoJSONReader fromString: 'http://dtdb.co/api/cards/' asUrl retrieveContents
>
> ?
>
> You'll get the data back, nicely parsed and converted to proper Pharo strings.
>
> Sven
>




Reply | Threaded
Open this post in threaded view
|

Re: New Pharo user, some questions

kilon.alios
In reply to this post by philippeback
Glad to hear is much better than I assumed. About iOS vs Androids, I have both. Each one focus on different things. Neither really excites personally. 



On Thu, Dec 11, 2014 at 3:44 PM, [hidden email] <[hidden email]> wrote:


On Thu, Dec 11, 2014 at 12:01 PM, kilon alios <[hidden email]> wrote:
can you resize the pharo windows ? I saw you struggle with it there 

It also looks like its crawling there , which iPad is this , which generation ? 

This is an iPad2. Pure Morphic is fine, what is not is Nautilus. I guess with AltBrowser it would be fine.

I've had a game I wrote for kids (internal stuff done for my wife's kids help practice) and it was fine with drag and drop and all.

Now for games on iOS I do use Monkey-X. But I'd love to have a Pharo set of classes that would be gaming specific. We could have very fast plugins for all the game engine and script it with Pharo. Kind of what one does with Lua.

The touch paradigm is different from what one can do on a desktop. It is not that Pharo has to work on an iPad. What would be nicer is to have an image running on it and to which one would connect remotely for remote coding.

What I was interested in with the bluetooth keyboard project is to see how to have a kind of dynabook style thing. But Apple has crippled a lot of things, like for an external keyboard support like this one has to use internal undocumented APIs for the gsEvents and this will prevent anything to go to the AppStore. And then one sees apps like iAWriter which has such keyboard support, that's weird.

Also, as a result, you realize that there is no ESC key on an iPad, that you miss a ton of keys that you take for granted on a desktop.
Also, all keyboard scancodes are different in various brands and it is a true ball of knots. No wonder Apple has one supersimplified protocol for input that prevents your from doing powerful keyboard based things. Meh.

Long story short, Android looks much better in that regard, and that's where I am looking at these days.

I've got a new Galaxy Alpha Octocore thing and frankly, it blows any iPhone 6 out of the water. I am done with iOS I'd say.
When going to places, there are so much more Android devices than iDevices... These Android things are like the beige boxes of the 90's.
You know who won at the time.

So, next holidays, I'll have a look at CogDroid from JB. When one can buy a full quad core stick PC with 2G of RAM and 8G of storage for less than $50, well, choice is clear.


That's where I want Pharo to run.

Phil
 

On Thu, Dec 11, 2014 at 10:09 AM, [hidden email] <[hidden email]> wrote:

Pharo on iPad.

http://youtu.be/7MNsUiCc5FQ

Le 10 déc. 2014 21:26, "dboeren" <[hidden email]> a écrit :

Now that my image is working properly again and the fires have been put out,
I wanted to introduce myself a bit better...

My name is David Boeren.  I first learned Smalltalk back in college many
years ago, we used Smalltalk V in an object oriented programming class I
took which was first-half Smalltalk, second-half C++.  This would be about
1992 I think?  In recent years I've mainly been using Java, with occasional
Python dabblings.  I remember installing Squeak once or twice over the
years, but to be honest it felt a bit clunky, perhaps this was just an early
primitive version or whatever.

Recently, I've been getting the itch to try out some different languages.  I
was kind of looking at Scala or Clojure, one co-worker suggested Erlang, and
so forth.  But after doing a brief review I ended up coming back to
Smalltalk which even after all these years still stands right up with the
cutting edge I think.  Sure, there are a few things that I think would be a
little different if it were designed today like tuple support or whatever,
but it feels like the right choice for something I'm going to use mainly for
"fun" projects and the interactive environment is awesome.


One thing I wanted to ask about is the status of getting Pharo running on
iOS (or at least iPad).  I found some old posts but nothing much within the
last couple of years.  I know there were app store policy issues in the past
but I think that Apple has opened things up a bit since then, you can now
get Pythonista in the app store, or Codea.  Is there still an obstacle or is
it just something that hasn't been gotten around to yet?  I'd love to get it
running on my iPad Mini and be able to transmit code back and forth between
there and my laptop to work on it wherever I'm at.


Second, I'm running into an oddity and I'm not sure what I'm doing wrong or
whether this is a bug of some sort, this has to do with trying to replace
unicode characters in a string which seems like it should be a
straightforward operation.  Here is my code:

        "Fetch the raw JSON data from dtdb.co"
        response := 'http://dtdb.co/api/cards/' asUrl retrieveContents asString.

        "Clean up the data a bit to make it a little more regular"
        response := response copyReplaceAll: 'null' with: '""'.
        response := response copyReplaceAll: '\u2022' with: ','.
        response := response copyReplaceAll: '\u009e' with: 'e'.

Basically I'm just pulling some JSON data and then doing a few string
replacements to make the data suit my needs.  The first one works.  The
second one works.  Since the third one ALSO uses a \uXXXX code I would
expect it to work too, but it does not - the accented characters are still
there.

To get a bit more visibility into this, I copied the CopyReplaceAll code
from SequenceableCollection into a scratch class method and adding some
Transcript output:

copyReplaceIn: aString All: oldSubCollection with: newCollection
        "Answer a copy of the receiver in which all occurrences of
        oldSubCollection have been replaced by newCollection "

        | startSearch currentIndex endIndex |

        Transcript show: 'start' ; cr.
        startSearch := 1.
        [(currentIndex := aString indexOfSubCollection: oldSubCollection
startingAt: startSearch) > 0]
                whileTrue: [
                        Transcript show: 'Found at index ' ; show: currentIndex ; cr.
                        endIndex := currentIndex + oldSubCollection size - 1.
                        aString := aString
                                        copyReplaceFrom: currentIndex
                                        to: endIndex
                                        with: newCollection.
                                startSearch := currentIndex + newCollection size].
        Transcript show: 'done' ; cr.
        ^ aString

A minimal test seemed to work:
HelloWorld copyReplaceIn: 'R\u00e9my Lapointe' All: '\u00e9' with: 'e'.

start
Found at index 2
done

Testing this with the real data worked too:
HelloWorld copyReplaceIn: ('http://dtdb.co/api/cards/' asUrl
retrieveContents asString) All: '\u00e9' with: 'e'.
start
Found at index 22379
Found at index 22500
done


However, when I went back to using the regular copyReplaceAll:With: method
it does not work and I'm not sure why.  When it executes this:
aString indexOfSubCollection: oldSubCollection startingAt: startSearch

The value comes back as 0 even though it's the same data from
'http://dtdb.co/api/cards/' asUrl retrieveContents asString (I added a "self
halt" to be able to step into the method and view the variable values), and
I'm not sure what the difference is.  There shouldn't be a limit on the size
of the collection, should there?  The whole thing is around 116k which is
big but not ridiculously so.  It is however big enough that the debugger
can't show the whole value, or at least I haven't found a way to do so.


And last, is there a good video tutorial for the Pharo beginner on how to
use the various browsers, debugger, tools, etc... that come with Pharo?  I
would like to start learning more about the best ways to use these in my
development processes.  I'm also having a lot of trouble finding the correct
classes and message for what I want to do, searching online w/ Google often
seem to turn up outdated information (or for a different smalltalk flavor)
and it can take a while to figure out the correct way to do things.  Is
there a good central reference for the APIs somewhere?  I know that you can
search in the browser but I usually don't know the name to search for.  It
would be good to have a handy reference detailing how to do all the
commonplace stuff.

Thanks!



--
View this message in context: http://forum.world.st/New-Pharo-user-some-questions-tp4795325.html
Sent from the Pharo Smalltalk Users mailing list archive at Nabble.com.






--
---
Philippe Back
Visible Performance Improvements
Mob: +32(0) 478 650 140 | Fax: +32 (0) 70 408 027
Blog: http://philippeback.be | Twitter: @philippeback

High Octane SPRL
rue cour Boisacq 101 | 1301 Bierges | Belgium

Pharo Consortium Member - http://consortium.pharo.org/
Featured on the Software Process and Measurement Cast - http://spamcast.libsyn.com
Sparx Systems Enterprise Architect and Ability Engineering EADocX Value Added Reseller
 


Reply | Threaded
Open this post in threaded view
|

Re: New Pharo user, some questions

stepharo
In reply to this post by dboeren

> Now that my image is working properly again and the fires have been put out,
> I wanted to introduce myself a bit better...
I still do not understand what happen. Because we use Pharo heavily
around and never got that behavior.

>
> My name is David Boeren.  I first learned Smalltalk back in college many
> years ago, we used Smalltalk V in an object oriented programming class I
> took which was first-half Smalltalk, second-half C++.  This would be about
> 1992 I think?  In recent years I've mainly been using Java, with occasional
> Python dabblings.  I remember installing Squeak once or twice over the
> years, but to be honest it felt a bit clunky, perhaps this was just an early
> primitive version or whatever.
>
> Recently, I've been getting the itch to try out some different languages.  I
> was kind of looking at Scala or Clojure, one co-worker suggested Erlang, and
> so forth.  But after doing a brief review I ended up coming back to
> Smalltalk which even after all these years still stands right up with the
> cutting edge I think.  Sure, there are a few things that I think would be a
> little different

Us too :)
But we are working on it. Pharo will be more than Smalltalk :)

> if it were designed today like tuple support or whatever,
> but it feels like the right choice for something I'm going to use mainly for
> "fun" projects and the interactive environment is awesome.
Many people in the Pharo community are using Pharo for making a living
with it so it may come.

>
> One thing I wanted to ask about is the status of getting Pharo running on
> iOS (or at least iPad).  I found some old posts but nothing much within the
> last couple of years.  I know there were app store policy issues in the past
> but I think that Apple has opened things up a bit since then, you can now
> get Pythonista in the app store, or Codea.  Is there still an obstacle or is
> it just something that hasn't been gotten around to yet?  I'd love to get it
> running on my iPad Mini and be able to transmit code back and forth between
> there and my laptop to work on it wherever I'm at.
There is a PharoVM for iOS (now you do not get the JIT because of idiot
Apple policy).

>
>
> Second, I'm running into an oddity and I'm not sure what I'm doing wrong or
> whether this is a bug of some sort, this has to do with trying to replace
> unicode characters in a string which seems like it should be a
> straightforward operation.  Here is my code:
>
> "Fetch the raw JSON data from dtdb.co"
> response := 'http://dtdb.co/api/cards/' asUrl retrieveContents asString.
>
> "Clean up the data a bit to make it a little more regular"
> response := response copyReplaceAll: 'null' with: '""'.
> response := response copyReplaceAll: '\u2022' with: ','.
> response := response copyReplaceAll: '\u009e' with: 'e'.

You should read the chapter on Zinc-Encodings.
https://ci.inria.fr/pharo-contribution/job/EnterprisePharoBook/lastSuccessfulBuild/artifact/Zinc-Encoding-Meta/

>
> Basically I'm just pulling some JSON data and then doing a few string
> replacements to make the data suit my needs.  The first one works.  The
> second one works.  Since the third one ALSO uses a \uXXXX code I would
> expect it to work too, but it does not - the accented characters are still
> there.
>
> To get a bit more visibility into this, I copied the CopyReplaceAll code
> from SequenceableCollection into a scratch class method and adding some
> Transcript output:
>
> copyReplaceIn: aString All: oldSubCollection with: newCollection
> "Answer a copy of the receiver in which all occurrences of
> oldSubCollection have been replaced by newCollection "
>
> | startSearch currentIndex endIndex |
>
> Transcript show: 'start' ; cr.
> startSearch := 1.
> [(currentIndex := aString indexOfSubCollection: oldSubCollection
> startingAt: startSearch) > 0]
> whileTrue: [
> Transcript show: 'Found at index ' ; show: currentIndex ; cr.
> endIndex := currentIndex + oldSubCollection size - 1.
> aString := aString
> copyReplaceFrom: currentIndex
> to: endIndex
> with: newCollection.
> startSearch := currentIndex + newCollection size].
> Transcript show: 'done' ; cr.
> ^ aString
>
> A minimal test seemed to work:
> HelloWorld copyReplaceIn: 'R\u00e9my Lapointe' All: '\u00e9' with: 'e'.
>
> start
> Found at index 2
> done
>
> Testing this with the real data worked too:
> HelloWorld copyReplaceIn: ('http://dtdb.co/api/cards/' asUrl
> retrieveContents asString) All: '\u00e9' with: 'e'.
> start
> Found at index 22379
> Found at index 22500
> done
>
>
> However, when I went back to using the regular copyReplaceAll:With: method
> it does not work and I'm not sure why.  When it executes this:
> aString indexOfSubCollection: oldSubCollection startingAt: startSearch
>
> The value comes back as 0 even though it's the same data from
> 'http://dtdb.co/api/cards/' asUrl retrieveContents asString (I added a "self
> halt" to be able to step into the method and view the variable values), and
> I'm not sure what the difference is.  There shouldn't be a limit on the size
> of the collection, should there?  The whole thing is around 116k which is
> big but not ridiculously so.  It is however big enough that the debugger
> can't show the whole value, or at least I haven't found a way to do so.
>
>
> And last, is there a good video tutorial for the Pharo beginner on how to
> use the various browsers, debugger, tools, etc... that come with Pharo?  I
> would like to start learning more about the best ways to use these in my
> development processes.  I'm also having a lot of trouble finding the correct
> classes and message for what I want to do, searching online w/ Google often
> seem to turn up outdated information (or for a different smalltalk flavor)
> and it can take a while to figure out the correct way to do things.  Is
> there a good central reference for the APIs somewhere?  I know that you can
> search in the browser but I usually don't know the name to search for.  It
> would be good to have a handy reference detailing how to do all the
> commonplace stuff.
>
> Thanks!
>
>
>
> --
> View this message in context: http://forum.world.st/New-Pharo-user-some-questions-tp4795325.html
> Sent from the Pharo Smalltalk Users mailing list archive at Nabble.com.
>
>


Reply | Threaded
Open this post in threaded view
|

Re: New Pharo user, some questions

stepharo
In reply to this post by philippeback

This is an iPad2. Pure Morphic is fine, what is not is Nautilus. I guess with AltBrowser it would be fine.

Yes one day we will have to put Nautilus to a diet.

I've had a game I wrote for kids (internal stuff done for my wife's kids help practice) and it was fine with drag and drop and all.

Now for games on iOS I do use Monkey-X. But I'd love to have a Pharo set of classes that would be gaming specific. We could have very fast plugins for all the game engine and script it with Pharo. Kind of what one does with Lua.

The touch paradigm is different from what one can do on a desktop. It is not that Pharo has to work on an iPad. What would be nicer is to have an image running on it and to which one would connect remotely for remote coding.

What I was interested in with the bluetooth keyboard project is to see how to have a kind of dynabook style thing. But Apple has crippled a lot of things, like for an external keyboard support like this one has to use internal undocumented APIs for the gsEvents and this will prevent anything to go to the AppStore. And then one sees apps like iAWriter which has such keyboard support, that's weird.

Also, as a result, you realize that there is no ESC key on an iPad, that you miss a ton of keys that you take for granted on a desktop.
Also, all keyboard scancodes are different in various brands and it is a true ball of knots. No wonder Apple has one supersimplified protocol for input that prevents your from doing powerful keyboard based things. Meh.

Long story short, Android looks much better in that regard, and that's where I am looking at these days.

I've got a new Galaxy Alpha Octocore thing and frankly, it blows any iPhone 6 out of the water. I am done with iOS I'd say.
When going to places, there are so much more Android devices than iDevices... These Android things are like the beige boxes of the 90's.
You know who won at the time.

So, next holidays, I'll have a look at CogDroid from JB. When one can buy a full quad core stick PC with 2G of RAM and 8G of storage for less than $50, well, choice is clear.


That's where I want Pharo to run.

Phil
 

On Thu, Dec 11, 2014 at 10:09 AM, [hidden email] <[hidden email]> wrote:

Pharo on iPad.

http://youtu.be/7MNsUiCc5FQ

Le 10 déc. 2014 21:26, "dboeren" <[hidden email]> a écrit :

Now that my image is working properly again and the fires have been put out,
I wanted to introduce myself a bit better...

My name is David Boeren.  I first learned Smalltalk back in college many
years ago, we used Smalltalk V in an object oriented programming class I
took which was first-half Smalltalk, second-half C++.  This would be about
1992 I think?  In recent years I've mainly been using Java, with occasional
Python dabblings.  I remember installing Squeak once or twice over the
years, but to be honest it felt a bit clunky, perhaps this was just an early
primitive version or whatever.

Recently, I've been getting the itch to try out some different languages.  I
was kind of looking at Scala or Clojure, one co-worker suggested Erlang, and
so forth.  But after doing a brief review I ended up coming back to
Smalltalk which even after all these years still stands right up with the
cutting edge I think.  Sure, there are a few things that I think would be a
little different if it were designed today like tuple support or whatever,
but it feels like the right choice for something I'm going to use mainly for
"fun" projects and the interactive environment is awesome.


One thing I wanted to ask about is the status of getting Pharo running on
iOS (or at least iPad).  I found some old posts but nothing much within the
last couple of years.  I know there were app store policy issues in the past
but I think that Apple has opened things up a bit since then, you can now
get Pythonista in the app store, or Codea.  Is there still an obstacle or is
it just something that hasn't been gotten around to yet?  I'd love to get it
running on my iPad Mini and be able to transmit code back and forth between
there and my laptop to work on it wherever I'm at.


Second, I'm running into an oddity and I'm not sure what I'm doing wrong or
whether this is a bug of some sort, this has to do with trying to replace
unicode characters in a string which seems like it should be a
straightforward operation.  Here is my code:

        "Fetch the raw JSON data from dtdb.co"
        response := 'http://dtdb.co/api/cards/' asUrl retrieveContents asString.

        "Clean up the data a bit to make it a little more regular"
        response := response copyReplaceAll: 'null' with: '""'.
        response := response copyReplaceAll: '\u2022' with: ','.
        response := response copyReplaceAll: '\u009e' with: 'e'.

Basically I'm just pulling some JSON data and then doing a few string
replacements to make the data suit my needs.  The first one works.  The
second one works.  Since the third one ALSO uses a \uXXXX code I would
expect it to work too, but it does not - the accented characters are still
there.

To get a bit more visibility into this, I copied the CopyReplaceAll code
from SequenceableCollection into a scratch class method and adding some
Transcript output:

copyReplaceIn: aString All: oldSubCollection with: newCollection
        "Answer a copy of the receiver in which all occurrences of
        oldSubCollection have been replaced by newCollection "

        | startSearch currentIndex endIndex |

        Transcript show: 'start' ; cr.
        startSearch := 1.
        [(currentIndex := aString indexOfSubCollection: oldSubCollection
startingAt: startSearch) > 0]
                whileTrue: [
                        Transcript show: 'Found at index ' ; show: currentIndex ; cr.
                        endIndex := currentIndex + oldSubCollection size - 1.
                        aString := aString
                                        copyReplaceFrom: currentIndex
                                        to: endIndex
                                        with: newCollection.
                                startSearch := currentIndex + newCollection size].
        Transcript show: 'done' ; cr.
        ^ aString

A minimal test seemed to work:
HelloWorld copyReplaceIn: 'R\u00e9my Lapointe' All: '\u00e9' with: 'e'.

start
Found at index 2
done

Testing this with the real data worked too:
HelloWorld copyReplaceIn: ('http://dtdb.co/api/cards/' asUrl
retrieveContents asString) All: '\u00e9' with: 'e'.
start
Found at index 22379
Found at index 22500
done


However, when I went back to using the regular copyReplaceAll:With: method
it does not work and I'm not sure why.  When it executes this:
aString indexOfSubCollection: oldSubCollection startingAt: startSearch

The value comes back as 0 even though it's the same data from
'http://dtdb.co/api/cards/' asUrl retrieveContents asString (I added a "self
halt" to be able to step into the method and view the variable values), and
I'm not sure what the difference is.  There shouldn't be a limit on the size
of the collection, should there?  The whole thing is around 116k which is
big but not ridiculously so.  It is however big enough that the debugger
can't show the whole value, or at least I haven't found a way to do so.


And last, is there a good video tutorial for the Pharo beginner on how to
use the various browsers, debugger, tools, etc... that come with Pharo?  I
would like to start learning more about the best ways to use these in my
development processes.  I'm also having a lot of trouble finding the correct
classes and message for what I want to do, searching online w/ Google often
seem to turn up outdated information (or for a different smalltalk flavor)
and it can take a while to figure out the correct way to do things.  Is
there a good central reference for the APIs somewhere?  I know that you can
search in the browser but I usually don't know the name to search for.  It
would be good to have a handy reference detailing how to do all the
commonplace stuff.

Thanks!



--
View this message in context: http://forum.world.st/New-Pharo-user-some-questions-tp4795325.html
Sent from the Pharo Smalltalk Users mailing list archive at Nabble.com.






--
---
Philippe Back
Visible Performance Improvements
Mob: +32(0) 478 650 140 | Fax: +32 (0) 70 408 027
Blog: http://philippeback.be | Twitter: @philippeback

High Octane SPRL
rue cour Boisacq 101 | 1301 Bierges | Belgium

Pharo Consortium Member - http://consortium.pharo.org/
Featured on the Software Process and Measurement Cast - http://spamcast.libsyn.com
Sparx Systems Enterprise Architect and Ability Engineering EADocX Value Added Reseller
 


Reply | Threaded
Open this post in threaded view
|

Re: New Pharo user, some questions

stepharo
In reply to this post by philippeback

Le 11/12/14 14:44, [hidden email] a écrit :


On Thu, Dec 11, 2014 at 12:01 PM, kilon alios <[hidden email]> wrote:
can you resize the pharo windows ? I saw you struggle with it there 

It also looks like its crawling there , which iPad is this , which generation ? 

This is an iPad2. Pure Morphic is fine, what is not is Nautilus. I guess with AltBrowser it would be fine.

I've had a game I wrote for kids (internal stuff done for my wife's kids help practice) and it was fine with drag and drop and all.

Now for games on iOS I do use Monkey-X. But I'd love to have a Pharo set of classes that would be gaming specific.

Me too.
I proposed a topic going in that direction for array based board game.
Now could you spend some time to describe what you would like and what classes would be needed?

We could have very fast plugins for all the game engine and script it with Pharo. Kind of what one does with Lua.

The touch paradigm is different from what one can do on a desktop. It is not that Pharo has to work on an iPad. What would be nicer is to have an image running on it and to which one would connect remotely for remote coding.

Yes :)

What I was interested in with the bluetooth keyboard project is to see how to have a kind of dynabook style thing. But Apple has crippled a lot of things, like for an external keyboard support like this one has to use internal undocumented APIs for the gsEvents and this will prevent anything to go to the AppStore. And then one sees apps like iAWriter which has such keyboard support, that's weird.
It depends who is the application validator. My impression is that their process sucks.
I talked once with john and it was a bit surnatural.

Also, as a result, you realize that there is no ESC key on an iPad, that you miss a ton of keys that you take for granted on a desktop.
Also, all keyboard scancodes are different in various brands and it is a true ball of knots. No wonder Apple has one supersimplified protocol for input that prevents your from doing powerful keyboard based things. Meh.

Long story short, Android looks much better in that regard, and that's where I am looking at these days.

I've got a new Galaxy Alpha Octocore thing and frankly, it blows any iPhone 6 out of the water. I am done with iOS I'd say.
When going to places, there are so much more Android devices than iDevices... These Android things are like the beige boxes of the 90's.
You know who won at the time.

So, next holidays, I'll have a look at CogDroid from JB.
Cool. JB will be happy and I hope he will push the rewrite of the event model further.
When one can buy a full quad core stick PC with 2G of RAM and 8G of storage for less than $50, well, choice is clear.


That's where I want Pharo to run.

Phil
 

On Thu, Dec 11, 2014 at 10:09 AM, [hidden email] <[hidden email]> wrote:

Pharo on iPad.

http://youtu.be/7MNsUiCc5FQ

Le 10 déc. 2014 21:26, "dboeren" <[hidden email]> a écrit :

Now that my image is working properly again and the fires have been put out,
I wanted to introduce myself a bit better...

My name is David Boeren.  I first learned Smalltalk back in college many
years ago, we used Smalltalk V in an object oriented programming class I
took which was first-half Smalltalk, second-half C++.  This would be about
1992 I think?  In recent years I've mainly been using Java, with occasional
Python dabblings.  I remember installing Squeak once or twice over the
years, but to be honest it felt a bit clunky, perhaps this was just an early
primitive version or whatever.

Recently, I've been getting the itch to try out some different languages.  I
was kind of looking at Scala or Clojure, one co-worker suggested Erlang, and
so forth.  But after doing a brief review I ended up coming back to
Smalltalk which even after all these years still stands right up with the
cutting edge I think.  Sure, there are a few things that I think would be a
little different if it were designed today like tuple support or whatever,
but it feels like the right choice for something I'm going to use mainly for
"fun" projects and the interactive environment is awesome.


One thing I wanted to ask about is the status of getting Pharo running on
iOS (or at least iPad).  I found some old posts but nothing much within the
last couple of years.  I know there were app store policy issues in the past
but I think that Apple has opened things up a bit since then, you can now
get Pythonista in the app store, or Codea.  Is there still an obstacle or is
it just something that hasn't been gotten around to yet?  I'd love to get it
running on my iPad Mini and be able to transmit code back and forth between
there and my laptop to work on it wherever I'm at.


Second, I'm running into an oddity and I'm not sure what I'm doing wrong or
whether this is a bug of some sort, this has to do with trying to replace
unicode characters in a string which seems like it should be a
straightforward operation.  Here is my code:

        "Fetch the raw JSON data from dtdb.co"
        response := 'http://dtdb.co/api/cards/' asUrl retrieveContents asString.

        "Clean up the data a bit to make it a little more regular"
        response := response copyReplaceAll: 'null' with: '""'.
        response := response copyReplaceAll: '\u2022' with: ','.
        response := response copyReplaceAll: '\u009e' with: 'e'.

Basically I'm just pulling some JSON data and then doing a few string
replacements to make the data suit my needs.  The first one works.  The
second one works.  Since the third one ALSO uses a \uXXXX code I would
expect it to work too, but it does not - the accented characters are still
there.

To get a bit more visibility into this, I copied the CopyReplaceAll code
from SequenceableCollection into a scratch class method and adding some
Transcript output:

copyReplaceIn: aString All: oldSubCollection with: newCollection
        "Answer a copy of the receiver in which all occurrences of
        oldSubCollection have been replaced by newCollection "

        | startSearch currentIndex endIndex |

        Transcript show: 'start' ; cr.
        startSearch := 1.
        [(currentIndex := aString indexOfSubCollection: oldSubCollection
startingAt: startSearch) > 0]
                whileTrue: [
                        Transcript show: 'Found at index ' ; show: currentIndex ; cr.
                        endIndex := currentIndex + oldSubCollection size - 1.
                        aString := aString
                                        copyReplaceFrom: currentIndex
                                        to: endIndex
                                        with: newCollection.
                                startSearch := currentIndex + newCollection size].
        Transcript show: 'done' ; cr.
        ^ aString

A minimal test seemed to work:
HelloWorld copyReplaceIn: 'R\u00e9my Lapointe' All: '\u00e9' with: 'e'.

start
Found at index 2
done

Testing this with the real data worked too:
HelloWorld copyReplaceIn: ('http://dtdb.co/api/cards/' asUrl
retrieveContents asString) All: '\u00e9' with: 'e'.
start
Found at index 22379
Found at index 22500
done


However, when I went back to using the regular copyReplaceAll:With: method
it does not work and I'm not sure why.  When it executes this:
aString indexOfSubCollection: oldSubCollection startingAt: startSearch

The value comes back as 0 even though it's the same data from
'http://dtdb.co/api/cards/' asUrl retrieveContents asString (I added a "self
halt" to be able to step into the method and view the variable values), and
I'm not sure what the difference is.  There shouldn't be a limit on the size
of the collection, should there?  The whole thing is around 116k which is
big but not ridiculously so.  It is however big enough that the debugger
can't show the whole value, or at least I haven't found a way to do so.


And last, is there a good video tutorial for the Pharo beginner on how to
use the various browsers, debugger, tools, etc... that come with Pharo?  I
would like to start learning more about the best ways to use these in my
development processes.  I'm also having a lot of trouble finding the correct
classes and message for what I want to do, searching online w/ Google often
seem to turn up outdated information (or for a different smalltalk flavor)
and it can take a while to figure out the correct way to do things.  Is
there a good central reference for the APIs somewhere?  I know that you can
search in the browser but I usually don't know the name to search for.  It
would be good to have a handy reference detailing how to do all the
commonplace stuff.

Thanks!



--
View this message in context: http://forum.world.st/New-Pharo-user-some-questions-tp4795325.html
Sent from the Pharo Smalltalk Users mailing list archive at Nabble.com.






--
---
Philippe Back
Visible Performance Improvements
Mob: +32(0) 478 650 140 | Fax: +32 (0) 70 408 027
Blog: http://philippeback.be | Twitter: @philippeback

High Octane SPRL
rue cour Boisacq 101 | 1301 Bierges | Belgium

Pharo Consortium Member - http://consortium.pharo.org/
Featured on the Software Process and Measurement Cast - http://spamcast.libsyn.com
Sparx Systems Enterprise Architect and Ability Engineering EADocX Value Added Reseller
 


Reply | Threaded
Open this post in threaded view
|

Re: New Pharo user, some questions

philippeback
On Fri, Dec 12, 2014 at 12:44 PM, stepharo <[hidden email]> wrote:

Le 11/12/14 14:44, [hidden email] a écrit :


On Thu, Dec 11, 2014 at 12:01 PM, kilon alios <[hidden email]> wrote:
can you resize the pharo windows ? I saw you struggle with it there 

It also looks like its crawling there , which iPad is this , which generation ? 

This is an iPad2. Pure Morphic is fine, what is not is Nautilus. I guess with AltBrowser it would be fine.

I've had a game I wrote for kids (internal stuff done for my wife's kids help practice) and it was fine with drag and drop and all.

Now for games on iOS I do use Monkey-X. But I'd love to have a Pharo set of classes that would be gaming specific.

Me too.
I proposed a topic going in that direction for array based board game.
Now could you spend some time to describe what you would like and what classes would be needed?

We could take a kind of remix of Trachel, which has animation and stuff in already and Ludus which now runs in Amber but can be ported pretty much easily as a week end project.

As my reference is Monkey-X for the core, here is the API: http://www.monkey-x.com/docs/html/API%20Reference.html

One level above, one can do something like a port of Flixel to Pharo, as there is in http://devolonter.github.io/flixel-monkey/

Features
 Basic collisions between objects
 Easily generate and emit particles
 Camera system for split screen
 Resolution policies
 Create game levels using tilemaps
 Record and play back replays
 
 Text display and scrolling
 Pathfinding and following
 Tweening system
 Group objects together for simplicity
 Math & color utilities
 Easy object recycling


I am also using Diddy


Features:

Collections (ArrayList, etc.)
Tweening
Screen-Based Framework
Sprites / Particles
GUI (Buttons, Sliders, Windows)
Serialization
XML reader/writer
Base64 encoding/decoding
Tile Engine (Using the Tiled Map Editor)

Now, there is also a new framework called ignition that was in the works for a year or two.


That's quite good.



Now, one can think about making a Monkey-X based engine and scripting it with Pharo a bit like Kilon does with Blender. Here we could do more direct with FFI/NB as all Monkey-X code can compile to C.


Phil
 

We could have very fast plugins for all the game engine and script it with Pharo. Kind of what one does with Lua.

The touch paradigm is different from what one can do on a desktop. It is not that Pharo has to work on an iPad. What would be nicer is to have an image running on it and to which one would connect remotely for remote coding.

Yes :)

What I was interested in with the bluetooth keyboard project is to see how to have a kind of dynabook style thing. But Apple has crippled a lot of things, like for an external keyboard support like this one has to use internal undocumented APIs for the gsEvents and this will prevent anything to go to the AppStore. And then one sees apps like iAWriter which has such keyboard support, that's weird.
It depends who is the application validator. My impression is that their process sucks.
I talked once with john and it was a bit surnatural.

Also, as a result, you realize that there is no ESC key on an iPad, that you miss a ton of keys that you take for granted on a desktop.
Also, all keyboard scancodes are different in various brands and it is a true ball of knots. No wonder Apple has one supersimplified protocol for input that prevents your from doing powerful keyboard based things. Meh.

Long story short, Android looks much better in that regard, and that's where I am looking at these days.

I've got a new Galaxy Alpha Octocore thing and frankly, it blows any iPhone 6 out of the water. I am done with iOS I'd say.
When going to places, there are so much more Android devices than iDevices... These Android things are like the beige boxes of the 90's.
You know who won at the time.

So, next holidays, I'll have a look at CogDroid from JB.
Cool. JB will be happy and I hope he will push the rewrite of the event model further.
When one can buy a full quad core stick PC with 2G of RAM and 8G of storage for less than $50, well, choice is clear.


That's where I want Pharo to run.

Phil
 

On Thu, Dec 11, 2014 at 10:09 AM, [hidden email] <[hidden email]> wrote:

Pharo on iPad.

http://youtu.be/7MNsUiCc5FQ

Le 10 déc. 2014 21:26, "dboeren" <[hidden email]> a écrit :

Now that my image is working properly again and the fires have been put out,
I wanted to introduce myself a bit better...

My name is David Boeren.  I first learned Smalltalk back in college many
years ago, we used Smalltalk V in an object oriented programming class I
took which was first-half Smalltalk, second-half C++.  This would be about
1992 I think?  In recent years I've mainly been using Java, with occasional
Python dabblings.  I remember installing Squeak once or twice over the
years, but to be honest it felt a bit clunky, perhaps this was just an early
primitive version or whatever.

Recently, I've been getting the itch to try out some different languages.  I
was kind of looking at Scala or Clojure, one co-worker suggested Erlang, and
so forth.  But after doing a brief review I ended up coming back to
Smalltalk which even after all these years still stands right up with the
cutting edge I think.  Sure, there are a few things that I think would be a
little different if it were designed today like tuple support or whatever,
but it feels like the right choice for something I'm going to use mainly for
"fun" projects and the interactive environment is awesome.


One thing I wanted to ask about is the status of getting Pharo running on
iOS (or at least iPad).  I found some old posts but nothing much within the
last couple of years.  I know there were app store policy issues in the past
but I think that Apple has opened things up a bit since then, you can now
get Pythonista in the app store, or Codea.  Is there still an obstacle or is
it just something that hasn't been gotten around to yet?  I'd love to get it
running on my iPad Mini and be able to transmit code back and forth between
there and my laptop to work on it wherever I'm at.


Second, I'm running into an oddity and I'm not sure what I'm doing wrong or
whether this is a bug of some sort, this has to do with trying to replace
unicode characters in a string which seems like it should be a
straightforward operation.  Here is my code:

        "Fetch the raw JSON data from dtdb.co"
        response := 'http://dtdb.co/api/cards/' asUrl retrieveContents asString.

        "Clean up the data a bit to make it a little more regular"
        response := response copyReplaceAll: 'null' with: '""'.
        response := response copyReplaceAll: '\u2022' with: ','.
        response := response copyReplaceAll: '\u009e' with: 'e'.

Basically I'm just pulling some JSON data and then doing a few string
replacements to make the data suit my needs.  The first one works.  The
second one works.  Since the third one ALSO uses a \uXXXX code I would
expect it to work too, but it does not - the accented characters are still
there.

To get a bit more visibility into this, I copied the CopyReplaceAll code
from SequenceableCollection into a scratch class method and adding some
Transcript output:

copyReplaceIn: aString All: oldSubCollection with: newCollection
        "Answer a copy of the receiver in which all occurrences of
        oldSubCollection have been replaced by newCollection "

        | startSearch currentIndex endIndex |

        Transcript show: 'start' ; cr.
        startSearch := 1.
        [(currentIndex := aString indexOfSubCollection: oldSubCollection
startingAt: startSearch) > 0]
                whileTrue: [
                        Transcript show: 'Found at index ' ; show: currentIndex ; cr.
                        endIndex := currentIndex + oldSubCollection size - 1.
                        aString := aString
                                        copyReplaceFrom: currentIndex
                                        to: endIndex
                                        with: newCollection.
                                startSearch := currentIndex + newCollection size].
        Transcript show: 'done' ; cr.
        ^ aString

A minimal test seemed to work:
HelloWorld copyReplaceIn: 'R\u00e9my Lapointe' All: '\u00e9' with: 'e'.

start
Found at index 2
done

Testing this with the real data worked too:
HelloWorld copyReplaceIn: ('http://dtdb.co/api/cards/' asUrl
retrieveContents asString) All: '\u00e9' with: 'e'.
start
Found at index 22379
Found at index 22500
done


However, when I went back to using the regular copyReplaceAll:With: method
it does not work and I'm not sure why.  When it executes this:
aString indexOfSubCollection: oldSubCollection startingAt: startSearch

The value comes back as 0 even though it's the same data from
'http://dtdb.co/api/cards/' asUrl retrieveContents asString (I added a "self
halt" to be able to step into the method and view the variable values), and
I'm not sure what the difference is.  There shouldn't be a limit on the size
of the collection, should there?  The whole thing is around 116k which is
big but not ridiculously so.  It is however big enough that the debugger
can't show the whole value, or at least I haven't found a way to do so.


And last, is there a good video tutorial for the Pharo beginner on how to
use the various browsers, debugger, tools, etc... that come with Pharo?  I
would like to start learning more about the best ways to use these in my
development processes.  I'm also having a lot of trouble finding the correct
classes and message for what I want to do, searching online w/ Google often
seem to turn up outdated information (or for a different smalltalk flavor)
and it can take a while to figure out the correct way to do things.  Is
there a good central reference for the APIs somewhere?  I know that you can
search in the browser but I usually don't know the name to search for.  It
would be good to have a handy reference detailing how to do all the
commonplace stuff.

Thanks!



--
View this message in context: http://forum.world.st/New-Pharo-user-some-questions-tp4795325.html
Sent from the Pharo Smalltalk Users mailing list archive at Nabble.com.






--
---
Philippe Back
Visible Performance Improvements
Mob: +32(0) 478 650 140 | Fax: +32 (0) 70 408 027
Blog: http://philippeback.be | Twitter: @philippeback

High Octane SPRL
rue cour Boisacq 101 | 1301 Bierges | Belgium

Pharo Consortium Member - http://consortium.pharo.org/
Featured on the Software Process and Measurement Cast - http://spamcast.libsyn.com
Sparx Systems Enterprise Architect and Ability Engineering EADocX Value Added Reseller
 




--
---
Philippe Back
Visible Performance Improvements
Mob: +32(0) 478 650 140 | Fax: +32 (0) 70 408 027
Blog: http://philippeback.be | Twitter: @philippeback

High Octane SPRL
rue cour Boisacq 101 | 1301 Bierges | Belgium

Pharo Consortium Member - http://consortium.pharo.org/
Featured on the Software Process and Measurement Cast - http://spamcast.libsyn.com
Sparx Systems Enterprise Architect and Ability Engineering EADocX Value Added Reseller
 

12