Websites Navigation: Airbit | Shop | m-shell.net
Languages: EN | DE

Blog

Make SIS with autostart option

Tuesday, September 01, 2009, Jürg Bühler

Make SIS has now the ability to create standalone m applications that launches automaticaly when the phone is booting. To make your app automatically start, just set the «Autostart:» option to «Enabled». The application has to be signed (DevCert-, Open- or Express-Signed) to make this feature work.

Furthermore Make SIS outputs now also the package file (.pkg) used to create the SIS file. Having the original package file eases the submission for Express Signed on symbiansigned.com.

mShell 3.04 Released

Thursday, July 09, 2009, Lukas Knecht

Version 3.04 of mShell has been released and can be downloaded here.

The new features are:

  • A debug module providing runtime debugging facilities.
  • A programming tools manual describing the debugging facilities, a documentation generator with source scanner module.
  • m add-ons: pure m modules for UIs, HTTP clients and other functions.
  • A new documentation format mdoc, describing the m add-ons.

The m add-ons come as .zip files which can be installed with the inbox2m script. They install into the ablib folder by default (make it part of your libpath).

The add-ons currently include:

  • mDocumenter: the mdoc documentation generator.
  • abgui (with abbasegui, abdialog, abfilegui): a user interface and application framework. We have successfully developed several commercial applications based on this framework. The mDocumenter documentation generation tool also uses it.
  • abhttp: a HTTP client with connection caching.
  • abutils: general utilities and generic properties (required by other add-ons).
  • msource: a generic m source scanner.

mShell 3.03 Released

Thursday, June 11, 2009, Lukas Knecht

Version 3.03 of mShell has been released and can be downloaded here.

This new release contains specific packages for S60 5th Edition devices, and supports keyboardless operation via the touch screen.

Other new features:

  • ui.opt1 and ui.opt2 flags to separately handle option keys on S60 devices.
  • ui.focus flag in ui.ptr() to forward pointer events to the application.
  • memio module for streams operating on in-memory buffers.
  • io.copy() copying data from one stream to another.
  • io.flush() also flushes the input buffer on seekable streams.
  • encoding.fromhtml() and encoding.tohtml() to encode and decode HTML character entities.
  • location.stop() to stop a location source (save power when not needing the GPS any longer).
  • math.isnan() and math.isinf() to check for specific IEEE 754 values.

mVNC for S60 5th Edition Available

Monday, June 08, 2009, Lukas Knecht

mVNC 2.02 now installs and runs flawlessly on S60 5th edition devices, e.g. the Nokia 5800 XpressMusic. The touch interface is fully supported, including handwriting recognition which allows to enter text by drawing it via the mouse.

mVNC for S60 5th Edition is part of the standard mVNC distribution which can be downloaded here.

mShell creates opportunities on app stores

Friday, May 29, 2009, Jürg Bühler

G-Meter main screen square white right bar G-Meter uses the built in accelerometer of the latest Nokia S60 devices to measure the current value and direction of G-force acting on the mobile phone. It models a traditional analog instrument and therefore ensures simple handling and maximum readability.

The application is entirely made with the freely available mobile development platform mShell (v3.02). The programming of this commercialy distributed app (Handango, Nokia OVI, airbit Web Shop) tooks little time, due to the power of mShell and its large standard library - for instance, module accel provides easy access to the built in accelerometer sensor that can be found on many latest Nokia phones running under Symbian OS, including volume modells like the N95_8GB.

The chalange was not really the programming or making the distribution file, it was more  the testing and providing all the promotional materials needed to publish an application on a commercial application store.

mVNC 2.02 Released

Thursday, April 23, 2009, Lukas Knecht

mVNC 2.02 is released and can be downloaded here. This is mostly a bug fix release, but has one major change: a new licensing scheme.

To use the free version, the license key 0 must be used and not 34.

To purchase the full version, please go to our brand new shop and get a license key. We accept PayPal, Visa and Master Card. To see what the differences are between the free and full version, refer to the product page.

Additionally the old serial numbers do not work anymore and a new license key has to be obtained. This can be done on the shop using your old serial number as a voucher. Follow these steps to get a new license key:

  • Go to this link and add one mVNC item to the cart. Note: you can only redeem one item at a time. If you have multiple serials, please repeat this process for every serial.
  • Checkout using your email or creating an account (optional).
  • When selecting your payment method, select "Redeem Voucher".
  • Enter your old serial number as the voucher,. You can use spaces or dashes or none at all.
  • Continue the transaction until you see the transaction details. There you will see the new license key. You will also recieve a confirmation email.

If you have any problems redeeming your voucher or purchasing a new license, please contact us at support [at] m-shell.net.

http://shop.airbit.ch/products/mvnc.aspx

 

mShell 3.02 Released

Wednesday, April 08, 2009, Lukas Knecht

Version 3.02 of mShell has been released and can be downloaded here.

Most important bugs fixed:

  • ui.keys(false, true) sometimes produced double strokes.
  • ui.form() did not preselect first item.
  • sleep() did not work with async.call().
  • array.sort() did not also sort the array keys.
  • location.get() threw ErrInUse after 255 calls.
  • ui.font() sometimes shrank font size on restore of old font specification.
  • Exiting a script with a pending async.call() could crash m.
  • Aborted io.write() followed by io.timeout() crashed m.

New features:

  • Added navigation scan codes to module ui.
  • Added ui.keys() variant to simultaneously support keys presses, releases and strokes, and to allow key handling before the application sees them.
  • Added module digest offering standard message digests (hashes).
  • Added module encoding encoding and decoding strings into and from standard formats.
  • Added an error traceback dialog to better follow runtime exceptions.
  • Replaced the registration transaction by a one way registration SMS. gsm.number cannot be obtained from the transaction response anymore, but must be set in the properties. It was never supported in standalone applications anyway.

Website changes:

  • Changed documentation links from numbered parts to more persistent title texts.
  • Streamlined Make SIS page.

Site has Moved

Friday, March 06, 2009, Lukas Bühler

Today we moved to the new server which is much faster than the old one. We also redesigned the whole site so that it's in the airbit look and feel. Hope you like it!

Following pages or services have changed or are removed:

  • Script download page will be moved to the forum. 
  • Web activation is discontinued.
  • Supported phones page is discontinued.
  • The mShell blog is much simpler, no more comments etc., because it was duplicating something that was already available through the forum. Make sure to update the RSS feed link as it has changed also. The relevant old posts were imported so that's why they have all the same date.

mShell 3.01 Released

Friday, March 06, 2009, Lukas Bühler

Version 3.01 of mShell has been released and can be downloaded here.

We would like to apologize for the unexpected delay, mostly caused by last minute changes due to compatibility issues on some platforms and newest firmware releases.

We are convinced this is the best m release ever, substantially enhancing the possibilities for m users. Enjoy! 

New features:

  • Static compilation option removes the need for installation of mEnvironment.sis on target devices, making deployment and signing of compiled applications much easier.
  • User properties and permissions are transferred to standalone application via .mex file.
  • Module Library search path allows searching for m modules in defined list of folders.
  • m Supervisor & Viewer is now a separate package also available for 3rd edition devices. m Supervisor allows running m at device startup and controlling it via SMS, m Viewer adds .m/.mm/.mex file type recognition.

New library modules and functions:

  • io.format() and io.printf() for formatted output
  • video.record() to record videos
  • ui.text() to support FEP editing in graphical UIs
  • light module to control device lighting [S60 3rd only]
  • mail module to send and receive e-mails using existing configurations (POP3 and IMAP4) [S60 3rd and UIQ3 only]
  • location module to obtain position and satellite data (if available) [S60 3rd only]
  • system.reboot() and system.shutdown() to reboot and power off the device

Major bugs fixed:

  • Fixed broken coding help. Help key moved from double left shift to Yes key.
  • Fixed video module on UIQ3.
  • Fixed accel module on N96 and Symbian 5th ed devices (new sensor API is used if available).
  • Fixed "use try" in compiled code.

mVNC 2.01 Released

Friday, March 06, 2009, Lukas Bühler

The long awaited update for mVNC is here. By now, mVNC has found wide spread acceptance as the ultimate remote view tool for symbian. Due to changes by Nokia, some of the devices experienced issues with the version 2.00, now, the ones we know of, should be fixed. The new version can be downloaded here.

Here's the release log:

  • 2.01-1: Added support for Nokia PC Suite version 7.
  • 2.01-2: Added configurable server priority.
  • 2.01-3: Added support for landscape (camera) mode on UIQ3.
  • 2.01-4: Numerous performance improvements.
  • 2.01-5: Added preferred network access point to network connection configurations.
  • 2.01-6: Added special keyboard support for specific S60 models (E90, N96).
  • 2.01-7: Made server configuration dialog easier to understand.
  • 2.01-8: Added support to connect and disconnect server from other applications.
  • 2.01-9: Set default passive network IP to root server address.
  • 2.01-10: Fixed truncated screen problem on N95, N95 8GB, N96.
  • 2.01-11: Fixed other bugs.

This fixes the often occuring problem when connecting with USB through the proxy.

Little Lives

Friday, March 06, 2009, Lukas Bühler

Little Lives is a very simple side-scrolling game written for mShell 3.0. It takes advantage of m's new object-oriented programming support, such as classes and inheritance. It is designed to show the power and speed of mShell on Symbian mobile devices, and furthermore the creative results a small m script can produce.

The game is built up around the Object class which contains two methods process() and paint(). The process() method is responsible for processing the objects logics, such as movement and simple AI. The paint() method is responsible for drawing the object on screen, including it's rotation and viewport offset. For each frame in the game, every living (active) object is processed and painted once.

The arrow keys on the mobile device control an on-screen cursor. The object .tadpole will always follow this cursor. Furthermore, moving the cursor off the edge of the screen will scroll the viewport. If available, the cursor may also be controlled using the phone's accelerometer.

The following objects have been implemented: DebugObject, Cursor, Ripple, Beam, Energy, WaterPlant, Food, Letter, WaterAnimal, Tadpole, AITadpole, RadioWave, EnergyBar and Fish.  

Please feel free to modify this script to your wishes and needs. Feedback is always appreciated.

Downloads 

LittleLives.m (38.85 kb)
Update: Current version supports phones without accelerometer module.

Screenshots

LitleLives Screenshot1   LitleLives Screenshot2

More about the Objects

View - used by most objects during thier paint() method for thier on-screen offset. This class does not offer any functionality (yet).
Map - contains all the objects within the game. objects is the superset of backgroundObjects, gameObjects and guiObjects. The objects are organized in such a way for easy and quick layering.
Object - the core class of the game. Every entity must extend this class. The two methods process() and paint() must be implemented by these subclasses. These methods are called on all living objects on every frame.
Cursor Object - displays a cross-hair cursor on screen. Used for influencing the .tadpole movement as well as controlling the viewport position.
Ripple Object - mimicks a single ripple moving through the water. Eventually fades away when reaching maxSize.
Beam Object - A horizontal and vertical beam flashes and dissappears slowly at the given x and y coordinates...
Energy Object - visual representation of energy consumption. Displayed when a tadpole eats some food and gains energy.
Water Plant Object - a simple floating water plant. This object drifts slowly in the water and is designed to be in a cluster.
Food Object - a randomly drifting piece of food which can be eaten by tadpoles. When a food is eaten, the tadpole gains in energy and size...
Letter Objects - represents a single character floating randomly onscreen. Use the function addLetterText(x,y,text) to display a series of these letters onscreen.
Water Animal - super class for any moving water animal. This class provides the functionality for moving through the water, wiggling tails and/or fins, navigating to a specific point, and accelerating/decelerating...
Tadpole Water Animal - represents a small tadpole. Tadpole is a WaterAnimal, thus it automatically knows how to move through the water and wiggle it's tail.
AI Tadpole Water Animal - a tadpole which can move by itself. This object either moves to a random location, to our own tadpole, or to a targetted random piece of food.
Fish Water Animal - a large fish water animal which can move through the water by itself. This object moves to either a random location or towards our own tadpole.
Energy Bar Object - A thin horizontal bar at the screen bottom which displays our tadpoles current energy. The bar dissappears after a short moment in order to enable a fuller gaming experience.
Radio Wave Object - a set of small radio waves which are dispersed at the given angle from the origin. 

mShell 3.0 Released

Friday, March 06, 2009, Lukas Bühler

Finally we can announce mShell v3.00 to the community. It's the most radical update so far and we are quite proud of the new features. Also apologies about the long wait; again and again we had to move back the release date due to other commercial projects that required our attention. The files can be downloaded on this site: http://www.m-shell.net/Download.aspx. Note that we outsourced the links and that the URL mshelldev.net will appear.

Enough the talking, here is the release log (as you can see it also contains other version numbers which were internal development cycles, but the current version includes all these points):

  • 2.03-1: Added OOP extensions.
  • 2.03-2: Added graph.size(text,bounds).
  • 2.03-3: Added graph.screen.
  • 2.03-4: Added video module.
  • 2.03-5: Increased I/O buffer size.
  • 2.03-6: Improved output of arrays, class instances, function references.
  • 2.03-7: Streamlined VM instruction set.
  • 2.03-8: Added ui.mode.
  • 2.03-9: Added Exif JPEG support to cam module.
  • 2.04-1: Added code externalization (Compile command) and ability to execute externalized code (.mex files).
  • 3.00-1: Refactored internals of mShell app to clarify separation.
  • 3.00-2: Changed semantics of proc.close, proc.runs and proc.stop if there is no such process.
  • 3.00-3: Extended semantics of proc.run.
  • 3.00-4: Separation into environment and IDE for standalone application support.
  • 3.00-5: Added mex2sis for sis generation.
  • 3.00-6: Added support for changeable document directory and subfolders.
  • 3.00-7: Added async module for asynchronous operation multiplexing.
  • 3.00-8: Added accel module for S60 3rd Edition.
  • 3.00-9: Added alpha channel support to module graph.
  • 3.00-10: Added graphclip.
  • 3.00-11: Added ui.xxxkey2 for UIQ four way navigation.
  • 3.00-12: Added support to load and display PNG files with alpha channel.
  • 3.00-13: Removed dynamic iwlib.dll on 2nd edition devices, which was sometimes causing conflicts with other SW depending on it.
  • 3.00-14: Removed net.adr without parameters (obsolete, use net.local).
  • 3.00-15: Rewrote directory synchronization to keep scripts always ordered.
  • 3.00-16: UI command cleanup.
  • 3.00-17: Fixed bugs.

What people have been waiting for the longest is a way to compile and distribute scripts, this is now also possible. On the phone .mex files can be created and then on a web service they can be compiled into .sis files which can be distributed. Here's the link to the service: http://www.m-shell.net/Makemsis.aspx

Important: Before you install version 3.00 uninstall previous versions of mShell. It avoids errors when installing the new version.

How To Make a SIS File (Video)

Friday, March 06, 2009, Lukas Bühler

Here's a video how to compile a m script.


The phone is a N95 8gb, with the self signed version of mShell 3.00 installed.

Screen resolution independent programming

Friday, March 06, 2009, Lukas Bühler

Since a few weeks I have a Nokia E90. This great phone has an external screen at standard S60 3rd Ed resolution of 240x320 pixels and an internal screen with 800x284 canvas size.

What a pitty when I started some of my scripts written earlier for the Nokia N70. Many of them has been written with the typical S60 2nd Ed screen resolution in mind so the app screen "hangs" somewhere in the upper left corner when running on a bigger screen. Although the script worked fine I had to go trough the code and change all constant screen coordinates or sizes to relative coordinates and sizes. All the time I saved with the quick hack to assume a constant screen size and/or orientation where eated up with the boring and time consuming adaptions for screen res. independency.

When programming for mobile phones you should always aware that screen size can be different from device to device. Also the screen orientation can change while your programm is updating the screen.

Use graph.size() to get the current screen resolution. If you are using icons (from files) it's a good idea to produce the graphics for a virtual screen resolution which should be at least  two times higher than the current standard. Before drawing the icons you can scale it with graph.size(icon, scale) or graph.size(icon, w, h).

For many applications it is also sufficient to to put the graph module in scaled mode. 

Whatever method you like better, make your application screen resolution independent!

Mobile Web Server: The Future?

Friday, March 06, 2009, Lukas Bühler

I've just been playing with the mobile web server of Nokia Research. What they did was just simply porting the Apache web server to the Symbian platform. One problem they had to work around was that the IP of the phone is not accessible from the outside since it is behind a firewall of the provider. To work around that they just implemented a gateway that redirects the requests to the phone. Its quite simple: You install the application on the phone and start it up then you register on the website and pick a subdomain (http://mshell.mymobilesite.net for example). Then you enter your account details on the phone, it connects then to the gateway and is ready for the requests. You can also browse your mobile site locally by using the browser on your phone. What kinda sucks is that if you don't have a flatrate for your data transfers its almost unusable unless you want to ruin yourself, you can only browse it locally.

The whole project is open source and you can create dynamic pages just like in PHP or ASP using Python. Would be nice to create mobile web applications using m, eh?

Huge Kudos to the research team of Nokia.

MyMobileSite.com

Project Site on Forum Nokia 

mShell Home  > Blog