tag:blogger.com,1999:blog-15499593959556662422024-02-08T00:29:17.493+00:00VITO'S THEREFOREAbout PHP, software engineering and some ad-hoc thoughts on the view from the inside and outside.Vitohttp://www.blogger.com/profile/04291961803377428688noreply@blogger.comBlogger25125tag:blogger.com,1999:blog-1549959395955666242.post-12046698330820303052011-09-11T16:34:00.001+01:002011-09-11T17:06:05.831+01:00Building a proof of concept? Try Twitter<p class="first">The journey from idea to mature software typically follows three very high level stages:</p><br /><br /> Proof of Concept > Evolve > Mature and maintain<br /><br /><p>Each stage will involve the usual development concerns (analysis, specification, design, implementation, integration, stage & tests) with all the corresponding artefacts (stories, acceptance criteria, points, etc.) involving sprints, <a href='http://en.wikipedia.org/wiki/Scrum_(development)'>scrums</a> and whatever other rituals in your culture. The concerns at each stage can also be broken down further. For example, design will typically involve content, logical and presentational aspects. Presentational aspects will require thinking about user experience and be part of a holistic information architecture.</p><br /><br /> <p>Some idea thrives on a certain component, such as user experience or underlying content. Some thrives on feature or functionalities. Many ideas in one way or another require some form of social acceptance, and this is often key to social or commercial success of the software. Social acceptance is in many ways the golden goal. Many projects invests heavily, at the <a href='http://en.wikipedia.org/wiki/Proof_of_concept'>proof of concept</a> stage, to better understand the potential of social acceptance by creating an alpha or beta version of a software. While the creation of an alpha or beta version complete with its own front-end clients and API can definitely strengthen the case for success at the proof of concept stage, there can perhaps be another way to focus more on social acceptance of the idea socially. Twitter presents itself as a low cost platform for such a use case. It has most of the components required for a bootstrapped proof of concept software:</p><br /><ul><br /> <li><strong>Storage:</strong> Twitter stores tweets</li><br /><br /> <li><strong>Input/Output:</strong> Input via 'What's happening?', API. Output to public/follower's Timelines</li><br /><br /> <li><strong>Events:</strong> Tweets, mentions, re-tweets</li><br /><br /> <li><strong>Messaging:</strong> Again, via tweets, DM (direct messaging) between users</li><br /></ul><br /> <p><br /> Processing units are external to Twitter though. The processing units are the users. Users can be biological or software bots. Software bots are easily scripted using available <a href='https://dev.twitter.com/docs/twitter-libraries'>Twitter libraries</a>. Theoretically, we can even run both an asynchronous message queue (via the following-follower mechanism) or a distributed worker farm (via DM-ing) on Twitter. <br /> </p><br /> <p><br /> So, here we have a medium to build a proof of concept, by building a Twitter bot tapping on Twitter's API. The fun part stems from the social aspects. Our software bots can interact with biological users voluntarily or automatically. From these interactions, we learn more about the idea and gather proofs that the gist of the concept works or not. <br /> </p><br /> <p><br /> Remember <a href='http://en.wikipedia.org/wiki/John_Gage'>"The Network is the Computer"</a>? Remember perhaps the <a href='http://en.wikipedia.org/wiki/Unix_philosophy'>Unix philosophy</a>?<br /> </p><br /><ul><br /> <li>Write programs that do one thing and do it well.</li><br /> <li>Write programs to work together.</li><br /> <li>Write programs to handle text streams, because that is a universal interface.</li><br /></ul><br /> <p><br /> From a practical perspective, these mantras are not just useful in constructing good software, it helps in worldly efficiencies as well. Let's say I have an idea to start a food recommendation service. What I could do at the beginning is:<br /> </p><br /><br /> <ul><br /> <li><strong>Write the API</strong></li><br /> <li style='padding-left: 1em;' type="circle">Database</li><br /> <li style='padding-left: 1em;' type="circle">PHP/RoR/Python/NameYourLanguage</li><br /> <li style='padding-left: 1em;' type="circle">Web-server</li><br /> <li style='padding-left: 1em;' type="circle">Message Queue</li><br /> <li style='padding-left: 1em;' type="circle">Email</li><br /> <li style='padding-left: 1em;' type="circle">Cron</li><br /> <li style='padding-left: 1em;' type="circle">NoSQL</li><br /> <li style='padding-left: 1em;' type="circle">Caching</li><br /> <li style='padding-left: 1em;' type="circle">Design RESTful endpoints</li><br /> <li style='padding-left: 1em;' type="circle">etc.</li><br /> <li><strong>Write the Web front-end</strong></li><br /> <li style='padding-left: 1em;' type="circle">PHP/RoR/Python/NameYourLanguage</li><br /> <li style='padding-left: 1em;' type="circle">Front-end design</li><br /> <li style='padding-left: 1em;' type="circle">CSS</li><br /> <li style='padding-left: 1em;' type="circle">Cross-browser</li><br /> <li style='padding-left: 1em;' type="circle">jQuery</li><br /> <li style='padding-left: 1em;' type="circle">etc.</li><br /> <li><strong>Write the mobile app (Android or iPhone)</strong></li><br /> <li style='padding-left: 1em;' type="circle">Objective C / Java</li><br /> <li style='padding-left: 1em;' type="circle">AppStore submission</li><br /> <li style='padding-left: 1em;' type="circle">Mobile design</li><br /> <li style='padding-left: 1em;' type="circle">iOS / Android quirks</li><br /> <li style='padding-left: 1em;' type="circle">etc.</li><br /> </ul> <br /><br /> <p>Or I can write a Twitter bot:</p><br /><br /> <ul><br /> <li><strong>Write the Twitter bot</strong></li><br /> <li style='padding-left: 1em;' type="circle">The food/restaurant recommendation algorithm</li><br /> <li style='padding-left: 1em;' type="circle">The food/restaurant database (stored as Twitter lists?)</li><br /> <li style='padding-left: 1em;' type="circle">How biological users use and react (analyse via Timeline?) </li><br /> </ul><br /> <p><br /> By going the route of the Twitter bot, I write no front-end (users interact with the bot via Twitter web, TweetDeck or whatever client they use which suits them), I don't worry about storage as most interactions are stored as tweets, I don't worrry about scalability. I focus on writing my recommendation bot that does recommendation well. </p><br /><br /> <p>You may argue that the user experience is different and that may play a big part in the success of the idea. Probably and of course, the API, web front-end and mobile-app are all eventual concerns. But only IF your idea does well. And in most cases, ideas has to evolve, be tweaked and even changed before it comes to a point where its polished and scales. Would an early stage software project exploring and validating ideas need to expand the whole arsenal of technologies for that? Would it be efficient for a an early stage project to do so? </p><br /><br /> <p>I will like to put forth this idea that Twitter bots/applications tapping on the API can be a useful tool for such early stage proof of concept and exploration. The artifacts created in the form of these software that lives cronned by the minute to Twitter could even live on as a great service to biological entities on Twitter even if the adventure is validated. It could even evolve into the core of the eventual sofware entity. It could serve as the missing piece between thinking and analysing an idea versus implementing a more involved software artifact of the idea. I am using one myself in the form of a <a href='http://www.watweat.com'>Twitter bot</a> by the name of <a href='http://twitter.com/#!/Watweat'>@watweat</a>, which does: food recommendations! I figure a couple of hours to create a proof of concept to renounce/validate the viability of an idea is pretty good ROI.</p>Vitohttp://www.blogger.com/profile/04291961803377428688noreply@blogger.com2tag:blogger.com,1999:blog-1549959395955666242.post-28005032224546127092011-08-07T16:44:00.002+01:002011-09-10T18:35:36.895+01:00Cloudphp.net and reviews of PHP Development in the Cloud<p class="first">The companion website to PHP Development in the Cloud is at <a href='http://cloudphp.net'>cloudphp.net</a>.</p><br />The website contains the source code of examples in the book and other related resources. There's also a list of PHP PaaS that might be useful if you're looking at migrating to these services.<br />Also, thanks to Jason, Rafael and Michelangelo for the great reviews:<br /><p><i>"The book provides an excellent overview of what the cloud is and isn't, and then how PHP developers can leverage it in our applications."</i></p><br /><p style="text-align:right"><a href='http://www.jasonawesome.com/2011/05/03/book-review-php-development-in-the-cloud/'>Jason Austin</a></p><br /><p><i>"Ivo and Vito did a very good job of bringing the topic into a PHP developer’s world in a very concise and objective manner, without leaving important platforms and concepts behind."</i></p><br /><p style="text-align:right"><a href='http://networkedblogs.com/lik6E'>Rafael Dohms</a></p><br /><p><i>"Let me say the book is a fun read. You can take it up to your bedroom as late-night read, read during lunch or even in the garden when the kids are playing about."</i></p><br /><br /><p style="text-align:right"><a href='http://www.dragonbe.com/2011_05_01_archive.html'>Michelangelo van Dam</a></p>Vitohttp://www.blogger.com/profile/04291961803377428688noreply@blogger.com0tag:blogger.com,1999:blog-1549959395955666242.post-61787009060574534212011-04-27T04:09:00.002+01:002011-04-27T04:20:24.701+01:00Book: PHP Development in the CloudI like cloud computing for two reasons:<br /><br /><span style="font-weight:bold;">It's shared!</span><br /><br />Personal space is vital and enjoyable for many of life's activities, but easily accessible public spaces/utility/services can be more efficient for many other activities (for example, we don't need to own a football field to play it, renting a pitch for 2 hours will be better). I think public clouds such as Amazon, Rackspace and others like it are analogous to accessible public utilities.<br /><br /><span style="font-weight:bold;">It's alive!</span><br /><br /><span style="font-style:italic;">"The illusion that we are separate from one another is an optical delusion of our consciousness."</span><br /><br /><div style="text-align:right">Albert Einstein</div><br /><br />I have this romanticised (but strongly held) ideal that the cloud is alive through us, that all the artifacts of our existence within the cloud such as our data (tweets, profiles, documents, etc.), our APIs, software, platform and infrastructure collectively form part of a larger evolutionary process towards the Singularity.<br /><br /><span style="font-weight:bold;">Hence the book...</span><br /><br />Along these lines, in the midst of some tinkering and experimentation with more immediately practicable applications of the cloud; I had a conversation with Ivo at the Claddagh Ring of Hendon and we'd decided to write this book together. We wanted to clarify where cloud computing will intersect with the internet & the WWW; and parts of it that makes having a different term to describe the cloud necessary. We do so from a PHP perspective because it is the language for the web that we like the most.<br /><br />This book is available for purchase via <a href="http://www.amazon.com/PHP-Development-Cloud-Ivo-Jansch/dp/0981034527/">Amazon.com</a> as well as <a href="http://www.phparch.com/books/php-development-in-the-cloud-a-phparchitect-guide/">php|architect</a>.Vitohttp://www.blogger.com/profile/04291961803377428688noreply@blogger.com1tag:blogger.com,1999:blog-1549959395955666242.post-9586242454615194212010-10-08T09:01:00.003+01:002010-10-08T09:08:22.773+01:00APC on techPortal<p class=first><a href="http://pecl.php.net/package/APC">APC</a> is one of the things that you should do if you care about the performance of your PHP application.</p> It is always beneficial if done properly. My latest article on techPortal entitled <a href="http://techportal.ibuildings.com/2010/10/07/understanding-apc/">Understanding APC</a> discusses some of the things that you should look out for.<br /><br />If you're not sure what APC actually is, how it differs from other caches or how to start using it; check out the article!Vitohttp://www.blogger.com/profile/04291961803377428688noreply@blogger.com0tag:blogger.com,1999:blog-1549959395955666242.post-55007586880755476452009-11-02T14:14:00.014+00:002009-11-02T15:19:30.288+00:00The Gmagick, Amazon, Windows, techPortal, php|architect and Zend DevZone Hamper Blog<p class=first>It's been a while since I last blogged so I am packing it all up with a tags-like title for a change.</p>Over the past few months, there had been several Gmagick releases that incorporate a few fixes and some new features. Check out the release notes on <a href="http://pecl.php.net/gmagick">PECL</a> for more info. A big thank you to all that had tried it out and had contributed fixes. <br /><br />For Windows users, Gmagick is now available for Windows, grab the DLLs from Mikko's <a href="http://valokuva.org/magick/">valokuva</a>. <br /><br />On the evangelism side of things, I wrote about using Gmagick along with Amazon's Elastic MapReduce cloud service to do color searching. This appears on <a href="http://techportal.ibuildings.com/2009/11/02/precision-color-searching-with-gmagick-and-amazon-elastic-mapreduce/">techPortal</a>. Yes, it is indeed quite long, <a href="http://devzone.zend.com/article/11225-Ibuildings-talks-about-Gmagick-PHP-and-the-cloud">according to Cal Evans</a>. It showcases how Amazon's cloud allows developers to be flexible with the precision of both the pixel scope for color quantization and the proximity of colors to search within a 3D colorspace. This burrowing into Elastic MapReduce is part of some other cloud spotting that I had been enjoying while working on an upcoming book with <a href="http://www.jansch.nl">Ivo Jansch</a>.<br /><br />That's not all!(Intercom speakers) There's an article on Gmagick in the October issue of <a href="http://www.phparch.com/">php|architect</a> as well. In this article, elephpant visits the museum. Curious? Check out the October issue!<br /><br />For those that are interested in more Gmagick related documentation (besides the <a href="http://www.php.net/gmagick">manual</a>), Vikram wrote a nice and rather comprehensive <a href="http://devzone.zend.com/article/10531">tutorial</a> on Zend Developer Zone.<br /><br />That's about it now.Vitohttp://www.blogger.com/profile/04291961803377428688noreply@blogger.com0tag:blogger.com,1999:blog-1549959395955666242.post-15345065849883953202009-08-17T21:23:00.016+01:002010-10-10T08:25:01.767+01:00A quick look at the Tokyo Tyrant extension for PHP<p class=first>Here's a quick, rough look at the speed of the <a href="http://pecl.php.net/package/tokyo_tyrant">Tokyo Tyrant extension</a> for PHP released by Mikko 2 days ago. I am using it as an on-memory hash. Profiling done with <a href="http://www.xdebug.org">xdebug</a> on PHP 5.3.0:</p><img style="margin: 0px auto 10px; display: block; text-align: center;" src="http://www.vitochin.com/content_images/c100ks.png" border="0"/><br />Here's the collateral userspace costs of an alternative <a href="http://mamasam.indefero.net/p/tyrant/">PHP implementation by Bertrand Mansion</a> (dependent on the sockets extension to PHP):<br /><br /><img style="margin: 0px auto 10px; display: block; text-align: center;" src="http://www.vitochin.com/content_images/p100ks.png" border="0"/>Vitohttp://www.blogger.com/profile/04291961803377428688noreply@blogger.com2tag:blogger.com,1999:blog-1549959395955666242.post-75009599030212225082009-05-17T21:58:00.011+01:002009-08-17T21:52:55.794+01:00The Gmagick Extension<p class=first id="firstpar">I am excited to announce the release of the <a href="http://pecl.php.net/package/gmagick">Gmagick PHP extension</a>, which I ported from Imagick along with <a href="http://valokuva.org/">Mikko Koppanen</a>, one of the <a href="http://pecl.php.net/package/imagick">Imagick</a> author who got me to do the extension and guided me along the way.</p>The extension seeks to make the image processing capability of GraphicsMagick accessible from PHP. GraphicsMagick is forked from version 5.5.2 of ImageMagick and had since developed with important differences and improvements (for more details, see <a href="http://www.graphicsmagick.org/">GraphicsMagick's</a> website).<br /><br />In terms of Gmagick and Imagick, we try to keep the method interface similar so existing Imagick users will find converting to Gmagick a breeze. One major difference however, is that most of the mutator methods in Gmagick are chainable.<br /><br />We'll leave you to decide which extension is more suitable for your needs. A high level difference that we keep in mind when developing Gmagick is that Imagick's feature set is more extensive and powerful, whereas Gmagick should be simpler and more efficient (see <a href="http://www.graphicsmagick.org/benchmarks.html">benchmarks</a>).Vitohttp://www.blogger.com/profile/04291961803377428688noreply@blogger.com14tag:blogger.com,1999:blog-1549959395955666242.post-73685219319877367282009-03-31T22:15:00.004+01:002009-06-29T16:54:58.175+01:00On techPortal: PHP and the Cloud<p class=first>I wrote about using Amazon's cloud services from a PHP perspective on <a href="http://techportal.ibuildings.com/2009/03/31/php-and-the-cloud/">Ibuilding</a><a href="http://techportal.ibuildings.com/2009/03/31/php-and-the-cloud/">'s techPortal</a>. Do <a href="http://techportal.ibuildings.com/2009/03/31/php-and-the-cloud/">check it out!</a> I think <a href="http://blog.calevans.com/">Cal Evans</a> and the Ibuildings gang has something special going on, and there is a growing list of other really interesting articles and tutorials as well.</p>What excites me most about Amazon's cloud is the huge computing resource that it makes accessible to practically anyone. So that ceases to be an excuse nor a worry when innovating. There are also a bunch of challenges that I had faced in the past that could benefit from the presence of such easily accessible utility. Really, I could had been more relaxed during month-ends in a previous project when processing and requests spikes due to heavy reporting while operations goes into overdrive trying to hit closure targets.<br /><br />Another good use of it is to tackle archival and document sharing requirements for legal and billing purposes (the 7 year burden of records). Accountants will love the variable cost conversion effect of cloud pricing and I can already see sales grinning from an easier, more meaningful sell for such 'unavoidable value-add'.Vitohttp://www.blogger.com/profile/04291961803377428688noreply@blogger.com0tag:blogger.com,1999:blog-1549959395955666242.post-40071859106882581532009-03-08T17:16:00.013+00:002009-07-12T19:17:55.722+01:00Session-based object instantiation with memcached<p class=first>I can't help but ponder every so often the amount of objects that gets instantiated for a typical request when a framework-based application gets large and saturated. At runtime, a script sets up everything that it requires, allocating memory for variables and objects and all these gets torn down upon end of execution. There is no persistency beyond the notion of a session. And so a user goes about requesting for login.php and subsequently requests for say, MenuController.php in essence runs two disparate scripts without PHP bothering if they are from the same chap other than the fact that the session remains similar alongside any other information that might be stored in the session. This implies that an object instantiated upon login.php will no longer be present upon MenuController.php and needs to be instantiated again, that is unless it is stored in the session (and the code explicitly uses the object in session). So, there will be lots of object construction and destruction going on while the user of a PHP web app goes about her business dealing with the same app. Here's where object caching with memcached helps, but I thought another paradigm on top of it might be useful or feasible:<br /></p><blockquote><pre>class SessionObjectSingleton<br />{<br />public static function getInstance($class)<br />{<br />if (!isset($_SESSION[$class])) {<br /> $_SESSION[$class] = new $class;<br />}<br />return $_SESSION[$class];<br />}<br />}<br /></pre></blockquote>So, everytime an object needs to be instantiated, we do this<span style="font-size:85%;"><span style="font-family:courier new;">$newObj = SessionObjectFactory::getInstance("Some_class_name");</span></span> instead of $newObj = new Some_class_name;. Typical of a singleton but using a session as store, we get an object that persists along with the session that is specific to the session. Hence, the object can be user specific and still persist. Garbage collection is inherently managed when session_destroy() is called as usual. Furthermore, memcache can be used as the session handler, speeding up access to instantiated objects. (For more information on doing this, see phpslacker's <a href="http://phpslacker.com/2009/03/02/php-session-clustering-with-memcache">session-clustering with memcache</a>). Anyway, the objective of the whole shebang is to minimise resource use in a situation where objects are instantiated exhuberently. This paradigm has the utter inconvenience of having to instantiate object without the perennial new keyword, but heck other solutions seems to require expressive effort as well. It is also more useful for applications that needs to instantiate a lot of complex objects and maintain sessions that involve heavy state switching (e.g. back-end CMS-es). It is of course not relevant for applications that shouldn't be bothered with sessions in the first place. What do you think?Vitohttp://www.blogger.com/profile/04291961803377428688noreply@blogger.com8tag:blogger.com,1999:blog-1549959395955666242.post-13172512604358866032008-12-01T17:44:00.003+00:002009-06-29T16:56:00.940+01:00PHP, minimalism and Occam's razor<p class=first>Check out my latest blog about <a href="http://www.ibuildings.com/blog/archives/1521-PHP,-minimalism-and-Occams-razor.html">PHP, minimalism and Occam's razor</a> at <a href="http://www.ibuildings.com/blog/archives/1521-PHP,-minimalism-and-Occams-razor.html">Ibuildings</a>. Today onwards, I'll post longer, more formal posts on Ibuildings' blog while keeping the shorter, more frequent and less formal ones here.</p>Vitohttp://www.blogger.com/profile/04291961803377428688noreply@blogger.com0tag:blogger.com,1999:blog-1549959395955666242.post-63532096799385253662008-09-18T18:35:00.002+01:002009-07-12T19:15:40.864+01:00Google Developer Day London 2008<p class = "first">I was at Google Developer Day last Tuesday. The highlight for me was definitely Android and Gears. For Android, Mike Jennings showed-off the yet-to-be-launched Android phone to my amazement, and I am pretty much sold. Also did some code-reading at the Gears CodeLab. I hadn't touched Gears for a while since it was 'launched' sometime ago and thought the session could get me in sync and it certainly did. Got some ideas for some fun things to do with the API and took a photo with Google's London Gears (Mobile) team.</p><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg4Ms-zKCygATwHuviey2y3lu5JOdDM6tgOz8JAkbcni8LtRHenxNJV2iNc4WF5vJ_qNQE_W-inPt1dIH_2yaOTRLaUTeICf97yFNE1Xu0ucvUF7O7s3Q8VeqHvInaf3sSCogGajN2YnHiv/s1600-h/london_gdd_gears.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg4Ms-zKCygATwHuviey2y3lu5JOdDM6tgOz8JAkbcni8LtRHenxNJV2iNc4WF5vJ_qNQE_W-inPt1dIH_2yaOTRLaUTeICf97yFNE1Xu0ucvUF7O7s3Q8VeqHvInaf3sSCogGajN2YnHiv/s320/london_gdd_gears.jpg" alt="" id="BLOGGER_PHOTO_ID_5247416699433228210" border="0" /></a>Vitohttp://www.blogger.com/profile/04291961803377428688noreply@blogger.com0tag:blogger.com,1999:blog-1549959395955666242.post-18726139465306402462008-05-07T10:09:00.003+01:002009-07-12T19:23:17.550+01:00On Google (and) Maps<p class=first>Google always leave us with little room to wonder why it is so much loved by developers like me. At the moment at least, I guess the model of success for a software company is so much an anti-theses of Gates' original position on evolving software with retail economics in his famous 1981 letter.</p>Google changed that. So, now we have a company that buys expensive software "by the company" and releases its intellectual property to the public to use, for free. Man, it feels like the scene from Last Samurai where Emperor Meiji, maddened with Omura's monopolising ways, confisticate his estates and fortunes and gives it to the people. Except this time, Omura is obliging.<br /><br />Liberty, at last, sweet liberty. I got a taste when I was tasked to map offices for presentment in CDs, websites etc. This could be an irritable task, drawing maps, directions, adding on changes (graphically by the layers, if you know what I mean). All sorts of unelegant mouse manipulation involved.. With <a href="http://code.google.com/apis/maps/">Google Maps API</a>, heh, we have Semantics and as such, we get closer to reality and thus easier representation. Task completed, with code, not pixels,<br />less memory used, less time used, more flexibility, the list goes on. Getting it right is always good, or so it seems at least to me.<br /><br />Here, we see how the creative gale of destruction that is Google gets cracking. Now, we only need a:<br /><br /><span style="font-family:courier new;">var currentVehicleLoc = new GMarker(new GLatLng($lat, $long));</span><br /><br />to indicate a position in a clouded map. Imagine what this can do. I think the benefits of proprietary GPS locationing systems gets immediately obsoleted. Here, we have a simpler way of locationing in a common sharable, secure-able realm that is better than the raster or what-not proprietary systems of thousands of Omura-like companies, now gone to waste. Art is futile.Vitohttp://www.blogger.com/profile/04291961803377428688noreply@blogger.com0tag:blogger.com,1999:blog-1549959395955666242.post-89438088197515615302008-05-05T07:21:00.001+01:002009-06-29T16:57:07.921+01:00Open source Openspace<p class=first>Openspace had finally reached a stage of maturity to be released as some sort of alpha-release open source. Justifications:</p><ol><li>It had been used as the operating framework for up to 5 major projects to-date. </li><li>It had also proven its use in the fast creation of various widgets and tools. (The To-Do list seems like a popular choice)</li><li>A pool of developers had emerged to pick it up quite easily and quickly</li><li>At least a team of developers within a company with established commercial projects using Openspace had committed to open source contribution</li></ol><p>Once the code had been cleaned-up, expect it to be available on Google Projects via SVN. Since this is starting up, we would welcome all forms of participatory help in coding, design and etc. The next stage of development involves things like genericisation (especially DB) and more semantics / ontological features. Would certainly not like to reinvent the wheel, will be glad to merge or join any other project teams if we're heading towards the same direction. Do drop me a mail too for such.</p>Vitohttp://www.blogger.com/profile/04291961803377428688noreply@blogger.com0tag:blogger.com,1999:blog-1549959395955666242.post-5865920982834081112007-12-08T10:25:00.001+00:002009-06-29T16:59:47.925+01:00Gambit<p class=first>The Gambit feature for Openspace is ready! Inspired by Automator (for Macs), Scheduler (for Windows) and the unix cron, it is a really useful tool to help automate tasks based on a programmable Action -> Reaction rule. E.g. When the clock strikes 10, throw out the garbage, you get what I mean. There are a range of other Actions (something like a listener), such as OnAdminLogon, OnLogOff and etc.</p>Vitohttp://www.blogger.com/profile/04291961803377428688noreply@blogger.comtag:blogger.com,1999:blog-1549959395955666242.post-9685717978487114622007-11-06T10:23:00.001+00:002009-06-29T16:59:20.177+01:00Date/Time related Meta-level methods<p class=first>I had written two new Openspace Meta class methods today. sf_getUnixTimestamp($id,$att,$iatt,$obj) returns the total seconds of a given object value since epoc. The second one (which rides on the prior function) sf_getZendDate($id,$att,$iatt,$obj) returns a ZendDate object. How are these function useful? The first is to do a DB query of a timestamp datatype without having to convert the resulting value into some readable format. ZF docs say this is the fastest means of getting data out of a database, using it to create a Zend_Date object. That is of course, what the second function does. Bottom line, Openspace developers now have a easy way to create Zend_Date objects, and this in turn, makes date and time manipulation so much more easier. Weeehoooooo!</p>Vitohttp://www.blogger.com/profile/04291961803377428688noreply@blogger.comtag:blogger.com,1999:blog-1549959395955666242.post-28699960697866318562007-10-30T23:24:00.001+00:002009-06-29T17:00:15.953+01:00Microtime()<p class=first>Never thought I will ever come across the use of a microsecond but I did today. In churning out temporary files with a unique filename at a rate of about 16 per second, the microsecond comes in really useful, much more convenient and safe than using random numbers to gain uniqueness. The microtime() function is magic.</p>Vitohttp://www.blogger.com/profile/04291961803377428688noreply@blogger.com0tag:blogger.com,1999:blog-1549959395955666242.post-15132151010687941202007-10-29T09:17:00.001+00:002009-07-12T19:27:44.957+01:001U Servers<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiB24eRHHgHZ0PR5jbkeVXRxCQmJFO5LQCaeoD3SLWx1it1XBTqcOcQ6H3X7N4NKzIsH-fSgSU71yc4OvsI3j2HfJNScCNkB2SHI5fG9WvQMO3TDtjM6jx_C4ahchE-XMw2XXw9Qq0UI4qJ/s1600-h/customserver.jpg"><img id="BLOGGER_PHOTO_ID_5194965583397465442" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiB24eRHHgHZ0PR5jbkeVXRxCQmJFO5LQCaeoD3SLWx1it1XBTqcOcQ6H3X7N4NKzIsH-fSgSU71yc4OvsI3j2HfJNScCNkB2SHI5fG9WvQMO3TDtjM6jx_C4ahchE-XMw2XXw9Qq0UI4qJ/s320/customserver.jpg" border="0" /></a><br /><div><p class=first> Check out our new 1U servers running Openspace hosted at an inhumanely cold data-center. </p> </div>Vitohttp://www.blogger.com/profile/04291961803377428688noreply@blogger.com0tag:blogger.com,1999:blog-1549959395955666242.post-82218972209910182842007-10-12T02:19:00.000+01:002008-04-30T10:15:56.859+01:00PHP and Oracle<p><a href="http://www.networksasia.net/article.php?type=article&id_article=2189">http://www.networksasia.net/article.php?type=article&id_article=2189</a></p><p>This is a good article (see link). What's good: </p><ul><li>Oracle's Ken Jacobs (VP of Product Strategy) expects PHP to strengthen further</li><li>PHP makes up 1/3 to 1/4 of web applications on the internet</li><li>The New OCI8 driver for PHP will up PHP to DB performance</li></ul><p> </p>Vitohttp://www.blogger.com/profile/04291961803377428688noreply@blogger.comtag:blogger.com,1999:blog-1549959395955666242.post-1295768452406135202007-10-06T02:19:00.000+01:002008-04-30T10:16:54.867+01:00PHP succeeding where Java isn't<p><a href="http://www.news.com/Andreessen-PHP-succeeding-where-Java-isnt/2100-1012_3-5903187.html">http://www.news.com/Andreessen-PHP-succeeding-where-Java-isnt/2100-1012_3-5903187.html</a></p><p>This article (see Link) "PHP succeeding where Java isn't" is pretty good. Which one dominates does not really matter. Java is my mother tongue, but over the years, I had grown to really like using PHP, mostly for its incredible community, which is less dominant-centric than Java, by the looks of it. </p>Vitohttp://www.blogger.com/profile/04291961803377428688noreply@blogger.com0tag:blogger.com,1999:blog-1549959395955666242.post-7417050982506427872007-08-14T10:09:00.003+01:002009-07-12T19:30:18.642+01:00DB Metadata: Getting all tables in a tablespace<p class=first>I was asked by a colleague today:how to show all tables in an Oracle tablespace?:</p><p>SELECT UNIQUE(TABLE_NAME) FROM USER_TAB_COLUMNS</p><p>There's another way to do it using some form of other metadata available within Oracle. Anyhow, the USER_TAB_COLUMNS table contains a lot of other useful info especially when doing programming at/for the higher metas.</p>Vitohttp://www.blogger.com/profile/04291961803377428688noreply@blogger.com0tag:blogger.com,1999:blog-1549959395955666242.post-14885545877428197592007-07-27T01:24:00.001+01:002009-06-29T17:03:17.113+01:00Map of the Web<p class=first>This is a cool 'map' of the web, based on the rail transport system in Tokyo:</p><br /><a href="http://www.informationarchitects.jp/slash/iA_WebTrends_2007_2_sm.gif"></a><br /><img style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 320px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://www.informationarchitects.jp/slash/iA_WebTrends_2007_2_sm.gif" border="0" /><br /><div></div>Vitohttp://www.blogger.com/profile/04291961803377428688noreply@blogger.com0tag:blogger.com,1999:blog-1549959395955666242.post-53447026208411265792007-06-27T23:43:00.001+01:002009-06-29T17:04:00.274+01:00OCAMS (Full Class)<p class=first>Finally!!! Full class creation with class level method creation is fully coded. Besides creating static methods, developers can now code class methods. Persistency is built-in, and recalling a persistant object is automated.</p>Vitohttp://www.blogger.com/profile/04291961803377428688noreply@blogger.com0tag:blogger.com,1999:blog-1549959395955666242.post-25139618523304880672007-04-21T22:40:00.001+01:002009-06-29T17:04:27.735+01:00Enhancement to type sensitivities for ListObject method<p class=first>Added sensitivities to the ListObject method, the enhanced ListObject can handle Timestamp types better by also echoing the minutes and seconds.</p>Vitohttp://www.blogger.com/profile/04291961803377428688noreply@blogger.com0tag:blogger.com,1999:blog-1549959395955666242.post-55387782754822895882007-03-24T09:34:00.003+00:002009-06-29T17:05:00.028+01:00Restrict on Classes<p class=first>I'd made the interface to restrict class better. This is part of a larger effort to make managing classes easier. Sajax was used to do up the AJAX function, it seems a little slow with too many variables running on live. Overall, it's a pretty good week.</p>Vitohttp://www.blogger.com/profile/04291961803377428688noreply@blogger.com0tag:blogger.com,1999:blog-1549959395955666242.post-43981445911450390622007-03-03T10:26:00.002+00:002009-07-12T19:23:53.635+01:00Guma<p class=first>This is something short on medieval fantasy, but what is presented is an idea on security. Specifically, it describes how dual-tasking agents can be used for individualistic authentication and collaboratively as a volumetric defense mechanism. Please feel free to develop this idea, but do drop me a note, an inverse could be applied as some sort of cipher component? </p> Guma began as a small circular patch of land. This circle is thought of to the ancient Gumaians to be holy. Gumaians are simple people and thought of trade as something that must be done within the realm of God. Hence, they only trade within the holy, circular patch of land. As their civilization grow, the Gumaians started to produce more goods and services. People from foreign lands started to trade with the Gumaians. These foreigners are mainly interested in the Syphora herbs and green stones that can only be cultivated and found around Guma. Nevertheless, Gumaians still maintained their belief of trading only within the circular holy land. They do not travel, and are never merchants. Their life revolves around mining, cultivating and trading them within the circular land.<br /><br />As their trade grew larger, the circular land became more important. The lack of supply of sought-after Gumaian goods in outside market makes themprecious. The circular land soon was a common target of robbers. Sixteen of the most influential traders in Guma decided to pool their resources to place guard posts around the perimeter of their circular holy land. Sixteen huts carved out of solid stone were built, each spaced equally from one another. Ineach hut, each trader placed his very own guard. Foreign merchants that wish to trade in Guma will have to approach one of the guards to be allowed entry.<br /><br />Entry is only allowed if the merchant is recognized as a valid trader by the Gumaian guard. Each guard is only in charge of merchants that are associated to his trade house, and this represents the first task of a guard hut.<br />So it goes, a foreign merchant coming to Guma to trade will have to know which guard hut to approach for entry. Entry will be denied as long as he is not authenticated by the guard hut, and to be on the list of allowed merchants, he needs to establish contact with a Gumaian trader first, either by recommendation or some other means. This initial setup ensures that all merchants that enter Guma are valid ones.<br /><br />The second task of a guard hut is to participate in collaborative defense of Guma in its entirety. A gang of robbers denied entry will find itself in battle with guards from the 16 Gumaian huts. As time went on, more traders are added to the Gumaian holy circle, and soonafter, the establishment of a guard hut becomes a prerequisite to setup a trading facility in Guma. The number of guard huts grew, partly out of the increased amount of traders in Guma, and partly out of need: as Guma grew, it faces increasing threats from battle-hungry nations wanting to conquer and strong robbers wanting to loot. At the peak of Gumaian civilization, there were 2048 guard huts, forming the Gumaian decentralised-command army.Vitohttp://www.blogger.com/profile/04291961803377428688noreply@blogger.com