Arni Lochner
Barry Pace
Chris Dowling
Chris Herring
Colin Dean
Craig Curchin
Gareth Foote
Gareth Leeding
Gemma Bardsley
Lucy Burchell
Marc Hibbins
Tim Crook
Tim Kalic
→ Blog.birdsigh | 11 Feb 2010 | 12:54am GMT
Since my previous post I have had a chance to play around with a very basic implementation of soft body physics in Flash, using Verlet integration. Using lots of particles constrained into one blob would have required far more processing power than is feasible, and hopefully using Verlet integration will give the results I want without such a great performance cost. A very useful introduction and further details about the basics of the Verlet integration method can be found here, from Thomas Jakobsen. This paper describes in brief the algorithms that were developed for IO Interactive’s game ‘Hitman: Codename 47′, the details of the Verlet integration are abstract enough that they can be applied elsewhere. In this case, AS3!
After much trial and error I was able to get a simple version of verlet integration running for my blobs. After more tweaking, and adding a secondary internal boundary for stability, I was getting somewhere closer to the end result I wanted. As you can see there are still issues when the blobs collide with each other, and when the force applied to the blob is too great it can sometimes fold in on itself.
For this reason I decided to try and adapt some of what I had here and combine it with both the fluid filters I had already come up with, to merge boundaries, and the particle engine to control the position and velocity of the blobs.
Using a tweaked version of the soft body physics blobs (to fix some of the more erratic behaviour) I have so far only added the fluid filters (as shown above). Controlling the position of the blobs using Flint is proving to be a little more tricky and will likely require some reworking of the Verlet integration used. The performance at smaller scales such as above is quite satisfactory, but scaling it up to the large resolutions I will need means the frame-rate dropping to 10fps and below when a large number of blobs are colliding. Hopefully I can regain some of the lost performance by doing as much of the bitmap processing in Pixel Blender as possible, and controlling the particle motion with Flint.
------------------------------------------------------------------------------------------
Playing With Particles Pt.1→ Blog.birdsigh | 6 Feb 2010 | 8:00pm GMT
I have recently started playing around with particles in Flash for an upcoming project and thought I might share some of the results I have had with the FLINT particle system. You can click on the examples to move the particles around.
I started by experimenting with the basic behaviours and actions available in FLINT. Combining different actions such attractors, velocity matching, minimum distance, collision and many more allow you to quickly and easily come up with complex particle behaviour and flocking.
I then used some basic filters to create a fluid effect when particles are close to each other, a bit too much like a lava-lamp for what I want, but nice nonetheless! Ultimately I want to create large ‘blobs’ with boundaries that can ripple and respond to collisions in a way that is convincingly fluid-like. I did some quick tests (shown in the video below) to try and achieve this, but the CPU usage is far above what I will have available for this project. Hopefully I can get something similar to this running efficiently enough to work on a Mac Mini. I think I may end up using a combination of what I have here along with an implementation of soft-body physics using Verlet integration, however, that in itself is likely to be rather CPU intensive so I think more research is needed first…
Watch ‘Blob Test’ in HD from birdsigh on Vimeo.
Read Pt.2 of ‘Playing with Partilcles’…
------------------------------------------------------------------------------------------
Start Making Sense→ Marc Hibbins | 12 Jan 2010 | 12:43pm GMT
I thought with the turn of the new year and whatnot, I’d make a few improvements to my blog.
For some reason when I started writing I thought it’d be a great idea to use rather abstract titles for all of my posts, something short and curiously inviting (hopefully) rather than the straightforward approach of actually describing what the post is about. I wanted to avoid long and boring titles like “Differences between Flash Player 10 and 10.1″ or “How to install.. blah blah”.
So although, as far as titles go, they could probably be more boring – they could definitely be more helpful. Most of them are obscure and aren’t really meaningful. They’re fine for human readers, especially after people have read the post, but they’re not so good for search engines or people searching for what I’ve written about.
I decided then to use Wordpress’ custom fields to add a descriptive ’subtitle’ to each post that should shed some light on what I’m actually writing about and hopefully the titles should start making sense.
I could have started anew and use descriptive titles from here on, but that would be inconsistent and make those old titles even more nonsensical. I could have renamed the lot, but the old URLs would then be meaningless (the name is in the permalink) or if I changed those URLs then previously incoming links would be broken.
Adding Custom Fields
Custom fields are essentially metadata for each post and can be pulled in by your theme.
I choose to display my subtitle under the each post title so humans, search engines and crawlers alike can read abstract title and the helpful subtitle description together.
Custom fields are added at the bottom of the ‘Add New Post’ page and can be any amount of value pairs that take a name and value.
These custom fields won’t automatically show in your post, you’ll need to edit your current theme’s PHP files to retrieve them.
The get_post_custom function will return a multidimensional array with all custom fields of a particular post or page, which you can traverse to find your custom value pair:
<?php get_post_custom($post_id); ?>
Otherwise you can use the get_post_custom_values function and send the field name to get an array of all the values with that particular key:
<?php get_post_custom_values($key); ?>
I’m using a field to add a subtitle, so I append the value onto the end of my title which you can see on the left (if you’re reading this on my site).
Semantically this is part of my title. As I stated above, for SEO purposes, I want this to be considered as a part of my title for all intents and purposes by search engines and spiders as well as humans. I only ever want them considered ’separately’ on an aesthetic level and in Wordpress’ forming of the permalink.
So I’ve styled up the subtitle to look complimentary to the ‘actual’ title with CSS, but injected it into the post’s h2 title tag in my mark-up so it stays semantically sound for machine readers and accessibility purposes.
So here’s the combined title mark-up (without style hooks):
<h2
<a href=http://hibbins.wordpress.com/feed/”..”>Start Making Sense</a>:
<span
</h2>
And the styled and un-styled versions look like this:
It’s subject to a conditional statement that checks whether the custom field has been populated, so I don’t have to rush through adding them to all my posts and those without subtitles yet won’t look broken.
This does mean however that it’s only implemented by the theme, not by the publishing platform. This means it will only be seen by visitors to the blog, it isn’t published to the RSS feed, for example, so syndicated readers won’t see it.
Sitemaps
Another improvement for SEO purposes was to add an XML sitemap.
I recently added a HTML sitemap in the form of my index page, but then saw Google’s Matt Cutts discussing HTML versus XML sitemaps who concludes that if you can have both, then do so.
It’s very easy to generate a sitemap and according to Matt’s video a simple list of URLs would suffice, but I looked up the Wordpress Plugin Directory for ready-to-roll solution and found the Google XML Sitemaps which does the job for me.
It’s fully automatic so it doesn’t need my attention once I’ve installed it. It generates an XML file based on my current posts and pages and automatically updates whenever I publish or modify anything new.
It also sends notifications of updates to the main search engines – Google, Bing, Ask.com and Yahoo! – and has a number of advanced options concerning prioritising pages and setting the frequency of how often certain pages should be checked again by crawlers for updates.
The XML file it generates sits at http://blog.marchibbins.com/sitemap.xml (for me) and there’s an option to attach an XSL file for styling, but I choose just to use plain XML.
Social Bookmarking
I got to browsing some of the other popular plugins and temporarily tried out Sociable which adds typical social bookmarking links to the bottom of each post.
It supports nearly 100 different APIs and the drag-and-drop interface and nice and easy to work with.
I chose not to use it in the end, I thought it was a bit over-the-top for my site.
There’s a lot more in the directory though, like Add to Any, SexyBookmarks and ShareThis – though they’re not hard to write anyway, if I eventually change my mind.
Tweaks
I made a few other minor changes here and there, some CSS changes and design tweaks.
I threw an RSS link into the header and dropped the amount of posts that show on my front page.
I realised my posts can tend to get pretty lengthy and often have embedded videos or Flash content, so showing ten of those (the default) made the page quite heavy.
I started using the ChaosTheory theme when my blog was freely hosted on Wordpress.com and I’ve stuck with it since, making odd modifications to both server-side code and the front-end as and when. To use it on a Wordpress.org blog I found a port hosted by Automattic but it’s never been quite right nor entirely compliant with mark-up or CSS standards, I’ve only really maintained it for consistency.
Recently though I found the Unicorn ‘Universal Conformance Checker’ from the W3C which combines all the common validation checks and also has a MobileOK Checker which looks at the ‘mobile-friendliness’ of a site.
Shamefully my blog scores an awful 0/100, due to links with “_blank” targets, the amount of images embedded, the presence of Flash and Javascript and a ton of other things.
Over time it’ll be my aim to get all that sorted. Hopefully without having to start my own theme completely from scratch.
------------------------------------------------------------------------------------------
Chrome’s On It→ Marc Hibbins | 15 Dec 2009 | 12:29am GMT
In July, Google announced their plan to develop a lightweight operating system based on their successful Chrome browser. Intending to be open source, speedy, secure and simple, this would be their attempt to re-think the operating system as Chrome previously ‘re-imagined’ the browser.
It was Google’s aim to get users from start-up and on to the Web in a matter of seconds.
The Chrome OS would be the kind of system targeted at Netbooks, catering for the modern generation of computer user for whom the majority (if not all) of interaction takes place on the Web.
The OS would pretty much just be a browser in fact. All the user’s applications and data would (and would have to) be stored in the cloud; as stateless data and Web-based apps.
With that in mind Google could completely go back to basics and redesign the underlying security architecture of an OS. Because it was their plan to run everything ‘in the browser’, the underlying system would no longer need the capabilities of a normal operating system, for example, the ability to install applications or the need for security precautions to handle them. There is also no file storage, so you wouldn’t even need any real kind of storage space or file system in the traditional sense.
This all results in the user never needing to deal with viruses, malware or updates for applications or their security system. It also means the OS will be up and running in seconds of booting up – and thus, ready almost immediately to get on to the Web.
A couple weeks ago, Google held a special event announcing the official release of the product and previewed some of the features on a live webcast (covered by TechCrunch and ReadWriteWeb).
They followed it up with a short introductory video explaining some of their decisions and what users can expect in the full version:
Their YouTube channel also has a recording of the announcement and the audio of the Webcast is archived here.
As part of that announcement Google publicly released the code to the open source community and called for contributors to engage with their developers and start working with the code.
If you’re interested in doing that, the Chromium wiki has a how-to on getting and building the source and TechCrunch wrote up a step-by-step guide to getting started.
This also meant that you could download and build the source to have a play, so I thought I’d give it a go.
Getting and Installing Chromium OS
TechCrunch’s coverage has a guide to running the Chromium OS on a virtual machine, essentially software that replicates the behaviour of a standalone physical machine. This means you don’t have to install this OS instead of your native system or worry about any operations performed by Chromium affecting your current platform, it’s running in a secure sandbox.
They link to two disk images, one built by GDGT (which requires a free registration) and a Pirate Bay hosted torrent file.
At the time of this writing, the torrent file and image is considered to be safe, though as Jason Kincaid writes, this could at some point be re-written to be unsafe.
Now although it’s obvious, I’ll point out (as the article does) that this is a very early release of Chromium, so isn’t as near fully featured as that we’ve seen demonstrated. That version too is itself unfinished. This build has also not been put together by Google.
Neither is this intended to run on a virtual machine, so you won’t get anywhere near the performance that you would for real. This is the usually the case for any system running on a VM, but because pretty much the whole deal with Chromium is the speed, what we’ll be seeing should not be considered ‘as is’, it just a method to give you a bit of a sneak preview instead.
Using VMWare
Usually, VMWare Player is my preferred choice for virtualisations. However the build comes as a VMDK file and VMWare Player runs from a VMX file. The VMDK file is the appliance, the VMX file is a descriptor (processing instructions that the Player relies on).
VMX files are easily written in a text editor and I found an example which I modified to run as part of my development environment, which follows below.
Simply save this file as VMX format and run it from VMWare Player:
.encoding = “UTF-8″
displayName = “Chrome OS”
guestOS = “other”
memsize = “1024″ethernet0.present= “true”
ethernet0.startConnected = “true”
ethernet0.virtualDev = “e1000″
ethernet0.connectionType = “bridged”
ethernet0.addressType = “generated”
ethernet0.generatedAddress = “00:0c:29:cd:8d:e6″
ethernet0.generatedAddressOffset = “0″usb.present = “true”
sound.present = “false”
sound.autodetect = “true”
sound.virtualDev = “es1371″
sound.fileName = “-1″
sound.startConnected = “true”ide0:0.present = “true”
ide0:0.fileName=”chrome-os-0.4.22.8-gdgt.vmdk”
ide0:0.deviceType = “disk”
ide0:0.mode = “persistent”
ide0:0.redo = “”
ide0:0.writeThrough = “false”
ide0:0.startConnected = “false”virtualHW.version = “3″
config.version = “8″
floppy0.present = “false”
Depending on your settings, you may have to change the ethernet0.connectionType to “nat” and the ide0:0.fileName to your VMDK filename – if you got the torrent version, that will be “chromeos-image-999.999.32309.211410-a1.vmdk“. I also gave it a little more memory.
Using VirtualBox
TechCrunch recommend using VirtualBox, a cross-platform virtualisation. VirtualBox can run straight from the VMDK so don’t worry about a VMX file – just follow the instructions.
First Impressions
Initially, everything is a bit sparse and you may wonder if you’ve done everything properly (have a look at the screenshots below), but this is just a reminder that what we’re playing with here isn’t ready at all – the video demo is a far more polished version than this and we’ll keep that in mind.
When it gets going though, we start to see some of those familiar features.
There’s the application menu, not a drop down menu in our version but a ‘pinned’ tab – the drop down must have been put in later.
I started to play with some of the apps, they’re exactly the same here as they are on any other platform – they work completely as they should – Google’s Calendar, Docs and Reader to name a few.
Saying that though, why wouldn’t they? These ‘apps’ are just the webpages we’re used to, actually you’ll see exactly the same as visiting ‘http://www.google.com/mail‘ and ‘http://www.google.com/reader‘. There is zero difference, just like visiting ‘Amazon.co.uk‘ works plenty fine too.
The fact they’re called ‘apps’ is just semantic thing, just a way of thinking about them as products launched from some kind of desktop-analogy, rather than destinations found at the end of a search engine. I’ll come back to this later.
Then I started to play with the apps that launch in ‘panels’ – the first hint of something that looks native to Chromium.
There’s appropriations of the Calendar again and Google Talk.
But then the illusion was slightly shattered when I notice ‘View: Mobile’ link at the bottom of the calendar and chose to click ‘Desktop’, which just showed just the other Calendar view (the first one, above), all displayed in that little window with scrollbars – because, again, it’s just a Web page we’ve loaded here, but in a custom view.
The chat is pretty much the same as the Google Talk, and includes voice chat.
This was actually a bit disappointing, of course I know that the Chromium OS is pretty much just Chrome and that everything is a Web page really, but I expected these apps to have detected that I’m visiting on the Chromium OS and serve a more tailored interface. I wanted some kind of dedicated experience basec on the app knowing that I’d be seeing everything through one of these panels.
Having said that, the Chromium OS project site has a whole section dedicated to the User Experience, which describes the ‘motivations, assumptions, and directions’ behind the interface design. It shows much of their work in-progress.
On their screenshots of the latest version, these windows seem to be more developed, the chat doesn’t have the default controls and there’s a notification panel that looks like it nicely ties up the application in some kind of native Growl equivalent – see here.
By the looks of it something like that could be achieved as simply as combining RSS and Javascript (maybe it does – it’s all Web pages remember), but putting it in a custom panel, presented in custom ‘chrome’, would give it a lot more strength and me more confidence.
The majority of the links from this application menu, in fact, are just to Web pages, rather than apps in these custom windows.
One of them links to a straightforward enough Chess game, demonstrating Chromium’s support for Flash. It comes with Flash Player 10.0.32.18 installed (currently the latest stable release) and it runs just fine.
A new paradigm
On the idea of using only Web applications, looking at Web apps versus desktop apps, I think for a long time people have been wary of becoming completely dependant on them.
When I say ‘Web apps’ here, I don’t mean everything that you could consider to be an app or just any kind of RIA, arguably any ’site’ is or could be ‘an application’. Instead I’m going to refer to the purely stateless apps, where the software, user settings and data are all stored somewhere in the cloud – on a server somewhere as opposed to the user’s local machine. Here I’m referring to the kinds of Web applications that are direct parallels of popular desktop apps, think the likes of the Google Docs suite.
For example, I know of a few people who dabble with Google Documents (Google’s word processor), but won’t use it exclusively over Microsoft Word, they use it for the odd document or quick note but not anything of length or real importance. Likewise with Google Spreadsheets as a possible choice over Microsoft Excel.
I think Spreadsheets is a different game, Excel is really quite powerful and has a lot more advanced features, though I’m no spreadsheet wizard. With Documents however, with the feature set far closer to that of Word or any enterprise desktop word processor, what’s the problem halting full adoption?
Is it a trust issue? Are people wary of Google or concerned about losing their data?
I’m a big fan of Documents, I use it for all my writing, I don’t own Microsoft Word and anyway, I like it. I’m writing this post using Documents because I prefer the environment over Wordpress’ authoring tool, I’m confident that my data is safe and secure.
And then there’s email, I don’t use a desktop client at all for my personal email, I use Google Mail. But compared to the rest of the Google app suite, Google Mail is seen as something quite different.
For some reason, Google Mail is set apart from the rest of the Google Docs applications, not seen on par, even though your data there is equally as secure or insecure, and backed-up or prone to loss there as it is with the apps on Docs. They run alongside each other, they have the same authors, same security, the same look and feel even.
So why is this? Is it just the case that Google Mail has been around for longer, so we’ve just gotten used to it? It has had a longer development life, but those advances are duplicated across to other software.
I wonder how many of the people who choose not to use Documents for trust, security or want of having their documents saved locally, do use Google Mail but haven’t ever exported their mail and backed-up an archive on their computer?
I think two things set Google Mail apart. Firstly, it’s just better than most mail clients – it’s fast, responsive, it shows emails in threads (which was pretty new at the time) and since then we’ve gotten hooked and now can’t possibly drop it for any of those old clunky desktop clients.
Secondly, probably because of that first reason, it seems we’ve kind of ‘forgotten’ that it’s a Web app – that’s just a load of that temperamental HTML and Javascript substance writing data to the browser, but not only is it so powerful that it can trump the desktop software, it’s extremely reliable so we seem to think that it surely can’t just be a Web page like any other page in our browser.
Not only are we forgetting that actually there really is no difference between Google Mail and any other page (other than excellent engineering), but that there is a difference between it and one the desktop alternatives.
What I’m talking about here is that we should consider our way of thinking about these applications. It’s not a new observation that the gap between desktop applications and Web-based applications is closing, Google Mail is probably the best example of that – perhaps the killer app in that respect. It just seems surprising that the Chromium OS has zero file storage, you do not save anything – but it really shouldn’t be.
I talked about suspending disbelief in convincing myself that some of the Web pages I was looking at were actually apps and not just normal HTML pages – but does it really matter?
Take the application menu, note it’s similarities to the application interface on the iPhone which also collates Web links and native ‘applications’ together. Both treat them as one and the same with an icon treatment that doesn’t distinguish between the two.
Ultimately, if we get the desired result – on the basis that trust and security is in place and what we want to get done, gets done – I don’t think it matters if the program is Web-based or ‘desktop’-based, as much as it doesn’t matter if the app is written in HTML, AJAX or Flash instead of C or VBA.
When Adobe first starting talking about AIR, describing it as something like a desktop runtime for Flash, I didn’t think anyone would consider any Flash app to stand on equal footing to traditionally written desktop software (again, from the likes of C or VBA). At that time no-one really took Flash anywhere near as seriously as they do now. But now look at all the Twitter clients we use, the BBC iPlayer.
I digress. What I’m saying is that everything on the Web is constantly evolving.
Google Mail is the application that proved that stateless computing ‘can be done’ and can be accepted as the norm. Chromium then, has the potential to be the software that proves true stateless computing ‘can be done’ and is a confident first step to introducing that as the norm.
Chromium loads some Web apps natively, others it loads as if they were native. With apps like these, if you were the kind of user that didn’t know or didn’t care that they only served online, you wouldn’t be any the wiser because of the way in which Chromium unblinkingly presents them.
I’m reminded of the ‘What is a browser?’ video and how initially I thought of the people as being quite naive, but in retrospect I don’t think it matters what a browser is, it’s what you do with it.
For a lot of people the search engine (Google or otherwise) is synonymous with the Web, or is the Web. Not removing choice, I don’t see a problem with these apps being synonymous with ‘mail’, or ‘chat’ or ‘calendar’ for users who wish to use them.
We’re pretty much always online now and Chromium is targeting the Netbook type system (also to note perhaps, the TechCrunch article says you cannot download and install Chrome on any machine – you will have to buy a new one), Chromium could really work. As I say, if it does it’ll enforce this new paradigm of how we think about these apps.
NB: There are fall backs for offline use – recently Google announced that they are dropping Gears for HTML5 APIs and offline storage, but I won’t go into that now and anyway, replacing normal computer usage isn’t what this is about.
In the end I couldn’t survive the whole day on Chromium because of the virtual machine’s performance, but I got to wondering whether I could sustain myself on completely stateless computing if I was handed the real Chromium to try out for a period of time.
With the help of Wakoopa, I looked at the most popular apps for various platforms and chose those I use the most, for each I came up with a currently cloud-based alternative – all of which I’ve used at least once when circumstance has called for it.
Here’s a sample of what’s available:
| Desktop | Web-based |
|---|---|
| Internet Browser | N/A |
| Google Mail, Google Wave, Hotmail, Yahoo! Mail etc | |
| iTunes/Spotify | Last.fm, Pandora |
| Instant Messaging | Google Talk, Google Mail |
| Skype/Voip | As above, GizmoCall, or any webcam supporting site |
| DVD/Video player | Hulu, YouTube (Now supports TV and ‘films‘) |
| Word Processing | Google Documents |
| Microsoft Excel | Google Spreadsheets |
| Adobe Photoshop | Splashup, Picnik |
| Twitter client | Brizzly, Twitter |
| RSS aggregator | Google Reader |
| Code IDE | CodeRun – can edit, run and compile various languages including PHP, ASP.NET and Silverlight |
There are far more than I’ve listed here – what I’m saying is, this isn’t a phase this is just development.
So Chromium is looking promising, no doubt more official releases will be on the cards for next year. Until then, if anyone does happen to have a Chromium-ready Netbook they want me to Beta test.. I’m up for the challenge.
------------------------------------------------------------------------------------------
Reruns→ Marc Hibbins | 14 Oct 2009 | 9:55pm GMT
Two of the big events of the conference season, Adobe MAX and Future of Web Apps, finished up a couple weeks ago and now most of the recorded talks have surfaced online.
Adobe MAX 2009
Adobe TV has a MAX 2009 channel with a lot of content, with videos divided into three categories – Develop, Design and Envision.
Here’s some of the highlights:
Develop:
- Building Applications for iPhone with Flash Professional CS5
Aditya Bansod - Designing Applications for Desktops and Mobile Devices with Adobe AIR
Arno Gourdol - Designing and Developing for the Multiscreen Web
Thibault Imbert - Multi-touch Development with Flex
Andrew Trice - Creating Real-time Social Apps with Flex and Flash Collaboration Service
Kevin Hoyt - Introduction to BlazeDS and LiveCycle Data Services
James Ward - What’s Coming in Adobe AIR 2
Christian Cantrell
Design:
- Multi-touch and the Flash Platform
Daniel Dura and Matt Bugbee - From Big Screen to Browser, Desktop and Mobile Device with Flash
Jonathan Wall - Flash for the Digital Home: Flash on TV!
Matt Snow - Using Code to Prototype Interactive Design
Remon Tijssen - Design Considerations for Contextually Aware Solutions
Ali Ivmark and Christian Robertson - MegaPhone: Your Phone is Your Controller
Colin Moock
Envision:
- Adobe MAX 2009 Keynote: Day One
Shantanu Narayen - Adobe MAX 2009 Keynote: Day Two
Ben Forta - Open Screen Project Fund: Fuelling the Future of Flash Experiences
Bill Perry and Mark Doherty
Future of Web Apps
Carsonified have only uploaded a small handful of talks over the past few weeks but they’re all worth a watch. So far I’ve only found their London talks on their Vimeo channel, but the Dublin sessions have started to appear on the FOWA site.
Here’s what I’d go for:
- The Future of HTML5
Bruce Lawson - How to Build Amazing Web Apps
Blaine Cook - The Future is Ruby without Rails
Emma Perksy - 14 Web App Survival Tips
Ryan Carson - Introducing Atlas: A Visual Development Tool for creating Web Applications
by Francisco Tolmasky - Taking your Site from One to One Million Users
Kevin Rose - Branding and Marketing Essentials for Your Web App
Alex Hunter
I’ll update as and when more work their way online!
------------------------------------------------------------------------------------------
I Heart Play - Blogs Widget
Version: 1.2
Post Date: March 5, 2007
File Size: 220K
System Requirements
Mac OS X 10.4.4 or later

















