<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:media="http://search.yahoo.com/mrss/"><channel><title><![CDATA[David Zurillo]]></title><description><![CDATA[Portfolio, research and shenanigans.]]></description><link>http://david.zurillo.com.au/</link><generator>Ghost 0.11</generator><lastBuildDate>Fri, 23 Feb 2018 23:10:36 GMT</lastBuildDate><atom:link href="http://david.zurillo.com.au/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[Understanding Machine Learning - Part 1]]></title><description><![CDATA[<blockquote>
  <p>I'm convinced that the rise of machine learning is among the most important trends of our time.</p>
</blockquote>

<p>Machine learning underlies many of the services you use today, including things like speech recognition, and recommendations from Amazon, and even whether an online store lets you use your credit card for your</p>]]></description><link>http://david.zurillo.com.au/understanding-machine-learning-part-1/</link><guid isPermaLink="false">f49b1f0c-cccc-4ee9-acdf-24f68b03678c</guid><category><![CDATA[Machine Learning]]></category><category><![CDATA[Research]]></category><dc:creator><![CDATA[David Zurillo]]></dc:creator><pubDate>Wed, 08 Mar 2017 01:36:03 GMT</pubDate><media:content url="http://david.zurillo.com.au/content/images/2017/03/Cylon_Centurions.jpg" medium="image"/><content:encoded><![CDATA[<blockquote>
  <img src="http://david.zurillo.com.au/content/images/2017/03/Cylon_Centurions.jpg" alt="Understanding Machine Learning - Part 1"><p>I'm convinced that the rise of machine learning is among the most important trends of our time.</p>
</blockquote>

<p>Machine learning underlies many of the services you use today, including things like speech recognition, and recommendations from Amazon, and even whether an online store lets you use your credit card for your latest purchase. As a contract software engineer my goal for understanding machine learning is to start thinking and communicating intelligently about whether machine learning can help organisations that employ my services. </p>

<p><em>Understanding Machine Learning - Part 1</em>
is the result of my research into understanding machine learning, I decided to create a tutorial style blog series to assist others who maybe interested in understanding machine learning too. </p>

<h2 id="whatismachinelearning">What is Machine Learning?</h2>

<p>The core thing machine learning does is finds <mark>patterns</mark> in data. It then uses those patterns to predict the future. </p>

<p>For example, you could use machine learning to detect credit card fraud. Suppose you have data about previous credit card transactions, you could find patterns in that data that will let you detect when a new credit card transaction is likely to be fraudulent. Or, maybe you want to decide when it's time to do preventive maintenance on a factory robot. Once again, you could look at existing data, and find patterns that predict when a robot is going to fail. There are lots more, but the core idea is that machine learning lets you find patterns in data, then use those patterns to predict the future.</p>

<h2 id="findingpatterns">Finding Patterns</h2>

<p>What does it mean to learn? For example, how did you learn to read? Well, learning requires identifying patterns. In reading, for instance, you identify letters, and then the patterns of letters together to form words. You then had to recognize those patterns when you saw them again. That's what learning means, just as when you learn to read. And that's what machine learning does with data that we provide. </p>

<p>Suppose I have data about credit card transactions and I have only four records, each one has three fields; the customer's name, the amount of the transaction, and whether or not it was fraudulent. </p>

<p><img src="http://david.zurillo.com.au/content/images/2017/03/Screen-Shot-2017-03-07-at-4.27.53-pm.png" alt="Understanding Machine Learning - Part 1"></p>

<p>This data suggests fraudulent transactions are when a name starts with P, they're a criminal. Well, probably not! The problem with having so little data is that it's easy to find patterns, but it's hard to find patterns that are correct, correct in the sense that they are predictive, they help us understand whether a new transaction is likely to be fraudulent. </p>

<p>So suppose I have more data. </p>

<p><img src="http://david.zurillo.com.au/content/images/2017/03/Screen-Shot-2017-03-07-at-4.30.53-pm.png" alt="Understanding Machine Learning - Part 1"></p>

<p>Now I have more records and I have more fields in each one, now I know where the card was issued, where it was used, the age of the user. </p>

<p>Now what's the pattern for fraudulent transactions? Well, turns out that if you look at that, there really is a pattern in this data. It is that a transactions is fraudulent if the cardholder is in their 20s, if the card is issued in the USA, and used in Russia, and the amount is more than $1000. You could have found that pattern, I bet, if you looked at this data for a little while. But once again, do we know that that pattern is truly predictive? Probably not. We don't have enough data. To do this well, you'd have to have enough data that people just can't find the patterns. You have to use software. That's where machine learning comes in.</p>

<h2 id="machinelearninginanutshell">Machine Learning in a Nutshell</h2>

<p>Machine learning in a nutshell looks like this. You start with data that contains patterns. You then feed that data into a machine learning algorithms, that finds patterns in the data. This algorithm generates something called a <mark>model</mark>. </p>

<p>A model is functionality, typically code, that's able to recognize patterns when presented with new data. Applications can then use that model by supplying new data to see if this data matches known patterns, such as supplying data about a new transaction. The model can return a probability of whether this transaction is fraudulent. It knows that because of the patterns.</p>

<p>Machine learning lets us find patterns in existing data, then create and use a model that recognizes those patterns in new data</p>

<h2 id="askingtherightquestion">Asking the Right Question</h2>

<p>The first problem you face in the machine learning process is deciding what question to ask. Asking the right question is the most important part of the process. And the reason why this is true is, if you ask the wrong question, you won't get the answer you care about. </p>

<p>Choosing what question to ask is really important, and then you've got to ask yourself, do you have the right data to answer this question? Maybe, for example, the question you want to ask is how can I predict whether a credit card transaction is going to be fraudulent? Well, maybe it's the case that the most predicted piece of data for doing this is whether the customer is a homeowner or a renter. Or maybe it's how long they live at a current address. You might not have this data, and you won't know this until some later point, if ever. </p>

<blockquote>
  <p>Ask yourself, do you think you have the right data to answer the question? Because if you don't, you won't get an answer you need </p>
</blockquote>

<p>You also want to ask yourself this, do you know how you'll measure success? Because ultimately what you're going to get is a model that makes predictions. How good must those predictions be to make this entire process qualify as a success? </p>

<p>For example, for credit card transactions, if you find that you're accurate about fraud prediction in, say, 8 out of 10 cases, is that good enough? How about 6 out of 10? Do you demand 9 out of 10? How do you decide? Knowing this up front is important, because if you don't, you will never know when you're done.</p>

<h2 id="themachinelearningprocess">The Machine Learning Process</h2>

<p><img src="http://david.zurillo.com.au/content/images/2017/03/Screen-Shot-2017-03-07-at-4.48.37-pm.png" alt="Understanding Machine Learning - Part 1"></p>

<p>To start, you choose the data that you want to work with. You often are going to work with domain experts in the area to do this, people who know a lot about, say, transaction fraud or robot failure detection, or whatever problem you're trying to solve. These are the ones who know what data is most likely to be predictive. </p>

<p>But the data you start with, the raw data, is almost never in the right form. It has duplicates, it has missing data, it has extra stuff. Typically you've got to apply some pre-processing to that data. The result is some prepared data, data that's been worked on to be more appropriate as an input for machine learning. Do you do this just once? Oh, no. You commonly <mark>iterate</mark> until the data is ready. </p>

<blockquote>
  <p>The machine learning process is iterative, you repeat things over and over, in both big and small ways.</p>
</blockquote>

<p>The truth here is that in typical machine learning projects, you'll spend most of your time right here, working on the data, getting it ready, getting it clean, getting it prepared. Once you have that data, you can then begin applying learning algorithms to the data. </p>

<p>The result of this is a model, but is it your final model? No. It's a candidate model. Is the first model you create the best one? Almost certainly not, and you can't know that until you've produced several, and so once again, you iterate. You do this until you have a model that you like, that you think is good enough to actually deploy. </p>

<h2 id="terminology">Terminology</h2>

<p>Like most fields, machine learning has its own unique jargon, which you must understand. </p>

<p>Let's start with the idea of <mark>training data</mark>. Training data just means the prepared data that's used to create a model. So, training data is used to train to create a model. </p>

<p>There are two big broad categories of machine learning. One is called <mark>supervised learning</mark>, and what it means is that the value you want to predict is actually in the training data. For instance, in the example for predicting credit card fraud, whether or not a given transaction was fraudulent is actually contained in each record. That data in the jargon of machine learning is <mark>labeled</mark>.</p>

<p>The alternative, is called <mark>unsupervised learning</mark>, and here the value you want to predict is not in the training data. The data is <mark>unlabeled</mark>. </p>

<h2 id="datapreprocessing">Data Pre-processing</h2>

<p>The machine learning process starts with data. It might be relational data, it might be from a NoSQL database, it might be binary data. Wherever it comes from, though, you need to read this raw data into some data preprocessing modules typically chosen from the things your machine learning technology provides. You have to do this because raw data is very rarely in the right shape to be processed by machine learning algorithms. </p>

<p>You'll spend lots of your time, often the majority of your time, in a machine learning project on this aspect of the process. For example, maybe there are holes in your data, missing values, or duplicates, or maybe there's redundant data where the same thing is expressed in two different ways in different fields, or maybe there's information that you know will not be predictive, it won't help you create a good model. </p>

<p>The goal is to create training data. The training data commonly has columns. Those columns are called <mark>features</mark>. So, for example, in the simple illustration I showed of data for credit card fraud, there were columns containing the country the card was issued in, the country was card was used in, the amount of the transaction. Those are all features in the jargon of machine learning. And because we're talking now about supervised learning, the value we're trying to predict, such as whether a given transaction is fraudulent, is also in the training data. In the jargon of machine learning, we call that the <mark>target value</mark>.</p>

<p><img src="http://david.zurillo.com.au/content/images/2017/03/Screen-Shot-2017-03-08-at-9.12.08-am.png" alt="Understanding Machine Learning - Part 1"></p>

<h2 id="categorisingmachinelearningproblems">Categorising Machine Learning Problems</h2>

<p>It's common to group machine learning problems into categories. </p>

<h4 id="regression">Regression</h4>

<p><img src="http://david.zurillo.com.au/content/images/2017/03/Screen-Shot-2017-03-08-at-9.18.54-am-1.png" alt="Understanding Machine Learning - Part 1">
The problem here is that we have data, and we'd like to find a line or a curve that best fits that data. Regression problems are typically supervised learning scenarios.</p>

<h4 id="classification">Classification</h4>

<p><img src="http://david.zurillo.com.au/content/images/2017/03/Screen-Shot-2017-03-08-at-9.19.56-am-1.png" alt="Understanding Machine Learning - Part 1">
Data is grouped into classes, at least two, sometimes more than two. When new data comes in, we want to determine which class that data belongs to. This is commonly used with supervised learning.</p>

<h4 id="clustering">Clustering</h4>

<p><img src="http://david.zurillo.com.au/content/images/2017/03/Screen-Shot-2017-03-08-at-9.20.33-am-1.png" alt="Understanding Machine Learning - Part 1">
Here we have data, we want to find clusters in that data. This is a good example of when we're going to use unsupervised learning, because we don't have labeled data. We don't know necessarily what we're looking for. An example question here is something like, what are our customer segments? We might not know these things up front, but we can use machine learning, unsupervised machine learning, to help us figure that out.</p>

<h2 id="stylesofmachinelearningalgorithms">Styles of Machine Learning Algorithms</h2>

<p>The kinds of problems that machine learning addresses aren't the only thing that can be categorized. It's also useful to think about the styles of machine learning algorithms that are used to solve those problems. For example, there are decision tree algorithms. There are algorithms that use neural networks, which in some ways emulate how the brain works. There are Bayesian algorithms that use Bayes' theorem to work up probabilities. There are K-means algorithms that are used for clustering, and there are lots more. </p>

<h2 id="trainingandtestingamodel">Training and Testing a Model</h2>

<p>Let's take a closer look at the process of creating a model, <mark>training a model</mark>. We start with our training data, which we've worked with until it's beautiful, pristine, just what we need. Because we're using supervised learning, the target value is part of the training data. In the case of the credit card example, for instance, that target value is whether a transaction is fraudulent or not. </p>

<p>Our first problem is to choose the features that we think will be most predictive of that target value. For example, in the credit card case, maybe we decide that the country in which the card was issued, the country it's used in, and the age of the user are the most likely features to help us predict whether it's fraudulent. We then input that training data into our chosen learning algorithm. We only send in <mark>75%</mark>, of all the data for the features we've chosen</p>

<p><img src="http://david.zurillo.com.au/content/images/2017/03/Screen-Shot-2017-03-08-at-9.35.30-am.png" alt="Understanding Machine Learning - Part 1"></p>

<p>If we have, for example, training data that has about 100 features, how about 200? Which ones are predictive? How many should we use? 5, 10, 50? This is why people who have domain knowledge about some particular problem, are so valuable. It's because they can help us do this. It can be a hard problem. In any case, the result of this is to generate a <mark>candidate model</mark>. </p>

<p>The next problem is to work out whether or not this model is any good. And so, we do that in supervised learning like this. We input test data to a candidate model. That test data is the remaining <mark>25%</mark>, the data we held back for the features we're using, in this case, 1, 3, and 6. We use that data, because our candidate model can now generate target values from that test data. But here's the thing. We know what those target values should be, because they are in the training data. All we have to do is compare the target values produced by our candidate model from the test data with the real target values, which are in the training data. That's how we could figure out whether or not our model is predictive or not when we're doing supervised learning. </p>

<p>Suppose our model's just not very good. How can we improve it? Well, there are some usual options. One of them is, maybe we've chosen the wrong features. Let's choose different ones. How about 1, 2, and 5 this time? Or maybe it's the case that we have the wrong data, let's get some new data, or at least some more example data. Or maybe the problem is the algorithm. Maybe it's the case that we can modify some parameters in our algorithm, they commonly have them, or choose another one entirely. </p>

<blockquote>
  <p>Whatever we do will generate another candidate model, and we'll test it, and the process repeats. It iterates. Iteration is a fancy way of saying trial and error. So, don't be confused. This process is called machine learning, but notice how much people do. People make decisions about features, about algorithms, about parameters. The process is very human, even though it's called machine learning.</p>
</blockquote>

<h2 id="usingamodel">Using a Model</h2>

<p>In some ways, this is the most important topic of all, because until models are used, they don't really have much value. An application, for example, can call a model, providing the values for the features the model requires. Remember, models make predictions based on the features that were chosen when the model was trained. The model can then return a value, predicted using these features. That value might be whether or not it actually is fraudulent, estimated revenue, a list of movie recommendations, or something else. The point here is that machine learning can help people create better applications.</p>

<h2 id="summary">Summary</h2>

<p>And that's it. Let me end by summarising the key points. First, machine learning has come of age. It's no longer some technology that's only for researchers in faraway labs. Machine learning also isn't hard to understand, it can be hard to do well. </p>

<p><em>Part 2 coming soon...</em></p>]]></content:encoded></item><item><title><![CDATA[Profile - Enterprise Applications]]></title><description><![CDATA[Senior full stack enterprise software engineer with 15+ years of software development and architecture design experience.]]></description><link>http://david.zurillo.com.au/enterprise-applications/</link><guid isPermaLink="false">80828da0-4ea5-433b-ab2e-cde560a2f229</guid><category><![CDATA[Portfolio]]></category><dc:creator><![CDATA[David Zurillo]]></dc:creator><pubDate>Sat, 16 Jan 2016 11:04:00 GMT</pubDate><content:encoded><![CDATA[<blockquote>
  <p>Enterprise applications designed and developed by me during my software engineering career at various large scale organisations. </p>
</blockquote>

<h2 id="organisationessentialenergy">Organisation - Essential Energy</h2>

<p><em>A NSW Government-owned corporation, with responsibility for building, operating and maintaining Australia’s largest electricity network - delivering essential network services to more than 800,000 homes and businesses across 95 per cent of NSW and parts of southern Queensland.</em></p>

<p><strong>System:</strong> Field Portal iOS &amp; Web<br>
<strong>Role:</strong> Senior Software Engineer<br>
<strong>Tech Stack:</strong> Swift, Node.js, React JS, Redux, NOSQL DocumentDB, Azure Servicebus, Azure Notification Hubs and Azure Storage<br>
<strong>Description:</strong> The Field Portal is a cutting edge field mobility workforce solution that is a key enabler in creating a mobile capable workforce. Improves the effectiveness and efficiency of all business roles—from field staff to back-office users. </p>

<p>Eliminates paper based forms with electronic mobile friendly versions, backed by a custom form designer with a powerful script editor. The script editor enables designers to create custom form logic and complex business workflows. </p>

<p>Provides field workers with an offline asset map with interactive GIS asset data, directions to assets and custom asset details. </p>

<p>Search and view policy and procedure documents whilst online or offline.  </p>

<p>Receive location based safety push notifications. With read receipt tracking. </p>

<p><em>The asset map and electronic forms function exactly the same regardless of network connectivity (online or offline)</em></p>

<p><strong>System:</strong> NetOp Alerts<br>
<strong>Role:</strong> Senior Software Engineer<br>
<strong>Tech Stack:</strong> C#.Net, HTML5, CSS3, React JS and MS SQL<br>
<strong>Description:</strong> Network Operator Alerts is a thin-client solution hosted on the Microsoft Azure Cloud platform. The software provides Essential Energy employees working on or near the electricity network with lifesaving up-to-date critical information. The software is accessible on mobiles, tablets, desktops and interactive televisions mounted in 150+ depots.</p>

<p><strong>System:</strong> AMS<br>
<strong>Role:</strong> Senior Software Engineer<br>
<strong>Tech Stack:</strong> C#.Net, HTML5, CSS3, JQuery and MS SQL<br>
<strong>Description:</strong> Authorisations Management System (AMS) is a web application developed to manage field staff licenses, qualifications and training who work on or near the electricity network.</p>

<p><strong>System:</strong> REACT<br>
<strong>Role:</strong> Senior Software Engineer<br>
<strong>Tech Stack:</strong> C#.Net, HTML5, CSS3, JQuery and MS SQL<br>
<strong>Description:</strong> Real-time Emergency Alert Communication Tool (REACT) is a two-way messaging API technology and conversation platform supporting multi-channel communication across SMS, voice, email, social media and more.</p>

<hr>  

<h2 id="organisationnswdepartmentofeducationcommunities">Organisation - NSW Department of Education &amp; Communities</h2>

<p><em>Responsible for national policies and programs that help Australians access quality and affordable early child care and childhood education, school education, higher education, vocational education and training, international education and research.</em></p>

<p><strong>System:</strong> BESS<br>
<strong>Role:</strong> Senior Software Engineer<br>
<strong>Tech Stack:</strong> C#.Net, HTML5, CSS3, Angular and MS SQL<br>
<strong>Description:</strong> The TAFE NSW Business and Education Support System (BESS) used by 16,000 TAFE educational and admin staff. The main function is managing finances and human resources to support course planning and financial forecasting, with integration to SAP Finance and SAP HR via TIBCO.</p>

<hr>  

<h2 id="organisationnorthcoasttafe">Organisation - North Coast TAFE</h2>

<p><em>One of the largest regional training providers in Australia with over 3,500 staff and 45,000 student enrolments per year</em></p>

<p><strong>System:</strong> People@NCTAFE<br>
<strong>Role:</strong> Senior Software Engineer<br>
<strong>Tech Stack:</strong> C#.Net, JQuery and MS SQL<br>
<strong>Description:</strong> Talent management solution replacing four legacy systems managing staff professional development, qualifications and annual review management of all staff, and workforce development profiling and reporting. Included integration of training.gov.au and embedding the NSW Public Sector Capability Framework. </p>

<p><strong>System:</strong> SDOnline<br>
<strong>Role:</strong> Senior Software Engineer<br>
<strong>Tech Stack:</strong> C#.Net, JQuery and MS SQL<br>
<strong>Description:</strong> Staff Development Online (SDOnline) was developed after gap analysis was undertaken in relation to staff accessing professional development opportunities. SDOnline provides all staff with the ability to search, view and request attendance at any staff development activity, record and request costs for attendance and obtain management approval, through journal transfers all costs were uploaded into SAP Finance. SDOnline was very successful and has won TAFE NSW state innovation award.</p>

<p><strong>System:</strong> WFP<br>
<strong>Role:</strong> Senior Software Engineer<br>
<strong>Tech Stack:</strong> C#.Net, MS SQL and SSRS<br>
<strong>Description:</strong> Workforce Planning (WFP) system used by People and Organisational Development unit to analyse workforce data relevant to demographic, vacancy, teacher ratios and planning for the whole of the Institute.</p>

<p><strong>System:</strong> QAR<br>
<strong>Role:</strong> Senior Software Engineer<br>
<strong>Tech Stack:</strong> C#.Net, MS SQL and SSRS<br>
<strong>Description:</strong> Qualifications &amp; Annual Review (QAR) system enabling staff members to review and update their qualifications online, construct personal development plans with line managers and automatically schedule annual increment form notifications.</p>

<p><strong>System:</strong> EduTech<br> 
<strong>Role:</strong> Senior Software Engineer<br>
<strong>Tech Stack:</strong> C#.Net, MS SQL and SSRS<br>
<strong>Description:</strong> Provides ICTU staff and customers a web interface to view IT related room details such as; what software is installed, hardware specification of computers, room types and ICTU level of support, EduTech also provides customers with access to all emerging educational technologies, resources, user guides, software downloads and instructional material.</p>

<p><strong>System:</strong> SoftTrack<br>
<strong>Role:</strong> Lead Developer<br>
<strong>Tech Stack:</strong> C#.Net, MS SQL and SSRS<br>
<strong>Description:</strong> Web based reporting system to provide data on software usage to assist faculty directors and campus managers in evaluating software purchases, financial investments and to assist in co-ordinating room usage.</p>

<p><strong>System:</strong> SPIDA<br>
<strong>Role:</strong> Application Development Officer<br>
<strong>Tech Stack:</strong> ASP and MS SQL<br>
<strong>Description:</strong> School Profile and Integrated Database Administration System (SPIDA) integrates with OASIS and provides a web interface for access to student data and creation of activities, resumes, actions, assemblies, letters and reports.</p>]]></content:encoded></item><item><title><![CDATA[Profile - MIAD SDK]]></title><description><![CDATA[MIAD provides an easy to author and deploy solution, enabling web designers to develop branded mobile applications.]]></description><link>http://david.zurillo.com.au/miad-sdk/</link><guid isPermaLink="false">3175c606-bfae-44fd-a1cb-94fe81f93aa7</guid><category><![CDATA[Portfolio]]></category><dc:creator><![CDATA[David Zurillo]]></dc:creator><pubDate>Mon, 16 Jan 2006 11:47:00 GMT</pubDate><content:encoded><![CDATA[<blockquote>
  <p>MIAD provides an easy to author and deploy solution, enabling web designers to develop branded mobile applications in the same manner they are accustomed to for the web. Pages can be stored on any ordinary web server and integrate with common server technologies.</p>
</blockquote>

<h3 id="nolongerindevelopmentbelowissnippetsfromthe2006miadsdksite"><mark>No-longer in development :( below is snippets from the 2006 MIAD SDK site</mark></h3>

<h2 id="whatismiad">What is MIAD?</h2>

<div class="alignleft">  
<img src="http://david.zurillo.com.au/content/images/2017/01/Logo.gif">  
</div>  

<p>MIAD is a data-driven mobile content browser. The primary focus of MIAD is to provide graphical mobile client/server applications a consistent look and feel across a broad spectrum of mobile devices. MIAD achieves this by exposing a vast collection of skinnable, low-level full screen GUI elements, called Widgets. The Widgets are similar to those a designer has access to when creating html web pages.</p>

<p>Using the MIAD technology you no-longer need to hire specialized mobile developers or worry about their ability to port your application to varying devices. MIAD decreases the time it takes to bring your application to market.</p>

<p>Applications developed using MIAD are full-screen and will always look and interact the same no matter what mobile the application is running on. With the vast array of mobile operating systems available its impossible to achieve this consistency and branding without the MIAD technology.</p>

<p>Branded MIAD applications enable the designer to incorporate into the executable static pages for offline, quick access viewing. Static pages do not incur any data charges to a user. The user may fill out form, search and user configurable data offline, then at the users own discretion they may send the data to a server for processing.  </p>

<p style="clear: both"></p>  

<h2 id="why">Why?</h2>

<div class="alignleft">  
<img src="http://david.zurillo.com.au/content/images/2017/01/DemoAnim.gif">  
</div>  

<p>The MIAD technology can be used to develop simple standalone applications or complex dynamic client/server applications, and anything in between. MIAD is extremely versatile in what it can be used for.  </p>

<p style="clear: both"></p>

<p>Below is a brief list of some of the concepts and applications MIAD can be used for:</p>

<h6 id="concepts">Concepts</h6>

<ul>
<li>Extending an existing web based application to the mobile space</li>
<li>Database and web service integration</li>
<li>Information and research services</li>
<li>P2P applications</li>
<li>Targeted advertising</li>
<li>Content delivery (wallpapers, ringtones, videos, games etc) 
...</li>
</ul>

<h6 id="applications">Applications</h6>

<ul>
<li>RSS News Reader</li>
<li>Picture and Text Blogging</li>
<li>Email</li>
<li>Member Forums</li>
<li>Community Messaging</li>
<li>Catalogues (supermarket catalogues etc)</li>
<li>Comics</li>
<li>Alerts (stock quotes, weather, football scores etc)</li>
<li>Data sharing (photos, ringtones etc)</li>
<li>Turn-based Multiplayer Games (Poker, Blackjack, Hearts etc)</li>
<li>Questionnaires</li>
<li>Voting</li>
<li>Mobile Magazines
...</li>
</ul>

<h2 id="sampleresponsiveness">Sample Responsiveness</h2>

<p>Below is an example of an RSS news reader application that was constructed using MIAD in a few hours! The screenshots shown below is the application running on two different screen resolutions. The first row of images are running on a mobile with 176x220 resolution, the bottom row of images are running on a mobile with 128x128 resolution.  </p>

<table>  
<tr>  
<td><img src="http://david.zurillo.com.au/content/images/2017/01/rss_176x220_01.gif"></td>  
<td><img src="http://david.zurillo.com.au/content/images/2017/01/rss_176x220_02.gif"></td>  
<td><img src="http://david.zurillo.com.au/content/images/2017/01/rss_176x220_03.gif"></td>  
</tr>  
<tr>  
<td><img src="http://david.zurillo.com.au/content/images/2017/01/rss_128x128_01.gif"></td>  
<td><img src="http://david.zurillo.com.au/content/images/2017/01/rss_128x128_02.gif"></td>  
<td><img src="http://david.zurillo.com.au/content/images/2017/01/rss_128x128_03.gif"></td>  
</tr>  
</table>

<h2 id="stylingsamples">Styling Samples</h2>

<table>  
<tr>  
<td><img src="http://david.zurillo.com.au/content/images/2017/01/MIAD_text_page_1.gif"><br>Text.</td>  
<td><img src="http://david.zurillo.com.au/content/images/2017/01/MIAD_text_page_2.gif"><br>Textboxes.</td>  
<td><img src="http://david.zurillo.com.au/content/images/2017/01/MIAD_alert_page_4.gif"><br>Buttons.</td>  
<td><img src="http://david.zurillo.com.au/content/images/2017/01/MIAD_alert_page_1.gif"><br>Alerts.</td>  
</tr>  
<tr>  
<td><img src="http://david.zurillo.com.au/content/images/2017/01/MIAD_checkradio_page_1.gif"><br>Checkbox.</td>  
<td><img src="http://david.zurillo.com.au/content/images/2017/01/MIAD_checkradio_page_2.gif"><br>Themed checkbox.</td>  
<td><img src="http://david.zurillo.com.au/content/images/2017/01/MIAD_checkradio_page_3.gif"><br>Image checkbox.</td>  
<td><img src="http://david.zurillo.com.au/content/images/2017/01/MIAD_checkradio_page_4.gif"><br>Images radio.</td>  
</tr>  
<tr>  
<td><img src="http://david.zurillo.com.au/content/images/2017/01/MIAD_magazine_1.gif"><br>Magazine</td>  
<td><img src="http://david.zurillo.com.au/content/images/2017/01/MIAD_text_page_3.gif"><br>Utilities</td>  
<td><img src="http://david.zurillo.com.au/content/images/2017/01/MIAD_text_page_4.gif"><br>Image Viewer</td>  
<td><img src="http://david.zurillo.com.au/content/images/2017/01/MIAD_comic_1.gif"><br>Comic</td>  
</tr>  
</table>

<h2 id="compatibility">Compatibility</h2>

<p>The MIAD J2ME client has been carefully designed to be compatible with the majority of existing and future MIDP2.0/CLDC1.0 popular mobile devices.</p>

<p>MIAD has in-built code mechanisms to determine the device on which it is running, this enables MIAD to dynamically at runtime circumvent known device issues and automatically take advantage of specific device features. The MIAD codebase has implemented this important mobile development strategy since the very beginning of the development phase. This enables MIAD to achieve the ability of a single Jar/Jad to cover all devices.</p>

<h2 id="clientspotlight">Client Spotlight</h2>

<p><strong>Bake Media</strong>
We're always designing, developing and delivering world-class mobile applications. Massively dynamic, client/server applications for big business. Hot, viral stuff for brands and agencies.</p>

<p>We get clients saying stuff like this all the time:  </p>

<blockquote>
  <p><em>"we're sort of looking for this kind of mobile thing that makes people flip out, and never stop using it, because it's so gosh darn clever"</em></p>
</blockquote>

<p>And then</p>

<blockquote>
  <p><em>"can we have it for our international launch in 2 weeks?"</em></p>
</blockquote>

<p>Thanks to the MIAD technology our clients think we're nothing short of geniuses.</p>

<h2 id="news">News</h2>

<p><strong>29th August 2006</strong> 
A world-wide mobile marketing campaign for a well known drink manufacture "Barcardi" uses branded MIAD technology. The application allows users to listen to a internet streaming radio station and view dynamic advertising content. This is a great example of how the MIAD team can work with you to develop specific applications using MIAD as the base framework. </p>

<p><strong>21st May 2006</strong>
MIAD's first branded application Clixo hits 35,000 downloads.</p>

<p><strong>15th April 2006</strong>
Beta testing of demo RSS news reader application was generously provided by GetJar. %90 of all downloads worked successfully. Considering MIAD is still in alpha development status, these figures are very promising to MIAD's out of the box device support.  </p>

<hr>  

<hr>  

<h2 id="documentation">Documentation</h2>

<p>The online documentation is provided so that you may get a thorough understanding of MIAD and page construction using MML. The online documentation is constantly being updated as MIAD matures.</p>

<h3 id="whatismml">What is MML?</h3>

<p>MML stands for Miad Markup Language.</p>

<ul>
<li>The MML language is based on XML</li>
<li>MML files can be created in any text editor</li>
<li>All MML files must have the mml extension</li>
<li>Any standard web server can host MML files</li>
</ul>

<p><img src="http://david.zurillo.com.au/content/images/2017/01/Screen-Shot-2017-01-17-at-12.14.16-am.png" alt=""></p>

<p>The first tag in the source is the <code>&lt;page&gt;</code> tag, this tell MIAD that this is the start of the MML document and the end tag <code>&lt;/page&gt;</code> lets MIAD know this is the end of the document. All MML documents must declare the start and end <code>&lt;page&gt;</code> tags.</p>

<p>The next tag is the <code>&lt;widgets&gt;</code> tag, this tells MIAD to start reading widget declarations, and the end tag <code>&lt;/widgets&gt;</code> to stop. You can see we have declared a widget of type <code>&lt;text&gt;</code>.</p>

<p>In between the text widget start and end tags is written the words Hello World, this is called the contents of the tag, for the text widget the contents is the text to render on screen. Inside the text widget start tag you will see font="large". The font is called an attribute and "large" is the value of the attribute. In this example MIAD will render the text "Hello World" using the large font type. The entire text widget declaration <code>&lt;text font="large" &gt;Hello World&lt;/text&gt;</code> is called an element.</p>

<h3 id="tagpage">Tag - Page</h3>

<p>The <code>&lt;page&gt;</code> tag is always the first tag in the source, this tell MIAD that this is the start of the MML document and the end tag <code>&lt;/page&gt;</code> lets MIAD know this is the end of the document. All MML documents must declare the start and end <code>&lt;page&gt;</code> tags.</p>

<p><img src="http://david.zurillo.com.au/content/images/2017/01/Screen-Shot-2017-01-18-at-10.31.23-pm.png" alt=""></p>

<h3 id="tagwidgets">Tag - Widgets</h3>

<p>The <code>&lt;widgets&gt;</code> tag tells MIAD that following is all of the widgets for the page and the <code>&lt;/widgets&gt;</code> tag lets MIAD know to stop processing widgets. All widgets must be a child of the <code>&lt;widgets&gt;</code> tag.</p>

<p><img src="http://david.zurillo.com.au/content/images/2017/01/Screen-Shot-2017-01-18-at-10.32.55-pm.png" alt=""></p>

<h3 id="widgetabout">Widget - About</h3>

<p>The wikipedia definition of a widget is:</p>

<p><em>"A widget (or control) is an interface component that a computer user interacts with, such as a window or a text box. Widgets are sometimes qualified as virtual to distinguish them from their physical counterparts, e.g. virtual buttons that can be clicked with a mouse cursor, vs. physical buttons that can be pressed with a finger. Widgets are often packaged together in widget toolkits. Programmers use widgets to build graphical user interfaces (GUIs)."</em></p>

<p>MIAD widgets</p>

<ul>
<li>Are the basic building blocks for creating interactive MML page designs</li>
<li>Have an optional X and Y position attribute, so the designer can place them anywhere on the screen</li>
<li>Are owner drawn, the designer can replace with their own graphics if desired</li>
<li>Look, feel and interact exactly the same on any mobile device</li>
<li>Can be themed via styles</li>
</ul>

<h3 id="widgetpostion">Widget - Postion</h3>

<p>What is the X and Y position attribute?</p>

<p>Unlike html and wap pages, MIAD mml pages allow widgets to be placed at any absolute or translated pixel location relative to the screen. Where X = 0 = left and Y = 0 = top. Positive Y values go down the screen from top to bottom. Positive X values go across the screen from left to right.</p>

<ul>
<li>Both the X and Y attribute may have a absolute pixel value</li>
<li>X and Y poisitions are relative to the top left corner of all widgets</li>
<li>If you omit the Y attribute MIAD will automatically place the widget below the previous widget. This is calculated by taking the Y position and height of the previous widget and adding the application defined vertical space attribute (default is 8 pixels)</li>
<li>If you omit the X attribute MIAD will place the widget at the left of the screen</li>
<li>Only the Y attribute may be translated in either the positive or negative vertical axis</li>
<li>Only the X attribute can be aligned LEFT, CENTER or RIGHT of the screen</li>
<li>Translation is calculated by adding the Y position and height of the previously declared widget and translating either in the positive or negative direction by x number of pixels</li>
<li>Dynamic device details such as screen width and height can be retrieved via a PHP device class</li>
</ul>

<p><img src="http://david.zurillo.com.au/content/images/2017/01/Screen-Shot-2017-01-17-at-12.21.14-am.png" alt=""></p>

<p>NOTE: all of the rectangle styles in the example set the width and height attribute values of the rectangle widget to 20 and 20 respectively (w="20" h ="20").</p>

<ul>
<li><p>The first black outline rectangle widget which has the style of style="OutlineBlack", has no X and Y position attributes. Not setting values for both the X and the Y position attributes causes MIAD to automatically place this widget. In this case it is the first widget so MIAD has placed it at the top left of the screen.</p></li>
<li><p>The second red outline rectangle widget has set the Y attribute value to y="+30". A Y attribute value with the plus(+) or minus(-) symbol indicates to MIAD to translate (add in this case) the value of the previously declared widget's Y position and it's height to the value. In the example we can see the red outlined rectangle is rendered 30 pixels down from the base of the first rectangle(outlined in black) even though it was declared before the green outline rectangle.</p></li>
<li><p>The third green outline rectangle you can see it is rendered below the black outline rectangle because it's Y position attribute value is set to y="-45"(translated in the negative direction). If the rectangle widget had not set the Y position attribute it would have been rendered underneath the red outline rectangle using the default vertical spacing.</p></li>
<li><p>The fourth blue outline rectangle has its Y position attribute set to y="+30" causing to be rendered 30 pixels down from the green outline rectangle.</p></li>
<li><p>The fifth black filled rectangle has no X or Y position attributes which indicates to MIAD to automatically place this widget. It's X value will be set to 0, and the Y value will be set to the position of the previous widget's Y position plus it's height and the application application defined vertical spacing setting.</p></li>
<li><p>The sixth red filled rectangle has set the X position attribute to LEFT, causing MIAD to render this widget to the left of the screen (x=0). The widget has not set a Y position attribute so MIAD will automatically place this widget in the Y dimension.</p></li>
<li><p>The seventh green filled rectangle has set the X position attribute value set to CENTER, causing MIAD to render the widget centered on the X axis. The Y position attribute value has been set to y="-20" causing MIAD to translate the Y position -20 pixels from the previous widget's Y position plus it's height. In this case all of the rectangles are 20x20 so translating by -20 causes the widget to be rendered at the same horizontal position of the previous widget.</p></li>
<li><p>The eighth blue filled rectangle has set the X position attribute value to RIGHT, causing MIAD to render the widget to the right of the screen. This is calculated by getting the mobile device screen width and subtracting the width of the widget. The Y position attribute is set to the same as the seventh green filled rectangle.</p></li>
<li><p>The ninth pink outline and yellow filled rectangle has set both the X and Y position attribute values to absolute pixel locations, in this case x="78" and y="100". The values where chosen to place the widget centered on screen. </p></li>
</ul>

<p>If you use PHP you could have used the PHP MIADDevice class to get the screen resolution of the mobile device. The MIADDevice class dynamically sets device specifications based upon the mobile device MIAD is running on.</p>

<p>X = $mdevice->GetScreenWidth()/2 - widgetWidth/2 <br>
Y = $mdevice->GetScreenHeight()/2 - widgetHeight/2</p>

<h3 id="widgetaction">Widget - Action</h3>

<p>What is the action attribute?</p>

<p>The action attribute is used to declare a type of action the widget can perform upon user activation. Usually the action is to link to a mml page or to download content, and is activated by the user pressing the OK key while the widget is selected. The page or content can be local(reside within the Jar) or remote(reside on a server).</p>

<ul>
<li>When the action attribute is declared within a widget element the widget will become selectable by the user. If it is not declared the widget is not selectable</li>
<li>Only link targets with a extension of ".mif"(fonts) or ".mml"(pages) will be loaded by MIAD all other link target extensions or non-existant extensions will be loaded by the mobile device's default content handler for the type of content. For example ".mp3" will launch audio player or save dialog, ".jpg" will launch picture viewer or save dialog and ".com" will launch the wap browser. On some devices the user maybe required to exit MIAD to download content.</li>
<li>If the value begins with "file://" the link will be considered to be located locally within the Jar</li>
<li>If the value begins with "http://" the link will be considered to be hosted remotely on a server</li>
<li>The link will default to remote if "http://" or "file://" is omitted. The remote location is the current working directory on the server, usually this will be the directory where the mml page the widget was declared in is located</li>
</ul>

<p>Why use the term action?</p>

<p>The action term was chosen because the action attribute value will not always point to links. In future planned releases of miad the action attribute will be able to perform numerous functions such as send SMS/MMS and make phone calls etc.</p>

<p><img src="http://david.zurillo.com.au/content/images/2017/01/Screen-Shot-2017-01-17-at-12.24.44-am.png" alt=""></p>

<h3 id="widgettext">Widget - Text</h3>

<p>The <code>&lt;text&gt;</code> widget renders text on screen.</p>

<ul>
<li>Can be opaque or transparent</li>
<li>Can be underlined</li>
<li>Can be bold</li>
<li>Can be selectable if the action attribute value is set</li>
<li>Uses AlphaRedGreenBlue(ARGB) hex color format</li>
<li>Can contain child elements with the <code>&lt;S&gt;</code> tag. This allows you to break text paragraphs into unique text elements</li>
<li>Does not use device fonts, instead uses MIAD fonts for consistency across mobile devices</li>
</ul>

<p><img src="http://david.zurillo.com.au/content/images/2017/01/Screen-Shot-2017-01-18-at-10.09.02-pm.png" alt=""></p>

<h3 id="widgetimage">Widget - Image</h3>

<p>The <code>&lt;image&gt;</code> widget renders a image on screen.</p>

<ul>
<li>Can be animated</li>
<li>Can have a fully transparent palette entry</li>
<li>Can be selectable if the action attribute value is set</li>
<li>Remote images hosted on a server are embedded within a remote page. This reduces download times and connections by downloading a page and all resources in one pass</li>
<li>Must be a Portable Network Graphic(PNG) image type</li>
<li>Local images stored within the Jar must be PNG's. Remote images can be either PNG's, JPG's and non-animating GIF's. * Animated GIF's will be supported in future versions of miad</li>
<li>If the file attribute value begins with "file://" the resource will be considered to be located locally within the Jar</li>
<li>If the file attribute value begins with "http://" the resource will be considered to be hosted remotely on a server</li>
<li>The file attribute will default to remote if "http://" or "file://" is omited. The remote location is the current working directory on the server, usually this will be the directory where the mml page the widget was declared in is located</li>
</ul>

<p><img src="http://david.zurillo.com.au/content/images/2017/01/Screen-Shot-2017-01-18-at-10.14.26-pm.png" alt=""></p>

<h3 id="widgetrectangle">Widget - Rectangle</h3>

<p>The <code>&lt;rectangle&gt;</code> widget renders a rectangle on screen.</p>

<ul>
<li>Can be opaque or transparent</li>
<li>Can have rounded or sharp edges</li>
<li>Is never selectable</li>
</ul>

<p><img src="http://david.zurillo.com.au/content/images/2017/01/Screen-Shot-2017-01-18-at-10.16.57-pm.png" alt=""></p>

<h3 id="widgettextbox">Widget - Textbox</h3>

<p>The <code>&lt;textbox&gt;</code> widget renders a single or multiline textbox on screen.</p>

<ul>
<li>Can be an image or rectangle</li>
<li>Is only selectable when a child element of a <code>&lt;digest&gt;</code>. * See the Digest page for more information</li>
</ul>

<p><img src="http://david.zurillo.com.au/content/images/2017/01/Screen-Shot-2017-01-18-at-10.20.47-pm.png" alt=""></p>

<h3 id="widgetbutton">Widget - Button</h3>

<p>The <code>&lt;button&gt;</code> widget renders a button on screen. A button is a widget that performs a task upon user activation.</p>

<ul>
<li>Can be an image or rectangle</li>
<li>Can have a highlighted image. This image is displayed when the user highlights the button</li>
<li>Can be used to submit user digest data to a server for processing when a child element of a <code>&lt;digest&gt;</code></li>
<li>Can navigate the user back to the previous mml page upon activation</li>
<li>Can execute an action upon user activation</li>
<li>Is always selectable</li>
<li>Text is always rendered centred inside the button</li>
</ul>

<p><img src="http://david.zurillo.com.au/content/images/2017/01/Screen-Shot-2017-01-18-at-10.22.26-pm.png" alt=""></p>

<p>From the source you can see that the "Prev page" button has overridden some of the style settings from the "ButtonPlain" style, noteably the <code>&lt;type&gt;</code> attribute " type" has been overridden to now be a "BACK" type and the text to render inside the button to "Prev page". Without changing the type miad would have treated this button widget as a "LINK" type and the designer would have had to know the address of every previous page the button was placed on. By changing the type to "BACK" miad now handles this for them automatically.</p>

<p>The home button has overridden the <code>&lt;rectangle&gt;</code> width and height of the "ButtonHomeLink" style as well as the <code>&lt;color&gt;</code> outline and fill colors. No other rectanlge values were overridden therefore the widget will use the style settings for them.</p>

<h3 id="widgetradiobutton">Widget - Radio Button</h3>

<p>The <code>&lt;radiobutton&gt;</code> widget renders a two state radio button on screen. A radio button is a widget that allows a user to select(tick) a single choice(radio button) from multiple options(group). The radio button widget is commonly used in a digest for forcing the user to select a single result from a collection multiple choice's. Radio buttons are always part of a group, the group is determined by the name of the radio button. Radio buttons with the same name belong to the same group. Only a single radio button within a group can be ticked, if a user ticks an unselected radio button in a group all of the remaining radio buttons will be automatically unticked.</p>

<ul>
<li>Can be an image or circle</li>
<li>Can be used to submit user digest data to a server for processing when a child element of a <code>&lt;digest&gt;</code></li>
<li>Must always be part of a group, set by the name attribute value</li>
<li>One 1 within a group can be ticked</li>
<li>Is always selectable</li>
<li>Has caption text that can be rendered either to the left or right of the widget</li>
</ul>

<p><img src="http://david.zurillo.com.au/content/images/2017/01/Screen-Shot-2017-01-18-at-10.26.54-pm.png" alt=""></p>

<h3 id="widgetcheckbox">Widget - Checkbox</h3>

<p>The <code>&lt;checkbox&gt;</code> widget renders a two state check box on screen. A check box is a widget that allows a user to select(tick) multiple choices(check boxes) from multiple options(group). Check boxes are always part of a group, the group is determined by the name of the check box. Check boxes with the same name belong to the same group.</p>

<ul>
<li>Can be an image or rectangle</li>
<li>Can be used to submit user digest data to a server for processing when a child element of a <code>&lt;digest&gt;</code></li>
<li>Must always be part of a group, set by the name attribute value</li>
<li>Multiple choices within a group can be ticked</li>
<li>Is always selectable</li>
<li>Has caption text that can be rendered either to the left or right of the widget</li>
</ul>

<p><img src="http://david.zurillo.com.au/content/images/2017/01/Screen-Shot-2017-01-18-at-10.28.32-pm.png" alt=""></p>]]></content:encoded></item><item><title><![CDATA[Profile - Mobstar Games]]></title><description><![CDATA[Mobstar Games is a handheld game development company focusing on mobile and Nintendo Gameboy Advance game development.]]></description><link>http://david.zurillo.com.au/mobstar-games/</link><guid isPermaLink="false">14eec388-20fd-4b9c-adb9-b4da11bcd850</guid><category><![CDATA[Portfolio]]></category><dc:creator><![CDATA[David Zurillo]]></dc:creator><pubDate>Thu, 13 Jan 2005 05:50:00 GMT</pubDate><content:encoded><![CDATA[<blockquote>
  <p>Mobstar Games was my mobile game development company, with a team of 2 (an artist &amp; I), focusing on Nokia s60 and Sony Ericsson k700 devices.</p>
</blockquote>

<h1 id="games">Games</h1>

<h2 id="magicclouds">Magic Clouds</h2>

<div class="alignleft">  
<img src="http://david.zurillo.com.au/content/images/2017/01/titlescreen.png">  
<img src="http://david.zurillo.com.au/content/images/2017/01/sshot1.png">  
</div>  

<p>Magic Clouds is a 2d platformer game. Similar to Bubble Bobble, Rainbow Islands and SnowBros.</p>

<p>Fight your way through 5 awesome themed levels with 50 challenging stages, 20 unique enemies, 5 huge bosses and playability reminiscent of the classic arcade puzzle platformers. You won't believe it fits on a mobile phone!</p>

<p>Magic Clouds was developed for the Sony Ericsson game development competition, where it placed 2nd. The game is now available world-wide for the Sony Ericsson k700i and s700 mobile phones.  </p>

<p style="clear: both"></p>  

<hr>  

<h2 id="astralx">AstralX</h2>

<div class="alignleft">  
<img src="http://david.zurillo.com.au/content/images/2017/01/astralx_title.png">  
<img src="http://david.zurillo.com.au/content/images/2017/01/astralx5.png">  
</div>  

<p>AstralX is a Shoot Em Up game similar to Galaga and Galaxian. The game is available on numerous mobile phones world-wide including the offical Sony Ericsson fun and content website.  </p>

<p style="clear: both"></p>  

<hr>  

<h2 id="mobstarjewels">Mobstar Jewels</h2>

<div class="alignleft">  
<img src="http://david.zurillo.com.au/content/images/2017/01/MobstarJewels_BoxCover.gif">  
<img src="http://david.zurillo.com.au/content/images/2017/01/MobstarJewels_Shot5.gif">  
</div>  

<p>Mobstar Jewels Mobstar Jewels is based on the classic gem swapping phenomenon sweeping the world by storm.</p>

<p>The idea is to swap adjacent gems of the same color and try to match 3 or more gems. Try matching more than 1 gem color at a time for bonus points. You will need to keep your wits about you, because leaving yourself with no more possible gems to swap means you cannot make another move, and the end of your current game.  </p>

<p style="clear: both"></p>  

<hr>  

<h2 id="mobstarfishing">Mobstar Fishing</h2>

<div class="alignleft">  
<img src="http://david.zurillo.com.au/content/images/2017/01/MobstarFishingBoxCover.jpg">  
<img src="http://david.zurillo.com.au/content/images/2017/01/Mobstar-Fishing.gif">  
</div>  

<p>Mobstar Fishing is an addictive, fun and challenging fishing game. The idea is simple, catch a certain amount of fish within a set time limit. Sound easy enough? Yeah right! The ominous shark is always on the prowl for an easy meal, watch him or he will steal your fish! Luckily your friendly overpriced fishing shop has just what you need to get the upper hand.  </p>

<p style="clear: both"></p>  

<hr>  

<h2 id="mobstarxpong">Mobstar X-Pong</h2>

<div class="alignleft">  
<img src="http://david.zurillo.com.au/content/images/2017/01/MobstarXPong_BoxCover.gif">  
<img src="http://david.zurillo.com.au/content/images/2017/01/MobstarXPong16.gif">  
</div>  

<p>Mobstar X-Pong“Extreme 4 player pong action with a twist! Up to 8 balls in play at any one time and special powerups. Can you keep your eye on the ball?”</p>

<p>Mobstar X-Pong is an intense 4 player pong game. Choose from 6 characters in this futuristic sports game, and battle it out with up to 8 balls in play at once! Featuring realistic ball physics, adrenalin pumping fast paced action and playability that you can just pick up and play, or spend a few hours playing through career mode to become the Mobstar X-Pong grand master.</p>]]></content:encoded></item><item><title><![CDATA[Profile - BREW to J2ME Mobile Game Conversions]]></title><description><![CDATA[BREW to J2ME mobile phone games conversions for Shrek 2, MTX: Mototrax and Muscle Car Mayhem.]]></description><link>http://david.zurillo.com.au/mobile-game-conversions/</link><guid isPermaLink="false">b6eef0da-98db-4127-b0ad-26d58417f2af</guid><category><![CDATA[Portfolio]]></category><dc:creator><![CDATA[David Zurillo]]></dc:creator><pubDate>Sat, 17 Jan 2004 05:31:00 GMT</pubDate><content:encoded><![CDATA[<blockquote>
  <p>BREW to J2ME mobile phone games conversions for <a href="http://david.zurillo.com.au/mobile-game-conversions/#shrek2">Shrek 2</a>, <a href="http://david.zurillo.com.au/mobile-game-conversions/#mototrax">MTX: Mototrax</a> and <a href="http://david.zurillo.com.au/mobile-game-conversions/#mayhem">Muscle Car Mayhem</a>.</p>
</blockquote>

<p><span id="shrek2">  </span></p>

<h2 id="shrek2skyworksmobile">Shrek 2 - SkyWorks Mobile</h2>

<div class="alignleft">  
<img src="http://david.zurillo.com.au/content/images/2017/01/shrek2.jpg">  
<img src="http://david.zurillo.com.au/content/images/2017/01/shrek2_2.jpg">  
</div>  

<p>Get set for a rollercoaster ride of twisted fairy tale proportions in Shrek 2, the wireless game. Play through several mini-games that include everyone's favorite ogre Shrek, his faithful steed Donkey, Puss in Boots and other characters. Play with up to four players on a single phone and travel to new locations in an interactive board game based on the motion picture. In addition trivia challenges, Shrek 2 also contains six mini-games derived from the movie. You engage in a food fight with Fiona's kingly father, ride a carriage while Donkey tries to gobble apples, catch potions in a basket at the Godmother's factory, and deal with Puss-In-Boots.  </p>

<hr>  

<p><span id="mototrax">  </span></p>

<h2 id="mtxmototraxjamdatmobile">MTX: Mototrax - JAMDAT Mobile</h2>

<div class="alignleft">  
<img src="http://david.zurillo.com.au/content/images/2017/01/mtx.gif">  
<img src="http://david.zurillo.com.au/content/images/2017/01/mtx2.gif">  
</div>  

<p>Catch major air with MTX: Mototrax! Pull off trick combos as one of 15 pro Motocross stars. Easy interface lets you hit the dirt on six tough tracks. Try eleven cool mid-air tricks like back flips and no-handers. String together stunts to rack up big points. JAMDAT Mobile puts extreme action at your fingertips with multiple play modes, vivid graphics and super sound. Blow out of the gates and feel the wireless rumble. MTX: Mototrax is high-flyin' fun for both moto-mavens and first-time riders!  </p>

<hr>  

<p><span id="mayhem">  </span></p>

<h2 id="musclecarmayhemmobliss">Muscle Car Mayhem - Mobliss</h2>

<div class="alignleft">  
<img src="http://david.zurillo.com.au/content/images/2017/01/mcm.gif">  
<img src="http://david.zurillo.com.au/content/images/2017/01/mcm2.jpg">  
</div>  

<p>Big cars with bad attitudes! Take the wheel of Plymouth's baddest rides from an era that measured excitement in cubic inches. Race the famed Hemicuda, the hefty Road Runner, the legendary Duster and more in a showdown against other high-octane hot rods. Earn cash to buy new parts and even more of Plymouth's celebrated road hogs. Compete in the Arcade Mode, Cup Mode, or League Mode and post your times to a leaderboard to compare them to other players nationwide. Airtime is required for use.</p>]]></content:encoded></item><item><title><![CDATA[Profile - J2ME Mobile Game & App Development Services]]></title><description><![CDATA[Software development services for J2ME mobile phone applications and games.]]></description><link>http://david.zurillo.com.au/mobile-game-app-development-services/</link><guid isPermaLink="false">d4b75a46-bac8-47a8-9ea1-43ab7d0687d1</guid><category><![CDATA[Portfolio]]></category><dc:creator><![CDATA[David Zurillo]]></dc:creator><pubDate>Fri, 16 Jan 2004 01:48:00 GMT</pubDate><content:encoded><![CDATA[<blockquote>
  <p>Software development services for J2ME mobile phone applications and games.</p>
</blockquote>

<h2 id="gosonoho">Go - Sonoho</h2>

<div class="alignleft">  
<img src="http://david.zurillo.com.au/content/images/2017/01/go.gif">  
</div>  

<p>Development of J2ME mobile phone application. Every aspect of the application is dynamically configured via server stored XML documents. The XML documents allow the client to easily design device specific web like pages, in a fashion similar to html. Another feature is the user can download ringtones, wallpapers and games direct to their device.  </p>

<p style="clear: both"></p>  

<hr>  

<h2 id="headrushcbbc">Headrush - CBBC</h2>

<div class="alignleft">  
<img src="http://david.zurillo.com.au/content/images/2017/01/Headrush1.gif">  
<img src="http://david.zurillo.com.au/content/images/2017/01/Headrush2.gif">  
</div>  

<p>The idea of the game is to match up three of the characters in a line either vertically or horizontally to create a combo. <br>
Each time you create a combo the blocks will disappear and increase your level meter. <br>
When the level meter is full you move onto the next level. <br>
The more blocks in a combo the quicker your level meter will fill up and the more points you get, this will help you reach the hall of fame and enter your name.  </p>

<p style="clear: both"></p>  

<hr>  

<h2 id="esselteesselte">Esselte - Esselte</h2>

<div class="alignleft">  
<img src="http://david.zurillo.com.au/content/images/2017/01/Esselte1.gif">  
<img src="http://david.zurillo.com.au/content/images/2017/01/Esselte2.gif">  
</div>  

<p>To finish each level, you have to lick all of the colour tags and get to the exit as fast as possible. It is not as easy as it looks - you have to avoid these objects or lose a life!</p>

<p>Along the way you will receive a skateboard to cruise through the level, but watch out for thoose rats. You should also be prepared to navigate your way over moving platforms and duck flying birds.  </p>

<p style="clear: both"></p>  

<hr>  

<h2 id="abearstailbakemedia">A Bear's Tail - Bake Media</h2>

<div class="alignleft">  
<img src="http://david.zurillo.com.au/content/images/2017/01/ABearsTail1.gif">  
<img src="http://david.zurillo.com.au/content/images/2017/01/ABearsTail2.gif">  
</div>  

<p>Someone you really fancy was captured while you were in the woods dropping a log. She was taken to bears house and locked in the newly converted loft by a ridiculously large fire-breathing squirrel. So you have got to save her before squirrel turns her nuts.</p>

<p>All you have to do is work your way through the house until you get to the loft and save her. The only thing stopping you is squirrel. There is one other thing... Each room is filled with a poisonous odour left from squirrels droppings which means you have to get out of each room as fast as you can or you will die. However the more items you collect or eat the more time you have to complete each level.  </p>

<p style="clear: both"></p>  

<hr>  

<h2 id="nobwhackerbakemedia">Nob Whacker - Bake Media</h2>

<div class="alignleft">  
<img src="http://david.zurillo.com.au/content/images/2017/01/NobWhacker1.gif">  
<img src="http://david.zurillo.com.au/content/images/2017/01/NobWhacker2.gif">  
</div>  

<p>The objective is to move the hammer around the bed and whack the nobs as fast as you can to make the highest score. The quicker you whack the nobs the faster they will appear and the higher your score will be. You have 3 screens on each level to try to score as many points as you can to fill up your splatometer. If you fill it up enough you get to splat patsy. If you do not succeed you will get splatted yourself – which is not so nice!</p>]]></content:encoded></item><item><title><![CDATA[Profile - Nintendo Gameboy Advance Games]]></title><description><![CDATA[Nintendo Gameboy Advance game development focusing on developing original games and the fastest available GBA 3D engine in the world.]]></description><link>http://david.zurillo.com.au/nintendo-gameboy-advance-games/</link><guid isPermaLink="false">e03fa2a8-5f41-40f4-86dd-c6e1ac3c0b41</guid><category><![CDATA[Portfolio]]></category><dc:creator><![CDATA[David Zurillo]]></dc:creator><pubDate>Thu, 16 Jan 2003 09:51:00 GMT</pubDate><content:encoded><![CDATA[<blockquote>
  <p>Technical Lead Developer - Nintendo Gameboy Advance game development focusing on developing 2D and 3D engines for creating original games.</p>
</blockquote>

<h2 id="boozehalfbrickstudios">Booze - Halfbrick Studios</h2>

<div class="alignleft">  
<img src="http://david.zurillo.com.au/content/images/2017/01/booze_menu.gif">  
<img src="http://david.zurillo.com.au/content/images/2017/01/booze3.gif">  
</div>  

<p>Booze is a 2d platformer game. Similar to mario, rayman and sonic.</p>

<p>This was a 2D technology demo project to demo to publishers what the Halfbrick Studios team were capable of.  </p>

<p style="clear: both"></p>  

<hr>  

<h2 id="starfoxadvancehalfbrickstudios">Starfox Advance - Halfbrick Studios</h2>

<div class="alignleft">  
<img src="http://david.zurillo.com.au/content/images/2017/01/starfox1.gif">  
<img src="http://david.zurillo.com.au/content/images/2017/01/starfox2.gif">  
</div>  

<p>Starfox Advance is another tech demo to show off to publishers the Halfbrick team skills. It is based off the original SNES version of Starfox. </p>

<p>The demo generated a lot of hysteria amongst the original fans, as someone decided to make an april fools joke and record a video of our running demo and told the public there was a SNES emulator for the GBA.</p>

<p><strong>This game was the first realtime 3d game running on a GBA!</strong></p>

<p style="clear: both"></p>  

<hr>  

<h2 id="omegadeliriumentertainment">Omega - Delirium Entertainment</h2>

<div class="alignleft">  
<img src="http://david.zurillo.com.au/content/images/2017/01/omega_menu.png">  
<img src="http://david.zurillo.com.au/content/images/2017/01/omega6.png">  
</div>  

<p>Omega is a fast paced 3D shoot 'em up clone of Starfox, using a combination of 2D and 3D graphics.</p>

<p>This game uses the same 3D engine developed for Halfbrick Studio to used by Starfox Advance.  </p>

<p style="clear: both"></p>  

<hr>  

<h2 id="crocadvancedeliriumentertainment">Croc Advance - Delirium Entertainment</h2>

<div class="alignleft">  
<img src="http://david.zurillo.com.au/content/images/2017/01/croc_menu.gif">  
<img src="http://david.zurillo.com.au/content/images/2017/01/croc2.gif">  
</div>  

<p>Croc Advance is a port of the original Croc on the Playstation. Utilising my GBA 3D engine, Croc was an experiment to see if the engine could handle a 3D platformer. This was a much more complex experiment than the previous 3D games because animation, texture mapping and full 3D landscapes had to be considered. Successfully handling the complex textured geometry, the Croc demo was the first true 3D platformer game on the Gameboy Advance to run at comparable speeds to the original Sony Playstation version!  </p>

<p style="clear: both"></p>  

<hr>  

<h2 id="carbiedeliriumentertainment">Carbie - Delirium Entertainment</h2>

<div class="alignleft">  
<img src="http://david.zurillo.com.au/content/images/2017/01/carbie_menu.gif">  
<img src="http://david.zurillo.com.au/content/images/2017/01/carbie1.gif">  
</div>  

<p>With Starfox, Omega and Croc all using my 3D engine, Delirium Entertainment decided to try a different type of game to test the limits of the engine. Carbie more than lived up to the test, with 3 AI controlled trucks and the player driving over a texture-mapped terrain, this little game flies. Carbie shows that the engine can handle a fast paced capture the flag driving game over a textured terrain, with multiple players on screen and audio streaming voice overs to boot.  </p>

<p style="clear: both"></p>  

<hr>  

<h2 id="dxballadvancedeliriumentertainment">DX-Ball Advance - Delirium Entertainment</h2>

<div class="alignleft">  
<img src="http://david.zurillo.com.au/content/images/2017/01/dx_ball_adv_menu.gif">  
<img src="http://david.zurillo.com.au/content/images/2017/01/dx_ball_adv_5.png">  
</div>  

<p>DX-Ball is a port of the original PC freeware version developed by Michael P. Welch.  </p>

<p style="clear: both"></p>  

<hr>]]></content:encoded></item></channel></rss>