Smart Mobile Studio
  • News
  • Forums
  • Download
  • Store
  • Showcases
    • Featured demos
    • The Smart Contest 2013, Round 1 – Graphics
  • Documentation
    • Get the book
    • System requirements
    • Prerequisites
    • Getting started
      • Introduction
      • Application architecture
      • The application object
      • Forms and navigation
      • Message dialogs
      • Themes and styles
    • Project types
      • Visual project
      • Game project
      • Console project
    • Layout manager
    • Networking
      • TW3HttpRequest
      • TW3JSONP
      • Loading files
  • About

Cooperation with Barnsten

Posted on 03.08.2012 by Smart Mobile Studio Team Posted in News
Barnsten

Barnsten

We are very happy to report that Barnsten, the leading provider of development tools and components in the Benelux region, is now selling Smart Mobile Studio. This is very exciting news and we look forward to further cooperation with Barnsten, especially with regards to seminars and courses on Smart Pascal and mobile development.

We urge those living within the Benelux region to support Barnsten by ordering Smart Mobile Studio via their website.

Sincerely

The Smart Mobile Team

announcement Barnsten cooperation reseller

Smart Mobile Studio Hotfix 2

Posted on 16.07.2012 by Smart Mobile Studio Team Posted in Developers log, News

We are happy to announce a second hotfix to Smart Mobile Studio (build 1.0.1.122). This hotfix is released due to a couple of important bugfixes (*).

The hotfix deals with the following issues:

  • (*) Designer losing track of controls, not saving changes if one or more forms are open
  • (*) Relative paths when creating a new project was not correct for external files
  • Initial support for dotted unit names
  • Missing <%rescode%> tag in HTML template corrected
  • Support for recursive folders in libraries, rtl and local project directory
  • New compiler switch “devirtualize” added
  • Compiler switch for “optimization” fixed
  • bug in w3inet.pas fixed (event handler failed under obfuscation)
  • w3storage.pas unit rewritten to use THandle rather than TObject references
  • Optimized background compilation and unit scanning (less calls, more accurate)
  • Sourcecode mouse hints
  • Initial support for initialization/finalization
  • Added swap() function on compiler level
  • Fixed resolution of overloaded = & <> operators for classes
  • Fixed support for DateToWeekNumber
  • Added StrToBool
  • Fixed parsing of Unicode literals in JSON
  • Support publishing record properties that map to class functions, class const and class variables

The helper object syntax has been extended to restrict the helper type, and provide Delphi source code compatibility, you can now use the following variants, which also restrict the allowed types

  • class helper for sometype : sometype has to be a clas or metaclass
  • interface helper for sometype : sometype has to be an interface
  • record helper for sometype : sometype has to be a record or base type

Getting the update

Simply uninstall your current version of Smart Mobile Studio and download and install the latest demo from this website.

Sincerely

The Smart Mobile Studio Team

Hotfix release

Creating a list menu

Posted on 13.07.2012 by Jon Lennart Posted in Developers log 4 Comments

Smart Mobile currently ships with a rather spartan number of custom controls. Originally we were aiming at a rather minimal RTL and only the basic iOS widgets, this is how C# does it when it comes to iOS development. While we have the rounded iphone menu in the IDE, what is missing is a more versatile menu. Both Android and iOS devices have scrollable list menus that are flat and designed to cover the iphone’s entire horizontal width. You can then move around it with one finger, and when you touch a single item without scrolling – that is considered a “click”.

In this little article I’m going to create this list control to demonstrate how easy it is.

Roll your own

First, let’s start with the baseclasses. We are going to keep it very simple, reducing the list to only two classes: one representing a list item – and another representing the actual list.

Since iPhone lists have the capacity to include sub-controls, we are not going to cheat and wrap UL / LI tags, but use fully functional TW3CustomControls as list items. This will give us the freedom to not only style our list items – but to add buttons and whatever we want to each element.

So let’s start by defining a couple of classes:

  type

  (* Generic ancestor *)
  TLSTCustomMenuItem = Class(TW3CustomControl);

  (* Array type *)
  TLSTMenuItems = Array of TLSTCustomMenuItem;

  (* Menu item *)
  TLSTMenuItem = Class(TLSTCustomMenuItem)
  private
    FCaption: String;
    procedure setCaption(Const Value:String);
  protected
    procedure InitializeObject; override;
  public
    property  Caption:String read FCaption write setCaption;
  end;

  (* selection event *)
  TMenuItemSelectedEvent = procedure (Sender:TObject;Const aItem:TLSTCustomMenuItem);

  (* Our menu *)
  TLSTMenu = Class(TW3ScrollControl)
  private
    FItems:       TLSTMenuItems;
    FLastY:       Integer;
    FSelected:    TLSTMenuItem;
    FOnSelected:  TMenuItemSelectedEvent;
    procedure     HandleTouchBegins(Sender:TObject;Info:TW3TouchData);
    procedure     HandleTouchEnds(Sender:TObject;Info:TW3TouchData);
  protected
    procedure     HandleItemTapped(Const aItem:TLSTMenuItem);
    procedure     InitializeObject; override;
    procedure     FinalizeObject; override;
    procedure     ReSize;override;
  public
    property      OnItemSelected:TMenuItemSelectedEvent read FOnSelected write FOnSelected;
    property      Items:TLSTMenuItems read FItems;
    function      Add(Const aItem:TLSTCustomMenuItem):TLSTCustomMenuItem;overload;
    function      Add:TLSTMenuItem;overload;
  end;

The FItems array is basically a list of the child items. This is actually a bit overkill, since TW3Component already support parent/child management – but it’s Friday so I just used an array to keep track of things.

Ok, let’s move on a bit and look at the implementation for our item:

  //###########################################################################
  // TLSTMenuItem
  //###########################################################################

  procedure TLSTMenuItem.InitializeObject;
  begin
    inherited;
    Self.Color:=clWhite;
    Self.Height:=32;
  end;

  procedure TLSTMenuItem.setCaption(Const Value:String);
  begin
    FCaption:=Value;
    innerHTML:=Value;
  end;

This is a fairly simple setup. We give our item a default color of white, and set the height of the listitem to 22 pixels. The setcaption() is actually one you should look out for. As you can see i use the innerHTML property to set the caption. This is fine for this example – but it will kill all child controls (!). For a proper title, create a child TW3Label and position it by overriding the resize() method.

Ok, let’s look at the main scrolling control. The actual scrolling behavior is inherited from TW3ScrollControl which is a minimalistic, touch based scrollbox. Unlike the Delphi scrollbox – the smart version contains a sub-control called “content” which is what is actually moved.

This means that when we populate our listbox, we have to create our list-items with “content” as parent. Ok, let’s have a look:

  //###########################################################################
  // TLSTMenu
  //###########################################################################

  procedure TLSTMenu.InitializeObject;
  begin
    inherited;
    FItems.SetLength(0);
  end;

  procedure TLSTMenu.FinalizeObject;
  begin
    FItems.Clear;
    inherited;
  end;

  procedure TLSTMenu.HandleTouchBegins(Sender:TObject;Info:TW3TouchData);
  begin
    (* remember current scroll position *)
    if (sender&lt;&gt;NIL)
    and (sender is TLSTMenuItem) then
    begin
      FLastY:=Content.Top;
      FSelected:=TLSTMenuItem(sender);
    end else
    begin
      FLastY:=-1;
      FSelected:=NIL;
    end;
  end;

  procedure TLSTMenu.HandleTouchEnds(Sender:TObject;Info:TW3TouchData);
  begin
    (* No scrolling but touched? Its a tap *)
    if Content.Top=FLastY then
    begin
      if (FSelected&lt;&gt;NIL) then
      begin
        if (FSelected=sender) then
        begin
          HandleItemTapped(FSelected);
          FLastY:=-1;
          FSelected:=NIL;
        end;
      end;
    end;
  end;

  procedure TLSTMenu.HandleItemTapped(Const aItem:TLSTMenuItem);
  begin
    if assigned(FOnSelected) then
    FOnSelected(self,aItem);
  end;

  function TLSTMenu.Add:TLSTMenuItem;
  begin
    result:=TLSTMenuItem(Add(TLSTMenuItem.Create(Content)));
    result.OnTouchBegin:=HandleTouchBegins;
    result.OnTouchEnd:=HandleTouchEnds;
  end;

  function TLSTMenu.Add(Const aItem:TLSTCustomMenuItem):TLSTCustomMenuItem;
  begin
    if aItem&lt;&gt;NIL then
    begin
      if FItems.IndexOf(aItem)&lt;0 then
      begin
        BeginUpdate;
        FItems.Add(aItem);
        EndUpdate;
        content.LayoutChildren;
      end;
    end;
    result:=aItem;
  end;

  procedure TLSTMenu.ReSize;
  var
    mItem:  TLSTCustomMenuItem;
    mSize:  Integer;
    x:  Integer;
    dy: Integer;
  begin
    inherited;
    for x:=0 to FItems.Length-1 do
    begin
      mItem:=FItems[x];
      if mItem.visible then
      inc(mSize,mItem.height);
    end;
    Content.Height:=mSize;

    dy:=0;
    for x:=0 to FItems.Length-1 do
    begin
      mItem:=FItems[x];
      if mItem.visible then
      begin
        mItem.SetBounds(0,dy,width,mItem.Height);
        inc(dy,mItem.Height);
      end;
    end;
  end;

Everything here should be fairly straight forward. We hook the onTouchBegins and onTouchEnd events on all our list items. Why? Because we have to solve a little problem. Since our list is scrollable, that means we have to somehow distinguish between a scroll swipe (up or down) and an actual tap. To achieve this we set down a simple law: If the Y position of the list is in both events, then we consider that a tap (or selection). If you have moved your finger on the other hand, then the tap is ignored.

The final procedure, namely resize, does two things: first, it calculates the total height of all the list items and size the content control accordingly. Then it loops through and positions the child elements.

Styling

Ok, with the behavior out of the way – we just need to add one final piece: namely styling. So double-click on the project CSS file and add the following:

.TLSTMenuItem {
  -webkit-user-select: auto;
  background: #FFFFFF;
  border-bottom: solid 1px #9A9A9A;

    font-family: &quot;Helvetica Neue&quot;, Helvetica, sans-serif;
    font-size: 17px;
    color: #888888;

}

Let’s give the control a test-drive, so we add the unit to our mainform’s uses clause, create an instance, and add some items:

unit Form1;

interface

uses
  w3system, w3graphics, w3ctrls, w3components, w3forms, w3fonts,
  w3borders, w3application, unit1;

type
  TForm1=class(TW3form)
  private
    { Private methods }
    {$I &#039;Form1:intf&#039;}
    FMenu:  TLSTMenu;
    procedure HandleItemSelected(Sender:TObject;Const aItem:TLSTCustomMenuItem);
  protected
    { Protected methods }
    procedure InitializeObject; override;
    procedure FinalizeObject; override;
    procedure StyleTagObject; reintroduce; virtual;
    procedure Resize; override;
  end;

implementation

//############################################################################
// TForm1
//############################################################################

procedure TForm1.InitializeObject;
var
  x:  Integer;
begin
  inherited;
  {$I &#039;Form1:impl&#039;}
  W3HeaderControl1.Title.Caption:=&#039;Form header&#039;;
  w3HeaderControl1.BackButton.Visible:=False;

  FMenu:=TLSTMenu.Create(self);
  FMenu.Color:=clWhite;
  FMenu.StyleClass:=&#039;TPDFMenu&#039;;
  FMenu.Content.height:=120;
  FMenu.Content.color:=clGreen;
  FMenu.OnItemSelected:=HandleItemSelected;

  FMenu.BeginUpdate;
  try
    for x:=1 to 20 do
    FMenu.Add.Caption:=&#039;List item #&#039; + IntToStr(x);
  finally
    FMenu.EndUpdate;
  end;
end;

procedure TForm1.FinalizeObject;
begin
  FMenu.free;
  inherited;
end;

procedure TForm1.HandleItemSelected(Sender:TObject;Const aItem:TLSTCustomMenuItem);
begin
  self.W3HeaderControl1.Title.Caption:=aItem.innerText;
end;

procedure TForm1.Resize;
var
  dy: Integer;
begin
  dy:=W3HeaderControl1.top + W3HeaderControl1.height + 2;
  FMenu.SetBounds(0,dy,width,height-dy);
  inherited;
end;

procedure TForm1.StyleTagObject;
begin
  //Custom styling
end;

end.

As you can see from the code, we catch the touch events and change the title of a header control we added to the form. This makes it quite easy to see what you are doing.

Scroll list galore

Scroll list galore

You can download the project file here (zip archive) and play with it!

Box2d support

Posted on 04.07.2012 by Jon Lennart Posted in News
Box2d running from Smart

Box2d running from Smart

The ever creative Christian W. Budde is working on a wrapper for the famous Box2d library for Smart Mobile Studio.

What is Box2D?

Box2D is an open source C++ engine for simulating rigid bodies in 2D. Box2D is developed by Erin Catto and has the zlib license. While the zlib license does not require acknowledgement, we encourage you to give credit to Box2D in your product.

Box2D was converted from C++ to Javascript, which is the version Christian has based the Smart version on.

You can check out a live Smart compiled demo here!

Note: You can grab the shapes with the mouse and throw them around 🙂

Smart Mobile Studio 1.0.1

Posted on 21.06.2012 by Smart Mobile Studio Team Posted in News 1 Comment

We are happy to announce our first update of Smart Mobile Studio – version 1.0.1.

Download

You can download the installer from our download page.

This setup file is used both as a full installation and as an update (and as a trial installation).

Changes

Some of the fixes have been really time-consuming, so we haven’t finished all the issues we planned to. These will be included in the mid-August release.

Head over to our roadmap to see what we plan for the future.

 

 

The IDE (and the installer):

  • Hi-res application icon
  • Shortcut to RTL-, Demos- and Libraries folders in the Windows Start Menu
  • Shortcut to the project’s folder from the project structure’s context menu
  • Fixed TToolbar skinning-bug
  • Fixed missing support for spaces in the project’s application title
  • Added simple mouse-over information
  • Added CTRL+Click feature (goto declaration)
  • Added RemObjects SDK wizard
  • Fixed size issue and font issue for the CTRL+Space window
  • Fixed problem with unit scanner not listing all methods
  • Added preference settings for unit scanner
  • Added unit wrappers for WebGl
  • Fixed problem with include files in projects folder
  • Updated Chromium Embedded browser (removed exception when closing a media project)
  • Added support for customizable preview sizes (in preferences)
  • Added several demos
  • Applied the Pascal Language Coding Style Guidelines to (most of) the RTL, most Demos and the “new code” generators
Language features:
  • External classes
  • Partial classes
  • DateTime functions
  • Static arrays with negative bounds
  • Inline record constants
  • Support publishing records as JSON
  • Fields initialization
  • Anonymous records
  • Adding static array to dynamic array
  • Operator overloads scoped and supported in units
  • Helper properties
  • Defined() for variants, classes and connectors
  • Dynamic anonymous records
  • Source map support
  • Tolerate, but ignore, “of object” and “reference to”
  • CodeGen improvements
  • Record expr optimization
  • Helper methods for operator overloading

We are really excited about this update, and we hope you’ll find it useful and inspiring.

Sincerely

The Smart Mobile Team

release

Smart Mobile Studio v1.0.1 (beta)

Posted on 18.06.2012 by Jørn E. Angeltveit Posted in Developers log 3 Comments

We are about to release our first update of Smart Mobile Studio – version 1.0.1.
Due to our roadmap we were supposed to release this version today (June 18th).
We do, however, still have some testcases we would like to run trough before we officially announce it.

If you would like to give this update a test run before we officially release it, then you can download the installer directly from SmartMobileStudio.com/download/setup__v101_beta.exe

Changes

Some of the fixes have been really time-consuming, so we haven’t finished all the issues we planned to. These will be included in the mid-August release.

We will publish a detailed changelog when we announce the update officially tomorrow.
In short, this is what we have done:

  • Lot’s of small fixes in the IDE (hi-res app.icon, spaces in app.title, TToolbar skinning-bug, etc etc)
  • Some big fixes in the IDE (CTRL+Click, CTRL+Space/Unit scanner)
  • Some language features (CodeGen improvements, DateTime functions, Static arrays with negative bounds, Record expr optimization, Anonymous records, Helper methods for operator overloading , Defined() for variants etc etc)
  • Some big features (RemObjects SDK support, WebGl wrappers)

We are really excited about this update, and we hope you’ll find it useful and inspiring 🙂

beta release

Yet another interesting demo

Posted on 15.06.2012 by Jørn E. Angeltveit Posted in Developers log, News

BuddhaBrot

Christian-W. Budde has already created lots of cool smart demos.

This time he created another nice fractal art project, The Buddhabrot.

The Buddhabrot is related to the Mandelbrot set and generates a depiction of Gautama Buddha, seated in a meditation pose.

The project is also available as native app for all the platforms supported by PhoneGap.

Take a look at his web page http://www.savioursofsoul.de/Christian/fractal-art/

The project will also be included as a demo project in the upcoming update of Smart Mobile Studio.

New Smart Blogs

Posted on 08.06.2012 by Jørn E. Angeltveit Posted in Developers log, News

A couple of Smart dedicated blogs have been established during the last few weeks.

 

Primož Gabrijelčič (aka TheDelphiGeek) has established www.smartprogrammer.org for Smart related stuff.  His Delphi blog www.thedelphigeek.com will only publish Smart stuff that is relevant for the Delphi programmer.  At his blog you can also take a look at his Smart book and vote for which chapters he should be working on next.

 

Shane Holmes (aka IElite in our forum) is new to Smart and has started to share his experiences at smsbasicsandbeyond.blogspot.com.  This is very interesting for new users, because he shows step by step how to solve various issues.  He has also a YouTube channel you should pay attention to.  Well done, Shane.

Common knowledge, now smarter!

Posted on 05.06.2012 by Smart Mobile Studio Team Posted in News

Common Knowledge is a business rules management product from Object-Connections that allows business rules and application logic to be visually captured, documented and maintained. The Common Knowledge SDK (rules engine) allows business rules to be automated through integration with .NET and Delphi based applications.

They recently added support for Smart Mobile Studio to their product, which means that you can now export code that is compatible with our version of object pascal directly from this wonderful product. In the words of the guys over at Object-Connections:

So with a few minor tweeks of the CodeGen Delphi generator, out popped a file  containing 100% documented, formatted Smart compatible code. A quick cut & paste, a few fields on a form and Common Knowledge… meet HTML5. A quick build with PhoneGap and business rules… meet iPhone.

The inclusion of a business rules capability into client side HTML5 based code has the potential to enable the development of intelligent and highly maintainable mobile applications across a range of domains such as banking & finance, insurance, telecommunications, health, sales & marketing, and logistics.

Source: Object connections

Source: Object connections

And with a submission to phone gap:

Voila, rule based programming on your iPhone

Voila, rule based programming on your iPhone

Sincerely

The Smart Mobile Team

The Smart Bible, book in the making

Posted on 01.06.2012 by Jon Lennart Posted in News

We are happy to announce that the ever productive Primož Gabrijelčič, who has followed Smart Mobile Studio from the beginning and contributed immensely, is busy writing a book on our flavor of Object Pascal. The book will be the defacto bible for HTML5 programming with Object Pascal and cover Smart Mobile Studio in depth.

The book goes through the primers, such as data-types, enumerations, arrays, records, anonymous records and language structures – but also more advanced topics like regular expressions, the layout library, touch and gesture, accelerometer, local storage, networking and serious graphics programming.

Head over to his blog and get a preview.

You should also show your interest at the  publishers site.

 

Update:

Two chapters of the book is finished, and the book is now available for purchase!

Read more on the authors new Smart-blog:  www.smartprogrammer.org

Roadmap

Posted on 31.05.2012 by Smart Mobile Studio Team Posted in News 10 Comments

We are proud to present our roadmap for the upcoming year, with the goals we have set out to achieve and the technologies we are going to build. In order to see the context in which Smart Mobile Studio has been created we would like to start with the background story for the product and how we got here.
Continue reading→

Creating a progress indicator

Posted on 23.05.2012 by Jon Lennart Posted in Documentation

One of the things we did not have time to add for version 1.0 is a simple, graphical progress indicator. These are components we regard as standard in the world of delphi or freepascal – so it really should have been added. But, due to the nature of the VJL it’s very simple to make one. And in this little post I will show you how.

It is important to recognize that under smart, while we are striving to create a truly visual design environment (which is right now only at it’s very beginning), you are expected to write your own components. Writing a mobile application under monotouch (c#) or objective C would likewise demand that you write controls, and indeed – if you want your app to be unique then you must take the plunge. But under smart you only have to worry about a fraction of variables opposed to a delphi component. So let’s get cracking.

Chose your ancestors wisely

Beneath the nice object pascal surface, you are really programming the document object model. As such, all components are in reality html tags which are created and inserted “on the fly” when you create a control (or, when you constructor is called). With the advent of HTML5 the browser suddenly got a new type of tag that is different from all the rest, and that is the canvas tag. The canvas tag means you can define a square region and draw the content yourself via a canvas. So it’s pretty close to what we delphi developers have worked with for over a decade.

We have wrapped and isolated this special tag in the base control TW3GraphicControl. What you get with this control is that it automatically created a canvas tag and also updates the size and proportion of that surface should you alter the width or height properties. This is also where the paint() and invalidate() methods come into play.

Here is the complete unit of a very, very basic progress bar. Another way to do it would be to use TW3CustomControl as the base, and then have a child control inside it that you size accordingly. That would probably be cooler since you could add an animated background to it so it looks more “alive”.

Voila! Le "progress" magnifique!

Voila! Le "progress" magnifique!

unit w3progress;

interface

uses w3system, w3graphics, w3components;

type

TW3ProgressBar = Class(TW3GraphicControl)
private
  FMax:     Integer;
  FPos:     Integer;
  Procedure setmax(aValue:Integer);
  procedure setpos(aValue:Integer);
protected
  procedure Paint;Override;
public
  property  Max:Integer read FMax write setMax;
  property  Position:Integer read Fpos write setpos;
End;

Implementation

Procedure TW3ProgressBar.setmax(aValue:Integer);
Begin
  if aValue <> FMax then
  begin
    FMax:=TInteger.EnsureRange(aValue,0,MAX_INT);
    if Fpos > FMax then
    FPos:=FMax;
    Invalidate;
  end;
end;

procedure TW3ProgressBar.setpos(aValue:Integer);
begin
  if aValue <> FPos then
  begin
    FPos:=TInteger.EnsureRange(aValue,0,FMax);
    Invalidate;
  end;
end;

procedure TW3ProgressBar.Paint;
var
  mRect:  TRect;
  mFill:  TRect;
  mPercent: Integer;
  mpixels:  Integer;
Begin
  // make clientrect
  mRect:=TRect.Create(0,0,Width,Height);

  //Clear background with random color
  canvas.fillstyle:=ColorToWebStr(clWhite);
  canvas.fillRect(mRect);

  //calculate totals to percent, and percent to pixels
  mFill:=mRect;
  mPercent:=TInteger.PercentOfValue(FPos,FMax);
  mPixels:=Round(Width * mPercent / 100.0);
  mFill.Right:=mPixels;
  inc(mFill.Right, mFill.Left);

  // fill in gauge region
  canvas.fillstyle:=ColorToWebStr(clGreen);
  canvas.fillRect(mFill);

  //show percent
  canvas.font:='10pt verdana';
  canvas.FillStyle:='rgb(255,0,0)';
  canvas.FillTextF(IntToStr(mPercent) + ' %',
  width div 2,(Height div 2) + 4,MAX_INT);
end;

end.

Using the control in your own projects

First, add a new unit to your project, then copy and paste in the code above. Now go back to your form unit, and make sure you add w3progress to the uses clause. Then you can do something like this:

// Add this to your forms private section
FMyProgress: TW3ProgressBar

// add this to your form InitializeObject method
FMyProgress:=TW3Progressbar.Create(self);
FMyprogress.setBounds(10,10,100,32);
FMyprogress.max:=300;
FMyprogress.position:=128;

RemObjects SDK support

Posted on 23.05.2012 by Smart Mobile Studio Team Posted in Developers log, News

For those that have been following Smart Mobile Studio for a while, you may remember that André Mussche posted some very interesting experiments some time ago on G+. Already when our project was in early alpha stage he used smart to display a database grid from an external JavaScript library, which was very cool considering a lot of our current compiler features were missing.

But André has not been resting on his laurels but is writing the RemObjects SDK wrapper for Smart Mobile Studio. Being a long time RemObjects user myself I actually got goosebumps when I sat down with this, because this has been a long term goal of mine: to connect to our server park (where we have a ton of RemObjects services) directly from our HTML5 web apps with nothing in-between.

Well, on a scale of 1 to 10, I think you will agree that this is pretty darn awesome 🙂

Client server communication doesnt get much easier than this

Client server communication doesnt get much easier than this

It must be underlined that we do not bundle the RemObjects remoting framework with Smart Mobile Studio. You must own your own RemObjects remoting framework license in order to deploy that product from the Delphi side – so head over to RemObjects and check it out!

Sincerely

The Smart Mobile Team

Children books, games and smart

Posted on 21.05.2012 by Jon Lennart Posted in Developers log 1 Comment

It’s been a while since I have written anything in the developers log, so I thought it would be nice to share two new avenues of the web marked that can benefit from smart mobile studio. In fact, I’m scheduled for a meeting with a Norwegian publisher regarding our upcoming command-line compiler. There is a huge demand for template based projects in the multimedia scene (where only the content is changed but the code remains the same).

Adobe PDF embedding of javascript

Fairly simple coding, but good revenue

Fairly simple coding, but good revenue

If you own an IPad and have children you will no doubt have noticed how much attention children give to iPad games, books and media. I have a 5 year old daughter that have no interest what so ever in computers, PlayStation or the sorts – but the moment she sat down with the iPad all that changed. I don’t know how many interactive books we have bought for her since we got the iPad but it’s quite a few. So where computers and digital gadgets used to be the domain of a predominantly male group in society – the ability to touch and interact with the devices is changing all that.

One of the latest advances in rich media (or should we say: interactive books that includes media) is not simply that they use javascript -but that the latest additions by Adobe to their PDF format is pretty much tailor made for iBooks and Amazon’s reader. But someone has to program the effects and movements of images using javascript (Adobe actually started adding javascript support 10 years ago, but hardly anyone have noticed that is not in the publishing business).

This is perfect for smart mobile studio which is capable of producing advanced yet compact apps that makes full use of hardware acceleration and all the latest web technologies. So if you’re into graphics and know smart – then this is absolutely knowledge publishers will be interested in. You wont believe some of the prices these publishers pay just for some javascript animations (I was gobsmacked by it). And with smart you can compete not only in terms of code complexity, but also in time to deliver.

Games and multimedia

Dune II, Amiga classic

Dune II, Amiga classic

Javascript games is becoming more and more popular. I really had to see it for myself to believe it, but kids today don’t grow up with or care about Amiga’s or commodore 64’s – they grow up with the browser. My 9 year old son loves to play online games but to my surprise, he is more interested in either retro games (super mario, sonic etc. in an emulator) or javascript games. He occasionally plays a game of FIFA on the PlayStation 3, but his generation prefers to play javascript games.

A good javascript game that can run in any webkit browser (we also support FireFox) can go a long way. Since smart compiles to javascript it can be played on all operative systems (linux, mac, windows, whatever has a modern browser, even my TV runs smart apps) and reach all mobile phones and pads at the same time. With a dedicated server and a REST API you could do a lot of cool stuff.

And one of our advantages that the others dont have, is quite frankly classes. Take something simple like hardware accelerated graphics. Sounds easy yeah? Well actually it’s not, at least not when you are hacking away in a javascript notepad editor, having not only to code the game – but also create the OOP layer as well (or use a framework that mimic these things). Most javascript developers end up with canvas games, because mixing pixel graphics with other elements is — well, let’s just say it quickly turns into a mess after 10.000 lines of javascript.

I invented the term ‘Object-Oriented’, and I can tell you I did not have C++ in mind.
-Source: Alan Kay. Creator of Smalltalk.

Since smart comes with a full implementation of sprite3d, reverse engineered in object pascal — creating responsive and blistering fast javascript games is really not that hard. And we have the benefit of classes, so our monsters can inherit things like behavior, animations and so on. For us coming from delphi we take that for granted, but it’s actually not something we should take for granted – because in a lot of languages you are expected to type quite a bit of code before you even see a pixel on screen.

Had I not been busy with the first smart update, I would probably be coding a Dune II clone right now.

Strategic alliance with Creative IT and Eric Grange

Posted on 18.05.2012 by Smart Mobile Studio Team Posted in News

We are happy to announce a strategic alliance between Optimale Systemer AS Norway and Creative IT France. Optimale Systemer AS have obtained the exclusive rights to Eric Grange’s javascript code generator plug-in, and our companies will work in joint effort to further advance the technology commercially.

The agreement does not affect DWS (delphi web script), which will remain open-source as it has always been. The evolution of DWS will continue, open for all – however the javascript code generator, which is copyright Eric Grange and Creative IT – is hereby withdrawn in the sense that:

  • no more MPL licenses will be granted
  • all apps that would use the codegen must comply with the MPL
  • all apps compiled by applications which use the released codegen, must likewise comply with the MPL

This is great news and we are eager to advance the technology into new and exciting areas of software development. We are also extremely happy to have Eric Grange with us in a greater capacity.

Sincerely

The Smart Mobile Team

Pages

  • About
  • Feature Matrix
  • Forums
  • News
  • Release History
  • Download
  • Showcases
    • The Smart Contest 2013, Round 1 – Graphics
  • Store
  • Documentation
    • Creating your own controls
    • Debugging, exceptions and error handling
    • Differences between Delphi and Smart
    • Get the book
    • Getting started
      • Introduction
      • Local storage, session storage and global storage
      • Application architecture
      • The application object
      • Forms and navigation
      • Message dialogs
      • pmSmart Box Model
      • Themes and styles
    • Layout manager
    • Networking
      • Loading files
      • TW3HttpRequest
      • TW3JSONP
    • Prerequisites
    • Real data, talking to sqLite
    • System requirements
    • Project types
      • Visual project
      • Game project
      • Console project

Archives

  • December 2019
  • December 2018
  • November 2018
  • July 2018
  • June 2018
  • February 2018
  • September 2017
  • April 2017
  • November 2016
  • October 2016
  • September 2016
  • April 2016
  • March 2016
  • January 2016
  • October 2015
  • September 2015
  • July 2015
  • April 2015
  • January 2015
  • December 2014
  • October 2014
  • September 2014
  • August 2014
  • July 2014
  • June 2014
  • March 2014
  • February 2014
  • January 2014
  • December 2013
  • November 2013
  • October 2013
  • August 2013
  • July 2013
  • June 2013
  • May 2013
  • April 2013
  • March 2013
  • February 2013
  • January 2013
  • December 2012
  • November 2012
  • August 2012
  • July 2012
  • June 2012
  • May 2012
  • April 2012
  • March 2012
  • February 2012
  • January 2012
  • November 2011
  • October 2011
  • September 2011

Categories

  • Announcements (25)
  • Developers log (119)
  • Documentation (26)
  • News (104)
  • News and articles (16)

WordPress

  • Register
  • Log in
  • WordPress

Subscribe

  • Entries (RSS)
  • Comments (RSS)
  • Prev
  • 1
  • …
  • 6
  • 7
  • 8
  • 9
  • 10
  • …
  • 13
  • Next
© Optimale Systemer AS