tag:blogger.com,1999:blog-88476096131627921642024-02-07T13:57:57.246-08:00Oded H. BreinerToo many ideas, so little timeOdedhttp://www.blogger.com/profile/00914055567862922187noreply@blogger.comBlogger87125tag:blogger.com,1999:blog-8847609613162792164.post-78177124500001410722019-07-14T23:39:00.000-07:002019-07-14T23:39:23.872-07:00What is null?Your friend points you to a room and tells you there's a box there with marbles.<br />
<br />
a box with 5 marbles is "5"<br />
a box with no marbles is "empty" or "0"<br />
no box at all is "null"Odedhttp://www.blogger.com/profile/00914055567862922187noreply@blogger.com0tag:blogger.com,1999:blog-8847609613162792164.post-18993802419296263532014-12-31T03:00:00.000-08:002014-12-31T03:02:23.794-08:00Approximate string matching cheat sheet<div>
<ol>
<li><b>Levenshtein distance</b> : if the pattern is coil, foil differs by one substitution, coils by one insertion, oil by one deletion, and foal by two substitutions.</li>
<li><b>Damerau–Levenshtein distance</b> : Like Levenshtein but including transpositions among its allowable operations.</li>
<li><b>Jaro–Winkler distance</b> : designed and best suited for short strings such as person names.</li>
<li><b>Smith–Waterman algorithm</b> : performs local sequence alignment for determining similar regions between two strings, instead of looking at the total sequence.</li>
<li><b>Needleman–Wunsch algorithm</b> : divides a large sequence into a series of smaller problems and uses the solutions to the smaller problems to reconstruct a solution to the larger problem.</li>
<li><b>Soundex</b> : a phonetic algorithm for indexing names by sound, as pronounced in English.</li>
<li><b>Metaphone</b> : improves on Soundex by using variations and inconsistencies in English spelling and pronunciation.</li>
</ol>
<div>
<br /></div>
</div>
<div>
<a href="http://en.wikipedia.org/wiki/Levenshtein_distance#See_also" target="_blank">more</a></div>
Odedhttp://www.blogger.com/profile/00914055567862922187noreply@blogger.com0tag:blogger.com,1999:blog-8847609613162792164.post-78715790775451259992014-12-23T01:39:00.002-08:002014-12-23T01:44:06.453-08:00A note to designers<br />
<ul>
<li>Your job is to make things simpler, not cooler.</li>
<li>Restrain the product people from adding unnecessary features.</li>
<li>Save time for the engineering team, not make their lives harder.</li>
<li>Make sure that <a href="http://en.wikipedia.org/wiki/Form_follows_function" target="_blank">form follows function</a>.</li>
</ul>
Odedhttp://www.blogger.com/profile/00914055567862922187noreply@blogger.com0tag:blogger.com,1999:blog-8847609613162792164.post-54954905598362440292014-12-15T04:38:00.001-08:002014-12-15T04:38:43.321-08:00Forgive the early adopterThis is a letter to my friends and my colleagues.<br />
I'm truly asking your forgiveness.<br />
Forgive me for switching between messaging apps every few weeks.<br />
Forgive me for forcing you to use my unfinished apps and services.<br />
Forgive me for being mad at you when you buy the "wrong" phone, laptop or TV set.<br />
Forgive the early adopter in me :-)<br />
<br />
I really appreciate the fact that you're willing to go through all the beta phases and stick with it.<br />
Your devotion will not be overlooked when our robot overlords take over us and appoint me as one of their liaisons.Odedhttp://www.blogger.com/profile/00914055567862922187noreply@blogger.com0tag:blogger.com,1999:blog-8847609613162792164.post-80161894161070921492014-08-20T18:02:00.000-07:002014-12-06T01:56:46.115-08:00Stop Complexity InsanityWhatever you're doing, stop, breath, and listen to these folks:<br />
<br />
<br />
<ul>
<li><a href="http://en.wikipedia.org/wiki/Isaac_Newton" target="_blank">Isaac Newton</a> - "Nature is pleased with simplicity. And nature is no dummy"</li>
<li><a href="http://en.wikipedia.org/wiki/Leonardo_da_Vinci" target="_blank">Leonardo da Vinci</a> - "Simplicity is the ultimate sophistication"</li>
<li><a href="http://en.wikipedia.org/wiki/Antoine_de_Saint-Exup%C3%A9ry" target="_blank">Antoine de Saint Exupéry</a> - "Perfection is attained, not when there is nothing more to add, but when there is nothing more to take away."</li>
<li><a href="http://biblehub.com/1_corinthians/14-33.htm" target="_blank">1 Corinthians 14:33</a> - For God is not a God of confusion but of peace. As in all the churches of the saints.</li>
<li><a href="http://en.wikipedia.org/wiki/Bruce_Lee" target="_blank">Bruce Lee</a> - "It is not a daily increase, but a daily decrease. Hack away at the inessentials."</li>
<li><a href="https://www.linkedin.com/in/odedhb" target="_blank">Oded H. Breiner</a> - "Remove to Improve."</li>
</ul>
Odedhttp://www.blogger.com/profile/00914055567862922187noreply@blogger.com0tag:blogger.com,1999:blog-8847609613162792164.post-2515116531413607532014-05-16T10:38:00.000-07:002014-05-16T10:38:58.818-07:00Apprenticeship-based education system<br />
<ul>
<li>Each person will be allowed to choose his "master" and be his apprentice (e.g. a high school student can choose an experienced software developer as a "master").</li>
<li>In exchange for education, the master will get cheap labour (e.g. manual QA, or even personal help like cleaning).</li>
<li>Down to this point, it is very similar to the apprenticeship model that was common in the <a href="http://en.wikipedia.org/wiki/Apprenticeship#Development" target="_blank">later Middle Ages</a> and came to be supervised by craft guilds and town governments.</li>
<li>Here's the difference: back then, a master had high motivation to make his apprentice a good craftsman because he would often get him to work for him later on. Today, this model is rare because of the wide volatility in workplaces, and because of big companies.</li>
<li>So as an extra incentive, masters should get a cut of their apprentice's wage for a few years after the apprenticeship is over, but only if a certain wage level is achieved.</li>
<li>Benefits</li>
<ul>
<li>Cheaper education to be paid by students in the future and only if their education was successful.</li>
<li>Higher quality education achieved by one-on-one sessions.</li>
</ul>
<li>Dangers</li>
<ul>
<li>Misuse of students by charlatans.</li>
<li>Hard to measure quality of teachers (masters).</li>
</ul>
<li>Solutions to dangers</li>
<ul>
<li>A rating system measured by the amount of money transferred from graduates to masters.</li>
<li>The more money that is transferred, the better was the education because the apprentice earns more.</li>
</ul>
</ul>
Odedhttp://www.blogger.com/profile/00914055567862922187noreply@blogger.com0tag:blogger.com,1999:blog-8847609613162792164.post-84158624314943200012014-03-20T13:24:00.001-07:002014-03-20T13:24:57.428-07:00Android wear SDK impressions<p dir="ltr">Android <u>wear</u> is extremely tied to intents and notifications. </p>
<p dir="ltr">Everything is managed using NotificationCompat API. If an app has standard notifications they will appear in the watch, and all the buttons in the notification will be available in the watch.</p>
<p dir="ltr">Everything in the watch has to be pro-active, besides apps that can register to a closed set of voice intents.</p>
<p dir="ltr">It has a few of interesting tweaks to notifications: <br>
1. You can add a button to a notification that sends voice2text into the app. <br>
2. You can stack multiple notifications.<br>
3. Notifications can have pages for added data. <br>
4. Notifications can have an image background.</p>
Odedhttp://www.blogger.com/profile/00914055567862922187noreply@blogger.com0tag:blogger.com,1999:blog-8847609613162792164.post-55791511367670094362013-10-09T11:02:00.002-07:002013-10-09T11:19:52.469-07:00why Android's search bar is dumb<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg5qaOiYzHtN6elEeFSEpYjD7Y5NQ-Nq93UbyTMu7aOkPgEaQTDO5Spwl4y3uFb5R_i77kcBgYfvogfaqGRqHgjOK_mpF1hzwvqHldIcGje__jXiTzP_oCYaaHAGumtHoq1VCTodjDGut8/s1600/useless-google-search-bar.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="260" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg5qaOiYzHtN6elEeFSEpYjD7Y5NQ-Nq93UbyTMu7aOkPgEaQTDO5Spwl4y3uFb5R_i77kcBgYfvogfaqGRqHgjOK_mpF1hzwvqHldIcGje__jXiTzP_oCYaaHAGumtHoq1VCTodjDGut8/s400/useless-google-search-bar.jpg" width="400" /></a></div>
<br />
Pardon the rant but...<br />
<b>Google's idea of a search bar is pretty darn useless.</b><br />
A search bar is supposed to be ready for text input the second you touch it.<br />
<br />
But no! it is too complicated for all-mighty G to create such a simple thing.<br />
Instead, when you touch that widget up there, it just opens the search app!<br />
Why waste so much space for what is essentially just a fucking icon!?!?!?<br />
<br />
I've been waiting on Google for 3 years to fix this, but now I'm putting my foot down!<br />
<br />
Google - you don't want to fix this?<br />
I'll fix it myself!<br />
<br />
<b>Hello mrQuery</b><br />
<a href="https://play.google.com/store/apps/details?id=mrquery.oded.us" target="_blank">mrQuery</a> is a home button replacement that takes the solution to this problem to the next level.<br />
When you set mrQuery as your launcher it makes your android act like it's on cocaine.<br />
<br />
<ul>
<li>Tap the home button, and get the keyboard open right away, start keying a name of an app and it launches immediately.</li>
<li>Access your favorite contacts and various system settings from the same box.</li>
<li>Every app you launch is added to a small "history" view above the search-bar for even faster access.</li>
</ul>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQT6TOTTMa7ndAerecQP_aAs7ZitgVfePQFNpX-dytcTb6Ctcf_qqtc1i4ewmImFbOcIesJPyegBhRzZ0T4cbkNTfwykudfaaensfayIL57W5ZnzCnEGpD3v0uaO9ttHoPGSr6-eqcRwM/s1600/z.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQT6TOTTMa7ndAerecQP_aAs7ZitgVfePQFNpX-dytcTb6Ctcf_qqtc1i4ewmImFbOcIesJPyegBhRzZ0T4cbkNTfwykudfaaensfayIL57W5ZnzCnEGpD3v0uaO9ttHoPGSr6-eqcRwM/s320/z.PNG" width="192" /></a></div>
<br />
<br />
Check it out on the <a href="https://play.google.com/store/apps/details?id=mrquery.oded.us">play store</a>.Odedhttp://www.blogger.com/profile/00914055567862922187noreply@blogger.com0tag:blogger.com,1999:blog-8847609613162792164.post-66845207893705809082013-06-03T04:43:00.002-07:002013-06-03T04:43:12.066-07:00FAIL entrepreneurship<b>F.A.I.L</b> entrepreneurship:<br />
<br /><b>F</b><span style="font-weight: normal;">ail</span><br />
<b>A</b><span style="font-weight: normal;">nalyse</span><br />
<b>I</b><span style="font-weight: normal;">terate</span><br />
<b>L</b><span style="font-weight: normal;">earn</span><br />
<h4>
<br /></h4>
<h4>
Fail<br /><span style="font-weight: normal;">As soon as you can, you are nothing without failures, they are the fuel for everything: motivation, learning and change. <a href="http://www.avc.com/a_vc/2009/09/failure.html">more...</a></span><br />
<br /></h4>
<h4>
Analyse<br /><span style="font-weight: normal;">Analyse! Analyse! Analyse! set sensors on every possible data and decision point, every user click, tap and interaction. <a href="http://www.startuplessonslearned.com/2008/09/one-line-split-test-or-how-to-ab-all.html">more...</a></span></h4>
<div>
<br /></div>
<h4>
Iterate<br /><span style="font-weight: normal;">Repeat and try again, get into the FAIL loop, do the shortest iterations possible, every time you do a long iteration it's like running with your eyes closed. You have to zoom-out and re-iterate. <a href="http://www.nytimes.com/2010/06/13/magazine/13FOB-onlanguage-t.html?_r=0">more...</a></span></h4>
<br />
<h4>
Learn<br /><span style="font-weight: normal;">From your analysis and failures, commit to learning ahead of time. "If we fail at this, we learn that". <a href="http://lean.st/principles/validated-learning">more...</a></span></h4>
Odedhttp://www.blogger.com/profile/00914055567862922187noreply@blogger.com0tag:blogger.com,1999:blog-8847609613162792164.post-37707298518221976322013-05-30T14:18:00.001-07:002013-06-03T04:03:50.900-07:00Adding a jar to Android StudioShould be pretty simple right?<br />
Well, the UI doesn't support it right now but it is pretty simple to handle manually, so you'll have to open your build.gradle file that should be in:<br />
/projectName/<br />
<br />
And add the following:<br />
dependencies {<br />
compile files('libs/jarFileName.jar')<br />
}<br />
<br />
<br />
<h4>
Example:</h4>
buildscript {<br />
repositories {<br />
maven { url 'http://repo1.maven.org/maven2' }<br />
}<br />
dependencies {<br />
classpath 'com.android.tools.build:gradle:0.4'<br />
}<br />
}<br />
apply plugin: 'android'<br />
<br />
<b>dependencies {</b><br />
<b> compile files('libs/android-support-v4.jar')</b><br />
<b> compile files('libs/MixpanelAPI.jar')</b><br />
<b>}</b><br />
<br />
android {<br />
compileSdkVersion 17<br />
buildToolsVersion "17.0.0"<br />
<br />
defaultConfig {<br />
minSdkVersion 14<br />
targetSdkVersion 16<br />
}<br />
}<br />
<div>
<br /></div>
Odedhttp://www.blogger.com/profile/00914055567862922187noreply@blogger.com0tag:blogger.com,1999:blog-8847609613162792164.post-54220383282838346132013-05-30T05:25:00.005-07:002014-04-05T00:19:42.963-07:00Android layout shadow without 9 patchApplying shadows to android layouts without using a 9-patch on <b>android 4.3 and below! (4.4 changed toast design)</b><br />
<br />
Using a 9-patch is (sometimes) too much of a pain in the buttocks, when all you want is just a simple shadow, CSS has it, so why doesn't android??? Grrrrr...!<br />
<br />
I found a hack.<br />
<br />
While working on <a href="https://play.google.com/store/apps/details?id=mrquery.oded.us" target="_blank">Mr.Query</a>, I was looking for a built-in android icon because I was too <a href="https://twitter.com/intent/tweet?in_reply_to=340071173096366081" target="_blank">lazy</a> to design a new one.<br />
<br />
Then, I stumbled upon:<br />
<span style="color: #0b5394;">android:background=</span><span style="color: #38761d;">"@android:drawable/toast_frame"</span><br />
<br />
<span style="color: #0b5394;">android:background=</span><span style="color: #38761d;">"@android:drawable/dialog_frame"</span><br />
<br />
<br />
<div><br />
</div><div>I tried it on a few different layouts and buttons, and it's not bad!</div><div><br />
</div><div>Here are a few examples:</div><div><br />
</div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_8_jEvW97ZTKLKDOVYAOKUsi0dUEOsgal9i_k-sWhh88jegspP_q0H9u0zidXu-cfIsBq29cooGWONg7sKS0jU1t-ugAdkWHuQUyPPtKwOx-lz-rvWEpvJCCmkAnl64C6tT_P7brtvQU/s1600/Screen+Shot+2013-05-30+at+3.09.06+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_8_jEvW97ZTKLKDOVYAOKUsi0dUEOsgal9i_k-sWhh88jegspP_q0H9u0zidXu-cfIsBq29cooGWONg7sKS0jU1t-ugAdkWHuQUyPPtKwOx-lz-rvWEpvJCCmkAnl64C6tT_P7brtvQU/s320/Screen+Shot+2013-05-30+at+3.09.06+PM.png" height="320" width="262" /></a></div><div class="separator" style="clear: both; text-align: center;"><br />
</div><div><div><div></div></div></div><br />
<!-- HTML generated using hilite.me --><br />
<div style="background: #ffffff; border-width: .1em .1em .1em .8em; border: solid gray; overflow: auto; padding: .2em .6em; width: auto;"><pre style="line-height: 125%; margin: 0;"><span style="color: #007000;"><TextView</span>
<span style="color: #0000c0;">android:layout_width=</span><span style="background-color: #fff0f0;">"fill_parent"</span>
<span style="color: #0000c0;">android:text=</span><span style="background-color: #fff0f0;">"I am a simple textview with a shadow"</span>
<span style="color: #0000c0;">android:layout_height=</span><span style="background-color: #fff0f0;">"wrap_content"</span>
<span style="color: #0000c0;">android:textSize=</span><span style="background-color: #fff0f0;">"18sp"</span>
<span style="color: #0000c0;">android:padding=</span><span style="background-color: #fff0f0;">"16dp"</span>
<span style="color: #0000c0;">android:textColor=</span><span style="background-color: #fff0f0;">"#fff"</span>
<span style="color: #0000c0;">android:background=</span><span style="background-color: #fff0f0;">"@android:drawable/toast_frame"</span>
<span style="color: #007000;">/></span>
<span style="color: #007000;"><LinearLayout</span>
<span style="color: #0000c0;">android:layout_height=</span><span style="background-color: #fff0f0;">"64dp"</span>
<span style="color: #0000c0;">android:layout_width=</span><span style="background-color: #fff0f0;">"fill_parent"</span>
<span style="color: #0000c0;">android:gravity=</span><span style="background-color: #fff0f0;">"center"</span>
<span style="color: #0000c0;">android:background=</span><span style="background-color: #fff0f0;">"@android:drawable/toast_frame"</span>
<span style="color: #0000c0;">android:padding=</span><span style="background-color: #fff0f0;">"4dp"</span>
<span style="color: #007000;">></span>
<span style="color: #007000;"><Button</span>
<span style="color: #0000c0;">android:layout_width=</span><span style="background-color: #fff0f0;">"fill_parent"</span>
<span style="color: #0000c0;">android:layout_height=</span><span style="background-color: #fff0f0;">"fill_parent"</span>
<span style="color: #0000c0;">android:text=</span><span style="background-color: #fff0f0;">"Button shadow"</span>
<span style="color: #0000c0;">android:background=</span><span style="background-color: #fff0f0;">"#33b5e5"</span>
<span style="color: #0000c0;">android:textSize=</span><span style="background-color: #fff0f0;">"24sp"</span>
<span style="color: #0000c0;">android:textStyle=</span><span style="background-color: #fff0f0;">"bold"</span>
<span style="color: #0000c0;">android:textColor=</span><span style="background-color: #fff0f0;">"#fff"</span>
<span style="color: #0000c0;">android:layout_gravity=</span><span style="background-color: #fff0f0;">"center|bottom"</span>
<span style="color: #007000;">/></span>
<span style="color: #007000;"></LinearLayout></span>
<span style="color: #007000;"><LinearLayout</span>
<span style="color: #0000c0;">android:layout_height=</span><span style="background-color: #fff0f0;">"64dp"</span>
<span style="color: #0000c0;">android:layout_width=</span><span style="background-color: #fff0f0;">"fill_parent"</span>
<span style="color: #0000c0;">android:gravity=</span><span style="background-color: #fff0f0;">"center"</span>
<span style="color: #0000c0;">android:background=</span><span style="background-color: #fff0f0;">"@android:drawable/toast_frame"</span>
<span style="color: #0000c0;">android:padding=</span><span style="background-color: #fff0f0;">"4dp"</span>
<span style="color: #007000;">></span>
<span style="color: #007000;"><TextView</span>
<span style="color: #0000c0;">android:layout_width=</span><span style="background-color: #fff0f0;">"fill_parent"</span>
<span style="color: #0000c0;">android:layout_height=</span><span style="background-color: #fff0f0;">"fill_parent"</span>
<span style="color: #0000c0;">android:text=</span><span style="background-color: #fff0f0;">"color textView with LinearLayout shadow"</span>
<span style="color: #0000c0;">android:background=</span><span style="background-color: #fff0f0;">"#f2eee8"</span>
<span style="color: #0000c0;">android:textSize=</span><span style="background-color: #fff0f0;">"18sp"</span>
<span style="color: #0000c0;">android:padding=</span><span style="background-color: #fff0f0;">"4dp"</span>
<span style="color: #0000c0;">android:textColor=</span><span style="background-color: #fff0f0;">"#111"</span>
<span style="color: #0000c0;">android:layout_gravity=</span><span style="background-color: #fff0f0;">"center|bottom"</span>
<span style="color: #007000;">/></span>
<span style="color: #007000;"></LinearLayout></span>
</pre></div><br />
<br />
<a href="http://hilite.me/" rel="nofollow" target="_blank">Made with hilite</a>Odedhttp://www.blogger.com/profile/00914055567862922187noreply@blogger.com0tag:blogger.com,1999:blog-8847609613162792164.post-51824543934803205762013-05-17T17:04:00.002-07:002013-05-17T17:32:49.336-07:00Run Lint on Android StudioAndroid Lint is a tool that scans Android project sources for potential bugs.<br />
For example, it can find unused resources.<br />
To run it on Android Studio:<br />
<b>Top menu-> Analyze-> Inspect code</b><br />
<br />
To run it on a specific module, make sure the specific module is selected in the Project tab.Odedhttp://www.blogger.com/profile/00914055567862922187noreply@blogger.com0tag:blogger.com,1999:blog-8847609613162792164.post-63784692415417384432013-04-21T19:25:00.003-07:002013-04-21T19:25:58.512-07:00Re-enable smart app banner in ios after clicking x close buttonIt is pretty simple actually, to re-enable smart app banner in ios after clicking the x (close button), just click "Clear Cookies and Data" in Safari settings under iOS settings.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiBNlqt3dxW8I24rWN9zJiSu1-8nHAo0XHReyUR9s8afITYsGLRTa5FEz7pU6g7L0LS7DEhglfuUZo09y9PKUuIlpoOOnUZzs6JHJYBC8BBxZMbaOIOcfkcLUrI7lcYNCJiwbDrCvXGv3I/s1600/iOS+Simulator+Screen+shot+Apr+21,+2013+9.23.20+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiBNlqt3dxW8I24rWN9zJiSu1-8nHAo0XHReyUR9s8afITYsGLRTa5FEz7pU6g7L0LS7DEhglfuUZo09y9PKUuIlpoOOnUZzs6JHJYBC8BBxZMbaOIOcfkcLUrI7lcYNCJiwbDrCvXGv3I/s320/iOS+Simulator+Screen+shot+Apr+21,+2013+9.23.20+PM.png" width="180" /></a><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiFKVnFWT43xVfSAWrSV9ORZs58ke34L50g0QZUarb3vO2UeQ85PMXo_l-8SzFgcgvbUPHlt80wWNRHjBqWTFyU-aprFrP1SpMwoSMhhgBLeGnBSvtLfTnQHzCtiwUgKLi2YXvdn2Ru0lY/s1600/iOS+Simulator+Screen+shot+Apr+21,+2013+9.24.41+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiFKVnFWT43xVfSAWrSV9ORZs58ke34L50g0QZUarb3vO2UeQ85PMXo_l-8SzFgcgvbUPHlt80wWNRHjBqWTFyU-aprFrP1SpMwoSMhhgBLeGnBSvtLfTnQHzCtiwUgKLi2YXvdn2Ru0lY/s320/iOS+Simulator+Screen+shot+Apr+21,+2013+9.24.41+PM.png" width="180" /></a></div>
Odedhttp://www.blogger.com/profile/00914055567862922187noreply@blogger.com4tag:blogger.com,1999:blog-8847609613162792164.post-83419801579215919792013-01-26T22:21:00.004-08:002013-01-26T22:21:47.885-08:00Sustainable engines of growth<br />
<div dir="ltr" style="background-color: white;">
<span style="color: #222222; font-family: arial, sans-serif; font-size: x-small;">Sustainable engines of growth in startups are ways in which o</span><span style="color: #222222; font-family: arial, sans-serif; font-size: 12.800000190734863px;">ld customers bring new customers</span></div>
<div dir="ltr" style="background-color: white;">
<span style="color: #222222; font-family: arial, sans-serif; font-size: 12.800000190734863px;"><br /></span></div>
<div dir="ltr" style="background-color: white;">
<span style="color: #222222; font-family: arial, sans-serif;"><span style="font-size: 12.800000190734863px;">There are 4, according to "</span></span><span style="color: #222222; font-family: arial, sans-serif; font-size: x-small;">The Lean Startup</span><span style="color: #222222; font-family: arial, sans-serif;"><span style="font-size: 12.800000190734863px;">":</span></span></div>
<div dir="ltr" style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 12.800000190734863px;">
</div>
<ol>
<li><span style="font-size: 12.800000190734863px;">Word of mouth.</span></li>
<li><span style="font-size: 12.800000190734863px;">Side effect of product usage (viral).</span></li>
<li><span style="font-size: 12.800000190734863px;">Funded advertising, acquiring a customer should be lower than its revenue.</span></li>
<li><span style="font-size: 12.800000190734863px;">Repeat purchase or use.</span></li>
</ol>
<br />
Odedhttp://www.blogger.com/profile/00914055567862922187noreply@blogger.com0tag:blogger.com,1999:blog-8847609613162792164.post-74031663055239439522013-01-16T09:01:00.001-08:002013-01-16T09:03:06.516-08:00PixMIx in the AllJoyn proximity competitionCheck out and please vote for this amazing new app:<br />
<a href="http://pixjoin.com/">http://pixjoin.com</a><br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgNi59cX22tMKs640gKtK9Z3TyT97E4vG_Xfgil2mSavdicR2tBoANea_bbRdwg8sLODLnSsoxE4IhA7daxu_9lmOdWDzpG1AMaMkKx8PP9T9jWl6IV2slSCDOOelBeXpug_kEHDkWohlM/s1600/pixmix.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="195" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgNi59cX22tMKs640gKtK9Z3TyT97E4vG_Xfgil2mSavdicR2tBoANea_bbRdwg8sLODLnSsoxE4IhA7daxu_9lmOdWDzpG1AMaMkKx8PP9T9jWl6IV2slSCDOOelBeXpug_kEHDkWohlM/s400/pixmix.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">PIXjoin.com</td></tr>
</tbody></table>
<br />Odedhttp://www.blogger.com/profile/00914055567862922187noreply@blogger.com0tag:blogger.com,1999:blog-8847609613162792164.post-74686066020851103272012-12-10T14:27:00.000-08:002012-12-10T14:52:16.711-08:00REST API simplifiedBefore I get philosophical, here is <b>the gist:</b><br />
<br />
For the function:<br />
<ul>
<li>getPhoto(String photoName, int userId, int width) </li>
</ul>
In the controller:<br />
<div>
<ul>
<li>PhotoController.java </li>
</ul>
The suggested rest API is: <br />
<ul>
<li>http://hostname.com/api/photo/get?photo_name=flower&user_id=123&width=1024</li>
</ul>
Or in more general terms:<br />
<div>
<ul>
<li>{protocol}://{domain}/api/{controller_or_service_name}/{short_function_name}?param1=value1&param2=value2&paramN=valueN</li>
</ul>
<div>
<br /></div>
<h3>
Philosophy</h3>
I've worked with dozens of rest API's and also created a few. Some conventions are very simple and <a href="http://gal-levinsky.blogspot.co.il/2012/01/restful-standard-resolved.html" target="_blank">easy</a>, some are complex. <br />
<br />
When creating an API you have three players to think about: <br />
<br />
<ol>
<li>The developer (probably you)</li>
<li>The client developer</li>
<li>The end user</li>
</ol>
<br />
<br />
<h3>
The developer (you) </h3>
You are your own client, and so are the developers that will inherit and maintain your code. Creating a self-explanatory API means making it easily expandable. <br />
If you are developing a service layer or a controller layer, I suggest adding their name to the path, right after the host:<br />
<ul>
<li>host.com/<b>photo</b>/</li>
</ul>
This will make it easy to to find the right controller when maintaining the code. This will also, usually be, either the object that the function returns, the main object that it manipulates, or the name of the main action, in that order of priority.<br />
For the same reason, immediately after, put the short name of the function that handles the parameters:<br />
<ul>
<li>host.com/photo/<b>get</b> </li>
</ul>
Then come the query parameters themselves:<br />
<ul>
<li>host.com/api/photo/get?<b>photo_name</b>=flower&<b>user_id</b>=123&<b>width</b>=1024</li>
</ul>
Non abiding order, optional and nullable.<br />
<br />
<h4>
</h4>
<h3>
The client developer</h3>
If you only had the client on your mind, using query parameters for everything would be the best choice, their order is non-abiding and they are all optional. But this will require creation of a special function for navigating to the right controller and make it imparseable to the user. <br />
<br />
<h4>
</h4>
<h3>
The end user</h3>
If you were only to think about the end user, you would probably use very few query parameters (e.g. id=123) and mostly path sections (e.g. photo/id/123). Path sections are cleaner looking and use one simple delimiter character ("/"), so users have an easier time navigating your API. But this is where user simplicity ends, and developers' complexity begins:<br />
<ol>
<li>Using a path for dynamic data like a user's id could cause some trouble:</li>
<ul>
<li>if the function can handle a null value</li>
<li>if it includes special characters.</li>
</ul>
<li>The order of the parameters is static and the client developer can't just throw them on using a query parameter map.</li>
<li>Arrays and JSON objects can't fit in a path.</li>
</ol>
<br />
<br />
<h3>
To sum it up:</h3>
<br />
<ul>
<li>http://hostname.com/api/photo/get?photo_name=flower&user_id=123&width=1024</li>
</ul>
<br />
Or in more general terms:<br />
<ul>
<li>{protocol}://{domain}/api/{controller_or_service_name}/{short_function_name}?param1=value1&param2=value2&paramN=valueN</li>
</ul>
<br />
<br />
And here are a couple additional examples:<br />
<ul>
<li><b>Function:</b> deAssociateUserAndPhoto(String userId, String photoId)<br /><b>API:</b> http://hostname.com/api/user/deassociate ?photo=456 user=123</li>
<li><b>Function:</b> MapService.getDistance(Point a, Point b)<br /><b>API:</b> http://hostname.com/api/map/distance?point_a=42.365,31.987&point_b=36.743,28.234</li>
</ul>
</div>
</div>
Odedhttp://www.blogger.com/profile/00914055567862922187noreply@blogger.com1tag:blogger.com,1999:blog-8847609613162792164.post-69281102716433201942012-12-03T15:24:00.004-08:002013-05-17T06:48:23.318-07:00The real difference between static and dynamic programming languages<span style="font-family: inherit;">The real difference between static and dynamic programming languages from an </span>entrepreneur's<span style="font-family: inherit;"> point of view.</span><br />
<span style="font-family: inherit;"><br />
</span> <span style="font-family: inherit;">The debates are endless and tiring, you can get a taste at stackoverflow.</span><br />
<span style="font-family: inherit;"><br />
</span> <span style="font-family: inherit;">But when push comes to shove, and you really want to know what is the actual real-life difference between </span>statically<span style="font-family: inherit;"> typed (aka Java) and dynamically typed (aka python) </span>programming languages...<br />
<br />
It all comes down to this simple explanation:<br />
<br />
<ul>
<li><b>Dynamically</b> typed = Easy <b>Get up</b></li>
<li><b>Statically</b><span style="font-family: inherit;"> typed = Easy </span><b>Maintenance</b></li>
</ul>
<br />
<span style="font-family: inherit;">When using dynamically typed languages, you are much faster in constructing a new project, and you need less lines of code than a </span>statically<span style="font-family: inherit;"> typed language to do most things. Later on, when you'd want to poke around and change stuff, it would probably be harder.</span><br />
<span style="font-family: inherit;"><br />
</span> <span style="font-family: inherit;">When using statically typed languages, it's </span>easier <span style="font-family: inherit;">to maintain, change and refactor the code, but you have to do more work to get things going.</span><br />
<span style="font-family: inherit;"><br /></span>
For example, defining and sorting a list:<br />
<br />
<span style="font-family: inherit;">Java (static):</span><br />
<pre style="background-color: #f3f5f7; border: 1pt solid rgb(174, 189, 204); font-family: courier, monospace; font-size: 14px; line-height: 21px; padding: 5pt; white-space: pre-wrap; word-wrap: break-word;">List<integer> a = new ArrayList<integer>();
a.add(5);
a.add(2);
a.add(3);
a.add(1);
a.add(4);
Collections.sort(a);</pre>
<span style="font-family: inherit;"><br />
</span> <span style="font-family: inherit;">python (dynamic):</span><br />
<pre style="background-color: #f3f5f7; border: 1pt solid rgb(174, 189, 204); font-family: courier, monospace; font-size: 14px; line-height: 21px; padding: 5pt; white-space: pre-wrap; word-wrap: break-word;">sorted([5, 2, 3, 1, 4])</pre>
<br />
As you can see, Java (static) is longer to type and you have to know about many keywords, pyhton (dynamic) is much shorter and self explanatory...<br />
But if one day, you would want to change some of the objects in the list, and accidentally put a "text" object instead of a "number":<br />
python would just handle it and treat all of the objects in the list as text objects. You would only find out about your mistake when the program runs and a human actually looks at the output and realizes something is misplaced.<br />
Where in Java, the program will not even run, so you would know immediately where and what to fix.<br />
<br />
You can say that python is "smarter" because it adapts to the data, and you would have a point... but when you have thousands of lines of code, and many programmers, you want zero flexibility and you want to be notified of any inconsistency.<br />
<br />
<b>So to sum it up:</b><br />
If you want speed at the beginning, use a dynamic language.<br />
If you want easier long-term maintenance, use a static language.<br />
<br />
What do you think? comments/corrections are welcome...Odedhttp://www.blogger.com/profile/00914055567862922187noreply@blogger.com0tag:blogger.com,1999:blog-8847609613162792164.post-22381625584046365172012-10-07T08:44:00.002-07:002012-10-07T08:50:03.961-07:00The Art and Science of Fundraising (Excerpt)The Art and Science of Fundraising - excerpt<br />
<div>
According to Scott Weiss from <a href="http://vimeo.com/allegiscapital">Allegis Capital</a>.</div>
<div>
<ol>
<li>I hear and I forget, I see and I remember, I do and I understand.</li>
<li>Get multiple term-sheets (offers).</li>
<li>Leave a positive impression on everyone you meet.</li>
<li>Valuation by perfection, be pedantic on every investor touchpoint.</li>
<ol>
<li>Team</li>
<ol>
<li>CEO</li>
<ol>
<li>Authenticity - don't be phony, sweat, show your weakness, be yourself, know what you don't know, don't be defensive.</li>
<li>Coachability - solicit feedback, surround yourself with mentors, you are a share holder before ceo.</li>
</ol>
<li>Chemistry, don't interrupt each other, everyone talks about what they know best.</li>
<li>Match up your team to the investor team: Tech specialist -> geek, Numbers guy -> marketing, 2 to 1, 3 to 2.</li>
<ol>
</ol>
</ol>
<li>Market opportunity</li>
<ol>
<li>Tell a story in your slides, keep it short,</li>
<li>You know all the questions, 20-30, prepare for each one of them. Know which team member is going to answer them. The ceo is like a point guard, dish out to the member who knows the answer.</li>
</ol>
<li>Competitive advantage</li>
<li>Traction</li>
</ol>
<li>Practice, practice, practice, start with tier 3 investors and move up.</li>
<li>Cast a wide net, meet many VC's and angels in a short time. Makes the deal hot.</li>
<li>Talk with other CEO's before choosing a term sheet.</li>
<li>Have a user advisory board, if an investor ever needs to call a user. give them stock. get their cellphone.</li>
<li>Know the time to close, due-diligence period.</li>
<li>Small odd-number board, majority of founders and independents (non-vc's), could be experts.</li>
<ol>
</ol>
</ol>
</div>
<div>
<br />
<br /></div>
<br />
<br />
<iframe allowfullscreen="allowfullscreen" frameborder="0" height="331" mozallowfullscreen="mozallowfullscreen" src="http://player.vimeo.com/video/12636808" webkitallowfullscreen="webkitallowfullscreen" width="500"></iframe> <br />
<a href="http://vimeo.com/12636808">The Art and Science of Fundraising</a> from <a href="http://vimeo.com/allegiscapital">Allegis Capital</a> on <a href="http://vimeo.com/">Vimeo</a>.Odedhttp://www.blogger.com/profile/00914055567862922187noreply@blogger.com0tag:blogger.com,1999:blog-8847609613162792164.post-79314892872977983142012-09-09T22:32:00.000-07:002012-09-11T21:19:14.827-07:00Setting up google analytics EasyTracker for Android<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhuAP03iZWHlPXKXbxLN2m4yloRSjUwombIwJug_ueP7CDGc5ZZ0CZaibL5VcW6hphy06Z2yA-Sq4bAgKM83bjtr2eKFMmySZIU8XhyphenhyphenoCFZ7YEgvLrQOKnT472zB_6OqCsQJAOl76XDQnY/s1600/sdk-cube.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><br /><img border="0" height="131" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhuAP03iZWHlPXKXbxLN2m4yloRSjUwombIwJug_ueP7CDGc5ZZ0CZaibL5VcW6hphy06Z2yA-Sq4bAgKM83bjtr2eKFMmySZIU8XhyphenhyphenoCFZ7YEgvLrQOKnT472zB_6OqCsQJAOl76XDQnY/s200/sdk-cube.png" width="200" /></a></div>
<ul>
<li>Add <a href="https://developers.google.com/analytics/devguides/collection/android/resources">libGoogleAnalytics.jar</a> to your project's /libs directory.</li>
<li>Add <a href="https://code.google.com/p/analytics-api-samples/downloads/detail?name=EasyTrackerAndroid_1.0.zip">EasyTracker.jar</a> to your project's /libs directory.</li>
<li>Add the following permissions to your project's AndroidManifest.xml file:</li>
<ul>
<li><uses -permission="-permission" android:name="android.permission.INTERNET"></uses></li>
<li><uses -permission="-permission" android:name="android.permission.ACCESS_NETWORK_STATE"></uses></li>
</ul>
<li>Get UA code from your <a href="https://www.google.com/analytics">analytics</a> admin section</li>
<li>Add your UA code to your values/strings.xml like so: <string name="ga_api_key">UA-xxxxxxxx-x</string> .</li>
<li>Change the activities you want to track-</li>
<ul>
<li>from: Activity / ListActivity</li>
<li>to: TrackedActivity / TrackedListActivity</li>
</ul>
</ul>
you're done!<br />
<div>
<br /></div>
Odedhttp://www.blogger.com/profile/00914055567862922187noreply@blogger.com0tag:blogger.com,1999:blog-8847609613162792164.post-80218377704242189772012-08-13T06:11:00.001-07:002012-08-13T06:25:19.984-07:00Skynet attacks stock marketI never thought Skynet will attack the stock market first...<br />
<br />
Watch this terrifying GIF and see how robots have taken over the Stock markets.<br />
<br />
Wait until 2012...<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://imgur.com/DxWer"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizRnjXcsbHMBPfaOTiLgQVYGjdat_KdFUUdBPv6-TKvORzMKeMO0SVV1iU2jKk8wX-N8FldWPgYcVLvnYbXxUa4d1QwJV00nbMS38JM3JCv4rwqU0WHq_HSnxumkRoS71SXIPLmkAKwYk/s1600/NanexStocks.gif" /></a></div>
<br />Odedhttp://www.blogger.com/profile/00914055567862922187noreply@blogger.com0tag:blogger.com,1999:blog-8847609613162792164.post-81358771832173068602012-06-11T03:37:00.000-07:002012-06-11T03:51:47.395-07:00iOS 6 predictions<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhV7KUmPAHVNHIOQRv0TAVjz_V8tRodqiDYKefm0LDpGFa4-rsbvPafSd6h5d1eUFeaIimnfxB3xd5wDlZVVxsgfniFoi9ij0bKI11512i1M6YKnQLYI6hjW-gDx5LW3Vy5Ht-_QpMwfjU/s1600/wwdc2012.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="91" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhV7KUmPAHVNHIOQRv0TAVjz_V8tRodqiDYKefm0LDpGFa4-rsbvPafSd6h5d1eUFeaIimnfxB3xd5wDlZVVxsgfniFoi9ij0bKI11512i1M6YKnQLYI6hjW-gDx5LW3Vy5Ht-_QpMwfjU/s320/wwdc2012.jpg" width="320" /></a></div>
<br />
Here are the features I predict Apple will reveal on 11.6.12 for iOS 6. What do you think?<br />
<ul>
<li><b>Swipe from bottom and from the sides:</b> the same algorithm that opens the notification center when you swipe the screen from above, will also be implemented to all other sides. When you swipe from bottom: the multi-task fast app switcher will show (no more agonizing double taps!), swiping from sides will switch back and forward between previous applications exactly like the 4-finger gesture on the iPad does.</li>
<li><b>Siri API:</b> developers will have an API to add question "templates" to Siri's vocabulary, for example: saying "Play %q from stitcher" will identify the word pronounced instead of "%q" and will send it to the Stitcher app. So, saying "Play the verge from stitcher" will launch the stitcher app and play "the verge" podcast.</li>
<li><b>iMessage API:</b> Since iMessages are free, Apple will open an API that will enable developers to send them programmatically, opening the flood gates for specialized messaging apps like delayed texting, location based texting and more.</li>
<li><b>New notification interactions:</b> till this very day, there are only two ways to interact with a notification coming from an app: dismiss it or open the app. As a developer you would like to give your users the power to delete an object in a notification, snooze it or open an automatic reply. The new API will let the developer add a button to the notification, or maybe even a select box. In fact, I think apple will add a "snooze by time" option to iOS's native calendar notifications.</li>
<li><b>Social info:</b> this app would like to know your gender and your age. Apple will continue adding social hooks like "find my friends" and "ping".</li>
<li><b>Photo sharing:</b> you'll be able to photo-tag friends from your contact list, and this will send them a link and pop the photo in their photos gallery. </li>
<li><b>3D iMaps:</b> no doubt.</li>
<li><b>AppStore on the Apple TV:</b> no way, only when the iTV will be announced, which is not at this WWDC.</li>
</ul>
<br />
<h4>
Left overs from <a href="http://www.oded.us/2011/06/ios-5-predictions.html">iOS 5 predictions</a></h4>
I still really want these:<br />
<ul>
<li><b>Widgets:</b> app icons will now have various possible sizes, constrained to combinations of multiple icons. For example, to make a search widget, you can define your icon by 3x1, meaning 3 icons across and one vertical icon. The widget will occupy the space of 3 icons horizontally on the home screen and will behave exactly like an application with transparent background. </li>
<li><b>Xcode for the iPad:</b> This is more of a wet dream, but Apple is building on the iOS as their main operating system for the future, and to get the real hardcore users to move to it, they have to make an IDE available. The main reason I gave up on my iPad and gave it to my mom was the lack of a good IDE (plus she really liked it :-).</li>
</ul>Odedhttp://www.blogger.com/profile/00914055567862922187noreply@blogger.com2tag:blogger.com,1999:blog-8847609613162792164.post-60777481313322341442012-05-04T12:58:00.001-07:002012-05-04T13:31:15.526-07:00A laptop with a wired and detachable touch screenA laptop with a wired and detachable touch screen.<br />
<br />
How often do you see a person using an unplugged laptop?<br />
A rare sight indeed.<br />
<br />
I know some people who've never actually used their laptop batteries, they removed them the minute they bought the device to keep their batteries healthy once they actually need them.<br />
<br />
Most of the time, we are using our computers when we are sitting.<br />
So why not create a powerful laptop with a detachable touch screen?<br />
<br />
When you need to do a keyboard-intensive task, use it as a conventional laptop. When you want to lay back and do some casual browsing, angry birding or reading, detach the screen and do some finger computing. All while having access to the fully featured and powerful CPU, memory and operating system.<br />
<br />
The screen is just that, a screen, hence it can be extremely light and comfortable to hold, the wire won't really get in your way.<br />
<br />
You can think about it like an iPad with an i7 intel CPU, 16gb of RAM and a 256gb SSD, minus the weight of the ipad batteries, and all the internals.<br />
<br />
I guess a 1.3 kg computer can be transformed into a killer 12 inch wired touch screen computer that weighs just 300 grams, less than half the iPad, and as little as two iPhones.<br />
<br />
The weight is more noticeable in your hands and on your lap, rather than on your back or in your briefcase. So just unload the weight away from you, put it on the floor, or on your desk, exactly like you do with the cord and the power brick of most portable computers out there.<br />
<br />
Wait a sec! You can hide all the internals in a large power brick and that way, it will look like magic, desktop horse power channeled through a wire from the floor, to a light touch screen in your hands.<br />
<br />
<div class="separator"style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiDip4o5CGdKkPGmAvLF50P8fbVA89MyiXZ8tCtH8h5SabIaQB3usOAQ_Hc2R41L9bs6uU4B-WoAljNvPmJJVKlJWFjCRwKqunVZqICcHGL_kLzvsrXuFWpdJXrBN9wBfqaMYlLGOBGZv0/s640/blogger-image--579907330.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiDip4o5CGdKkPGmAvLF50P8fbVA89MyiXZ8tCtH8h5SabIaQB3usOAQ_Hc2R41L9bs6uU4B-WoAljNvPmJJVKlJWFjCRwKqunVZqICcHGL_kLzvsrXuFWpdJXrBN9wBfqaMYlLGOBGZv0/s640/blogger-image--579907330.jpg" /></a></div>Odedhttp://www.blogger.com/profile/00914055567862922187noreply@blogger.com0Netanya Netanya32.281124 34.857528tag:blogger.com,1999:blog-8847609613162792164.post-67935625539400720232012-04-26T09:05:00.001-07:002012-05-06T05:32:48.932-07:00A data center on the sun<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfsSrf1KlAh8UEeo6_zc7sAaLBMBCrRspIoMjV-UwYpIrL79WHbcZ-MbISl-PJZvYdBFqUrUkx1uROYp_lBQK60WHMzlOLqHAGl2sMVSjWps4PWZujNqKnyUOF1OnnguHSrQoepXEEgvU/s1600/Solar-Orbiter-mission.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="213" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfsSrf1KlAh8UEeo6_zc7sAaLBMBCrRspIoMjV-UwYpIrL79WHbcZ-MbISl-PJZvYdBFqUrUkx1uROYp_lBQK60WHMzlOLqHAGl2sMVSjWps4PWZujNqKnyUOF1OnnguHSrQoepXEEgvU/s320/Solar-Orbiter-mission.jpg" width="320" /></a></div>
<br />
<br />
<center></center><br />
As data intensive and super computational tasks demand are rising at an exponential rate. Costs of energy in data centers are becoming the most expensive factor in our world-wide data driven network, aka the Internet.<br />
<br />
Ideas of harnessing energy from the sun and sending it back to earth has been around for awhile, but sending energy remotely over microwave is extremely dangerous and and, well, experimental.<br />
<br />
Sending data remotely, however, is much more safe and easy, we've been doing it with satellites for dozens of years.<br />
Data center satellites, imagine sending hundreds or even thousands of small solar computers to surround the sun, feed off the energy of our sun and compute our every wish. Earth bound control centers will send out the formulas to compute and will catch the messages of the results when they are finished.<br />
<br />
A server node swarm surrounding the sun and turning light and heat into computing power.<br />
<div class="blogpress_location">
Location:<a href="http://maps.google.com/maps?q=%D7%A7%D7%94%D7%99%D7%9C%D7%AA%20%D7%A4%D7%90%D7%93%D7%95%D7%91%D7%94,Tel%20Aviv,Israel%4032.115627%2C34.822366&z=10">קהילת פאדובה,Tel Aviv,Israel</a></div>Odedhttp://www.blogger.com/profile/00914055567862922187noreply@blogger.com0tag:blogger.com,1999:blog-8847609613162792164.post-17989100580747513252012-04-09T11:46:00.001-07:002012-04-09T11:50:22.399-07:00why JAVA is the most strategic programming language to learn<div style="text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjPgPAeapOR2Xz4IVaykz5bpFG0LAPoZUI6iAj7CmgwE-RwhSyJd3W5bNwgf3cFFi_-Zh2jax-mntS2902JO1rugwGW227yA5lIkSPJV9vKcBuDa4Z1dL1Kq84-QfPyxKVrN2CdMBABxg/s1600/Why_JAVA_is_the_most_strategic_programming_language_to_learn.png" style="margin-left: 1em; margin-right: 1em;">This is why JAVA is the most strategic programming language to learn:</a></div>
<div style="text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjPgPAeapOR2Xz4IVaykz5bpFG0LAPoZUI6iAj7CmgwE-RwhSyJd3W5bNwgf3cFFi_-Zh2jax-mntS2902JO1rugwGW227yA5lIkSPJV9vKcBuDa4Z1dL1Kq84-QfPyxKVrN2CdMBABxg/s1600/Why_JAVA_is_the_most_strategic_programming_language_to_learn.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="624" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjPgPAeapOR2Xz4IVaykz5bpFG0LAPoZUI6iAj7CmgwE-RwhSyJd3W5bNwgf3cFFi_-Zh2jax-mntS2902JO1rugwGW227yA5lIkSPJV9vKcBuDa4Z1dL1Kq84-QfPyxKVrN2CdMBABxg/s640/Why_JAVA_is_the_most_strategic_programming_language_to_learn.png" width="640" /></a></div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: left;">
<br /></div>
If you master JAVA, you can develop any type of software:<br />
<ul>
<li>most devices: Android</li>
<li>most consumer servers: AWS and GAE - web apps</li>
<li>most business servers: JavaEE - Big corporations</li>
</ul>Odedhttp://www.blogger.com/profile/00914055567862922187noreply@blogger.com1tag:blogger.com,1999:blog-8847609613162792164.post-7072618779749539702012-03-27T02:08:00.000-07:002012-03-28T00:43:02.759-07:00Overcome i18n empty string error message<b>The problem: </b><br />
If you are using an i18n supported system like spring (java), there might be a scenario where your application might call an empty string.<br />
This might occur when you invoke the i18n with a null or an empty string (i.e. the i18n key was not set correctly and the jsp i18n tag could not find it).<br />
Then, when trying to translate the message using your i18n messages.properties file, the server might throw an exception.<br />
<br />
That exception might be disruptive in a production environment.<br />
In order to throw a silent exception, I took the approach of null vs. empty object handling.<br />
(i.e. prefer returning an empty object rater than null, when an error occurs).<br />
<br />
<b>The solution:</b><br />
To avoid this exception, you can add an entry for an empty string to your i18n messages.properties like so:<br />
<br />
<blockquote class="tr_bq">
conf.btn.submit = SUBMIT<br />
conf.status.none = NONE<br />
conf.status.deleted = DELETED<br />
conf.status.inactive = INACTIVE<br />
<span style="color: red;">= i18n empty string error</span><br />
conf.status.active = ACTIVE<br />
conf.status.incomplete = INCOMPLETE<br />
conf.status.pending = PENDING<br />
conf.status.approved = APPROVED<br />
conf.status.rejected = REJECTED </blockquote>
<br />
Ofcourse, you might want to use some other text than "error" according to the specific need of your application. Displaying "Error" is a way of floating up the problem without displaying the user/QA a blank screen.<br />
<br />
<u>Note:</u><br />
This technique could also be used in development to focus on business logic development, however, I would recommend DELETING this empty i18n key during the last test days, before going to production, to minimize such exceptions.Odedhttp://www.blogger.com/profile/00914055567862922187noreply@blogger.com0