Archive

Archive for the ‘Google’ Category

Google Technology User Group in Tel Aviv

May 18, 2010 1 comment

GTUG TLV took place today in Google Tel-Aviv offices. I visited Haifa and New-York offices in the past but never been in Tel-Aviv one so it was nice to see it for the first time, of course.

It was somewhat surprising but the office is not that fancy, as other people may think of it. I mean, it’s totally fine and you get some nice colored walls painted in Google colors. I couldn’t see the whole office so who knows what was left but from what I saw it was just a normal office. The kitchen is Ok, two pool tables next to it and a medium-size conference room where the event actually took place. I was told once it’s a temporal location and Google Tel-Aviv would move into its own campus in Tel-Aviv university. So it may explain the lack of usual luxury you get to see in other offices.

But a bird’s-eye view on Tel-Aviv is truly fascinating:

Anyway, it wasn’t the office we came to see today, of course.

I stayed for three sessions:

Unfortunately, I left earlier thinking I’m only missing the Python part (I’m less interested in) and forgot there’s “An introduction to Google Closure” (video) which I really wanted to hear. Shame on me!

1.

The following JavaScript patterns were nicely presented by Zohar Arad:

Singleton:

I don’t think there’s a need to elaborate on it 🙂 It’s just Something.getInstance(), as usual.

Module:

A re-usable and self-containable unit that can be instantiated and used for performing certain tasks.

var Module   = function( o ) { .. }; // A general function for converting object to module
var MyModule = new Module({ .. });   // Specifying module's definition
var m        = new MyModule();       // Instantiating the module, start using "m"

Engine

Callable unit that implements unique internal logic, exposing uniform API to consumers, similarly to Facade. It is used mostly in various browsers, implementing differently a certain functionality, like Web Sockets that was given as an example. So we implement IE engine, Firefox engine, Chrome engine, and Opera engine and override certain methods.

Event-Driven

Allows not to call some other unit directly but posts DOM events using commonly known names to which other party responds, since it has a listener registered. Used heavily in Flash to JavaScript communication, freeing from a need to know JavaScript method names and being forced to recompile Flash each time JS code is refactored. Putting a layer of isolation between them loosens the coupling a bit as there are no direct calls any more, one technology just fires events for another one. All major JS frameworks support customized event names like 'SomethingHappenedEvent' and here we assume event names won’t be changing as frequently as method names.

We had a comment from the audience about an importance of detaching event listeners on unload to clean up the references and prevent memory leaks that otherwise may be catastrophic, especially in Flash. And this kind of “unregistering” better be done automatically.

Templates

Adding lots of HTML to the page is better done by creating large String snippets rather than by manipulating DOM. When creating them, various templating techniques and syntaxes can be used. Naturally, when implementing it manually, ReGex-es are somewhat slower than a simpler String operations.

Btw, here’s the pattern to iterate through object properties, only those it actually owns:

for ( prop in o )
{
    if ( o.hasOwnProperty( prop ))
    {
        var j = o[ prop ];
        ...
    }
}

Being Groovyst in my heart I was dying to replace it with something like:

for ( j in o.findAll{ o.hasOwnProperty( it ) }.collect{ o[ it ] })
{
    ...
}

2.

Second presentation, “Android 101” by Dror Shalev from DroidSecurity was a killer! I always said you need two things to make a successful presentation: the material itself should be rock-solid and interesting, of course. But you also need a presenter who’s making a show out of it. When those two meet together .. well, that’s what people remember later for years, I believe. And that’s exactly what Dror demonstrated us today.

It was very interesting to hear how hackable Linux, Dalvik VM and Android are and how important it is to have a decent “antivirus-like” application on each Android phone. The problem is that neither of applications available in Android Market is checked by someone. It’s a free world for everybody. Bad things may (and do) happen if malicious software is installed. Now, DroidSecurity solution doesn’t scan files , it can’t, but it analyzes what’s happening and what’s running on the phone, communicating with company servers. To see it in the market, go to “Top Free/Paid”, choose “Communication” category and scroll down to “antivirus free” or “Antivirus Pro” (too bad it’s impossible to provide a direct link .. hmm, somebody?)

We were also told there’s an iAndroid community for Android developers in Israel.

3.

Third presentation, “Django AppEngine based platform building site” was about 9Folds, a CMS engine built by Alon Burg for quick Web sites creation using Django templates and AppEngine-deployed .. eeeh, engine. I’m not experienced with Django so I could less appreciate the beauty of it but Alon mentioned some nice AppEngine caching techniques. He’s also using a rather clever trick to upload template files to a “live” site: pushes them to a public GitHub repo where they’re downloaded from by an application code. What a brilliant idea, browser upload, be it Flash or not, doesn’t come close to "git push", of course.

Alon has also mentioned Varnish, a “high-performance HTTP accelerator”.

Take a look on 9Folds gallery or browse Narayan World to see how results look like.

So .. It was a very intense evening and I didn’t even see it all!
Many thanks to Omri for organizing and running this event!

Advertisements
Categories: Google Tags: ,

turn off buzz

February 11, 2010 4 comments

It’s good there’s a “turn off buzz” link at the bottom of my Gmail.

It amazes me how much effort is thrown to make us spend as much time as possible performing pointless and non-productive activities .. Watch TV, commercials, sitcoms, popcorns, browse social networks (Одноклассники!, ВКонтакте!, Facebook!, ЖЖ!), follow everybody and see what they have to say, post comments to their photos, post your own photos, music, video … what a classic examples for Q4 in Covey’s Four Quadrants!

Yeah, sure, part of it is socializing but the way I see it is a waste of time.

May be it’s just me, but I don’t need to socialize that much, really. Friends of mine? I talk to them in person. Others? How many of them have anything valuable to say? Anything worth spending time reading? I mean, I have tons of very smart blogs, articles and books unread (and videos unwatched) to waste my time on this?

My time management is terrible (and I always love my job a little bit too much to leave workplace at normal hours) but I work on improving it and concentrating on things that are important to me. People that are valuable to me. Things that need to be done.

So I turned off all messengers long time ago (I only open Skype or Google Talk to talk to someone). I stopped visiting those stupid social networks long time ago as well. But I loove Twitter – it’s all about news, quick updates and following only those you really want to hear from. And it doesn’t have this annoying “unread” counter (what a piece of brilliance!), pushing one to spend more and more time reading, like, everything – but does one need to?

Buzz? I still don’t get Wave and I don’t get how people find it usable or useful. When it changes – I’ll be glad to join, like it already happened with Zoho. Honestly, there were times when I was laughing at idea to put Word on-line but .. I’m now a big time Zoho user. Well, things change.

So may be one day I’ll “get” what for do I need Wave or Buzz. Till then – turn off buzz and all I want is my Gmail account to load as fast as possible. I appreciate Google’s efforts spent on making Web move faster. But not on making me read more pointless data.

When I leave office in time and get to reading – I have plenty of resources to start from, thank you.

Categories: Google Tags:

Java Hosting – VPS vs Google App Engine

July 14, 2009 5 comments

For quite some time I’ve started to think (again) about my very own Java hosting.
There are some ideas running in my head that I’m really eager to implement (Groovy brought me back to dynamic languages again after I left Perl behind many years ago) but first thing first – I’ve started to think where I’ll host everything.

At first, Google App Engine seemed like a very nice solution to me. It’s Google, it scales, it’s Java, it’s BigTable and .. ah, right, and it’s free for starters. Seems like a perfect deal, right ?

Unfortunately, not so fast. I’ve opened again that link yesterday and watched closely what do they offer. And then I see this: “A Java application cannot create a new java.lang.ThreadGroup nor a new java.lang.Thread. These restrictions also apply to JRE classes that make use of threads. For example, an application cannot create a new java.util.concurrent.ThreadPoolExecutor, or a java.util.Timer”.

No Threads for you! But wait, it only gets better:

  • HTTP request should return a response within ~ 30 seconds, no longer than that
  • No disk usage, except files uploaded
  • No system calls
  • Crontab calls (invoked over HTTP) have the same 30-seconds limitation
  • Partial JRE support (but that was known to me already)

I was shocked, to say the least. Forbid concurrency ? Today ? I was already planning my thread pools and queues in my head but that … How am I going to execute any long-lasting background tasks ? In the end, I have decided that App Engine is a no-go for me 😦

This very good link (Choosing a Java hosting provider) brought me back to an idea of VPS – Virtual Private Server. It’s when you have you own Linux but it’s not really you own – you’re sharing it with others but on a BIG server. Like many others, I came to conclusion that:

So I’m now on my way to Linode and my very own ThreadPoolExecutor!

Update (August, 2009): I’ve purchased GoGrid services instead. More details will follow soon.