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

Smart Mobile Studio 1.0

Posted on 16.05.2012 by Smart Mobile Studio Team Posted in News

We are proud to announce that Smart Mobile Studio version 1.0 is available!

Smart mobile studio is an exciting new development studio for web developers. It’s key feature is that it completely replaces javascript with object pascal. Our advanced compiler technology takes your object pascal source-code and transforms it into state of the art, cutting edge javascript which can be executed by all modern browsers.

Smart Mobile Studio IDE

Smart Mobile Studio IDE

Smart mobile studio comes complete with an integrated development environment containing everything you need. The IDE draws on many different sources but is primarily influenced by Embarcadero delphi and the C# mono project. Those coming from a delphi background will find that the similarities are more than striking: the keyboard shortcuts are the same, the general layout of the IDE is the same, and the way you work with units (source code files) is pure object pascal.

Download your trial edition

You can download a 30 day trial version of Smart Mobile Studio. The trial edition have a few limitations:

  • Smart linker is disabled
  • Code packing is disabled
  • Obfuscation is disabled
  • Optimization is disabled
  • Verbosity is disabled
  • CSS as external file is disabled

The compiled javascript application also informs the user that the app was made in a trial version of Smart Mobile Studio. These limitations are removed when you purchase the full version.

Pricing

We offer a yearly subscription for only $399. The subscription model means that you get full access to:

  • All IDE improvements, fixes and advancement
  • All updates to the visual javascript component library
  • All updates relating to the compiler, pre-processor and code generator
  • Help via email and forums

Sincerely

The Smart Mobile Team

release

Only days left

Posted on 11.05.2012 by Jon Lennart Posted in News 17 Comments
Only days to go

Only days to go

It is now only a matter of days before Smart Mobile Studio 1.0 goes on sale. It marks the end of a one year journey for us to create something completely new for the object pascal community, written in nothing but Delphi itself. But while the journey from idea to realization is over, the next stage of Smart technology is about to begin – and it’s going to be big. Really big.

In this our first release, focus has been on providing you with a solid foundation. A visual javascript component library (VJL) with identical parent/child relationship to what you are already familiar with. An integrated development environment with essential functionality including a component palette. And last but not least, a mock form designer with live rendering of the actual HTML5.

As we move ahead each aspect of the formula will be expanded, strengthened and refined. And while we cant blow the whistle just yet, we have something very exciting in our labs that is going to change everything. Forever.

This is quite possibly the most significant Pascal
development to be watching right now, and brings
the wonderful Pascal language to the world of
Internet development! -Simon Stuart, Delphi developer via Google+

FireFox HTML5 javascript Mozilla OP4JS Safari Safari Mobile Smart Mobile Studio webkit

Support for helper objects

Posted on 03.05.2012 by Jon Lennart Posted in Developers log

Smart Mobile Studio now supports helper objects for various elements, including classes, records and arrays. Helper’s are extremely valuable in leveraging complex data-structures. This is a very powerful addition to Smart’s already impressive list of “must have” features when working with javascript. Features that no existing javascript framework or utility provides.

Here is a small taste of how you can use a helper object to enrich something as simple as an array of TPoints. These are pure “trig” rotations (just one way of doing it).

[sourcecode language=”delphi”]
unit w3polygons;

interface

uses w3system;

type

TPolygonHelper = helper for TPointArray
Procedure Rotate(const angle:Float;const centerX,centerY:Float);
Procedure Scale(factor:float;Const centerX,centerY:Float);
End;

Implementation

procedure TPolygonHelper.Rotate(const angle:Float;
const centerX,centerY:Float);
var
i: integer;
r,p: Float;
begin
if self.Length>0 then
Begin
for i:=self.low to self.high do
begin
r:=sqrt(sqr(self[i].X – centerX) + sqr(self[i].Y – centerY));
p := angle + arcTan2(self[i].Y – centerY, self[i].X – centerX);
self[i].x:=Round(centerX + r * cos(p));
self[i].y:=Round(centerY + r * sin(p));
end;
end;
end;

Procedure TPolygonHelper.Scale(factor:Float;
Const centerX,centerY:Float);
var
i: integer;
r,p: float;
begin
if self.length>0 then
begin
for i := self.low to self.high do
begin
r:= factor * sqrt(sqr(self[i].X – centerX) + sqr(self[i].Y – centerY));
p:= arcTan2(self[i].Y – centerY, self[i].X – centerX);
self[i].X := Round(centerX + r * cos(p));
self[i].Y := Round(centerY + r * sin(p));
end;
end;
end;

end.

[/sourcecode]

Archimedes spiral

Posted on 30.04.2012 by Jon Lennart Posted in Developers log

Here is a fun graphical effect. Start a new game project and paste in the following code (remember to keep the unit name). The effect is known as Archimedes spiral, although we play with the numbers to create a strobe like effect.

The numbers of life

The numbers of life

[sourcecode language=”delphi”]
unit ArchSpiral;

interface

uses w3system, w3components, w3ctrls, w3application,
w3game, w3gameapp, w3graphics, w3components;

type
TApplication = class(TW3CustomGameApplication)
private
{ Private methods }
FaValue: Float;
FbValue: Float;
protected
{ protected methods }
procedure ApplicationStarting; override;
procedure ApplicationClosing; override;
procedure PaintView(Canvas: TW3Canvas); override;
end;

implementation

procedure TApplication.ApplicationStarting;
begin
inherited;

FaValue := 5.0;
FbValue := 1.0;

//Initialize refresh interval, set this to 1 for optimal speed
GameView.Delay:=20;

//Start the redraw-cycle with framecounter active
//Note: the framecounter impacts rendering speed. Disable
//the framerate for maximum speed (false)
GameView.StartSession(true);
end;

procedure TApplication.ApplicationClosing;
begin
GameView.EndSession;
inherited;
end;

// Note: In a real live game you would try to cache as much
// info as you can. Typical tricks are:
// 1: Only get the width/height when resized
// 2: Pre-calculate strings, especially RGB/RGBA values
// 3: Only redraw what has changed, avoid a full repaint
// The code below is just to get you started

procedure TApplication.PaintView(Canvas:TW3Canvas);
var
cx,cy: Float;
i: Integer;
angle: Float;
x,y: Float;
begin
fbValue := fbValue + 0.0009;

// Clear background
Canvas.FillStyle := ‘rgba(0,0,99,0.3)’;
Canvas.FillRectF(0, 0, GameView.Width, GameView.Height);

// Draw our framerate on the screen
Canvas.Font := ’10pt verdana’;
Canvas.FillStyle := ‘rgb(255,255,255)’;
Canvas.FillTextF(‘FPS:’ + IntToStr(GameView.FrameRate),10,20,MAX_INT);

cx := GameView.Width div 2;
cy := GameView.Height div 2;
Canvas.MoveToF(cx,cy);
Canvas.BeginPath;
for i := 0 to 719 do
begin
angle := fbValue * i;
x := cx + (FaValue + FbValue * angle) * cos(angle);
y := cy + (FaValue + FbValue * angle) * sin(angle);
Canvas.LinetoF(x,y);
end;
Canvas.StrokeStyle := ColorToWebStr(clWhite);
Canvas.Stroke;
end;

end.
[/sourcecode]

Demo and code

You can download the project source code here: ArchSpiral.zip

You can find an online demo here: ArchSpiral demo

(Or simply scan the QR code below with your phone)

qrcode

Smart game: WarTrail

Posted on 28.04.2012 by Jon Lennart Posted in News

Eric Grange has added his entry into the PGD competition, a very nice game called Wartrail. The game is coded using Smart Mobile Studio and runs fine under iOS (iPhone and iPad), chrome and FireFox.

Wartrail main screen

Wartrail main screen

The object of the game is to defend your bases against incomming enemies by placing turrets at strategic positions. Each turret costs money and part of the challenge is to figure out where each turret will have the most impact.

Wartrail level 01

Wartrail level 01

Steema TeeChart converted to Smart

Posted on 26.04.2012 by Smart Mobile Studio Team Posted in News 4 Comments
TeeChart running under Smart

TeeChart running under Smart

Steema Software should be no stranger to Delphi, C++ builder or .net developers. They have been producing cutting edge charting components for a long time and are synonymous with quality components.

We are extremely excited about Steema converting their TeeChart component to Smart Mobile Studio, and cant wait to hook it up to our upcomming database layer.

It was with some enthusiasm that we watched Teechart appear on our iPad, iPhone and Android devices!

Sincerely

The Smart Mobile Team

Realtime control rendering

Posted on 25.04.2012 by Jon Lennart Posted in Developers log, News

First taste of things to come: real time rendering of design controls. Since there is a delay between the actual rendering of the html graphics and the design movements, we will probably have a preview button that triggers the process. But all in all it is very nice to see our theories work out 🙂

Smart now renders the design controls via webkit

Smart now renders the design controls via webkit

What is new in community beta 2?

Posted on 25.04.2012 by Jon Lennart Posted in News 4 Comments

Below are some of the new features that has been added to Smart Mobile Studio community beta II. We hope you find our efforts in creating this product,a product that is both unique, innovative and extremely powerful, useful and interesting. Our customers can look forward to gestures, databases, even better browser support, Phone-Gap support and (last but not least) WebGL. We also aim for tight integration with classical Delphi server technology, like the Remobjects remoting framework and the C# websocket hub.
Continue reading→

C# fpc Free Pascal HTML5 javascript JS mono Object Pascal OP4JS Remobjects Smart Mobile Studio WebSocket

Firefox, direct JS access and cleanup

Posted on 20.04.2012 by Jon Lennart Posted in Developers log
VJL Lion

I have no reason for this picture

I finally took the plunge and decided to really give the RTL a makeover. I was supposed to wait until Smart v1.1 with this, but releasing a product only to alter the RTL radically later would be unfair to our customers. Better to put in place a foundation that wont break the codebase later and that we can build on. So for the past 5 days I have edited every single method and class in the RTL’s foundation. But for what you say? Why fix what already works?

One of the hidden gems that my buddy Eric added to the compiler, is that we have direct access to the real javascript objects. You might have noticed that we used to keep a reference to the actual HTML Tag by use of TObject? In the older (and current) API all visual components have a property called tagRef. The problem was – this reference was both slow and dangerous. If you try to call any of it’s methods the app will crash, because it points to the real javascript handle and not our virtual method table.

Using a TObject reference also meant a greater speed penalty, since you had to typecast and test in a variety of ways before you used it. But now, all that is a thing of the past. The tagRef property has been completely removed from the RTL and has been replaced by a proper THandle. What is the fuzz about? Well, this property IS the actual javascript object. So, Eric in his infinite wizdom added support for magic stuff like:

[sourcecode language=”delphi”]
Self.Handle.style[‘backgroundColor’]:=clRed;
[/sourcecode]

What happens here is that you are accessing the javascript object directly, with nothing in between (!). As you can imagine, this gives us a tremendous advantage in speed over other solutions. It also means that the compiled code will be smaller, more efficient – and most importantly, easy to maintain. So now you can interact directly with the native DOM elements without an ASM section.

Speed injection

An example of just how much extra juice we managed to squeeze out of the browser with this rewrite, can be demonstrated by the “plasma” graphics demo we posted earlier (donated by a tester). Under the older RTL it rendered 120.000 pixels (manually plotted into the HTML5 graphics context via R,G,B,A) at roughly 4 frames per second on an iPhone 4S. That is extremely slow (but considering the amount of calls involved, im surprised we got 4 frames at all). After I ejected the use of tagRef and re-wrote parts of the w3graphics.pas unit, I now get 11 frames per second. Please remember that this extremely fast for a scripting engine, being able to draw 120.000 * 4 bytes eleven times a second. On my iMac it runs at a decent 80 FPS, which is even more impressive.

And this is just for starters. To keep the RTL backwards compatible I have retained the functions in w3system.pas (things like w3_setStyle, w3_setAttrib and so on), which means there are actually thousands of calls being made that are now redundant. It will take a lot of energy to get rid of them by Monday – but when I decide on something I never quit until it’s done.

Structure helpers

Following up on Delphi’s introduction of record functions, I have stripped the older functions for making and working with TRect, TRectF, TPoint and TPointF – and instead placed them directly in the record itself. This is much more uniform and leaves little doubt where a function should be (so new users dont have to wonder what unit function X resides in). Here is the interface for TRect as of writing. More and more functions will be added, but this is the “bare bones” i guess:

[sourcecode language=”delphi”]
TRect = Record
Left:Integer;
Top:Integer;
Right:Integer;
Bottom:Integer;
function Width:Integer;
function Height:Integer;
function toString:String;
function topLeft:TPoint;
function BottomRight:TPoint;
function Clip(Const RectToClip:TRect):TRect;
function Empty:Boolean;
function NullRect:TRect;
function Compare(Const aRect:TRect):Boolean;
function ContainsRow(Const aRow:Integer):Boolean;
function ContainsCol(Const aCol:Integer):Boolean;
function ContainsRect(Const aRect:TRect):Boolean;
function ContainsPos(Const aLeft,aTop:Integer):Boolean;
function ContainsPoint(Const apoint:TPoint):Boolean;
function Intersect(Const aRect:TRect;var intersection:TRect):Boolean;
function Expose(const aChildRect:TRect):TExposure;
function Make(Const aLeft,aTop,aWidth,aHeight:Integer):TRect;overload;
function Make(Const aWidth,aHeight:Integer):TRect;overload;
function MakeAbs(Const aLeft,aTop,aRight,aBottom:Integer):TRect;
End;
[/sourcecode]

FireFox support

The first version of Smart Mobile is designed exclusively for webkit, which means Safari mobile (iPad, iPod, iPhone), Android and equivalent desktop browsers. So little or no effort has gone into making Smart apps run on Opera or FireFox. But with some tweaks I now have a Sprite3d App running under FireFox as well 🙂

The bootstrap code (the section of code that initializes and starts your application) has been altered to include a browser check. So now it checks what system you are running and cache’s known style-prefixes and other information. The magic function that will make all the difference is called “w3_CSSPrefix”. This will help make your CSS calls “universal”. So where you would previously have written:

[sourcecode language=”delphi”]
w3_setStyle(handle,’webkitTranslate’,F3dState);
[/sourcecode]

You can now make it run on all browsers by changing it to:

[sourcecode language=”delphi”]
w3_setStyle(handle,w3_CSSPrefix(‘Translate’),F3dState);
[/sourcecode]

Hardware accelerated animations and events are a bit crappy on FireFox at the moment (in terms of commonalities), for instance their “animation end” event don’t fire as it’s supposed to, and it also deviates from the naming convention used elsewhere. So mozAnimationEnd wont do. I’ll have to come up with a solution for that. But full FireFox support wont happen until later. But you can prepare your app for universal support by using the w3_cssPrefix function.

API drivers

The only way to fully maximize the potential of all platforms is to create a common ground, but one that is rich enough to cater for a browser’s unique features. As such, I have decided to create a driver system to solve the browser compatibility problems once and for all. This is currently being prototyped but should make it into Smart v1.5 probably. In short you  have a basic class with functions for getting the correct style names (and more) for the current browser. The driver will also contain functions to examine device capabilities (is camera supported, is database supported, is orientation supported, touch, sound formats, image formats — the whole multimedia spectrum). When your app starts, the browser will be recognized – and the appropriate driver created. The RTL will then reference the driver to get the correct properties to set.

As a bonus, anyone can write a new driver should a different browser appear on the marked. And should there be changes, you simply update the driver rather than every n’th class or method in the RTL.

The javascript punters are going to go “whaaat? how did they do that?”. Easy, object pascal 🙂

GradLines

Posted on 14.04.2012 by Jørn E. Angeltveit Posted in Developers log
GradLines

GradLines

Christian-W. Budde has already amazed us with two cool classical games (Tetris and Minesweeper), but Christian has still got some other goodies to share with us.  As a member of the Graphics32 libraryteam, he was inspired by the Gradient line example and created a similar solution with Smart.

Nice work, Christian.

Demo and code

You can download the project source code here:  GradLines.zip

You can find an online demo here:  GradLines demo

(Or simply scan the QR code below with your phone)

qrcode

code demo gr32 gradient gradline graphics graphics32 line

Minesweeper

Posted on 12.04.2012 by Jørn E. Angeltveit Posted in Developers log
Minesweeper

Minesweeper - kill an hour or two...

Yet another cool game implementation by Christian.

Look up for this guy in the 2nd PGD Challenge!  😉

Thank you for your contributions, Christian.

Demo and code

You can download the project source code here:  Minesweeper.zip

You can find an online demo here:  Minesweeper online demo

(Or simply scan the QR code below with your phone)

qrcode

code demo game minesweeper

Realtime plasma effect

Posted on 04.04.2012 by Jon Lennart Posted in Developers log

Now this is something you dont see every day under javascript, an old-school demo effect called “plasma” 🙂 It’s a rare thing in a browser due to the fact that each pixel has to be set for every redraw (400 x 400 = 160 000 pixels). So naturally it’s hard to make it move under javascript. But it works pretty good (this is of-course written in Smart). I remember 25 frames on the Amiga was concidered OK, so this is pretty cool stuff 🙂

This demo was donated by Jason Reid. Thumbs up Jason!

400 x 400 32bit running at 50+ frames per second

400 x 400 32bit running at 50+ frames per second

demo effect plasma

Tetris arrives in Sparta

Posted on 03.04.2012 by Jon Lennart Posted in Developers log
A very nice tetris clone!

A very nice Tetris clone!

One of the beta-testers really put the system to it’s test. He received the beta – and the next day he submitted a fully blown Tetris clone to us. It is once again a nice testament to just how easy it is to port over Delphi code and make it spin under HTML5 with Smart.

So hat off to Christian! Talk about getting into the RTL quickly. I wasted my entire lunchtime playing this 🙂 Way to go, cheers!

Game coding under Smart

There are currently 2 ways of creating games under Smart. The first is naturally by creating a game project (clicking “new project” -> Game) which will establish a bare-bones HTML5 canvas application. This means no form designs and is more suitable for low-level coders and people who want to squeeze the last drop of juice out of the browser.

The second way, is to create a normal visual application and then add the unit “w3sprite3d” to the uses list. This gives you access to a class called TW3Sprite. TW3Sprite implements a javascript API called sprite3d (no dependencies, we re-created it in smart), which simply put allows you to easily rotate, scale and move the control around the screen – and it’s all done using hardware acceleration (see older posts about Sprite3d and also check out the docs for the library if you are unsure about it).

I also took the liberty to speed up Sprite3d a bit, using and/or operators rather than ad-hoc string replacements. So you should get better speed under Smart.

Depending on your game type, either solution will serve you well – and you will have a serious advantage over classical JS programmers which must write tons of code to get the same level of control and infrastructure.

For a look at what Sprite3d can do, have a look at this article:  Retro demo coded in Smart

Demo and code

You can download the project source code here:  Tetris.zip

You can find an online demo here:  Tetris demo

(Or simply scan the QR code below with your phone)

qrcode

code demo game tetris

Keyboard events, how to?

Posted on 03.04.2012 by Jon Lennart Posted in Developers log, Documentation

Smart supports normal keyboard events for all HTML elements that triggers them. It can be confusing since we bolted the events into TW3CustomControl – which gives the impression that you can catch events from everything. Sadly this is not the case (support varies between browsers – and there is the technicality of “setfocus” which is not consistent under browsers. A native call to alert for instance, breaks the focus cycle that we take for granted in native applications).

I wanted to share how you can hook into the global keyboard event chain of the window object. This is of-course a must for games and multimedia designed for the desktop rather than touch devices. You also want to catch and buffer the key-presses to make your games respond as quickly as possible.

In this example we are going to setup the event handler inside a form. If you use multiple forms in your app but want to isolate keyboard handling handling on a global scale, then you should move this code to your application class rather than the form. Either way, here is how you can do it:

[sourcecode language=”delphi”]

// We start off by binding our handler to the event.
// In this case we bind to the window handle.
Procedure TForm1.InitializeObject;
Begin
inherited;
{$I ‘Form1:impl’}
w3_Bind2(browserapi.getwindow,’onkeydown’,doKeyDown);
End;

// Here we catch the JS event, extract the event value we want
// And ship it off to our handler. In a game, I would handle the
// key here since the extra call adds overhead. Every CPU cycle
// counts in the world of HTML5 programming.
Procedure TForm1.doKeyDown;
var
mCode: Integer;
begin
asm
@mCode = event.keyCode;
end;
HandleKeyDown(self,mCode);

(* As an alternative, you can also access JS objects via a variant,
which is a neat way of getting access to the native JS object
directly:

var
mEvent: variant;
Begin
asm @mEvent = event; end;
case mEvent.keyCode of
//do your thing here
end;
end;
*)
end;

// This is basically the standard onKeyDown event handler that
// all Smart components have. But by rule only input elements
// actually bouble this event. So for games and fullscreen apps
// it makes sense to centralize handling in one place.
procedure TForm1.HandleKeyDown(Sender:TObject;aKeyCode:Integer);
begin
writeln(aKeyCode);
end;
[/sourcecode]

If you want the other events, like onKeyPress – simply look at how TW3CustomControl does it (w3components.pas unit). All event handling methods are prefixed with CB (callback). Just copy the code into your form or app unit and adapt it. The keyboard events will be added to TW3CustomApplication in the next release.

event how-to keyboard

Fixes and progress

Posted on 03.04.2012 by Jon Lennart Posted in Developers log 2 Comments

Wow – I would never have thought so many people would download the beta! Or should I say alpha. It really was a disaster to find out that the auto-complete on monkeynews replaced our new 0.5.x build zip-name with the older alpha zip-name. So almost 100 people downloaded the wrong zip. Thankfully we corrected it, so the wast majority of users got the right version.

So please double-check: If the title of the IDE does not say “build 0.5.x” then you must go to your email (we issued a correction message) and download the beta version! I have been cursing since friday because of that mistake.

Make sure your copy have this title

Make sure your copy have this title

Although this blunder put a shadow over the whole release experience, the weekend ended as a small victory due to all the positive feedback we got (obviously from people who got the right download link). My personal favorite was “It bloody works! Awsome!”. That comment made my day 🙂

Ok let’s wrap it up

I am happy to say that a huge chunk of the proposals and bugs have been fixed. I have also started on smarting up the IDE a bit, so right now I’m adding the final touches to “CTRL + CLICK” functionality like we have in Delphi. It already recognizes unit-names, class-names and method-names from the entire RTL – so it looks good. Not sure how to get synEdit to play ball though, but i’ll find a way.

So all in all we have the following chores left:

  • Finish the designer with common editing functions
  • Finish the globals editor
  • Get rid of the buggy synEdit search/replace dialogs (!)
  • Write property editors for font, border etc. so they show up in the inspector

As far as the RTL goes I have a couple of items on my list:

  • Global key hook for full screen apps
  • Add code donated by friends to the RTL (gestures, sound-api etc.)
  • Speed fixes, better error management and more compile options (css as external file etc.)

And that’s basically it for version 1.0 in terms of features. So it’s time to tie up the last lose ends, double, triple and quad check everything – and then it’s done.

The future

  • Databases and datalists
  • Support all browsers
  • webGL

Paying customers will receive updates sequentially (which includes IDE enhancements, new units, updates to the RTL, platform files and compiler updates) of-course. I already have around 200 items on my “must add” list for version 1.1 (including support for remobjects services) so don’t think we will be resting on our laurels 🙂

Datalists is really going to surprise you. It’s actually very close to the old TDataset terminology (I will probably call it TDataset to make it more familiar).

Jai Jai Ganesha!

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
  • …
  • 7
  • 8
  • 9
  • 10
  • 11
  • …
  • 13
  • Next
© Optimale Systemer AS