{"id":6724,"date":"2015-01-27T16:36:51","date_gmt":"2015-01-27T16:36:51","guid":{"rendered":"http:\/\/livecode.com\/?p=6724"},"modified":"2016-01-15T11:11:00","modified_gmt":"2016-01-15T11:11:00","slug":"8reasonstotalklivecode8","status":"publish","type":"post","link":"https:\/\/legacy.livecode.com\/8reasonstotalklivecode8\/","title":{"rendered":"8 Reasons You Should be Talking about LiveCode 8.0"},"content":{"rendered":"<p>Taking too long to code? Just invent a new programming language!<\/p>\n<p>In early 2014, we were looking at a roadmap that was so long it would have taken our existing team years to complete. If you work in software, you know that roadmaps only ever grow &#8211; especially if you\u2019re supporting customers using a variety of platforms. We knew that we couldn\u2019t go out and hire another 50 developers, so we had to be radically creative. We decided to create a new technology! This technology would make extending LiveCode so easy that we would be able to deliver our roadmap with our existing team and also enable anyone with a passion for LiveCode to add to it and share their work.<!--more--><\/p>\n<p>Taking too long to code? Just invent a new programming language!<\/p>\n<p>In early 2014, we were looking at a roadmap that was so long it would have taken our existing team years to complete. If you work in software, you know that roadmaps only ever grow &#8211; especially if you\u2019re supporting customers using a variety of platforms. We knew that we couldn\u2019t go out and hire another 50 developers, so we had to be radically creative. We decided to create a new technology! This technology would make extending LiveCode so easy that we would be able to deliver our roadmap with our existing team and also enable anyone with a passion for LiveCode to add to it and share their work.<\/p>\n<p>Fast forward to January 2015 and the first alpha version of LiveCode 8.0 was put into my hands. The technology is built on LiveCode 7 and has the ability to load external modules written in a new language called LiveCode Builder. This will look very familiar to anyone who has written programs using LiveCode Script. LiveCode Builder is special because it lets you add new controls (widgets) and syntax and it lets you hook into platform APIs without having to write any native code or modify the source code of LiveCode. It makes adding features many times faster and far easier than ever before.<\/p>\n<p>For the last couple of weeks, Georgia, one of our developers, and I have had the privilege of experimenting with this new technology. We thought we\u2019d share our experiences with you. We\u2019ve been exclusively building widgets and feeding back our experiences to the team, who are refining 8.0 in preparation for a release to all of you! Here is what we have been up to:<\/p>\n<p><strong>Pink Circle<\/strong><\/p>\n<p>A widget in LiveCode is a script that has direct access to the 2D drawing library and a canvas to draw on. So the simplest thing I could think to do was to draw a circle. Colors are defined in RGB so I picked 3 random 255 values and ended up with the color pink &#8211; hence a pink circle.<\/p>\n<p><center><a href=\"http:\/\/livecode.com\/wp-content\/uploads\/2015\/01\/PinkButton.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-6725\" src=\"http:\/\/livecode.com\/wp-content\/uploads\/2015\/01\/PinkButton.png\" alt=\"PinkButton\" width=\"368\" height=\"390\" \/><\/a><\/center><strong>Button<\/strong><\/p>\n<p>The next most logical step, in my mind at least, was to see if I could create a widget button. After all, it\u2019s the basic building block of most apps, right? However, it\u2019s critical that this new technology allows us (me, the team, and community members like you) to produce pixel perfect representations of any control on any platform. I set out to create an OS X 10.10 default button, which is the system I tend to run LiveCode on most. The results aren\u2019t perfect (yet), which is why it was essential for us to incorporate alpha testing in the first place. This experiment alone generated much needed feedback for the engineering team and work is underway to provide the tools we need to make that perfect button.<\/p>\n<p><center><a href=\"http:\/\/livecode.com\/wp-content\/uploads\/2015\/01\/button.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-6729\" src=\"http:\/\/livecode.com\/wp-content\/uploads\/2015\/01\/button.png\" alt=\"button\" width=\"359\" height=\"226\" \/><\/a><\/center><\/p>\n<p style=\"color: gray;\">* Issues identified: Rounded corners not anti-aliased correctly, text centering tweaks required, need to draw outside clipping rect.<\/p>\n<p><strong>Radio Button<\/strong><\/p>\n<p>While I was working on a button, Georgia was trying to produce a radio button. A radio button is a slightly more complex object as it has to be aware of the highlighted state of its siblings. Another &#8220;spot the difference&#8221; opportunity here for you: the chosen theme we&#8217;re emulating is Mac OS 10.10..<\/p>\n<p><center><a href=\"http:\/\/livecode.com\/wp-content\/uploads\/2015\/01\/radiobutton.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-6731\" src=\"http:\/\/livecode.com\/wp-content\/uploads\/2015\/01\/radiobutton.png\" alt=\"radiobutton\" width=\"419\" height=\"316\" \/><\/a><\/center><\/p>\n<p style=\"color: gray;\">*Issues identified: Easier access to the properties of sibling and parent widget\/controls.<\/p>\n<p><strong>Navbar<\/strong><\/p>\n<p>Next: how about a control we don\u2019t yet have &#8211; how about the mobile navigation bar? It\u2019s critical for mobile app developers, right? It also needs to be far more customisable than that old plain button, while also requiring some form of icon.<\/p>\n<p><center><a href=\"http:\/\/livecode.com\/wp-content\/uploads\/2015\/01\/navbar.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-6733\" src=\"http:\/\/livecode.com\/wp-content\/uploads\/2015\/01\/navbar.png\" alt=\"navbar\" width=\"419\" height=\"515\" \/><\/a><\/center><\/p>\n<p style=\"color: gray;\">*Issues identified: Custom fonts on Linux required to make this control work on all platforms. Font-awesome used for icons rather than images. Looks perfect on retina screens as a result.<\/p>\n<p>So far, so good. LiveCode Builder seems to be standing up to the tests I\u2019m throwing at it. But what about performance?<\/p>\n<p><strong>List<\/strong><\/p>\n<p>The obvious choice in testing performance is to look at scrolling lists. Scrolling lists are currently a little difficult for new LiveCode users and require an experienced touch if they are to scroll quickly on lower powered mobile devices. Is it possible to create a list widget with 1,000 lines and have it scroll smoothly? Implementing scrolling also requires various forms of input such as mouse, touch, and drag. Implementing this list widget will provide further valuable feedback.<\/p>\n<p><center><a href=\"http:\/\/livecode.com\/wp-content\/uploads\/2015\/01\/list.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-6735\" src=\"http:\/\/livecode.com\/wp-content\/uploads\/2015\/01\/list.png\" alt=\"list\" width=\"477\" height=\"588\" \/><\/a><\/center><\/p>\n<p style=\"color: gray;\">*Issues identified: Converting data from LiveCode strings to more complex LiveCode Builder types needed more support.<\/p>\n<p><strong>Animation and Timing<\/strong><\/p>\n<p>There is only 1 way to test our animation and timing. However, as with other tests, can we make it look awesome? The benchmark has to be iOS 8 and the clock application.<\/p>\n<p><center><a href=\"http:\/\/livecode.com\/wp-content\/uploads\/2015\/01\/animation.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-6737\" src=\"http:\/\/livecode.com\/wp-content\/uploads\/2015\/01\/animation.png\" alt=\"animation\" width=\"453\" height=\"421\" \/><\/a><\/center><\/p>\n<p style=\"color: gray;\">*Issues identified: Timing loops need a little refinement.<\/p>\n<p><strong>Patterns<\/strong><\/p>\n<p>So far we\u2019ve only looked at drawing shapes with fills and gradients. How about patterns? Can they be animated? Think about modern progress bars. They tell a user that the app they are using is doing something that will take some time. They are also animated, usually with a simple pattern so the user doesn\u2019t think the app has frozen while performing this task. Can we create a pixel-perfect animated progress bar that matches that of the system?<\/p>\n<p><center><a href=\"http:\/\/livecode.com\/wp-content\/uploads\/2015\/01\/patterns.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-6739\" src=\"http:\/\/livecode.com\/wp-content\/uploads\/2015\/01\/patterns.png\" alt=\"patterns\" width=\"630\" height=\"285\" \/><\/a><\/center><\/p>\n<p style=\"color: gray;\">*Issues Identified: None.<\/p>\n<p><strong>Graph<\/strong><\/p>\n<p>If a widget is going to be useful, it has to be easily configurable by the end user. Properties are used to control the display and behavior of controls in LiveCode and this must be the same for widgets. In an ideal world, users of LiveCode should not see any difference between existing controls and widgets. Let&#8217;s try a graph. You need to be able to set the data, colors, visibility of axis labels, grid lines, and so on.<\/p>\n<p><center><a href=\"http:\/\/livecode.com\/wp-content\/uploads\/2015\/01\/graph.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-6741\" src=\"http:\/\/livecode.com\/wp-content\/uploads\/2015\/01\/graph.png\" alt=\"graph\" width=\"464\" height=\"544\" \/><\/a><\/center><\/p>\n<p style=\"color: gray;\">*Issues Identified: Converting LiveCode numbers (which are actually strings) into LiveCode Builder number types (Which are actually numbers) wasn\u2019t possible!<\/p>\n<p>So this is what we\u2019ve been able to do with only 15 days of developer effort. All of these controls will be made available along with their source in the first release of LiveCode 8.0. You\u2019ll be able to start using them in your projects, extend them, or start building new controls from scratch. Once 8.0 is released, we\u2019ll start to deliver all the items we\u2019ve been promising from our roadmap (and much more)! However, that\u2019s not the most exciting part: think how many awesome widgets and extensions 1000s of LiveCode developers could produce\u2026!!<\/p>\n<p>One last thing. Our vision is that everyone can create apps. We believe that technology is a new literacy that can empower individuals &#8211; whatever their interests or background. Whether you\u2019re a pro developer looking to write apps faster, a plumber, a stay at home mum, or a kid with a computer, each of you has a deep understanding of your field and is best placed to notice the problems that a simple app could transform. Imagine a world where LiveCode has 1000s of controls and libraries allowing new users to build apps from simple building blocks and glue them together with LiveCode Script. And for the pro developers, consider this, if you choose LiveCode because of the efficiency gains it provides, how much more efficient will LiveCode become when every core building block is already available?<\/p>\n<p>Are you as excited as I am? Share you thoughts below!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Taking too long to code? Just invent a new programming language! In early 2014, we were looking at a roadmap that was so long it would have taken our existing team years to complete. If you work in software, you know that roadmaps only ever grow &#8211; especially if you\u2019re supporting customers using a variety<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"om_disable_all_campaigns":false,"footnotes":""},"categories":[45],"tags":[],"class_list":["post-6724","post","type-post","status-publish","format-standard","hentry","category-blog"],"acf":[],"_links":{"self":[{"href":"https:\/\/legacy.livecode.com\/wp-json\/wp\/v2\/posts\/6724","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/legacy.livecode.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/legacy.livecode.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/legacy.livecode.com\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/legacy.livecode.com\/wp-json\/wp\/v2\/comments?post=6724"}],"version-history":[{"count":2,"href":"https:\/\/legacy.livecode.com\/wp-json\/wp\/v2\/posts\/6724\/revisions"}],"predecessor-version":[{"id":16394,"href":"https:\/\/legacy.livecode.com\/wp-json\/wp\/v2\/posts\/6724\/revisions\/16394"}],"wp:attachment":[{"href":"https:\/\/legacy.livecode.com\/wp-json\/wp\/v2\/media?parent=6724"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/legacy.livecode.com\/wp-json\/wp\/v2\/categories?post=6724"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/legacy.livecode.com\/wp-json\/wp\/v2\/tags?post=6724"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}