I U8 Newsletter Vol.3
Social development & Bitcoins

U8 promotes social development as interpersonal activity that encourages self-development and enables positive change in individuals and relationships between them. To promote this development also urges a qualitative change in people for better realization of their goals and aspirations. An upward ascending movement to higher energy levels, awareness, complexity, quality, creativity, enjoyment.

Social networks can be confused with the term "social development" though the latter is the individual and interpersonal activity and its course in time. Focusing on the individual and not in the medium of interaction.

U8 proposed professional/personal development in conjunction with other developers sharing activities and objectives that, over time and as a side effect, resulting in a technological object. Using this result is free from each (together or separately) but with the need to award a real assessment. Here's how the bitcoin is used as a resource exchange to promote new developments or new features to existing developments.

U8 is not just for developers but also for technology users. Those interested in new features can also promote development in exchange bitcoins. The receiver of donations will know who donated, thus allowing (are yearning for U8) a sustainable relationship between people.-

COCO8, Smalltalk for Mac users

Alejandro Reimondo Smalltalking founder and S8/U8 creator talk about COCO8 platform.


Could you talk about what is in the COCO8 contribution and how it works. The contribution contains the COCO8 sources application, a market compatible application for iOS in continuous development.

The sources includes everything needed to build the application and is useful as a starting point for developers for iOS and OSX using S8 Smalltalk.

With all activity in HTML5 developments and all that is done, why go back to native?  It is no "go back", it is complementary.

From Smalltalking always encourage advances in Object Technology (using Smalltalk) in diverse areas, without borders. With S8 we have a runtime support for a variety of hardware and operating systems; the development of native applications is not a limit to use S8. Who needs to take advantage of this way of running their objects, can use S8 (a modern smalltalk) to expand their possibilities of execution/ business/etc.

To use COCO8 is it necessary to implement something in Objective-C or can be entirely developed in S8?  100% of the application can be implemented in Smalltalk S8. In case of developed parts in Objective-C and / or javascript (Eg, libraries, etc), you can use them at low cost building an interface FULLY written in S8 smalltalk. The system (Smalltalk) may starts with a minimum content, and then load dynamically (on demand) content and behavior from external resources (memory, internet, databases, etc). COCO8 also works as a server and implements upload services (on the phone), so that entire system can be modified uploading content on the phone, which can be accessed instantly by COCO8 or next boot time (for example, the system image and resources can be uploaded to COCO8 on the phone/tablet and start with a completely different behavior from the original).

The COCO8 original system can be modified (it contains a set of U8 tools) and records the image, so that in next execution starts considering this new image. As in any smalltalk, tools (workspace, browsers, references, app / module loaders) are completely written in Smalltalk S8, being of immense didactic value.

From S8 we can access to javascript. Is it posible to see classes that are on Objective-C side, how it works?  Yes, all Objective-C classes that are in the system can be used (recommended use it via wrappers with API builders [*]) and also can be subclassed (create fully implemented subclasses in S8). You can access levels: javascript, in a full way to all the libraries the system may have and/or load dynamically. Objective-C is accessible via wrappers with API builders and also inline, using S8 extended syntax. C, you can access functions and structures implemented in C in dynamic way.

In short, writing everything in Smalltalk S8 you can access any element of the system and you can change it/subclass it/refine it where is allowed by Apple do it.
[*] The API builders are part of NativeObject framework, a powerful and unique S8 framework, which allows access to all lower levels simply and efficiently reducing the margin for human error.


This means with COCO8 a graphic element, such as a text panel, can be subclassified? Or can be defined a new widget? Is the execution happening in both S8 and Objective-C?  Yes, any class; any graphic class or any framework class and/or library that is present in the system and Objective-C accessible (and/or C). The example of Polygon in COCO8 is just that. A graphic panel implemented entirely in S8, both drawing operations and touch interaction handling. All static in the system is related to Objective-C (Apple does not allow generating methods/functions dynamically in Objective-C). Everything dynamic and open in the system is S8 Smalltalk. In line with the design and history of both Objective-C and Smalltalk.

Are there some special consideration in using COCO8 in iOS or OSX? The development in COCO8 is the same on both platforms?  Both platforms have an identical interface to the operating system. The differences are between the operating systems and libraries that are running. In COCO8 is exactly the same pattern of development.

The Apple API for each platform is what determines the differences and the inability to use the same code (the same objects); in many cases messages and class names are similar but with different semantic; is advisable to keep decoupled base system dependencies because the inability to reuse them and also because (and more important) the high level of premature obsolescence faced by these interfaces in these O.S. (compared to what often occurs with smalltalk).

The UI interfaces, usually change before they are used long. It is often the case (like everything formulated as OO) that things will "say old" when even get to not have five years ... and to be expert in any area, a person requires at least 10 years of effective dedication, is given that the UIs (and other things like languages) only reach advertisements and have the benefit of propaganda as instruments propagation for those who needs something new. For smalltalk, UI (and how to do it) prevails for decades and has not been very frequent pressure from people who use the propagandism to inject the idea of temporary changes (there are few ways to build UI which have proposed, some violate the basic principles of working with objects ... but that's another topic). For those who feel interested in these topics do not hesitate to contact us through our discussion list.

What would be the minimum steps to start a COCO8 project?  As in all modes with S8, it is advisable to start using the social link (social software development with smalltalk) and do what you always do (doIt yourself with Smalltalk):
1.- Read pages of U8 Swiki related to swiki related to COCO8
2.- Register in testers list and register devices iOS where you can download and run COCO8 3.- Contact people who are using, ask and start developing what you need.

Why the name COCO8?  In iOS and OSX the basic framework proposed by Apple called Cocoa, 8 is the same as in S8 (called the activity of construction experience we use -smalltalk -) .-

Do it Yourself

Contacting again Sergio Garcia Canto (Newsletter Vol.2) asked about their movement towards DIY.

How do you can develop as in a traditional Smalltalk? I took part of U8 tools and modified it. Specifically the ability to browse remote code. Having N S8 images running in different chrome tabs; one with S8 modified tools and others with applications that I want to see in operation and remotelly browseables.

The tool allows to open remote Workspaces and/or CHB, giving us several IP addresses options (or node names in the network) where there are explorable S8 images.


Are 'local' development tools ?  The tool is local in the sense that runs on a Chrome tab, but is served by a development server, a nodejs running on port 8080, which is typical for development. The explorable images can be remote in the development server or a different network node. With the tool when I ask for a "local" CHB, I am exploring S8 image running on the corresponding development tools in Chrome. If I ask for a CHB "nodejs ip xxx.xxx.xxx" I'm exploring the image running on the nodejs.

Is nodejs serving other S8 images, running a S8 image?  The nodejs running as another O.S. process and running a non-visual S8 image, nothing related tools. That is, this image has not the S8Tool class. We may also see in starting phase of S8-server-nodejs image, a lot of modules like websocket, http, filesystem, so, mongodb, etc, are loaded. Then a service (websocket server) is launched running on port 9060, where all of the development tools request will be routed. Subsequently, a file server service is launched on port 8080. So the typical way of working is a browser running an image with development tools that connects to the nodejs which is really who saves images.

Remote CHB
Local & remote CHB. Activating menu and opening a remote CHB

Is it possible to do a "save" method? Yes you can. Although we should make a distinction between behavior change and saving image in source files. This things are done but separately. Modifing the image is very simple but save the source is more complex. Keep in mind that I have developed tools that are not mature 'production', is somewhat ad-hoc development. In first case to modify image behavior I can open a remote Workspace and explore and modify objects.

Remote CHB
Operating on remote Workspace

That exploring how it works.  It is similar to "inspect", but I do via the "show it" with context menu command in the same way in which it operates with other Smalltalks. Changing the image is via "do it". That Workspace is running on the remote image. When you select a portion of code and make a "do it" or "show it", it takes the string representing code and sent to the other image; is executed and then returns the string with the response. This way you can operate on a remote image. In other words, it is not doing anything locally, the only activity is sending and receiving. All through websockets and using nodejs server as an intermediary. In a typical scenario we'd be running two images in the browser, one with the tools of development and another with image with an application, both served through port 8080, while communicating via another port (in my case 9060) for developing purposes.

This same pattern is also working on Android devices. With development tools, I can open a CHB or Workspace, selecting the option on Android node (it shows Android device model name and IP). In this way you can open a remote Workspace or CHB exploring a S8 within Android.

So nothing changes with Android. Images can intercommunicate via 9060 with nodejs as an intermediary.  That's right, it's the same, but something interesting is that several images with remote tools may be inspecting the same image. If remote tools and the "intermediate server" are published on the web allows two people exploring and/or modifying the same image. This is possible, even though it has no control mechanism. Much remains to develop and standarize, would be needed inspectors and debuggers. But what I have done it was driven by need.

And what about source code management?  As I mentioned before, changing the image is separated from saving source code. In S8 there is the concept of 'category' and I make use of it. If a string has the name of a category I can send #fileOut message so it is recorded in a filesystem. Who is doing it, is the server running on nodejs S8, with each image as a project. In this way all the sources are partitioned into categories. Eventually when you need to reconstruct the image I have a 'build' configured to be assembled from a set of pre-compiled categories. In addition to having support of changes, I have things versioned to simulate something similar (with less information) to a change.log.-

Betaworks meetings

Betaworks meetings are periodic meetings (one per week) in a day and schedule of fixed duration, open to anyone registered as U8 user. These meetings aim to make progress together in U8 development and answer questions related with U8 (and S8).

Want to join next meeting? Send an email to info@smalltalking to get the date/time/duration and access information to enter the virtual room. Also you can check smalltalking mail list for a betawork announce, or you can read more information in our swiki.

A call (via Skype) and TeamViewer are required to join.-

U8 es un proyecto creado y desarrollado
en el contexto de Smalltalking.
Para más informaciòn visite Smalltalking