LiveCode Meeting 20 September 2014 in the Netherlands – Register Now

Here’s some information about the meeting. I will update this blog post later or I will follow up with another post with more details.

As you may know already, another LiveCode meeting will be organised on 20 September 2014. We intend to organise a really international gathering with participants from the Netherlands, Belgium, America, the United Kingdom and Germany. A few domestic as well as foreign participants have registered already.

We hope we may welcome you as a participant too. There will be several short presentations and there will be plenty of opportunity for discussion. Evidently, there is also a possibility to socialise. After the meeting, we may have a drink or go somewhere for dinner.

Like the previous time in Switzerland, we will collect a few special discounted offers for you and we hope to raffle off a few licenses and e-books for free. In any case, I will give away a copy of the book “Programming for the Real Beginner” and a license for Installer Maker. If you have a product that you would like to promote, please send me a message.

We are still looking for people who want to discuss a subject, demonstrate a product or give a presentation. Possible examples are commercial products, a hobby project or just an interesting idea. Even if you don’t know what you may do yet, contact me and we’ll come up with something interesting.

The meeting is expected to start around 12:00h., possibly a little later, and will be finished no later than 17:00h. We try to find a really good location in Utrecht, to make sure that nobody needs to travel very far. If you know about a good location in the city of Utrecht, please let me know.

If you haven’t done so yet, please let me know if you intend to participate.

Sponsors

Mark Schonewille
http://www3.economy-x-talk.com/file.php?node=programming-livecode-for-the-real-beginner

Take Control Books by TidBITS Publishing
http://www.takecontrolbooks.com/

Economy-x-Talk.com
http://www3.economy-x-talk.com/file.php?node=installer-maker-for-lc

LiveCode Meeting Switzerland 2014

DSC02527.resized

Saturday, 28th June 2014, we had a very interesting LiveCode meeting, organised by Bjoernke with a little help from me. This time, we met in Zürich, Switzerland.

DSC02538.resized

After several short presentations about DataGrid Helper, SuperCard, Installer Maker, Animation Engine, ChartsEngine and LiveCloud, we raffled off a number of licenses and a copy of the book “Programming LiveCode for the Real Beginner”. We had interesting discussions, mostly about RunRev’s responsiveness to inititatives from within the user community. Perhaps, RunRev could endorse community-based initiatives more often and more clearly.

DSC02533.resized

Afterwards, a small group went to a restaurant. We asked ourselves why LiveCode doesn’t spread amongst target groups more quickly. We also talked long about how young people pick up programming as a leisure activity and, later, as a (professional) skill. It was a very interesting day with some very interesting people.

The next meeting is on 20th September 2014 in the Netherlands. If you can, you really should join us!

DSC02547.resized

Beta Version of Installer Maker 1.8.7 Available!

Recently, We got a request to make some improvements to Installer Maker. As a result, we have made many, many invisible changes, fixing bugs and adding new features. In a few places, the changes are visible. For example, you can see the long list with all special folder paths for Windows (XP up to and including 8.1) and you can see a small but essential change on the Scripts pane, allowing for pre- and post-uninstall script execution.

It is now possible to select any special Windows folder as a destination folder.

It is now possible to select any special Windows folder as a destination folder.

Installer Maker 1.8.7b03 can be downloaded here.

Below follows an overview of all changes in the latest beta version.

  • Installers created with a trial copy on Windows should now start correctly (only on the same computer as on which they were created)
  • The documentation (on the Help screen) should still show up, even if the httpHeaders were set incorrectly by another script
  • install locations have been extended by a large number of Windows-specific directories
  • the destination “startup disk” appeared incorrectly
  • a possibility to create an installer with empty files has been added
  • the uninstaller is now installed in the executable’s folder on Windows, while previously it would end up in a separate folder occasionally
  • file paths are now included in profile files
  • if a path in a profile file is not found, you’ll be asked if you want to repair all paths
  • on Windows, the Uninstaller can now execute LiveCode scripts that have been added on the Scripts pane; thise feature will be added for Mac OS X soon
Installer Maker Scripts Pane

Installer Maker Scripts Pane

Note that this is still a beta version. If you want to create an installer for distribution, download and use Installer Maker from the official website. Tests show that Installer Maker 1.8.7b03 isn’t fully compatible with LiveCode 7 yet, due to bugs in LiveCode 7. Installer Maker 1.8.7b03 is only available as a plug-in for the commercial license of LiveCode. A standalone version will be made available shortly.

We need your help! Please, download and test Installer Maker 1.8.7b03 and send an e-mail with your findings to Economy-x-Talk’s support department! Everybody can download the beta. Installers created with an unregister trial copy only work on the computer they were created on. This version of Installer Maker is a free update for everyone with a current license.

Keep websites from messing with your clipboard!

You find a really cool blog post and you decide to copy the title, paste it on Twitter and press “Tweet”. Or you think to send a friend the link, which you copied from a website, by SMS. Unfortunately, the website doesn’t let you copy the text or the link, but instead puts “download xxx here” on your clipboard together with a very naughty link. Result: awkward situations with your friends and a loss of followers.

Many websites do this. There is a little widget, called ShareThis, which automatically puts a default text and a URL on your clipboad, instead of the text that you thought to be copying.

This can be avoided by preventing websites from messing with your clipboard. You can do this by disabling a browser feature, that’s called JavaScript Access. What do you need for this?

Go to the url about:config and scroll down till dom.event.clipboardevents.enabled.

Go to the url about:config and scroll down till dom.event.clipboardevents.enabled.

1) Download and install Firefox. IE and Chrome don’t have the required options.
2) in Firefox, open the url about:config and scroll down to dom.event.clipboardevents.enabled. (To open about:config, you often need to create a new window or tab and type “about:config” (without quotes) manually in the address bar, followed by the return or enter key).
3) If the fourth column on this row already says “false”, then you’re done now. If it says “true”, double-click on it to change it into “false”.

From now on, you’ll only copy the selected text and you won’t be posting anything awkward on Twitter and Facebook and Skype anymore.

Note: quite a few forums let you select and copy text automatically. You’d just click on a button and a quotation or source code is automatically selected and copied. After disable JavaScript Access, you can still select the text automatically, but you’ll have top copy the text manually.

LiveCode Meeting in Switzerland

On Saturday, 28th June 2014, Björnke von Gierke and Mark Schonewille will organise a LiveCode meeting. On this day, we’ll welcome you at the Zentrum Karl der Grosse (Charles the Great Centre) in Zurich, Switzerland. We can now provide you with a little more info about the meeting.

Agenda

While the agenda for the meeting hasn’t been decided on, we can already mention a few items that are likely to be included:

1) Opening at 13:00h.

2) A discussion about the question why LiveCode “doesn’t catch on”, or why people “don’t get it”.

3) A raffle with great prizes, including a SuperCard license, a copy of the book Programming LiveCode for the Real Beginner, a Charts Engine license, an Animation Engine license and more.

4) We will have a goodie bag (or envelope) containing a coupon code for a 30% disount on a LiveCode license and a 50% discount in Installer Maker. We are still looking for more items in the goodie bag; let us know if you want to add something.

5) Closing at 17:00h.

6) Dinner on the premises at 18:00h.

There is plenty of time left in our schedule and we invite you to send in proposals for discussion topics and presentations. If you have been struggling with a question for a long time, you can ask the attendants for an answer; if you have a cool trick, you can show us; if you have a product to announce, you can give a demonstration; etc. Obviously, you can also just attend the meeting.

Registration and participation

Because there is limited space on the premises where we hire a conference room, we would like you to register as soon as possible by sending an e-mail to Björnke at bvg@mac.com .

While entry is free, you’ll need to bring sufficient cash for drinks and dinner. We will provide coffee and tea. The hotel will be at your own expense. We can recommend a hotel on request.

Important info

Meeting: Saturday 28 June 2014, from 13:00 to 17:00h.
Dinner: Saturday 28 June 2014, from 18:00h.

Address:
Zentrum Karl der Grosse
Kirchgasse 14
8001 Zürich
Map: https://goo.gl/maps/BqqKz
Picture of conference room: http://i.imgur.com/r6KlUeD.jpg

Current sponsors/products

RunRev

SuperCard

Animation Engine

Charts Engine

Installer Maker

Programming LiveCode…

Programming LiveCode… 3rd Print

It’s been a while that I made any announcements about my book. I have been working on the 3rd print of “Programming LiveCode for the Real Beginner” and had some issues with printing and logistics. We have sorted out all issues and now I’m happy to announce that the book is available again.

The third print of Programming LiveCode… has been updated to include a few new XML commands that were introduced in the latest stable release of LiveCode. I have also mentioned the textEncode and textDecode functions, which are going to appear in LiveCode 7. It should be clear, though, that I have kept the changes to a minimum.

It looks like LiveCode 7 would require a considerable rewrite of the book. For now, this would take me too much. Perhaps I’ll do this some time in the future, when I have sufficient spare time on my hands.

While I was trying to get the book printed again, people kept purchasing and by now most of the books have been sold already. We have only 25 copies left and we will print more in 2 months. If you don’t want to be on a waiting list, order now and we’ll send the book to you next week.

You can order the book at http://qery.us/4ie and more info is available at http://qery.us/4id

Looking for Proof Reader

VOLUNTEER WANTED

I’m writing a new book about LiveCode, to be released in a few months. I’m looking for a volunteer who wants to proof read the book. The book is in English and you need to be a CS teacher. Currently, one person is proof reading and I think there should be another one to make sure that all mistakes are found.

What you get:
– You get to read the book before (almost) anyone else;
– Evidently, you get a free copy of the book;
– You help to decide what students will learn in class (very useful if you’re using LiveCode as a teacher);
– Your name will be mentioned in the book and you can put that on your resume if you want.

What I’m looking for:
– You need to have fluent English skills;
– You need to be a CS teacher;
– it isn’t required to be familiar with LiveCode;
– you need to have loads of spare time during the next 3 months.

Just send me an e-mail if you’re interested. You can also send me a message on Twitter or Facebook.

Feel free to forward this message to anyone who might be interested.

Installer Maker Spring Offer

Spring being well under way, Economy-x-Talk is having a special Spring offer for Installer Maker license holders. Is your license over a year old? For a limited time, you can now upgrade your license to the latest version for only € 16,95 instead of the normal price of € 39,00. This offer is available until Wednesday 23rd April 2014.

Installer Maker

Installer Maker is a simple tool to create installers for Windows and Mac OS X. Installer Maker comes in two editions: a LiveCode plug-in and a standalone. The plug-in can be used with the commercial edition of LiveCode only, while the standalone version can be used in combination with any edition of LiveCode , Revolution and MetaCard, as well as RealStudio/Xojo, SuperCard, Prezi, HyperStudio etc.

Installer Maker 1.8.2 screen shot

Screen shot of the first screen of Installer Maker 1.8.2.

Upgrading

Normally, licenses cost 39 euro with free updates during the first 3 months after purchase. Upgrades are available for € 16,95 during one year after purchase. Just for one week, we allow everyone to upgrade his or her license at the discounted upgrade price.

To get a new license, go to http://qery.us/49n (plug-in) or http://qery.us/49o (standalone) and enter your license key at the bottom of the page. The page will load again and if you scroll to the bottom of the page again, you will now be able to buy a new license at the discount price. From there, just follow PayPal’s instructions. Shortly after purchase, you will first receive an auto-reply. Your license follows within 24 hours.

Why Upgrade?

Perhaps you didn’t upgrade in the past, because you were missing some essential features? Download the Read Me file from http://qery.us/49m (PDF) and check out the history. You’ll see that many features have been added during the past year. Go to http://qery.us/49n to download the plug-in or to http://qery.us/49o to download the standalone version.

Did you use the plug-in edition with a commercial version of LiveCode and are you moving to the open-source edition? Then download the standalone version. You can always switch from the plug-in edition and back or use them combined.

Installer Maker 1.8.5: Multilingual Installer!

During the 6 years that Economy-x-Talk has been offering Installer Maker software, we received many requests from users. With the start of the 1.8 release cycle, we are working on the implementation of major feature requests. One of these requests involved the implementation of profiles, which we did a few weeks ago.

Language Settings in Installer Window

First screen of an installer created with Installer Maker, showing the language menu option.

The new version of Installer Maker, bearing number 1.8.5, introduces more flexibility with regard to language settings. From now on, you have two options: either set a fixed language and hide the language option menu in the installer or display the option menu in the installer to allow the user to change the language. We are currently working on improving and adding translations. Want to help? Send me a message, e.g. through Twitter.

Additionally, we have started making adjustments to prepare Installer Maker for LiveCode 7. If you are testing Installer Maker with LiveCode 7 and encounter any incompatibilities, please let us know about it.

This update applies to the plug-in version of Intaller Maker only. The standalone verson will be updated shortly. You can download the Installer Maker Plugin for LiveCode from our website.

Make a Button Respond to Device Movements

I am making a simple game for Android devices. In this game, the user moves a control by turning the device to the left or to the right.  I noticed that the orientationChanged message wasn’t sent.  After some experimentation, I found out that all mobileOrientation features were broken, but the mobileAcceleration features worked. However, accelerationChanged message was never sent. I don’t know if these problems are LiveCode bugs or malfunctions of my own device, although I do have a feeling that something is wrong with LiveCode’s mobileOrientation and mobileAcceleration features.

Anyway, the point is that I found a way to make my game work correctly and I decided to write down how I did it. This is just a quick note. If you find anything to improve, just post it in a comment at the bottom of this text.

Screen capture of the game

Before you can use the acceleration features of your device, you have to set up this feature for your app. I do this in the openCard handler to make the time between starting the app and rendering the first card as short as possible. It doesn’t matter whether your stack starts up in landscape or portrait mode. The acceleration values will adjust automatically.

Because you might want to play your game on desktop machines too, you need to check if the game is played on a movile device, using the environment function. Not all devices have acceleration features, so you have to check for those too, using the mobileSensorAvailable function. The parameter of this function can contain “acceleration”, “rotation”, “heading”, or “rotation rate”. For my game, I need “acceleration”. This is sufficient to make a control move accordingly the movements of the device.

on openCard
  if the environment is "mobile" then
    put mobileSensorAvailable("acceleration") into lSensorAvailable
    if lSensorAvailable then
      mobileStartTrackingSensor "acceleration",false
    else
      answer warning "Acceleration sensors are unavailable."
    end if
  else
    put false into lSensorAvailable
  end if
  // first finish rendering, then send setupCard message
  send "setupCard" to me in 0 millisecs
  pass openCard
end openCard

If the sensor is available, we can turn it on using the mobileStartTrackingSensor command. The first parameter of this command determines the sensor. The second parameter toggles loosely, but power-saving sensor readings. If this parameter is false, it will read accurate values but also use a lot of energy. I have chosen to use accurate values for my game.

I want the openCard handler to finish before I start reading sensor values. The reason is that the card will render only after the openCard handler finishes and I want this to happen as quickly as possible. By using the send in time command, I make sure that the setupCard command is executed after the openCard handler finishes and the card is rendered.

on setupCard
  if the environment is "mobile" then
    pollForRotation
  end if
end setupCard

The setupCard message can also be used to put controls in the centre of the card, to set up a score display, or do download some data from a server for instance. We don’t need that functionality in this simple example.

The pollForRotation handler actually doesn’t poll for rotation. It polls for acceleration, but my original intention was to get rotation values and hence the name. Actually, this is what makes me think that something is wrong with LiveCode. Perhaps RunRev got a few wires switched under the hood.

The pollForRotation handler first reads the device’s position. The more you turn your device to the left or right, the lower (less than 0) or higher (greater than 0) the value returned by the mobileSensorReading function.

Although polling might seem inefficient and power intensive (as polling usually is), it has two big advantages. First, polling the mobileSensorReading function works, whereas the accelerationChanged message doesn’t seem to work. Second, the documentation about the mobileEnableAccelerometer  command suggests that the accelerationChanged message can’t be sent more often than 1 time per second –when this message becomes functional in LiveCode, I’ll have to test if the mobileEnableAccelerometer command accepts fractions of seconds.

The pollForRotation handler reads the acceleration value, stores it, and executes the moveControl handler. After the moveControl handler finishes, the pollForRotation handler executes itself again in 150 milliseconds. By keeping the reading frequency low (almost 7 times per second), I hope to save some energy and leave enough time for other game controls to be updates and rendered.

on pollForRotation
   put mobileSensorReading("acceleration") into myDelta
   moveControl item 2 of myDelta // horizontal, left-right movement
   send "pollForRotation" to me in 150 milliseconds 
end pollForRotation

The mobileSensorReading function returns a list of three values: front-back horizontal movement, left-right horizontal movement and vertical movement. We need the second item from this list.

Another screen capture of the game

The moveControl handler does some calculations and moves the button. The moveControl handler needs a paremeter, indicating the amount of left-right movement. We don’t want the game to be unresponsive but at the same time we don’t want it to be too sensitive. Therefore, we make two adjustments. First, we calculate the square value of the horizontal movement. If the player moves the device quickly to the left or to the right, the game will respond accordingly. However, if the plater moves the device slowly, the game will make small adjustments, which allows for high accuracy. We’re also increasing overall speed, by multiplying the square value by 1.2. We’re doing this just because we thought the game was a bit slow at first. You can change this number as you like. The variable myHorizontalSpeed now contains the number of pixels by which we want to move the control. We use the sign of theDirection to determine whether we want to go left or right.

on moveControl theDirection
  // for demo, assume 1 button exists
   put 1.2*theDirection^2 into myHorizontalSpeed // the movement of the button at a time in pixels
   if theDirection < -1 then
      set the left of btn 1 to max(0,the left of btn 1 - myHorizontalSpeed)
   else if theDirection > 1 then
      set the right of btn 1 to min(the right of this cd,the right of btn 1 + myHorizontalSpeed)   end if
end moveControl

If theDirection is very small, i.e. between -1 and 1, we don’t move the control. This may happen when the player accidentally moves the device or if the device appears to be extremely sensitive. If theDirection is less than 1, we move the button to the left and if theDirection is greater than 1, we move the button to the right.

The left side of a button can be at any location above 0. The minimum value for the left of a button is 0. Therefore, whenever the new value of the left of the button is going to be less than 0, we set the left to 0. In all other cases, we set the left of the button to a value slightly less than its current value, if theDirection < -1.

The right of a button can be at any location below the right of the card. The maximum value of the right of the button equals the right of the card. Therefore, whenever the new values of the right of the button is going to be larger than the right of the card, we set the right of the button to the right of the card. In all other cases, we set the right of the button to a value slightly higher than its current value, if theDirection > 1.

If the button isn’t at the extreme left or extreme right location, the amount by which we move the button is determined by the variable myHorizontalSpeed.

If you want to stop the game, you only need to stop the pollForRotation handler. E.g. you can write the following in a button script:

Zn mouseUp
  put the pendingMessages into myMessages
  filter myMessages with "*pollForRotation*"
  repeat for each line myMsg in myMessages
    cancel item 1 of myMsg
  end repeat
end mouseUp

To start playing, just call the pollForRotation handler again.