Category Archives: Uncategorized

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.

What is LiveCode?

LiveCode is Software

LiveCode is software for people who want to make their own software. In other words: LiveCode is a software development environment.

LiveCode is Visual

The visual nature of LiveCode makes it easy to use. A LiveCode document consists of multiple screens, which are called cards. By dragging fields, buttons and other controls from a tools palette and dropping them onto a card, the user creates an interface. Pictures, movies and sounds can be imported too. A very simple program is sufficient to navigate between the cards.

A moment suffices to create a simple interface in LiveCode, including pictures and navigation (the picture shows a demo application).

 Each control and the window itself contain a small program, called a script. Scripts usually start as lists of simple instructions that allow the user to interact with the program. Scripts respond to mouse clicks, key presses, touch screen events, or other user input. The ability to create a real interface, similar to other software that pupils may be familiar with already, gives LiveCode an advantage in comparison with languages like Scratch, which lack interface components completely.

LiveCode is a Programming Language

LiveCode’s programming language is almost-natural English and contains simple instructions, which are easily understood. For example, a script that responds to a mouse click can look as the following.

on mouseUp

  put “some text” into field “Important note”

  if the seconds > 60 then

    beep

    put “Your time is up” into field “Timer”

  end if

end mouseUp

There is no need to compile code. The user can just switch from the pointer to the browse tool and immediately use the program. This allows the student to see the result of his work immediately. For example, a student would need less than a minute to come up with a random number generator:

1) create a field

2) create a button

3) add the following script to the button:

on mouseUp

   put random(9) into field “Random Number”

end mouseUp

LiveCode is a (better) Learning Tool

By using simple statements, the student can concentrate on learning programming concepts, such as randomisation, conditionals (if, then, else) and repeat loops, without having to put a lot of effort into learning the actual language. This is a huge advantage that LiveCode has over Python, which is often used in schools. Once familiar with these programming concepts, the student can use LiveCode to continue working on advanced projects or move on to other languages.

Besides about programming concepts, students may also want to learn about interface design. Interface design isn’t a subject that can be learned using the programming tools commonly available in primary and secondary schools. Python programmers use a text editor and often enter a command in the DOS prompt or Unix terminal to execute their program. Interface is simply no issue for them. Scratch may show the result visually in a window while also the program itself is displayed visually in a diagram, but the user input has to be part of the program. Scratch can’t he used to teach user interface design. LiveCode, on the other hand, provides all the tools to design an interface. LiveCode separates the programmer from the user, which is one of the most important concepts to be taught in computer science.

An advantage for schools is that LiveCode is available as both a commercial product and a freely available open-source project. Schools don’t need to buy expensive licenses to acquire LiveCode and students can install LiveCode on their own computers at no cost. Non-profit organisations, e.g. those enhancing computer-literacy, amongst youngsters could benefit too.

LiveCode is a fourth-generation language. 4GL’s are usually easy to read and are either compiled into a 3G language or talk to an engine written in a 3GL. Although simple in nature, LiveCode is rich in features giving access to most of the functions an operating system can provide. While 3GL’s like C++ usually provide access to all functions of an operating system, LiveCode may pose a slight limitation on the available features. This is compensated by the much better comprehensibility of LiveCode compared to lower-level third-generation languages.

LiveCode is a cross-platform tool, which means that one may use it on Windows, Linux or Mac OS X. The software created with LiveCode can be used on aforementioned operating systems as well as Android and iOS. Students can install their own apps on their own Android devices without additional cost.

On-line Resources

Nowadays, there are many on-line resources available for LiveCode. The resources are slightly disorganised. RunRev provides some tutorials for free while other tutorials are charged for. There are a few on-line courses available, some for free and some after paying a fee. Quite a few people have started a website with code snippets, which disappeared after a while. The following table shows a number of resources that have been available for a long time and are expected to stay around in the future. Only freely available resources are included.

Link Description
http://revolution.byu.edu/indexgeneric.php LiveCode course from Brigham Young University
http://lessons.runrev.com/ RunRev’s own LiveCode lessons, partly provided by the user community
http://www.sonsothunder.com/devres/livecode/livecode.htm A number of interesting tricks
https://sites.google.com/a/pgcps.org/livecode/home A course intended for highschool students but useful for anyone who wants to learn LiveCode
http://livecodegamedeveloper.com/ Articles about game development with LiveCode

Social Media

The LiveCode community is very active on social networks like Facebook and LinkedIn. There are also several forums and a mailing list dedicated to LiveCode.

Link Description
https://www.facebook.com/groups/runrev/ The largest LiveCode group on Facebook.
http://www.linkedin.com/groups/LiveCode-Developers-50811 LiveCode on LinkedIn
https://twitter.com/RunRev RunRev on Twitter
http://forums.runrev.com RunRev’s forums in English
http://nl.runrev.info/ Dutch Livecode forum
http://de.runrev.info/ German LiveCode forum
http://fr.groups.yahoo.com/group/livecodefr/ French LiveCode group on Yahoo
http://groups.yahoo.co.jp/group/Runtime_Revolution_Users_Japan/ Japanese Yahoo group
http://lists.runrev.com/mailman/listinfo/use-livecode LiveCode mailing list
http://livecodela.com/ Spanish on-line user group
http://twitter.com/xtalkprogrammer author’s twitter account

Books

Currently, there are two important books about LiveCode.

Programming LiveCode for the Real Beginner by Mark Schonewille

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

LiveCode Mobile Development Beginner’s Guide by Colin Holgate

http://www.amazon.com/LiveCode-Mobile-Development-Beginners-Guide/dp/1849692483

 

Economy-x-Talk Releases Installer Maker 1.8.2

A new version of Installer Maker has been released. This update, 1.8.2, is made available as a Plugin for LiveCode as well as a standalone application for users of Xojo, HyperStudion, Prezy, SuperCard and other cross-platform RAD tools.

Installer Maker 1.8.2 allows for saving all settings in a profile. This profile can later be read from disk and re-used for your project again. This way, you don’t need to re-enter all settings and options every time you make your installer. You do need to import your new files. Note that this is a new feature, which we expect to improve in the near future. We appreciate your feedback.

Installer Maker 1.8.2 screen shot

Screen shot of the first screen of Installer Maker 1.8.2.

Additionally, it is no longer possible to accidentally associate the .exe file extension with your executable. We have received 2 reports of users trying to associate the .exe file extension. Although it should be obvious that the .exe file extension whould not be associated with any software, we have decided to disallow the .exe file extension from now on.

The plug-in can only be used with LiveCode 4.5 – 5.x and the commercial version of LiveCode 6 and later. The standalone version of Installer Maker can be used with (almost) any development software package.

Once in a while, we receive a feature request, bug report or other comments. If you decide to send an e-mail about Installer Maker, please include extensive descriptions of the features you request or the bugs you encounter with pictures and other relevant files.

The standalone version of Installer Maker can be downloaded here.

The plug-in version of Installer Maker for LiveCode can be downloaded here.

What if there’s no way to upload a file to a server?

More than once, the question has been asked how to upload files to a server from a mobile device. An important problem is that sockets aren’t supported by default and a bug on Android preventing pictures from being saved to an album or attached to an e-mail. You might use Dropbox or a similar service, but requiring your customers to use an additional service doesn’t give a very professional impression.

I have created a very simple LiveCode+PHP library, which uploads small files to a server. It might also work with bigger files, but I haven’t tested this yet. This library works on any Android/iOS device and also works on desktop machines with any operating system.

There is no documentation yet and the current version is quite crude. No security has been implemented yet. If you’re curious, you might want to have a look. If you need an off-the-shelve solution, then maybe not yet.

The library can be downloaded at http://qery.us/43p after making a donation (or if you made a donation less than 1 year ago). Currently, our server doesn’t send e-mails automatically and you may have to wait up to 24 hours to get access to the private downloads.