﻿<?xml version="1.0" encoding="utf-8"?><rss version="2.0" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule"><channel><title>Stritar's chronolog</title><link>http://www.stritar.net</link><description>Category: Ljrt</description><copyright>Neolab d.o.o.</copyright><ttl>5</ttl><item><title>5 reasons why I won't steal your idea</title><pubDate>Tue, 05 Feb 2013 09:22:39 GMT</pubDate><description>&lt;p&gt;Since I'm a &lt;a href="http://stritar.net/About/Skills.aspx" class="more" target="_blank" title="Grega Stritar Skills"&gt;software architect and a web developer&lt;/a&gt;, I get often approached by people with their new ideas. In most cases, for some &lt;b&gt;quality feedback&lt;/b&gt;, and on lucky days, for a &lt;b&gt;rough quote&lt;/b&gt; about the costs of such a project. These people are usually &lt;b&gt;very secretive&lt;/b&gt; about what they have, making me explain to them that it's far from my interest to steal that idea. One time, a guy even made me sign a &lt;a href="http://en.wikipedia.org/wiki/Non-disclosure_agreement" class="more" target="_blank" title="Non-disclosure agreement"&gt;Non-disclosure agreement&lt;/a&gt; before I could make him an offer for a service he was thinking about. After bargaining with me, he chose a different contractor, but ended up doing nothing, at least to my knowledge. He was obviously focused on the wrong things, instead of getting feedback from as many sources as possible, he was investing energy into bureaucracy and protection of his idea. Let me tell something to him and all others out there: &lt;b&gt;Focus on your product, and don't worry about me stealing your idea&lt;/b&gt;. I won't. I have at least five reasons not to.&lt;/p&gt;

&lt;h2&gt;1. Your idea probably isn't as great as you think&lt;/h2&gt;
&lt;p&gt;I've seen a lot of different people who &lt;b&gt;had "game-changing" ideas&lt;/b&gt;, at least so they though. A few of them actually managed to convince me and my partners that their idea is so amazing that it'll kick everyone's ass. Even though proper market research wasn't done, charisma is sometimes hard to resist, and if you are working with someone you've known for a long time, you are prepared to accept crazy terms, such as a delay of payment until this idea will start to generate revenue. After these specific ideas were put into the real world, it turned out there is a &lt;b&gt;huge discrepancy between ideals and reality&lt;/b&gt;, and we ended up with unpaid invoices and ignored phone calls.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://stritar.net/Post/The-Silicon-Valley-tour-part-8-Lessons-learned-time-to-reevaluate.aspx" class="more" target="_blank" title="The Silicon Valley tour, part 8: Lessons learned, time to reevaluate"&gt;Ideas are something, execution is everything else&lt;/a&gt;. There is a long way inbetween, a way paved with upgrades, downgrades, changes, &lt;a href="http://stritar.net/Post/A-case-study-in-agile-development-the-algorithm-for-Ljubljana-Realtime-s-event-discovery.aspx" class="more" target="_blank" title="A case study in agile development: the algorithm for Ljubljana Realtime's event discovery"&gt;pivots&lt;/a&gt;, time and hard work. Millions have ideas, only a few can make them work. I've seen &lt;a href="http://stritar.net/Post/The-Silicon-Valley-tour-part-1-Seedcamp-America-Trip-visiting-the-Googleplex.aspx" class="more" target="_blank" title="The Silicon Valley tour, part 1: Seedcamp America Trip visiting the Googleplex"&gt;Seedcamp companies&lt;/a&gt; &lt;b&gt;change their core concepts and business models&lt;/b&gt; completely, and these startups are already the best, selected from hundreds, if not thousands. When you start working on something and proceed ahead, the initial idea will &lt;b&gt;often evolve beyond recognition&lt;/b&gt;. Not to mention there is a very strong possibility that someone else was already &lt;a href="http://stritar.net/Post/Is-it-even-possible-to-create-original-content-in-this-age.aspx" class="more" target="_blank" title="Is it even possible to create original content in this age?"&gt;thinking about the same thing&lt;/a&gt;, except &lt;b&gt;better, years earlier&lt;/b&gt;. Your idea isn't amazing, but it may be &lt;b&gt;good enough to achieve something&lt;/b&gt; with &lt;a href="http://www.yalelawtech.org/control-privacy-technology/stealth-mode-is-stupid-why-your-ideas-don%E2%80%99t-matter/" class="more" target="_blank" title="Stealth Mode is Stupid: Why Your Ideas Don’t Matter"&gt;proper execution&lt;/a&gt;. That's why you need feedback and partners.&lt;/p&gt;

&lt;h2&gt;2. I have plenty of ideas of my own&lt;/h2&gt;
&lt;p&gt;You know what's better than your idea? My idea!&lt;/p&gt;
&lt;p&gt;Mostly because I kick ass, but also because &lt;b&gt;people get emotionally attached&lt;/b&gt; to the thoughts they generate by themselves. I have so many ideas I don't know what to do with them. They are probably not really great (see reason 1), but they are mine, and I try hard to make a few of them come alive every now and then, when I have the time. During the day, I work on &lt;a href="http://stritar.net/Projects/Neolab.aspx" class="more" target="_blank" title="Neolab, software development"&gt;real-life projects&lt;/a&gt;, during the night, &lt;a href="http://stritar.net/Post/Hey-developer-here-is-something-that-will-make-you-sound-smart.aspx" class="more" target="_blank" title="Hey developer, here's something that will make you sound smart"&gt;I play around&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;When I decide on what to work on next, I usually look for the &lt;b&gt;best ratio between actuality, complexity, required energy and potential&lt;/b&gt;. This means I've already made my own &lt;b&gt;priority list&lt;/b&gt; of the services I will be rolling out in the future, and I must say, it would really be hard to put one of yours inside this packed list. I'm sure most developers think in a similar fashion, lacking resources to make everything they imagine a reality. Face it, there are hundred times as &lt;b&gt;many people who have unrealized ideas&lt;/b&gt;, than people who don't know what to work on. Do the math.&lt;/p&gt;

&lt;h2&gt;3. Your idea probably requires specific passion and know-how&lt;/h2&gt;
&lt;p&gt;The idea lives &lt;b&gt;strongest in the person who thought of it&lt;/b&gt;. It is a result of that person's experience from many fields, so it's hard to replicate in its full form without that experience. The ideas I've stumbled upon usually &lt;b&gt;solve very specific and niche problems&lt;/b&gt; you can't solve without digging yourself into that field. Which most of us don't have time or the resources to do. The core of the idea represents the person who thought of it, it may be taken to another level by a different person, but in most cases, it &lt;b&gt;requires the original author's knowledge, involvement and passion&lt;/b&gt; to work as it's supposed to.&lt;/p&gt;

&lt;p&gt;I can't execute an idea which will revolutionize kindergarten children education, I don't know shit about the problem, I don't have any connections in the industry, and I'm simply not that passionate about that field.&lt;/p&gt;

&lt;h2&gt;4. Your idea requires your involvement as a product manager&lt;/h2&gt;
&lt;p&gt;In the past few years, we've &lt;b&gt;implemented quite a few prototypes and services&lt;/b&gt; together with &lt;a href="http://neolab.si" target="_blank" title="Neolab" class="more"&gt;Neolab&lt;/a&gt;, and even though a few of them &lt;a href="http://stritar.net/Post/Twitfluence-Received-Some-Media-Attention-And-Almost-Went-To-Seedcamp.aspx" class="more" target="_blank" title="Twitfluence received some media attention. And almost went to Seedcamp."&gt;got some praise&lt;/a&gt;, they &lt;a href="http://stritar.net/Post/The-Silicon-Valley-tour-part-8-Lessons-learned-time-to-reevaluate.aspx" class="more" target="_blank" title="The Silicon Valley tour, part 8: Lessons learned, time to reevaluate"&gt;didn't make it to the mainstream&lt;/a&gt;. Take &lt;a href="http://stritar.net/Projects/Chronolog.aspx" class="more" target="_blank" title="Stritar's Chronolog"&gt;this blog for example&lt;/a&gt;, I developed it in &lt;a href="http://stritar.net/Post/Redesigning_The_Blog_-_Behold_The_Chronolog.aspx" class="more" target="_blank" title="Redesigning the blog - behold the Chronolog"&gt;early 2009&lt;/a&gt;, aggregating posts from different social services, presenting them (also) in a &lt;a href="http://stritar.net/Post/I-Have-Developed-A-Magazine-Based-On-My-Delicious-Bookmarks-And-A-Twitter-Bot.aspx" class="more" target="_blank" title="I've developed a magazine based on my Delicious bookmarks. And a Twitter bot."&gt;magazine form&lt;/a&gt;. What did I do with it? Nothing. Years later, a service called &lt;a href="https://www.rebelmouse.com/" class="more" target="_blank" title="RebelMouse"&gt;RebelMouse&lt;/a&gt; did something similar and &lt;a href="http://www.businessinsider.com/best-new-startups-2012-12#rebelmouse-aggregates-your-tweets-photos-and-facebook-status-messages-it-displays-them-on-a-single-page-in-a-beautiful-way-13" class="more" target="_blank" title="RebelMouse aggregates your tweets, photos and Facebook status messages; it displays them on a single page in a beautiful way."&gt;raised millions in funding&lt;/a&gt;. Same goes for &lt;a href="http://twenity.com" class="more" target="_blank" title="Twenity - discover your social capital while competing with your friends"&gt;Twenity&lt;/a&gt;, a spin-off from &lt;a href="http://stritar.net/Projects/Twitfluence.aspx" class="more" target="_blank" title="Twitfluence - measure your Twitter influence"&gt;Twitfluence&lt;/a&gt;, gamifying social authority measuring. Or &lt;a href="http://stritar.net/Projects/Ljubljana-Realtime.aspx" class="more" target="_blank" title="Ljubljana Realtime"&gt;Ljubljana Realtime&lt;/a&gt;, a social event discovery tool. All out there, but that's it.&lt;/p&gt;

&lt;p&gt;I simply don't have enough energy to &lt;b&gt;push a service beyond a point&lt;/b&gt;, or don't want to. Perhaps this fact will change someday, but at this point, you will need to be the &lt;b&gt;product manager of your idea&lt;/b&gt;, and I can be its architect. Since I have a &lt;a href="http://neolab.si" target="_blank" title="Neolab" class="more"&gt;real company to run&lt;/a&gt; besides all of this, I can't afford to be one.&lt;/p&gt;

&lt;p&gt;(Btw, if you think you could do anything with the above mentioned things, don't hesitate to &lt;a href="http://stritar.net/About/Contact.aspx" class="more" target="_blank" title="Grega Stritar contact"&gt;give me a shout&lt;/a&gt;).&lt;/p&gt;

&lt;h2&gt;5. Karma and stuff&lt;/h2&gt;
&lt;p&gt;&lt;b&gt;I believe in karma&lt;/b&gt;. Don't do evil and all of that. I would really feel uncomfortable if I would take someone else's baby and make it my own. So I won't, because this simply wouldn't be a fair thing to do. I value proper sleep above success.&lt;/p&gt;

&lt;h2&gt;But what if&lt;/h2&gt;
&lt;p&gt;Of course, there are always exceptions, and I can imagine I could encounter something that would go beyond all of my points above. Perhaps there is one idea that I've heard about years ago that would suit this description. If I ever decide to proceed with this project, I will let that person know what I'm doing and invite him to join the project. Even if I'm thinking about a thing that only faintly resembles the original concept, I can't deny it's that person's idea. And since this guy was able to think of such a marvelous thing so much time ago, he would surely make a &lt;b&gt;great addition to the team&lt;/b&gt; (also see reason 3).&lt;/p&gt;

&lt;p&gt;That's it. &lt;b&gt;I won't steal your idea&lt;/b&gt;, so feel free to talk about your revolutionary innovation with me anytime. All I will do is to try to tear it apart and put it back together, and after we're done with that, if I get the chance, I will try to bring it to life.&lt;/p&gt;</description><link>http://stritar.net/Post/Five-reasons-why-I-will-not-steal-your-idea.aspx</link></item><item><title>Using JSON (with asp.net) is like wiping your ass with silk</title><pubDate>Sat, 05 Jan 2013 18:45:44 GMT</pubDate><description>&lt;p&gt;I love &lt;a href="http://stritar.net/Category/Mashups.aspx" class="more" target="_blank" title="Mashups on Stritar's chronolog"&gt;mashups&lt;/a&gt;. Actually, I love everything about them, I love using them, I &lt;a href="http://twenity.com/" class="more" target="_blank" title="Twenity - discover your social capital while competing with your friends"&gt;love making them&lt;/a&gt;, I love those who do everything &lt;a href="http://stritar.net/Post/The-future-of-software-is-in-platforms.aspx" class="more" target="_blank" title="The future (of software) is in platforms"&gt;they can to empower them&lt;/a&gt;. In my opinion, &lt;b&gt;mashups&lt;/b&gt; are one of the most significant concepts &lt;a href="http://stritar.net/Post/The-final-destination-part-1-technologies-and-concepts-enterprise-IT-will-have-to-adopt.aspx" class="more" target="_blank" title="The final destination, part 1: technologies and concepts enterprise IT will have to adopt"&gt; the Web has invented&lt;/a&gt;, since they represent unlimited possibilities of &lt;b&gt;integrating and reshaping&lt;/b&gt; things that are already done. &lt;a href="http://stritar.net/Post/The-future-of-software-is-in-platforms.aspx" class="more" target="_blank" title="The future (of software) is in platforms"&gt;The platforms&lt;/a&gt; out there are stable, so it's the creativity that sets the limits. These days, you can easily &lt;b&gt;take data from anyone and do something else with it&lt;/b&gt;. Just don't forget to use &lt;a href="http://www.json.org/" class="more" target="_blank" title="JSON"&gt;JSON&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I'm an old school guy who has been working mostly in &lt;a href="http://stritar.net/Projects/Neolab.aspx" class="more" target="_blank" title="Neolab on Stritar's chronolog"&gt;enterprise software environments&lt;/a&gt;, which means &lt;b&gt;using XML for data integrations&lt;/b&gt;, besides, &lt;a href="http://en.wikipedia.org/wiki/RSS" class="more" target="_blank" title="RSS"&gt;RSS&lt;/a&gt; used to be the man. The first generation of &lt;a href="http://twenity.com/" class="more" target="_blank" title="Twenity - discover your social capital while competing with your friends"&gt;Twenity&lt;/a&gt; (&lt;a href="http://stritar.net/Projects/Twitfluence.aspx" class="more" target="_blank" title="Twitfluence on Stritar's chronolog"&gt;Twitfluence&lt;/a&gt;) was using &lt;a href="http://stritar.net/Post/Twitfluence_Application_Basic_Technical_Specifications.aspx" class="more" target="_blank" title="Twitfluence application basic technical specifications"&gt;XML feeds&lt;/a&gt;, and &lt;a href="http://stritar.net/Projects/Chronolog.aspx" class="more" target="_blank" title="Stritar's chronolog"&gt;this blog&lt;/a&gt; is using mostly &lt;a href="http://stritar.net/Post/Redesigning_The_Blog_-_Behold_The_Chronolog.aspx" class="more" target="_blank" title="Redesigning the blog - behold the Chronolog"&gt;RSS for fetching entries&lt;/a&gt; from other sources. &lt;a href="http://en.wikipedia.org/wiki/XML" class="more" target="_blank" title="XML"&gt;XML&lt;/a&gt; was the standard we all spoke, &lt;b&gt;very cute and readable&lt;/b&gt;, but on the other hand, &lt;a href="http://stackoverflow.com/questions/9575180/asp-net-parsing-xml" class="more" target="_blank" title="ASP.Net - Parsing XML"&gt;not so easy to parse&lt;/a&gt;. At that time, this fact didn't represent such a major problem, since &lt;b&gt;a few more lines of code&lt;/b&gt; took care of everything. But today is a different situation.&lt;/p&gt;

&lt;p&gt;It was &lt;b&gt;Twitter&lt;/b&gt; who first started &lt;a href="https://dev.twitter.com/docs/api/1.1/overview#JSON_support_only" class="more" target="_blank" title="Overview: Version 1.1 of the Twitter API"&gt;dropping support for XML&lt;/a&gt;, which annoyed the hell out of me. I had to start &lt;b&gt;rewriting things for JSON&lt;/b&gt;. This turned out to be one of the best things that ever happened, since JSON seems to be loved by everyone. It's super &lt;a href="http://api.jquery.com/jQuery.getJSON/" class="more" target="_blank" title="jQuery.getJSON()"&gt;easy to use with jQuery&lt;/a&gt;, but since I'm a server-side type of a guy, it's even more important that it's &lt;b&gt;cleverly integrated into asp.net&lt;/b&gt;. Fetch the data, store it, do crazy shit with it.&lt;/p&gt;

&lt;p&gt;JSON is &lt;b&gt;serializable&lt;/b&gt; into a .net object with a &lt;b&gt;single line of code&lt;/b&gt;. Create the class with parameters compliant with the the specific JSON structure, serialize the response string into that class, and everything &lt;b&gt;automagically works&lt;/b&gt;. Piece of cake, unlimited opportunities. Take &lt;a href="https://twitter.com/gstritar" class="more" target="_blank" title="Grega Stritar (gstritar) on Twitter"&gt;Twitter&lt;/a&gt; for example:&lt;/p&gt;

&lt;p&gt;Make the basic Tweet class:&lt;/p&gt;
&lt;p style="font-family: Courier;"&gt;
 public class Tweet&lt;br&gt;
{&lt;br&gt;
&amp;nbsp;public string &lt;b&gt;id_str&lt;/b&gt;;&lt;br&gt;
&amp;nbsp;public string &lt;b&gt;text&lt;/b&gt;;&lt;br&gt;
}
&lt;/p&gt;

&lt;p&gt;Create the request to access a tweet (funny, the hardest thing to do):&lt;/p&gt;
&lt;p style="font-family: Courier;"&gt;
string url = "http://api.twitter.com/1/statuses/show/274508827146215424.json";&lt;br&gt;
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);&lt;br&gt;
request.Method = "GET";&lt;br&gt;
WebResponse response = request.GetResponse();&lt;br&gt;
StreamReader reader = new StreamReader(response.GetResponseStream());&lt;br&gt;
string jsonResponse = reader.ReadToEnd();&lt;br&gt;
reader.Close();&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;Which will return something like this (&lt;a href="https://dev.twitter.com/console" class="more" target="_blank" title="Exploring the Twitter API | Twitter Developers"&gt;play here&lt;/a&gt;):&lt;/p&gt;
&lt;p style="font-family: Courier;"&gt;
{&lt;br&gt;
&amp;nbsp;"created_at": "Fri Nov 30 13:42:59 +0000 2012",&lt;br&gt;
&amp;nbsp;"&lt;b&gt;id_str&lt;/b&gt;": "274508827146215424",&lt;br&gt;
&amp;nbsp;"&lt;b&gt;text&lt;/b&gt;": ""Facebook knows what we say, Google knows what we think",&lt;br&gt;
&amp;nbsp;"source": "web",&lt;br&gt;
&amp;nbsp;...
&lt;br&gt;
}
&lt;/p&gt;
&lt;p&gt;Serialize the response string into an object:&lt;/p&gt;
&lt;p style="font-family: Courier;"&gt;
JavaScriptSerializer js = new JavaScriptSerializer();&lt;br&gt;
Tweet tweet = new Tweet();&lt;br&gt;
tweet = js.Deserialize&amp;lt;Tweet&amp;gt;(jsonResponse);&lt;br&gt;
Response.Write(tweet.text);&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;Pretty neat. Since I've started using JSON, &lt;b&gt;mashups have become easier than ever to make&lt;/b&gt;. With one of our &lt;a href="http://ljrt.neolab.si/" class="more" target="_blank" title="Ljubljana Realtime"&gt;latest projects&lt;/a&gt;, &lt;a href="http://neolab.si" target="_blank" title="Neolab, software development" class="more"&gt;we&lt;/a&gt;'ve integrated our application with &lt;a href="http://stritar.net/Post/Discover-what-is-happening-in-Ljubljana-in-real-time.aspx" class="more" target="_blank" title="Ljubljana Realtime - discover what's happening in Ljubljana in real-time"&gt;Twitter, Instagram, Foursquare and Flickr&lt;/a&gt;. For breakfast! XML may &lt;a href="http://blog.apigee.com/detail/why_xml_wont_die_xml_vs._json_for_your_api" class="more" target="_blank" title="Why XML won't die: XML vs. JSON for your API"&gt;have its advantages&lt;/a&gt;, but for such things, &lt;b&gt;JSON is simply the greatest&lt;/b&gt;. All hail the new lord!&lt;/p&gt;</description><link>http://stritar.net/Post/Using-JSON-with-asp-net-is-like-wiping-your-ass-with-silk.aspx</link></item><item><title>A case study in agile development: the algorithm for Ljubljana Realtime's event discovery</title><pubDate>Mon, 22 Oct 2012 20:01:16 GMT</pubDate><description>&lt;p&gt;When &lt;a href="http://neolab.si" target="_blank" title="Neolab, software development" class="more"&gt;we&lt;/a&gt; started working on &lt;a href="http://stritar.net/Post/Discover-what-is-happening-in-Ljubljana-in-real-time.aspx" class="more" target="_blank" title="Discover what's happening in Ljubljana in real-time"&gt;Ljubljana Realtime&lt;/a&gt;, we decided to approach it in an &lt;b&gt;agile way&lt;/b&gt;. Amongst others, we wanted to use a few interesting lean concepts such as &lt;a href="http://en.wikipedia.org/wiki/Rapid_application_development" class="more" target="_Blank" title="Rapid application development"&gt;rapid development&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Minimum_viable_product" class="more" target="_blank" title="Minimum viable product"&gt;Minimum Viable Product&lt;/a&gt; and the &lt;a href="http://lean.st/principles/build-measure-learn" class="more" target="_blank" title="The Lean Startup - Build Measure Learn"&gt;Build - Measure - Learn&lt;/a&gt; iterations. Less than two months later, the results are in, and they are very pleasing. The &lt;b&gt;MVP&lt;/b&gt; in the shape of an &lt;a href="http://ljrt.neolab.si/" class="more" target="_blank" title="Ljubljana Realtime"&gt;activity map&lt;/a&gt; was developed in a few weeks, only to show there is a lot of &lt;b&gt;social noise&lt;/b&gt; which will somehow need to be taken under control. But that's currently low priority, since the first &lt;a href="http://www.forbes.com/sites/martinzwilling/2011/09/16/top-10-ways-entrepreneurs-pivot-a-lean-startup/" class="more" target="_blank" title="Top 10 Ways Entrepreneurs Pivot a Lean Startup"&gt;pivot&lt;/a&gt; is already taking place, slowly shifting the focus from the &lt;a href="http://ljrt.neolab.si/" class="more" target="_blank" title="Ljubljana Realtime"&gt;rich map application&lt;/a&gt; towards an &lt;a href="https://twitter.com/LjubljanaRT" class="more" target="_blank" title="Ljubljana Realtime on Twitter"&gt;event discovery algorithm and stream&lt;/a&gt;. That's where I see the &lt;b&gt;most potential&lt;/b&gt; of &lt;a href="https://twitter.com/ljubljanaRT" class="more" target="_blank" title="Ljubljana Realtime on Twitter"&gt;Ljubljana Realtime&lt;/a&gt;, and in the last weeks, that's where the most work was done. &lt;/p&gt;

&lt;p align="center"&gt;&lt;a href="http://ljrt.neolab.si/" class="button2" target="_blank" title="Launch Ljubljana Realtime"&gt;Launch&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://stritar.net/Post/Discover-what-is-happening-in-Ljubljana-in-real-time.aspx" class="more" target="_blank" title="Discover what's happening in Ljubljana in real-time"&gt;Ljubljana Realtime&lt;/a&gt; event discovery engine uses &lt;b&gt;Foursquare&lt;/b&gt; trending venues and geo-tagged posts from &lt;b&gt;Twitter&lt;/b&gt;, &lt;b&gt;Instagram&lt;/b&gt; and &lt;b&gt;Flickr&lt;/b&gt; to discover what's happening in real life. At least &lt;b&gt;6 people checked-in&lt;/b&gt; on Foursquare or &lt;b&gt;two different people tweeting or posting photos&lt;/b&gt; in a single hour could mean something is going on. These events are posted to &lt;a href="https://twitter.com/LjubljanaRT" class="more" target="_blank" title="Ljubljana Realtime on Twitter"&gt;Twitter&lt;/a&gt; and &lt;a href="http://facebook.com/ljubljanaRT" class="more" target="_blank" title="Ljubljana Realtime on Facebook"&gt;Facebook&lt;/a&gt;, with links to the posts. A few versions of this algorithm were already deployed, each one solving new problems, resulting in a few micro &lt;b&gt;Build - Measure - Learn&lt;/b&gt; cycles in a single month.&lt;/p&gt;

&lt;h2&gt;Iteration 1: Foursquare, no duplicates&lt;/h2&gt;
&lt;p&gt;The first version of the &lt;a href="https://twitter.com/LjubljanaRT" class="more" target="_blank" title="Ljubljana Realtime on Twitter"&gt;stream (bot)&lt;/a&gt; was a simple one, at that point it was meant to work as &lt;b&gt;promotion for the map&lt;/b&gt;. The only thing it knew how to do was to wait a few hours until it posted the same thing again. I think Foursquare checkins are alive for &lt;b&gt;three hours&lt;/b&gt;, so if a trending venue was still trending after that time, new people had to checkin and the venue was still buzzing.&lt;/p&gt;
&lt;p&gt;Problem: Plain, &lt;b&gt;no real added value&lt;/b&gt;.&lt;/p&gt;

&lt;h2&gt;Iteration 2: Adding activity from other sources&lt;/h2&gt;
&lt;p&gt;When we were trying to make some space on the &lt;a href="http://ljrt.neolab.si/" class="more" target="_blank" title="Ljubljana Realtime"&gt;crowded map&lt;/a&gt;, we started &lt;b&gt;grouping posts&lt;/b&gt; from Twitter and Instagram by the nearest Foursquare venue, which meant having &lt;b&gt;less boxes on the screen&lt;/b&gt;. This turned out to be quite a complex thing to do properly, but it was worth the effort. On only a few occasions, one venue would have &lt;b&gt;multiple posts&lt;/b&gt; in a single hour, and in most cases, that meant something was happening there. This provided another very interesting potential for the activity stream. Actually, it made the stream bigger than the map could ever be.&lt;/p&gt;
&lt;p&gt;(I love it when such things happen, when you are trying to solve a problem, and it turns out there is much more hidden behind the resolution.)&lt;/p&gt;

&lt;p align="center"&gt;&lt;img src="http://stritar.net/Upload/Images/Ljubljana-Realtime/Ljrt-Event-Athletic-Meeting.gif" alt="Ljubljana Realtime event athletic meeting"&gt;&lt;/p&gt;
&lt;p class="underpicture"&gt;Groupping posts by a venue. Did &lt;a href="https://twitter.com/LjubljanaRT" class="more" target="_blank" title="Ljubljana Realtime on Twitter"&gt;Ljubljana Realtime&lt;/a&gt; just discover an athletic meeting taking place?&lt;/p&gt;


&lt;p&gt;The next problem: Activity in some venues, specially generic ones such as "Ljubljana" would &lt;b&gt;trigger the stream almost every day&lt;/b&gt;. Similarly, some large venues, such as supermarkets, would be &lt;b&gt;trending too many times on Foursquare&lt;/b&gt;.&lt;/p&gt;

&lt;h2&gt;Iteration 3: Balancing the posts&lt;/h2&gt;
&lt;p&gt;The algorithm needed an update, which would &lt;b&gt;lower the amount of times when a venue would be recognized as an event&lt;/b&gt;, either on Foursquare or on other channels. At first I though about an upgrade which would set the amount of people or tweets needed to trigger the "event discovered" action for a specific venue. This would enable us to &lt;b&gt;reduce the importance of some venues&lt;/b&gt;, but it would also require &lt;b&gt;manual work&lt;/b&gt;. Luckily, we came up with another brilliant idea: the more times a venue is trending, the harder it is for it to be trending again, at least for the next few days. &lt;b&gt;Automatic balancing&lt;/b&gt;.&lt;/p&gt;


&lt;p align="center"&gt;&lt;img src="http://stritar.net/Upload/Images/Ljubljana-Realtime/Ljrt-Generic-Venues.gif" alt="Ljubljana Realtime generic venues"&gt;&lt;/p&gt;
&lt;p class="underpicture"&gt;Venues with the most discovered events. Generic ones, besides massive places, such as train stations, cinemas, squares and shopping centers are too dominating.&lt;/p&gt;


&lt;p&gt;The next problem: At this point, we have launched other test instances of &lt;a href="https://twitter.com/ljubljanaRT" class="more" target="_blank" title="Ljubljana Realtime on Twitter"&gt;Ljubljana Realtime&lt;/a&gt; (&lt;a href="https://twitter.com/MariborRT" class="more" target="_blank" title="Maribor Realtime on Twitter"&gt;Maribor&lt;/a&gt;, &lt;a href="https://twitter.com/ZagrebRT" class="more" target="_blank" title="Zagreb Realtime on Twitter"&gt;Zagreb&lt;/a&gt; and &lt;a href="https://twitter.com/ZurichRT" class="more" target="_blank" title="Zurich Realtime on Twitter"&gt;Zurich&lt;/a&gt;), to see how the system behaves in other environments. Some cities are bigger, some are smaller, which means they produce &lt;b&gt;different amount of activity&lt;/b&gt;. Besides, &lt;b&gt;different services are used differently&lt;/b&gt; in different cultures.&lt;/p&gt;

&lt;h2&gt;Iteration 4: Supporting local instances&lt;/h2&gt;
&lt;p&gt;Foursquare is big in Croatia (&lt;a href="http://zgrt.neolab.si" class="more" target="_blank" title="Zagreb Realtime"&gt;Zagreb&lt;/a&gt;), but not so much in Switzerland (&lt;a href="http://zhrt.neolab.si" class="more" target="_blank" title="Zurich Realtime"&gt;Zurich&lt;/a&gt;), which means Zagreb Realtime's stream had a lot of Foursquare trending posts, while Zurich's had a lot of "Increased activity on Twitter and Instagram" posts. It was obvious that &lt;b&gt;local instances needed different algorithms&lt;/b&gt;. While having an option to set the &lt;b&gt;amounts which would trigger the post&lt;/b&gt; on a specific venue would be too much to moderate, having the same logic on a specific region could work. And it does. &lt;a href="https://twitter.com/ZagrebRT" class="more" target="_blank" title="Zagreb Realtime on Twitter"&gt;Zagreb&lt;/a&gt; now needs &lt;b&gt;more people checked-in on Foursquare&lt;/b&gt;, while &lt;a href="https://twitter.com/ZurichRT" class="more" target="_blank" title="Zurich Realtime on Twitter"&gt;Zurich&lt;/a&gt; needs &lt;b&gt;more unique people tweeting or sharing photos&lt;/b&gt;.&lt;/p&gt;

&lt;p align="center"&gt;&lt;img src="http://stritar.net/Upload/Images/Ljubljana-Realtime/Ljrt-Too-Many-Trending-Events.gif" alt="Ljubljana Realtime too many trending venues"&gt;&lt;/p&gt;
&lt;p class="underpicture"&gt;Number of discovered events by type (Foursquare vs. Twitter + Instagram) on each day. Foursquare trending venues are dominating Zagreb, while social streams are dominating Zurich Realtime.&lt;/p&gt;

&lt;p&gt;The next problem: The basic algorithm requires two different people to tweet/post from the same location in one hour. In case of &lt;a href="https://twitter.com/ZurichRT" class="more" target="_blank" title="Zurich Realtime on Twitter"&gt;Zurich&lt;/a&gt;, this amount was set to three, but it turns out this situation happens rarely, around &lt;b&gt;10 times fewer than with two people&lt;/b&gt;, or only two to three times a day. Obviously not enough.&lt;/p&gt;

&lt;h2&gt;Iteration 5: Improving the "increased activity" weight&lt;/h2&gt;
&lt;p&gt;You can only have a &lt;b&gt;whole amount of people tweeting&lt;/b&gt; in the past hour. Two or three. In our case, we needed something in the range of 2 1/2. The modified solution adds the number of posts divided by ten to the number of users, which means that currently, at &lt;b&gt;least two people making at least three posts&lt;/b&gt; in an hour will determine a trending event in Zurich. This is not a perfect solution from the event discovery view, but it does what urgently needed to be done: &lt;b&gt;prevent having too many tweets&lt;/b&gt; in the stream.&lt;/p&gt;
&lt;p&gt;The next problem: we currently have four Twitter accounts that &lt;a href="https://twitter.com/neolab_si/realtime" class="more" target="_blank" title="@neolab_si/Realtime on Twitter"&gt;tweet events for these four cities&lt;/a&gt;. Our target was for each of them to make around 10 - 15 tweets a day, which seems like a number that is not spam. But how can a person see which of these events is &lt;b&gt;THE event&lt;/b&gt;?&lt;/p&gt;

&lt;h2&gt;Iteration 6: Going super venue level 2&lt;/h2&gt;
&lt;p&gt;The latest version of the algorithm now recognizes &lt;b&gt;two levels of events&lt;/b&gt;. An event (mostly 6 people on Foursquare, mostly 2 different people tweeting), and an outstanding event (around 12 people on Foursquare, around 4 people tweeting). Our goal was to make this super event happen only &lt;b&gt;once a few days&lt;/b&gt;, on rare occasions two times per day, and it has already happened a few times. &lt;/p&gt;

&lt;p align="center"&gt;&lt;img src="http://stritar.net/Upload/Images/Ljubljana-Realtime/Ljrt-Super-Event-Philips-Fashion-Week-Kino-Siska.jpg" alt="Ljubljana Realtime super event for Philips Fashion Week in Kino Šiška"&gt;&lt;/p&gt;
&lt;p class="underpicture"&gt;Sometimes super events happen, with tens of posts in a single hour, such as the one for &lt;a href="http://www.elle.si/fashionweek/" class="more" target="_blank" title="Philips Fashion Week - Elle.si"&gt;Philips Fashion week&lt;/a&gt;. These events definitely require more exposure.&lt;/p&gt;

&lt;h2&gt;The next iterations&lt;/h2&gt;
&lt;p&gt;At this point, I'm very satisfied with how the algorithm works, even though a few other modifications need to be done (specially to support different days of week specifics and behavior). By &lt;b&gt;measuring&lt;/b&gt; what is happening, &lt;b&gt;learning&lt;/b&gt; from that information and &lt;b&gt;building&lt;/b&gt; the next releases based on that knowledge, the activity stream logic has come a long way from the initial version. Measuring is crucial, and rarely we have went to such extent to enable this in the widest way possible (e.g. the update to balancing the posts based on the previous events would be trivial by itself, but we wanted to log things that would happen but didn't happen, besides things that actually happened). &lt;/p&gt;

&lt;p&gt;These cycles of &lt;b&gt;Build - Measure - Learn&lt;/b&gt; can be a lot &lt;b&gt;hard work&lt;/b&gt;, but they provide &lt;b&gt;great results&lt;/b&gt;, which are also very fun and rewarding. Some people simply need to see how deep the rabbit hole is. Do you have any other interesting cases or experience with this approach?&lt;/p&gt;</description><link>http://stritar.net/Post/A-case-study-in-agile-development-the-algorithm-for-Ljubljana-Realtime-s-event-discovery.aspx</link></item><item><title>Discover what's happening in Ljubljana in real-time</title><pubDate>Fri, 28 Sep 2012 13:37:29 GMT</pubDate><description>&lt;p&gt;I've always been a big fan of the &lt;b&gt;power of the crowds&lt;/b&gt;. When a mass of people can &lt;a href="http://stritar.net/Post/Supporting-Events-On-Twitter-How-Pop-TV-And-Soocenje-Owned-The-Slovenian-Twitterverse.aspx" class="more" target="_blank" title="Supporting events on Twitter: how Pop TV and Soočenje owned the Slovenian Twitterverse"&gt;achieve much more&lt;/a&gt; than a few skilled individuals can. And ever since we've started &lt;a href="http://stritar.net/Projects/Twitfluence.aspx" class="more" target="_blank" title="Twitfluence"&gt;playing with Twitter's API&lt;/a&gt;, I've been think about the possibilities of this magnificent &lt;a href="http://www.mediabistro.com/alltwitter/twitter-400-million-tweets_b23744" class="more" target="_blank" title="Twitter Now Seeing 400 Million Tweets Per Day, Increased Mobile Ad Revenue, Says CEO"&gt;data source&lt;/a&gt;. Besides &lt;a href="http://twenity.com/" class="more" target="_blank" title="Twenity - discover your social capital while competing with your friends"&gt;Twenity&lt;/a&gt;, we've done a few other &lt;a href="http://twitter.com/gstritar" target="_blank" title="Grega Stritar on Twitter"&gt;Twitter&lt;/a&gt; mashups like &lt;a href="http://kcs.neolab.si/" class="more" target="_blank" title="#saveKCS on Twitter"&gt;Twitter walls&lt;/a&gt;, but this wasn't enough. We wanted something more - &lt;b&gt;geolocation&lt;/b&gt;. Displaying information on a map in &lt;b&gt;real-time&lt;/b&gt;. But since there aren't that many tweets equipped with GPS coordinates, we needed to include other services for more diversity as well. Which we did, and &lt;a href="http://ljrt.neolab.si/" class="more" target="_blank" title="Ljubljana Realtime"&gt;Ljubljana Realtime&lt;/a&gt;, a &lt;b&gt;social event discovery application&lt;/b&gt;, was born.&lt;/p&gt;

&lt;p align="center"&gt;&lt;a href="http://ljrt.neolab.si/" class="button2" target="_blank" title="Launch Ljubljana Realtime"&gt;Launch&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;Data and services&lt;/h2&gt;
&lt;p&gt;&lt;a href="http://ljrt.neolab.si/" class="more" target="_blank" title="Ljubljana Realtime"&gt;Ljubljana Realtime&lt;/a&gt; currently feeds on four different services: &lt;b&gt;Twitter&lt;/b&gt;, &lt;b&gt;Foursquare&lt;/b&gt;, &lt;b&gt;Instagram&lt;/b&gt; and &lt;b&gt;Flickr&lt;/b&gt;. It would be great if we could add other services as well, but Facebook doesn't allow public geo search, Google+ doesn't support geo search at all, and other services either aren't appropriate or don't offer an API which would allow us to get their data.&lt;/p&gt;





&lt;p&gt;These four services are visited &lt;b&gt;once a minute&lt;/b&gt;, and all posts in a radius of around 5km from &lt;a href="http://www.ljubljana.si/" class="more" target="_blank" title="Ljubljana"&gt;Ljubljana&lt;/a&gt; city center are found: tweets, Foursquare trending venues, pictures from Instagram and Flickr. A &lt;b&gt;variety of information created&lt;/b&gt; with different purposes on different occasions. &lt;/p&gt;

&lt;br&gt;
&lt;img src="http://stritar.net/Upload/Images/Ljubljana-Realtime/Ljubljana-Realtime-Radar.jpg" alt="Ljubljana Realtime radar"&gt;
&lt;p class="underpicture"&gt;The area covered by Ljubljana Realtime. Different services require different searches, based on maximum allowed radius.&lt;/p&gt;

&lt;h2&gt;The application&lt;/h2&gt;
&lt;p&gt;These posts are &lt;a href="http://ljrt.neolab.si/" class="more" target="_blank" title="Ljubljana Realtime"&gt;displayed on a map&lt;/a&gt;, which was the original idea for the prototype. The &lt;b&gt;last hours of posts&lt;/b&gt; on Google Maps, which can be zoomed and filtered at will. But the whole display felt a bit chaotic (still does), since there are &lt;b&gt;many posts in vicinity of one another&lt;/b&gt;. That's why we knew we need to group similar posts, and we did this by the post's nearest Foursquare venue. Then a funny thing happened: this simple solution enabled something magnificent, something that could be &lt;b&gt;much bigger&lt;/b&gt; than the whole posts-on-a-map application.&lt;/p&gt;

&lt;p&gt;Anyways, since geo location is heavily connected with &lt;b&gt;mobile devices&lt;/b&gt;, the application is &lt;a href="http://en.wikipedia.org/wiki/Responsive_Web_Design" class="more" target="_blank" title="Responsive web design"&gt;responsive&lt;/a&gt; and fully compatible with most smartphones. Perhaps there will be native apps as well at one point.&lt;/p&gt;

&lt;h2&gt;The stream&lt;/h2&gt;
&lt;p&gt;Back to the magnificent. Originally, a &lt;b&gt;Twitter bot&lt;/b&gt; was intended to come with the application (&lt;a href="http://stritar.net/Post/I-Have-Developed-A-Magazine-Based-On-My-Delicious-Bookmarks-And-A-Twitter-Bot.aspx" class="more" target="_blank" title="I've developed a magazine based on my Delicious bookmarks. And a Twitter bot."&gt;I love making those&lt;/a&gt;), which would tweet all trending foursquare venues to promote the application. But this seemed a bit lame, we needed to add &lt;b&gt;something cooler&lt;/b&gt;. Something that would add more value and detect an event &lt;b&gt;before a 4sq trending venue would happen&lt;/b&gt;. This is where the mentioned grouping of posts by venue came in handy, and the logic is as follows: if &lt;b&gt;two or more people publish form the same venue in a single hour&lt;/b&gt;, this could very well mean something's happening there. And in most occasions, this turned out to be true. Read further for more details.&lt;/p&gt;


&lt;p align="center"&gt;&lt;img src="http://stritar.net/Upload/Images/Ljubljana-Realtime/Ljubljana-Realtime-Tweets.gif" alt="Ljubljana Realtime tweets"&gt;&lt;/p&gt;
&lt;p class="underpicture"&gt;Discovering an event before a trending venue on Foursquare.&lt;/p&gt;

&lt;p&gt;The event discovery stream is available on &lt;a href="http://twitter.com/LjubljanaRT" title="Ljubljana Realtime on Twitter" target="_blank" class="more"&gt;Twitter&lt;/a&gt; and &lt;a href="http://facebook.com/LjubljanaRT" title="Ljubljana Realtime on Facebook" target="_blank" class="more"&gt;Facebook&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;The problems&lt;/h2&gt;
&lt;p&gt;&lt;b&gt;Besides unstable APIs&lt;/b&gt;, the biggest problem we are currently facing is the geolocation itself. GPS chips in mobile phones are often &lt;b&gt;not accurate enough&lt;/b&gt;, so people are located tens or hundreds of meters from their actual location. Combine that with the &lt;b&gt;amount of Foursquare venues&lt;/b&gt; out there (imagine tall buildings), and you can understand Ljubljana Realtime sometimes has problems with connecting a post to a venue. Not to mention duplicated venues. We've eliminated some of this effect by only using venues with a certain amount of checkins and different users, but this will surely be the greatest challenge the project is facing in the future.&lt;/p&gt;

&lt;p align="center"&gt;&lt;img src="http://stritar.net/Upload/Images/Ljubljana-Realtime/Ljubljana-Realtime-Fail.jpg" alt="Ljubljana Realtime failed discoveries"&gt;&lt;/p&gt;
&lt;p class="underpicture"&gt;An event which is not.&lt;/p&gt;


&lt;h2&gt;The results&lt;/h2&gt;
&lt;p&gt;Problems aside, in most cases, &lt;a href="http://twitter.com/LjubljanaRT" title="Ljubljana Realtime on Twitter" target="_blank" class="more"&gt;Ljubljana Realtime event discovery&lt;/a&gt; works great. In a week or so since it's online, it discovered many events that were happening in Ljubljana (night run to the Castle, an athletic meeting, one of the first iPhones 5 in Slovenia, a public garage sale in park Tabor, etc.), and on many occasions, it discovered these events before a trending venue happened on Foursquare. Which is great. The &lt;b&gt;potential is obviously there&lt;/b&gt;, and newer, improved versions and algorithms will surely behave even better.&lt;/p&gt;

&lt;p align="center"&gt;&lt;img src="http://stritar.net/Upload/Images/Ljubljana-Realtime/Ljubljana-Realtime-Discoveries.jpg" alt="Ljubljana Realtime discoveries"&gt;&lt;/p&gt;
&lt;p class="underpicture"&gt;A few of the great discoveries Ljubljana Realtime made.&lt;/p&gt;

&lt;h2&gt;The plans&lt;/h2&gt;
&lt;p&gt;This project is being developed in an &lt;a href="http://en.wikipedia.org/wiki/Agile_software_development" class="more" target="_blank" title="Agile software development"&gt;agile way&lt;/a&gt;, where the application's behavior is constantly being monitored and changes deployed rapidly according to discovered strengths and weaknesses. The MVP (&lt;a href="http://en.wikipedia.org/wiki/Minimum_viable_product" class="more" target="_blank" title="Minimum viable product"&gt;minimum viable product&lt;/a&gt;) is there, and with a few minor modifications, Ljubljana Realtime will soon be ready to expand to other cities and regions. Now it's up to you to &lt;b&gt;help us&lt;/b&gt;, and it's pretty simple. When something magical is happening on and you are &lt;b&gt;tweeting about it anyways&lt;/b&gt;, be a sport and click the arrow to &lt;a href="https://support.twitter.com/articles/118492" class="more" target="_blank" title="How to Use the Location Feature on Mobile Devices"&gt;include your geolocation&lt;/a&gt; in the tweet. By doing this, you will help others to discover what's going on in our beautiful city.&lt;/p&gt;

&lt;p&gt;That's it for now, party on.&lt;/p&gt;

&lt;p&gt;p.s. for all the Slovenians out there: the coordinates embedded in a tweet are pretty accurate even though Twitter will say &lt;b&gt;you are in Italy&lt;/b&gt;. If you look at the picture of the map below the tweet, there's a polygon around Italy which sadly contains Slovenia as well. Hopefully, Twitter will remove bug someday.&lt;/p&gt;</description><link>http://stritar.net/Post/Discover-what-is-happening-in-Ljubljana-in-real-time.aspx</link></item></channel></rss>