tag:blogger.com,1999:blog-109436112024-03-16T02:07:46.639+02:00Gr33n DataGreen Data, yet another Egyptian blog.Anonymoushttp://www.blogger.com/profile/04040899001187322598noreply@blogger.comBlogger809125tag:blogger.com,1999:blog-10943611.post-22847917263768056142017-12-25T13:37:00.001+02:002017-12-25T13:37:43.328+02:00Free and Open Source Software is Dead<div class="graf graf--p graf-after--h3" id="df07" name="df07" style="--baseline-multiplier: 0.17; background-color: white; color: rgba(0, 0, 0, 0.84); font-family: medium-content-serif-font, Georgia, Cambria, "Times New Roman", Times, serif; font-size: 21px; letter-spacing: -0.003em; line-height: 1.58; margin-top: 10px;">
<em class="markup--em markup--p-em" style="font-feature-settings: 'liga' 1, 'salt' 1;"><b>Originally <a href="https://medium.com/@gr33ndata/free-and-open-source-software-is-dead-8a95bac74716" target="_blank">posted on Medium</a>, but since the Egyptian stupid government blocks Medium, I reposted here.</b></em></div>
<div class="graf graf--p graf-after--h3" id="df07" name="df07" style="--baseline-multiplier: 0.17; background-color: white; color: rgba(0, 0, 0, 0.84); font-family: medium-content-serif-font, Georgia, Cambria, "Times New Roman", Times, serif; font-size: 21px; letter-spacing: -0.003em; line-height: 1.58; margin-top: 10px;">
<em class="markup--em markup--p-em" style="font-feature-settings: 'liga' 1, 'salt' 1;"><br /></em></div>
<div class="graf graf--p graf-after--h3" id="df07" name="df07" style="--baseline-multiplier: 0.17; background-color: white; color: rgba(0, 0, 0, 0.84); font-family: medium-content-serif-font, Georgia, Cambria, "Times New Roman", Times, serif; font-size: 21px; letter-spacing: -0.003em; line-height: 1.58; margin-top: 10px;">
<em class="markup--em markup--p-em" style="font-feature-settings: 'liga' 1, 'salt' 1;">I open my laptop after I arrive to the office, I start writing </em><span class="markup--strong markup--p-strong" style="font-weight: 700;"><em class="markup--em markup--p-em" style="font-feature-settings: 'liga' 1, 'salt' 1;">Python</em></span><em class="markup--em markup--p-em" style="font-feature-settings: 'liga' 1, 'salt' 1;"> code in a </em><span class="markup--strong markup--p-strong" style="font-weight: 700;"><em class="markup--em markup--p-em" style="font-feature-settings: 'liga' 1, 'salt' 1;">Jupyter</em></span><em class="markup--em markup--p-em" style="font-feature-settings: 'liga' 1, 'salt' 1;"> notebook. I query a </em><span class="markup--strong markup--p-strong" style="font-weight: 700;"><em class="markup--em markup--p-em" style="font-feature-settings: 'liga' 1, 'salt' 1;">PostgreSQL</em></span><em class="markup--em markup--p-em" style="font-feature-settings: 'liga' 1, 'salt' 1;"> database, I use libraries like </em><span class="markup--strong markup--p-strong" style="font-weight: 700;"><em class="markup--em markup--p-em" style="font-feature-settings: 'liga' 1, 'salt' 1;">Pandas</em></span><em class="markup--em markup--p-em" style="font-feature-settings: 'liga' 1, 'salt' 1;">, </em><span class="markup--strong markup--p-strong" style="font-weight: 700;"><em class="markup--em markup--p-em" style="font-feature-settings: 'liga' 1, 'salt' 1;">Scikit-learn</em></span><em class="markup--em markup--p-em" style="font-feature-settings: 'liga' 1, 'salt' 1;"> and </em><span class="markup--strong markup--p-strong" style="font-weight: 700;"><em class="markup--em markup--p-em" style="font-feature-settings: 'liga' 1, 'salt' 1;">Keras</em></span><em class="markup--em markup--p-em" style="font-feature-settings: 'liga' 1, 'salt' 1;">. Then when it’s time to productionise the code snippets I have written, I write my code using </em><span class="markup--strong markup--p-strong" style="font-weight: 700;"><em class="markup--em markup--p-em" style="font-feature-settings: 'liga' 1, 'salt' 1;">Atom</em></span><em class="markup--em markup--p-em" style="font-feature-settings: 'liga' 1, 'salt' 1;"> or </em><span class="markup--strong markup--p-strong" style="font-weight: 700;"><em class="markup--em markup--p-em" style="font-feature-settings: 'liga' 1, 'salt' 1;">VIM</em></span><em class="markup--em markup--p-em" style="font-feature-settings: 'liga' 1, 'salt' 1;"> and push it to </em><span class="markup--strong markup--p-strong" style="font-weight: 700;"><em class="markup--em markup--p-em" style="font-feature-settings: 'liga' 1, 'salt' 1;">AWS</em></span><em class="markup--em markup--p-em" style="font-feature-settings: 'liga' 1, 'salt' 1;">.</em></div>
<div class="graf graf--p graf--hasDropCapModel graf--hasDropCap graf-after--p" id="ad4c" name="ad4c" style="--baseline-multiplier: 0.17; background-color: white; clear: left; color: rgba(0, 0, 0, 0.84); font-family: medium-content-serif-font, Georgia, Cambria, "Times New Roman", Times, serif; font-size: 21px; letter-spacing: -0.003em; line-height: 1.58; margin-top: 29px;">
<span class="graf-dropCap" style="--baseline-multiplier: 0.22; display: block; float: left; font-family: medium-content-sans-serif-font, "Lucida Grande", "Lucida Sans Unicode", "Lucida Sans", Geneva, Arial, sans-serif; font-size: 72px; font-weight: 600; letter-spacing: -0.03em; line-height: 0.83; margin-bottom: -0.08em; margin-left: -5px; margin-right: 7px; padding-top: 6px; position: relative;">E</span>verything in bold is Free and Open Source Software (FOSS), except for AWS. I even checked their licenses. It’s clear, FOSS has won the battle, no more evil Microsoft SQL server, no Visual Basic, nothing of these closed source softwares anymore, yay!</div>
<div class="graf graf--p graf-after--p" id="8123" name="8123" style="--baseline-multiplier: 0.17; background-color: white; color: rgba(0, 0, 0, 0.84); font-family: medium-content-serif-font, Georgia, Cambria, "Times New Roman", Times, serif; font-size: 21px; letter-spacing: -0.003em; line-height: 1.58; margin-top: 29px;">
<em class="markup--em markup--p-em" style="font-feature-settings: 'liga' 1, 'salt' 1;">Then I leave the office, I listen to music on </em><span class="markup--strong markup--p-strong" style="font-weight: 700;"><em class="markup--em markup--p-em" style="font-feature-settings: 'liga' 1, 'salt' 1;">Spotify</em></span><em class="markup--em markup--p-em" style="font-feature-settings: 'liga' 1, 'salt' 1;"> on my way back home, I watch movies on </em><span class="markup--strong markup--p-strong" style="font-weight: 700;"><em class="markup--em markup--p-em" style="font-feature-settings: 'liga' 1, 'salt' 1;">Netflix</em></span><em class="markup--em markup--p-em" style="font-feature-settings: 'liga' 1, 'salt' 1;">. The photos I take on the weekend, I edit and share them on </em><span class="markup--strong markup--p-strong" style="font-weight: 700;"><em class="markup--em markup--p-em" style="font-feature-settings: 'liga' 1, 'salt' 1;">Instagram</em></span><em class="markup--em markup--p-em" style="font-feature-settings: 'liga' 1, 'salt' 1;">. I chat with family and friends on </em><span class="markup--strong markup--p-strong" style="font-weight: 700;"><em class="markup--em markup--p-em" style="font-feature-settings: 'liga' 1, 'salt' 1;">Whatsapp</em></span><em class="markup--em markup--p-em" style="font-feature-settings: 'liga' 1, 'salt' 1;"> and I do almost all of these on my phone and tablet, whose operating systems and </em><span class="markup--strong markup--p-strong" style="font-weight: 700;"><em class="markup--em markup--p-em" style="font-feature-settings: 'liga' 1, 'salt' 1;">iOS</em></span><em class="markup--em markup--p-em" style="font-feature-settings: 'liga' 1, 'salt' 1;"> and </em><span class="markup--strong markup--p-strong" style="font-weight: 700;"><em class="markup--em markup--p-em" style="font-feature-settings: 'liga' 1, 'salt' 1;">Android</em></span><em class="markup--em markup--p-em" style="font-feature-settings: 'liga' 1, 'salt' 1;">.</em></div>
<div class="graf graf--p graf--hasDropCapModel graf--hasDropCap graf-after--p" id="8853" name="8853" style="--baseline-multiplier: 0.17; background-color: white; clear: left; color: rgba(0, 0, 0, 0.84); font-family: medium-content-serif-font, Georgia, Cambria, "Times New Roman", Times, serif; font-size: 21px; letter-spacing: -0.003em; line-height: 1.58; margin-top: 29px;">
<span class="graf-dropCap" style="--baseline-multiplier: 0.22; display: block; float: left; font-family: medium-content-sans-serif-font, "Lucida Grande", "Lucida Sans Unicode", "Lucida Sans", Geneva, Arial, sans-serif; font-size: 72px; font-weight: 600; letter-spacing: -0.03em; line-height: 0.83; margin-bottom: -0.08em; margin-left: -5px; margin-right: 7px; padding-top: 6px; position: relative;">E</span>verything in bold is not Free nor Open Source Software, even Android, some say it is open source, but definitely <a class="markup--anchor markup--p-anchor" data-href="https://www.theguardian.com/technology/2011/sep/19/android-free-software-stallman" href="https://www.theguardian.com/technology/2011/sep/19/android-free-software-stallman" rel="nofollow noopener" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0.54); background-color: transparent; background-image: linear-gradient(rgba(0, 0, 0, 0.68) 50%, rgba(0, 0, 0, 0) 50%); background-position: 0px 1.07em; background-repeat: repeat-x; background-size: 2px 0.1em; text-decoration-line: none;" target="_blank">it is not a free software</a>.</div>
<div class="graf graf--p graf-after--p" id="a8ec" name="a8ec" style="--baseline-multiplier: 0.17; background-color: white; color: rgba(0, 0, 0, 0.84); font-family: medium-content-serif-font, Georgia, Cambria, "Times New Roman", Times, serif; font-size: 21px; letter-spacing: -0.003em; line-height: 1.58; margin-top: 29px;">
Most of the open source software advocates I know are content with the first paragraph, and cannot see beyond it. They think open source software has won the war, but I believe it actually won few battles but lost the war, at least for now, and here is why:</div>
<h4 class="graf graf--h4 graf-after--p" id="e4a9" name="e4a9" style="--baseline-multiplier: 0.22; background-color: white; color: rgba(0, 0, 0, 0.84); font-family: medium-content-sans-serif-font, "Lucida Grande", "Lucida Sans Unicode", "Lucida Sans", Geneva, Arial, sans-serif; font-size: 26px; letter-spacing: -0.012em; line-height: 1.22; margin: 30px 0px 0px -1.63px;">
Sorry, the location of the battlefield has been changed!</h4>
<div class="graf graf--p graf-after--h4" id="dbc2" name="dbc2" style="--baseline-multiplier: 0.17; background-color: white; color: rgba(0, 0, 0, 0.84); font-family: medium-content-serif-font, Georgia, Cambria, "Times New Roman", Times, serif; font-size: 21px; letter-spacing: -0.003em; line-height: 1.58; margin-top: 6px;">
Nothing is stopping anyone from creating a FOSS video/music player, photo editor or chat application. Actually, there are already plenty of these created 20 years ago and were being massively used. <span class="markup--strong markup--p-strong" style="font-weight: 700;">These softwares still exist, the only difference is that they missed two major shifts; the cloud and the hardware/software coupling.</span></div>
<div class="graf graf--p graf-after--p" id="a252" name="a252" style="--baseline-multiplier: 0.17; background-color: white; color: rgba(0, 0, 0, 0.84); font-family: medium-content-serif-font, Georgia, Cambria, "Times New Roman", Times, serif; font-size: 21px; letter-spacing: -0.003em; line-height: 1.58; margin-top: 29px;">
Thanks to the cloud, music and video players are not inseparable from their music and videos content. An open source music player is useless if you do not have music to play, same for a free video player. Thus, Netflix and Spotify will continue to prevail.</div>
<div class="graf graf--p graf-after--p" id="f2e5" name="f2e5" style="--baseline-multiplier: 0.17; background-color: white; color: rgba(0, 0, 0, 0.84); font-family: medium-content-serif-font, Georgia, Cambria, "Times New Roman", Times, serif; font-size: 21px; letter-spacing: -0.003em; line-height: 1.58; margin-top: 29px;">
One can argue; what about bitTorrent, Popcorn Time, etc? These are examples of a software with reasonably easy to access to content. Yet, almost no body uses them nowadays. Here comes another gatekeeper, the hardware/software coupling. A combination of copyright laws, and Google/Apple’s control on mobile operating systems, makes it easy for Apple, for example, to not allow you to install any of these softwares on your phone or tablet. Who still uses laptops anyway! Even if I find a way to jailbreak my phone and install Popcorn Time on it, I would less likely succeed doing the same for my Apple TV or Alexa. Service providers would also collaborate in blocking those softwares for the sake of copyright protection.</div>
<div class="graf graf--p graf-after--p" id="5073" name="5073" style="--baseline-multiplier: 0.17; background-color: white; color: rgba(0, 0, 0, 0.84); font-family: medium-content-serif-font, Georgia, Cambria, "Times New Roman", Times, serif; font-size: 21px; letter-spacing: -0.003em; line-height: 1.58; margin-top: 29px;">
A hardware manufacturer, whether that hardware is a mobile phone, smart speaker, smart watch, smart TV or smart anything, do couple his own hardware and software nowadays. While most FOSS advocates are still busy fighting the evil Microsoft Windows, they are not aware that both of them and Microsoft have already missed the new battlefield’s location.</div>
<h4 class="graf graf--h4 graf-after--p" id="4a75" name="4a75" style="--baseline-multiplier: 0.22; background-color: white; color: rgba(0, 0, 0, 0.84); font-family: medium-content-sans-serif-font, "Lucida Grande", "Lucida Sans Unicode", "Lucida Sans", Geneva, Arial, sans-serif; font-size: 26px; letter-spacing: -0.012em; line-height: 1.22; margin: 30px 0px 0px -1.63px;">
FOSS is for businesses not consumers now!</h4>
<div class="graf graf--p graf-after--h4" id="c70d" name="c70d" style="--baseline-multiplier: 0.17; background-color: white; color: rgba(0, 0, 0, 0.84); font-family: medium-content-serif-font, Georgia, Cambria, "Times New Roman", Times, serif; font-size: 21px; letter-spacing: -0.003em; line-height: 1.58; margin-top: 6px;">
It’s clear from the examples I’ve just mentioned earlier, that though businesses use FOSS, in a consumer’s everyday life all the softwares they use are closed source ones.</div>
<div class="graf graf--p graf-after--p" id="aa4f" name="aa4f" style="--baseline-multiplier: 0.17; background-color: white; color: rgba(0, 0, 0, 0.84); font-family: medium-content-serif-font, Georgia, Cambria, "Times New Roman", Times, serif; font-size: 21px; letter-spacing: -0.003em; line-height: 1.58; margin-top: 29px;">
Unlike individuals, business can hire people (devops) to build their own cloud, and maintain it for them. Yet, the fact that most of the softwares businesses use are free doesn’t mean that this will be the case in the future too. Check my first paragraph again. If everything I run, runs on AWS. Actually, I do not recall running a single line of code on my own laptop for weeks, I run it all in the cloud. Which means, if tomorrow, Python and all the libraries I use became closed source softwares, I wouldn’t notice a difference as long as the cloud provider my business uses will still provide them as part of its package.</div>
<h4 class="graf graf--h4 graf-after--p" id="6e8b" name="6e8b" style="--baseline-multiplier: 0.22; background-color: white; color: rgba(0, 0, 0, 0.84); font-family: medium-content-sans-serif-font, "Lucida Grande", "Lucida Sans Unicode", "Lucida Sans", Geneva, Arial, sans-serif; font-size: 26px; letter-spacing: -0.012em; line-height: 1.22; margin: 30px 0px 0px -1.63px;">
We need RMS who understands the cloud and the blockchain.</h4>
<div class="graf graf--p graf-after--h4" id="0cb4" name="0cb4" style="--baseline-multiplier: 0.17; background-color: white; color: rgba(0, 0, 0, 0.84); font-family: medium-content-serif-font, Georgia, Cambria, "Times New Roman", Times, serif; font-size: 21px; letter-spacing: -0.003em; line-height: 1.58; margin-top: 6px;">
Back in the 80’s and 90’s when the likes of Richard Stallman (RMS), Eric. Raymond (ESR) and Linus Torvalds worked on their Free and Open Source Software ideas (<a class="markup--anchor markup--p-anchor" data-href="https://advox.globalvoices.org/2013/01/26/free-and-open-source-software/" href="https://advox.globalvoices.org/2013/01/26/free-and-open-source-software/" rel="nofollow noopener" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0.54); background-color: transparent; background-image: linear-gradient(rgba(0, 0, 0, 0.68) 50%, rgba(0, 0, 0, 0) 50%); background-position: 0px 1.07em; background-repeat: repeat-x; background-size: 2px 0.1em; text-decoration-line: none;" target="_blank">check the difference between Free and Open Source Software here</a>), they understood both the operating systems at that time and the legal frameworks softwares were created in.</div>
<div class="graf graf--p graf-after--p graf--trailing" id="ea53" name="ea53" style="--baseline-multiplier: 0.17; background-color: white; color: rgba(0, 0, 0, 0.84); font-family: medium-content-serif-font, Georgia, Cambria, "Times New Roman", Times, serif; font-size: 21px; letter-spacing: -0.003em; line-height: 1.58; margin-top: 29px;">
It’s perfectly fine to admit that Free and Open Source Software ideas are dead, since the compute environments and legal frameworks they were created in are also gone. <span class="markup--strong markup--p-strong" style="font-weight: 700;"><em class="markup--em markup--p-em" style="font-feature-settings: 'liga' 1, 'salt' 1;">What matters now is that new advocates who understand the cloud economy, the legal frameworks of today, and maybe technologies like the blockchain and smart contracts, and come up with fresh and modern alternative to FOSS.</em></span></div>
<div class="blogger-post-footer"><script expr:src='"http://feeds.feedburner.com/~s/GreenData?i=" + data:post.url' type="text/javascript" charset="utf-8"></script></div>Anonymoushttp://www.blogger.com/profile/04040899001187322598noreply@blogger.com3tag:blogger.com,1999:blog-10943611.post-49923372328328166932014-06-23T06:08:00.003+03:002014-10-31T09:13:55.898+02:00Python's Getters and Setters<b>You can read a better formatted version of this post <a href="http://tarekamr.appspot.com/blog/python-getters-setters.html" target="_blank">here</a>.</b><br />
<br />
Just learn a new python feature called @property. Let's say we create a class called Circle as follows.<br />
<br />
<pre>class Square:
side = 2
area = side * side
s = Square()
</pre>
<br />
Now:<br />
<pre>>>> s.side
2
>>> s.area
4
</pre>
<br />
However:<br />
<pre>>>> s.side = 3
>>> s.side
3
>>> s.area
4
</pre>
<br />
Not cool! How to solve that?<br />
<br />
<pre>class Square:
side = 2
@property
def area(self)
return self.side * self.side
s = Square()
</pre>
<br />
See now.<br />
<br />
<pre>>>> s.side = 3
>>> s.side
3
>>> s.area
9
</pre>
<br /><div class="blogger-post-footer"><script expr:src='"http://feeds.feedburner.com/~s/GreenData?i=" + data:post.url' type="text/javascript" charset="utf-8"></script></div>Anonymoushttp://www.blogger.com/profile/04040899001187322598noreply@blogger.com0tag:blogger.com,1999:blog-10943611.post-5051319515211830702014-02-09T11:41:00.000+02:002014-02-09T11:50:35.490+02:00Introduction to Data Science<div style="text-align: center;">
The <a href="http://www.askdeveloper.com/" target="_blank">AskDeveloper</a> group organized this hangout about Data Mining, and Machine Learning in particular. The <a href="https://www.youtube.com/watch?v=t2rMG1aaumM" target="_blank">video</a> is in Arabic, yet <a href="http://tarekamr.com/slides/datascience" target="_blank">the slides</a> are in English.</div>
<div style="text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.youtube.com/embed/t2rMG1aaumM?feature=player_embedded' frameborder='0'></iframe></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
،شوية دردشة عن تنقيب وتحليل البيانات والتعلم الآلي، الفيديو بالعربي</div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<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://www.youtube.com/watch?v=t2rMG1aaumM" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj852_q4Mpcj_NuVyPo7iZ-OylguwwT0nJ6CXMuS0BYt6CcfoVuAHv3tmvEQz-dkEORN10rkMROGp25ATZeOZRbVaLucNwNJg649pkXYxxXtg_dld5vjPVnguErXGUfTYN-IX34tA/s1600/classify2-linear.png" height="196" title="Data Science, Linear Classifier" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">إضغط على الصورة لمشاهدة تسجيل الحلقة</td></tr>
</tbody></table>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="blogger-post-footer"><script expr:src='"http://feeds.feedburner.com/~s/GreenData?i=" + data:post.url' type="text/javascript" charset="utf-8"></script></div>Anonymoushttp://www.blogger.com/profile/04040899001187322598noreply@blogger.com0tag:blogger.com,1999:blog-10943611.post-56351032206033033252014-01-10T20:41:00.000+02:002014-01-10T20:41:40.449+02:00Github Traffic AnalysisGithub now shows traffic analysis to those who visit the repositories there.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://github.com/gr33ndata/irlib/graphs/traffic" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_t6U7kTOFPBzWNODOKnEdYXePGcUAD98kR44thXwA1URkYSpbfLWdYG_rzmhLjYHikxF-y_O8a40ycKfUN2idKymnusJpLYZVQ3DmVYHlaBEntdMrVh2hzftNw91pnkoBeSsqcw/s1600/Screen+Shot+2014-01-10+at+20.35.12.png" height="242" title="Github traffic analysis" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
The new traffic analysis page shows the top referring websites and the top visited files in the repo as well as a time-series chart for the visits and bounce rate.<br />
<br /><div class="blogger-post-footer"><script expr:src='"http://feeds.feedburner.com/~s/GreenData?i=" + data:post.url' type="text/javascript" charset="utf-8"></script></div>Anonymoushttp://www.blogger.com/profile/04040899001187322598noreply@blogger.com0tag:blogger.com,1999:blog-10943611.post-44380241694644493502013-12-17T15:37:00.000+02:002013-12-17T15:41:12.897+02:00We Preach by SpammingOnce upon a time, I stumbled upon an online Quran application, back then I was studying human-computer interaction as a part of my MSc. degree, so I commented on twitter that most of the online Quran readers need to reconsider their design from a usability point of view.<br />
<br />
Since then, and I receive dozens of spam tweets each day. They come from different people, yet they all contain the exact same message.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwCedfXyZ3uHdXoWlyoQRKf6moS0vq0rngBy8eXjr0sSW2bWniO4NySb3mZaA3hWTpkV9XlCRjN1VlZP4hVjz1Te3cbFVXfwisgN_KeUmp5zJFXCK2vTpCMwH8GV2lCxIp1Bz_-Q/s1600/Screen+Shot+2013-11-16+at+09.03.09.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwCedfXyZ3uHdXoWlyoQRKf6moS0vq0rngBy8eXjr0sSW2bWniO4NySb3mZaA3hWTpkV9XlCRjN1VlZP4hVjz1Te3cbFVXfwisgN_KeUmp5zJFXCK2vTpCMwH8GV2lCxIp1Bz_-Q/s320/Screen+Shot+2013-11-16+at+09.03.09.png" /></a></div>
<br />
My only interpretation for this is that <a href="http://quran.ksu.edu.sa/">Quran.ksu.edu.sa</a> has an application that those pople trust and it uses their accounts to send those spammy messages to me.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgcO7dKHFqYXyK2NU_inNB-NpRHqRja47Mvqzc1y-MdR91tE_4TrNrw-ul7lV9eHWkmPlMQHdprj-APdfoJrIFJxWFCdfFZfbTeoAMHRBZqh9rAWXzDIU7nB0dzwFMm8diXxa4TNg/s1600/Screen+Shot+2013-11-16+at+09.03.32.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgcO7dKHFqYXyK2NU_inNB-NpRHqRja47Mvqzc1y-MdR91tE_4TrNrw-ul7lV9eHWkmPlMQHdprj-APdfoJrIFJxWFCdfFZfbTeoAMHRBZqh9rAWXzDIU7nB0dzwFMm8diXxa4TNg/s320/Screen+Shot+2013-11-16+at+09.03.32.png" /></a></div>
<br />
I sent multiple spam reports to twitter, yet they don't even respond. Isn't it strange that some applications think that it is ok to abuse the trust of their users and spam someone in order to grab his attention to give them feedback about their application!? Isn't it disappointing that twitter don't give a shit to my daily spam reports!?<br />
<br /><div class="blogger-post-footer"><script expr:src='"http://feeds.feedburner.com/~s/GreenData?i=" + data:post.url' type="text/javascript" charset="utf-8"></script></div>Anonymoushttp://www.blogger.com/profile/04040899001187322598noreply@blogger.com1tag:blogger.com,1999:blog-10943611.post-22700469549964594552013-09-30T15:23:00.003+02:002013-09-30T15:24:36.668+02:00A Quick Intro. to NumPyFor me, NumPy is a Python list on steroids. You can use it to create multidimensional arrays and matrices.<br />
<br />
The convention is to import it as follows:<br />
<br />
<b>import numpy as np</b><br />
<br />
To create an array of numbers between 0 and 9, you could use the following command:<br />
<br />
<b>x = range(9)</b><br />
<br />
To convert that list into a NumPy array, you can write:<br />
<br />
<b>x = np.array(range(9))</b><br />
<br />
And to make you life easier, there is a shorthand for the above command:<br />
<br />
<b>x = np.arange(9)</b><br />
<br />
So far, we have been creating one dimensional array. However, there are ways to reshape the arrays. The reshape() method when applied on an array, it returns a reshaped version of it without changing the original object. To reshape the original object itself, then use resize() instead.<br />
<br />
<b>y = x.reshape(2,5)</b><br />
<br />
The above command create a 2-dimensional array of 2 rows and 5 columns. You can create a much dimensional arrays as you want. See the command below for a 3*4*5 array.<br />
<br />
<b>y = np.arange(3*4*5).reshape(3,4,5)</b><br />
<br />
The mathematical operations '+', '-', '/' and '*' are applied elementwise.<br />
<br />
<b>x = np.arange(10)</b><br />
<b><br /></b>
<b># To multiply each element of x by 10</b><br />
<b>y = x + 10</b><br />
<b><br /></b>
<b># To multiply each element of x by itself</b><br />
<b>y = x + x</b><br />
<br />
To do a Matrix Multiplication though:<br />
<br />
<b># Create a 3 * 5 Matrix</b><br />
<b>A = np.arange(15).reshape(3,5)</b><br />
<b><br /></b>
<b># Create a 5 * 2 Matrix</b><br />
<b>B = np.arange(10).reshape(5,2)</b><br />
<b><br /></b>
<b># Dot product gives you a 3 * 2 Matrix</b><br />
<b>y = y = np.dot(A, B)</b><br />
<br />
Just like lists, you can get parts of arrays<br />
<br />
For original lists:<br />
<br />
<b>A = range(10)</b><br />
<b>A[2:5] # [2, 3, 4]</b><br />
<br />
For NumPy Arrays<br />
<br />
<b>B = arange(10)</b><br />
<b>B[2:5] # array([2, 3, 4])</b><br />
<br />
However, you can set some elements of the array as follows<br />
<br />
<b>B[2:5] = 1337</b><br />
<br />
But, you cannot do the same to lists.<br />
<br />
<b>A[2:5] = 1337 # TypeError: can only assign an iterable</b><br />
<br />
For statisticians, there are also the following functions<br />
<br />
<b>x = np.arange(5) + 1</b><br />
<b>x.mean() # 3.0</b><br />
<b>x.max() # 5</b><br />
<b>x.min() # 1</b><br />
<b>x.std() # 1.414</b><br />
<br />
You can also access elements of the array using start, stop and a step:<br />
<br />
<b>x = np.arange(10)</b><br />
<b>x[2:7:2] # array([2, 4, 6])</b><br />
<br />
Or access specific elements, let's say elements 1, 5 and 6<br />
<br />
<b>x[[1,5,6]] # array([1, 5, 6])</b><br />
<br />
Similar to reshape() and resize(), ravel() converts a multidimensional array into a one-dimensional array, while transpose() turns rows into columns and vice versa.<br />
<br />
If you program in R, you will not miss their way of accessing elements of array that meet a certain condition.<br />
<br />
<b>x = np.arange(10)</b><br />
<b>x[x>4] # array([5, 6, 7, 8, 9])</b><br />
<b>x[x%2 == 1] # array([1, 3, 5, 7, 9])</b><br />
<br />
If you are having an array of elements that are either True or False.<br />
<br />
<b>x = np.array([True, False, True, True])</b><br />
<div>
<b><br /></b></div>
<b>x.all() # Only True if all elements are True</b><br />
<b>x.any() # Only True if any elements are True</b><br />
<br />
Finally, there is a repeat() that repeats each element of the array n times<br />
<br />
<b>x = np.array([1, 2])</b><br />
<b>x.repeat(3) # array([1, 1, 1, 2, 2, 2])</b><br />
<br />
That's all folks for today.<br />
Check <a href="http://wiki.scipy.org/Tentative_NumPy_Tutorial" target="_blank">the following tutorial</a> for more information.<br />
<br />
<br />
<br />
<br />
<br />
<br /><div class="blogger-post-footer"><script expr:src='"http://feeds.feedburner.com/~s/GreenData?i=" + data:post.url' type="text/javascript" charset="utf-8"></script></div>Anonymoushttp://www.blogger.com/profile/04040899001187322598noreply@blogger.com0tag:blogger.com,1999:blog-10943611.post-33061154897333523212013-09-26T12:30:00.000+02:002013-09-26T12:43:03.940+02:00Middle East Relationships InfographicsThe Radio Free Europe - Radio Libre (RFE/RL) published <a href="http://www.rferl.org/contentinfographics/infographics/25103887.html">an infographic summarizing the political relationships between the Middle Eastern countries</a>. The graph comes after <a href="http://www.washingtonpost.com/blogs/worldviews/wp/2013/08/26/the-middle-east-explained-in-one-sort-of-terrifying-chart/">a similar one</a> that was made by the Egyptian blogger, The Big Pharaoh (@TheBigPharaoh), and was published in the Washington Post.<br />
<br />
I'd like to discuss the two infographics from a design point of view here. So, let me start with the one made by RFE/RL.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://www.rferl.org/contentinfographics/infographics/25103887.html" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgWc4jhfwukSTv5UgEbH2QWau9UcVt09ckAVBCQNT8ktF6xMVror07-ULZJOYGtFe3rsxTZL7kC56xJW1BHNhCrEsLXLSutB0NDpz4KDMDIpdr3QBKg7_lqjZQpMvPOl8GAOXgNKQ/s320/MiddleEast-InfoGraph.png" /></a></div>
<br />
The main point of the graph is to show the relationships between those countries, i.e. friends and foes. However, as you can see, it is not possible to tell this from the first look. All dots are the same, black dots of the same size. Well, may be they are inviting us to interact with those dots by clicking on them.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://www.rferl.org/contentinfographics/infographics/25103887.html" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhocHDTjRTNoI_-0auKWVQqmPWihhQl7vFRUfoNDgXMsgzB4bAsvf6rkQw1_DbQvc9LHeJVaOFJGJvQKopbtQYKvPo62ZZdu53YXAUBKYGFdP-ZKLxc5gbC4JeqEv-DYZmSZ5cVrw/s320/MiddleEast-InfoGraph-Popup.png" /></a></div>
<br />
So, there are messages hidden behind the dots, but this is just text. Hmmm, couldn't those same messages be written in an article then, or in a table? What is the use of the graph then?<br />
<br />
Why is it that the United Stated is there on one axis but not the other. Same for Iraq. Also relationships are supposed to be symmetrical, yet the chart isn't. You can track the lines between Iran and Israel, but there are no lines between Israel and Iran. I know, this is a sort of redundancy, however, it is either the graph is to be redesigned, otherwise, this way is confusing.<br />
<br />
Here comes The Big Pharaoh's graph then.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://www.washingtonpost.com/blogs/worldviews/wp/2013/08/26/the-middle-east-explained-in-one-sort-of-terrifying-chart/" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgluBs6g1_GXWuy2LykFffSLkA9muYc9pefqCgXrILfKCz_5_-t72sBB2TgEXuVjsmzKb-dglvVnX67F4eA9QZHfKCpszqVr5wLyHUwYvTASQVZbL5dxFDHCm1lbhcNANm-RHNrAQ/s320/Screen+Shot+2013-09-26+at+10.44.16.png" /></a></div>
<br />
This times relations are supposed to be clearer from the first look. Different line colours reflect different relationships. In this graph countries are represented by points while the relationships between them are represented by lines. While on the RFE/RF's graph, it was the other way round. Entities are placed in the form of a matrix where dots represents the relationships between them and the countries are represented by the horizontal and vertical lines. <br />
<br />
In Jacques Bertin's paper, <a href="https://docs.google.com/file/d/0B2bldjoHWBdZdHV5U1JDYVhJMDg/edit?usp=sharing" rel="nofollow" target="_blank">The Matrix Theory of Graphics</a>, he explained that the network representation (e.g. The Big Pharaoh's graph) is more useful in representing the topographical structure of the elements and how each pair of them are connected on a micro level. While the matrix representation on the other hand is more flexible in reordering the element in order to show how the relationships between elements on a macro level. You can cluster your elements first to show groups of allies and foes. Changing the dots colours or sizes gives you a third dimension to move in. As you can see in the network graph above, lines are cluttered and a bit hard to follow.<br />
<br />
Can you sketch a better representation of those relationships then?<br />
<br /><div class="blogger-post-footer"><script expr:src='"http://feeds.feedburner.com/~s/GreenData?i=" + data:post.url' type="text/javascript" charset="utf-8"></script></div>Anonymoushttp://www.blogger.com/profile/04040899001187322598noreply@blogger.com0tag:blogger.com,1999:blog-10943611.post-83341357095426245212013-05-28T23:22:00.003+02:002013-05-28T23:23:18.574+02:00Git ForkingAfter <a href="http://gr33ndata.blogspot.co.uk/2013/01/git-for-dummies-like-myself.html">our previous guide to github</a>, now, let's say you want to contribute to a project already existing on github, how to do that?<br />
<br />
First thing first, you go to the projects repository and fork it using the button shown in the figure below.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjB_mUHAp2qE7aGpo5aBblywssukQ6rTq1gDtR8DdfYO8DcoAmiBnhVRPWm_4L77HreCi1LY6KMbDAt19rOe5Yo5SQZNbMdexFBVWZC3Js0tP3_OL3BBSFOmtMaD9f8WDkwUA5mQg/s1600/Screen+Shot+2013-05-28+at+22.13.06.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="57" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjB_mUHAp2qE7aGpo5aBblywssukQ6rTq1gDtR8DdfYO8DcoAmiBnhVRPWm_4L77HreCi1LY6KMbDAt19rOe5Yo5SQZNbMdexFBVWZC3Js0tP3_OL3BBSFOmtMaD9f8WDkwUA5mQg/s320/Screen+Shot+2013-05-28+at+22.13.06.png" width="320" /></a></div>
<br />
After that, you will be redirected to the page of the forked repository. You will also be given a URL for the forked repository as shown in the figure below.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgobGSvytPHvNtdvkdqsxiI5LqXlTFD5SvtKC8AbJIrglWMMxn65jewhrIj8c_LklyvJKpqog6lOvSYS2SLebsANj93f1p523v0NHGDyOnSR8TjBkfb_tPs2LaIQKMY2bQXYt7hhA/s1600/Screen+Shot+2013-05-28+at+22.13.28.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="60" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgobGSvytPHvNtdvkdqsxiI5LqXlTFD5SvtKC8AbJIrglWMMxn65jewhrIj8c_LklyvJKpqog6lOvSYS2SLebsANj93f1p523v0NHGDyOnSR8TjBkfb_tPs2LaIQKMY2bQXYt7hhA/s400/Screen+Shot+2013-05-28+at+22.13.28.png" width="400" /></a></div>
<br />
Now, you create a new director, go there and type the following commands:<br />
<br />
<code class="plain plain">$ git init</code><br />
<br />
<code class="plain plain">$ git remote add origin [the URL show above]</code><br />
<br />
<code class="plain plain">$ git pull -u origin master</code><br />
<br />
<br />
And, that's it!<div class="blogger-post-footer"><script expr:src='"http://feeds.feedburner.com/~s/GreenData?i=" + data:post.url' type="text/javascript" charset="utf-8"></script></div>Anonymoushttp://www.blogger.com/profile/04040899001187322598noreply@blogger.com0tag:blogger.com,1999:blog-10943611.post-52643436216712787572013-05-19T15:56:00.001+02:002013-05-19T15:56:45.617+02:00Nike+ first time user's experienceI really want to know if those people behind Nike+ running app on iPhone have ever heard of something called HCI/UX or not!?<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/AVvXsEgyDRiTqhZlbXd2pDK5F_ICPX4qiqjiWtRGyRB41Q2P7yaHhyphenhyphenXO6DrwCCGruDzfcB2F7LpFl3rp0IHWyheNJea3JHB_s_xRfKH46dLJuu0coRItD-hEBEvuondK2xbJDfBO9BB0vw/s1600/NikeRunning.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="235" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyDRiTqhZlbXd2pDK5F_ICPX4qiqjiWtRGyRB41Q2P7yaHhyphenhyphenXO6DrwCCGruDzfcB2F7LpFl3rp0IHWyheNJea3JHB_s_xRfKH46dLJuu0coRItD-hEBEvuondK2xbJDfBO9BB0vw/s320/NikeRunning.jpg" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Nike+ running app</td></tr>
</tbody></table>
<br />
Today I was using their app for the first time, and it asked me to login, giving me two options for that: A normal login with email and password or to login via Facebook. Despite the fact that I hate apps that contaminate my Facebook timeline with their updates once I sign in with Facebook, I chose the Facebook option as I struggle with remembering passwords for the endless apps one use everyday.<br />
<br />
Signing with Facebook is meant to save us the effort of entering passwords for each application, right? Well, seems that Nike+ app doesn't agree with that. After signing with Facebook they asked me again to enter my birthdate, gender, and all those information they can simply grab from my Facebook account, and guess what, they asked me to create a new password too. What the eff!!? They didn't stop here, they even gave me a list of 5 criterion I have to adhere to when choosing my password. Choosing a weak password is my own problem, not theirs. They shouldn't tell me how my password should look like. Additionally, come on, I can choose a password that doesn't meet their password policy yet still stronger than the ones meeting it. So, again, I am the only one who have to decide how my password should look like here. <div class="blogger-post-footer"><script expr:src='"http://feeds.feedburner.com/~s/GreenData?i=" + data:post.url' type="text/javascript" charset="utf-8"></script></div>Anonymoushttp://www.blogger.com/profile/04040899001187322598noreply@blogger.com0tag:blogger.com,1999:blog-10943611.post-50390257739421291842013-04-13T21:36:00.002+02:002013-04-13T22:30:10.649+02:00True or False: Egypt's First Locally Produced Tablet You might have read <a href="http://english.ahram.org.eg/NewsContent/3/12/69020/Business/Economy/Egypt-launches-its-first-locally-produced-smart-ta.aspx">the news</a> that the state-owned electronics firm Katron, has produced Egypt's first locally produced smart tablet, under the trademark 'Inar.' However, the debate now is whether the correct term is 'produced' or 'assembled'. There are two camps arguing now. On the one hand, there are those who find it a huge achievement and attacking local media for not shedding the light on such great news. While on the other hand, there are those who argue that it is just assembled from imported components, and it can hardly be called "an achievement". That's why I decided here to give my humble opinion about the issue.<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="http://egyptianchronicles.blogspot.co.uk/2013/04/meet-our-egyptian-tablet-with-not-so.html" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="213" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_8wzOltWRY8m7AXz36bcDeBvKoZcVWvs3xkqepRs9A-_rkypHcxGxAlLdMfTYBFplqmE27rM76zvMu86Lreg6Hpy7WSdg7ZuEzz89BCUbnvGWEvx5-m5IlNXvNFwNAhxqFBQuyQ/s320/EgyptInar.jpg" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Inar, assembled in Egypt</td></tr>
</tbody></table>
<br />
First of all, let's agree that we are not living in the Industrial Age anymore. We now live in the age of outsourcing and <a href="http://gr33ndata.blogspot.co.uk/2013/03/adjacent-vs-incremental-innovation-in.html">digital disruption</a>. What I mean by this, is that the argument of technical components not made here is not really a valid argument. Apple, Samsung, Dell, Cisco, etc. do not make every single component of their products. Let's not forget that Apple use components made by its competitor Samsung. They may decide to produce a chipset or two, they may rely on home-made Operating System, but they also may decide to just rely software and hardware components made by others. In other words, we are in fact asking the wrong question here. What really matters is the following:<br />
<br />
If the Egyptian company succeeded in producing a competitive product that it can use to go to the market and compete against other vendors, then I call this an achievement, even if none of the products' components is locally made. Whereas, on the other hand, if it is 100% locally-made, yet its producers cannot convince anyone to buy it, then I can hardly call this an achievement. The asian electronics firms are open market to everyone. Any company can go to that market and get off-the shelf components, whether they are processors, LCD screens or any other components. Android, Windows and Linux are also available for any manufacturer to use them if they want to. In such market, where you and your competitors have access to almost the same resources, your competitive advantages can come from your low price, better design, more advanced features, or even brand name. That's why, the question now, whether 'Inar' is an appealing products to tablet customers, from price or features or whatsoever point of view, or it is just assembled for the sake of assembling a local tablet in Egypt? If it is the formet, then let's hurray the Egyptian achievement, if now, let's question the government's unwise spending, since Katron is a state-owned firm.<br />
<br />
<i>P.S. The first known tablet user in history was in Egypt, by the way. Hint, hint, Moses! ^_^</i><div class="blogger-post-footer"><script expr:src='"http://feeds.feedburner.com/~s/GreenData?i=" + data:post.url' type="text/javascript" charset="utf-8"></script></div>Anonymoushttp://www.blogger.com/profile/04040899001187322598noreply@blogger.com7tag:blogger.com,1999:blog-10943611.post-45553376745548973432013-03-29T12:54:00.004+02:002013-03-29T12:54:50.740+02:00Adjacent vs Incremental Innovation in Digital AgeI've just finished reading a book called "<a href="http://www.amazon.co.uk/gp/product/1477800131/ref=as_li_ss_tl?ie=UTF8&camp=1634&creative=19450&creativeASIN=1477800131&linkCode=as2&tag=gredat-21">Digital Disruption: Unleashing the Next Wave of Innovation</a>", by James McQuivey. I enjoyed reading it, and that's why I'd like to share a quick review for the book here.<br />
<br />
"Instead of asking How can we make a new product that we can successfully sell? the disruptor asks: How can we give people something they really want". Replace "Make" with "Give", "Product" with "People" and "Sell" with "Want".<br />
<br />
This sentence summarises the main idea of the book. In digital age, the cost of producing new products is much lower than it was one decade ago. And the author is not only talking about digital products, but analog ones too. Hence, it is all about innovation now. People want experience rather than products. It doesn't matter if you make it, or if you can partner with others and use free tools to give that experience to your users. Your focus should be on what your users want rather than on what you can produce and sell. The two concepts seem to be similar, but if you think about it, you will find them leading to different set of priorities when you are trying to innovate. The author added later on, "R& D teams have a tendency to confuse product features with customer benefits. They assume that more features equals more benefits. This is not true".<br />
<br />
One other quote that I liked is, "When companies adopt technology, they do old things in new ways. When companies internalize technology, the find entirely new - disruptive - things to do".<br />
<br />
He also set some differences between two concepts of innovation. Incremental versus adjacent innovation. Incremental innovations focuses on the the current product you have, the current customers you target, and the current process you use to make your products. Whereas, Adjacent innovation leads you to explore new markets, and new experiences to offer to new users. To do so, you need to think of competition differently, it is not those who sell the same products as you do, but anyone offering good experience to their users. Take Nike Runner app for example, they did not limit themselves to other shoe-makers, they rather explored new areas, they witnessed the likes of Apple and Facebook, they learnt from them how people want to share their activities, and how gamification is invading social services. Nike is not an app maker, it is not part of their production process, but this didn't stop them from moving to one new adjacency to explore new customers and new experiences to offer to those customers. They may choose to partner with Apple or compete against it in order to offer such experience to their users. It doesn't matter whether they choose the former or the latter. Because in the digital disruptive age, what really matter is offering your customer's value not products.<br />
<br />
<br />
<div style="text-align: center;">
<iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm-uk.amazon.co.uk/e/cm?lt1=_blank&bc1=FFFFFF&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=gredat-21&o=2&p=8&l=as4&m=amazon&f=ifr&ref=ss_til&asins=1477800131" style="height: 240px; width: 120px;"></iframe><br /></div>
<div class="blogger-post-footer"><script expr:src='"http://feeds.feedburner.com/~s/GreenData?i=" + data:post.url' type="text/javascript" charset="utf-8"></script></div>Anonymoushttp://www.blogger.com/profile/04040899001187322598noreply@blogger.com0tag:blogger.com,1999:blog-10943611.post-39404241981976450252013-01-30T20:01:00.003+02:002013-04-24T20:03:29.199+02:0010 Steps to Startup (or more)Today I attended a session by <a href="http://www.mdraycott.com/">Matthew Draycott</a> (@<a href="https://twitter.com/DraycottMC">DraycottMC</a>) about how to start your own startup. I know, there are hell lot of entrepreneurial seminars, books and real-TV shows (Matt called <a href="http://www.bbc.co.uk/programmes/b006vq92">Dragon's Den</a> entrepreneurial pornography, because it has nothing to do with real life). Well, I was saying that I wasn't expecting much from the session, but that fact is, I found it very good and inspiring, so I wanted to share the main points of it here.<br />
<br />
The first thing he said, is that unlike many other people, he finds recession a good opportunity for starting a business, it learns you how to start a learn startup, than can survive hard moments later on.<br />
<br />
Now here are the steps:<br />
<ol>
<li>Research: You need to be an expert in your niche, and you need to research the following three things: Your customers, competitors and collaborators. Customers can be your best friends or worst enemies, and to sell your product you have to convince your customers why you are better than your competitors not why your competitors such. You still can learn from your competitors mistakes though. You need to ask "Who, what, where, when, why and how" about them, and keep a database of all them. A database can be your calendar, address book, twitter lists, but it has to be there.</li>
<li>Business Model: He stressed that it is better seen as business model and business plan. Because market changes more quickly than you expect, so you need a model that is agile enough and can embrace those changes than a fixed plan. He referred to <a href="http://alexosterwalder.com/">Alexander Osterwalder</a> here, and his books about <a href="http://www.amazon.com/Osterwalder-Alexander/e/B0037M2W0E/">business models</a>.</li>
<li>Value: You need to create a value to your customers, and there are three pillars of value: Newsness (think of what makes iPhone 4S buys iPhone 5 ones it is out), Performance (think how Google Search just works as it promises to do) and a Brand (think of those people who pay £400 in a <a href="http://www.johnnycupcakes.com/blog/">Johnny Cupcakes t-shirts</a>, although they might cost few quids just because they like the brand and collect those tees).</li>
<li>Channel: A business without a channel is just an idea. How are you connected to your customers? The channel can define your value:</li>
<ul>
<li>Personal Assistance: Your value comes from knowing everything about your customers, they might be just few ones then, but you just know them that you can build custom products or services for them.</li>
<li>Self service: A lot of business nowadays, especially retails, are moving to make customers service themselves, cashiers are being replaced with machines. So, in this case, your value is to make people do their shopping quickly.</li>
<li>Co-creation: Your value is to sell your customers tools to build their products rather than selling the product itself. Think of 3d printing, Apple's app store from the developers point of view.</li>
<li>Automated Service: This sounded like Self service to me, couldn't get the difference.</li>
</ul>
<li>Revenue and Pricing: You need revenue to sustain as a person and as a startup as well, so be brave to step away when your business comes out not to generate a decent amount of money. As for the pricing, there are strategies for how to price your product:</li>
<ul>
<li>Cost plus: Just add some margin to your cost </li>
<li>Skimming: You know there is a niche to buy what you make no matter what, so price based on that, to cover your cost, R&D, etc. Again, think of an iPhone.</li>
<li>Loss leaders: Be the cheapest ever. Think of Pound Land (now there is even 99P), but this is very risky strategy, and you cannot compete on prices all the time, and even worse, once people take you for that price, it is harder to raise your prices again to meet any future expenses</li>
<li>Penetration: Not below market value as Loss leaders, but below top market value. Think of LG to Sony, or Kia to Honda.</li>
<li>Freemium: Think of drug dealers, give you something for free, wait for you to get attached, then sell you more stuff. Play a game for free, but pay to download next level. </li>
</ul>
<li>Resources: Know where to find them.</li>
<li>Partners: No one can start a business on his own. </li>
<li>Break the model: Now after creating your model, you need to test it. Compare your assumption from the model to data from your research. And fee free to adapt the model.</li>
<li>MVP: Minimum (start small, and keep it simple), Viable (Be cheap when it comes to your initial investment) and Product (Have your product ready). If you are into software development, think of it as Torvalds' "release early, release often". </li>
<li>Evaluate: Put your mode in the wild and test it. Look for criticism, because most of your friends, family and acquaintance are usually too decent to give you real criticism.</li>
<li>Pivot or Persevere: Basically, if market reaction is negative pivot, if positive persevere. Yet, this is something you can only learn by experience from as much success as well as even more failures.</li>
<li>Execute: Well, I am not live-blogging here, so I might have already explained some stuff in previous points.</li>
<li>Scale: Always keep in mind that your aim is to grow. You don't need to be as big as Google or Microsoft, but just grow, and remember, cash is what keeps your business ticking, or capital is your new king.</li>
<li>Repeat: If it is successful, do it again. But remember, market changes so copy your previous successes might not always succeed.</li>
</ol>
<div>
One final note, the session was way more useful and interesting than this post, and some points here might be more or less how I understod them not how they actually are, but I tried to summarise it for my own self. And here are <a href="https://speakerdeck.com/draycottmc/10-steps-to-start-up">the slides</a> for Matt's presentation.</div>
<div class="blogger-post-footer"><script expr:src='"http://feeds.feedburner.com/~s/GreenData?i=" + data:post.url' type="text/javascript" charset="utf-8"></script></div>Anonymoushttp://www.blogger.com/profile/04040899001187322598noreply@blogger.com1tag:blogger.com,1999:blog-10943611.post-91885536350875340622013-01-20T17:01:00.000+02:002013-01-20T17:01:10.861+02:00MacPorts FTWBeing new to Mac OS X, I am still struggling to memorize its different keyboard shortcuts and to make my fingers tell the difference between the command and control button. However, another thing I have been struggling with lately is, installing my favourite python modules on it. I had some problems installing Scipy and Scikit-learn in particular. I gave <a href="http://mxcl.github.com/homebrew/">Homebrew</a> a try among other things, but it came out that <a href="http://www.macports.org/">MacPorts</a> was the only way to install those modules successfully.<br />
<br />
It's simple and straight forward.<br />
<br />
Download and install the MacPorts package for your system <a href="http://www.macports.org/install.php">here</a>.<br />
<br />
On the command line, type the following commands<br />
<blockquote class="tr_bq">
$ sudo port install python<br />
$ sudo port install py-scipy<br />
etc...</blockquote>
You may aso specify a specific version for python to use, so, type 'python27' and 'py27-scipy' instead. For sure you can use it to download hundreds of other packages, see the list <a href="http://www.macports.org/ports.php">here</a>.<br />
<br />
If you, like me, messed a bit with your system paths, make sure to have a look at your '.bash_profile', or whatever shell you use, to see if any other paths set by brew are taking precedence or something.<br />
<br />
There is also 'sudo port selfupdate' to make sure all you packages are up-to-date. Check the guide for other useful commands <a href="http://guide.macports.org/">here</a>.<br />
<br /><div class="blogger-post-footer"><script expr:src='"http://feeds.feedburner.com/~s/GreenData?i=" + data:post.url' type="text/javascript" charset="utf-8"></script></div>Anonymoushttp://www.blogger.com/profile/04040899001187322598noreply@blogger.com0tag:blogger.com,1999:blog-10943611.post-80490979764686713112013-01-12T15:02:00.000+02:002013-01-12T15:48:31.103+02:00Ubuntu on Dell Inspiron 15R 5520 I am a true believer in Free Software, but I am really considering selling my soul to Apple sometime soon.<br />
<br />
For the past four days I have been stuggeling with my laptop's wifi, I installed 2 versions of Ubunto, one Mint, one Fedora and one Debian on it in the past few days. None was able to identify its internal wireless. I bought an external USB wireless device, some were not able to detect it, some needed ndiswrapper, and few were able to detect it, but the latter two, never worked properly, and the wireless connection kept going down.<br />
<br />
The sad truth, is that when I bought my Dell Inspiron 15r 5520 laptop, it came with Ubuntu 11.10 preinstalled on it. But when I upgraded it to 12.04 the wireless stopped working, I then realized that Dell was using a custom Ubuntu version with the wireless driver in there. I tried contacting Dell since then to send me the driver, but with no hope. I created a supprt ticket with them almost 6 months ago but with no hope. Just google "Dell Inspiron 15r 5520 Linux Wireless" to realize how Dell doesn't give a rat's shit to their customers. People keep on comming out with workarounds to solve the problem, and Dell simply don't care. But on the other hand, Ubuntu's site <a href="http://www.ubuntu.com/certification/hardware/201201-10377/">mentioned my Laptop</a> among their certified hardware, yet they added that "the standard images of Ubuntu may not work at all on the system or may not work well". So, I still have an option to pick another laptop that is certified by them. However, new models (the one you probably are going to buy) are not on their list yet. So, I am still not sure of that option.<br />
<br />
I've been using GNU/Linux since 2002, so may now is the time to switch to Apple, at least for some time, we need to separate for a while. As for Dell, I don'y think I'll buy anything from them again.<br />
<br /><div class="blogger-post-footer"><script expr:src='"http://feeds.feedburner.com/~s/GreenData?i=" + data:post.url' type="text/javascript" charset="utf-8"></script></div>Anonymoushttp://www.blogger.com/profile/04040899001187322598noreply@blogger.com4tag:blogger.com,1999:blog-10943611.post-61792724114342757502013-01-08T03:49:00.000+02:002013-01-08T03:52:23.355+02:00Time-Series Data ClassificationTime-series data are every where. They are important in stock market analysis, eco-<br />
nomics, sales forecasting, and the study of natural phenomena such as temperature and<br />
wind speed. The growing size of such data, as well as its variable<br />
statistical nature, make it a challenging problem for data mining algorithms to predict, classify. <br />
<br />
I've written <a href="https://docs.google.com/open?id=0B2bldjoHWBdZaGI3UjdrNVNrSUE">this report</a> as part of my <a href="http://www.uea.ac.uk/study/postgraduate/taught-degree/detail/msc-knowledge-discovery-and-datamining">postgraduate degree in data mining program in The University of East Anglia</a>. In it, I focus on time-series data classification by shedding the light on the researches done in this area.<br />
<br />
<a href="https://docs.google.com/open?id=0B2bldjoHWBdZaGI3UjdrNVNrSUE">Time-Series Data Classification</a><br />
<div class="blogger-post-footer"><script expr:src='"http://feeds.feedburner.com/~s/GreenData?i=" + data:post.url' type="text/javascript" charset="utf-8"></script></div>Anonymoushttp://www.blogger.com/profile/04040899001187322598noreply@blogger.com0tag:blogger.com,1999:blog-10943611.post-65291796566744832662013-01-06T01:25:00.000+02:002013-05-29T00:54:27.184+02:00Git for dummies like myselfWell, I had an account on <a href="https://github.com/gr33ndata/">github</a> since 2009, but I started using it recently. On the one hand, that was because I was a very lazy programmer, but on the other hand, it was because git used to confuse me.<br />
<br />
Now, after watching some <a href="http://try.github.com/levels/1/challenges/1">webcasts</a> and reading some <a href="https://help.github.com/">scattered documents</a>, I made myself a cheat-sheet, and I'd like to share it with you here.<br />
<br />
First thing first, git is not github. I mean, you can use your local git and never touch github, however, github is the de-facto git in the cloud nowadays, and sharing your code there is a very cool thing. Hint hint, some employers also value those who share beautiful code there. <br />
<br />
Second thing second, I will assume you are using <a href="http://www.gnu.org/gnu/gnu-linux-faq.html">GNU/Linux</a>, oh, I forgot to tell you, Windows sucks, and one of the main reasons I never understood git, was because I was using Windows back then. Mac should be fine too, however, I never touched an Apple laptop before, so I cannot really tell.<br />
<br />
<b>Initializing Git</b><br />
<br />
Now. let's say you are writing some cool software in some folder. In your beautiful GNU/Linux terminal get into that folder and type the folloing command:<br />
<br />
<code class="plain plain">$ git init</code><br />
<br />
This is a mandatory initial step, it tells git to creates a hidden folder there, ".git". This folder will be used by git from now on to do all its black magic.<br />
<br />
<b>How are you? How are they hanging? Que tal?</b><br />
<br />
Throughout your gitting life, you can use the following command anytime to check the status of your repository:<br />
<br />
<code class="plain plain">$ git status</code><br />
<br />
As opposed to status, log tracks history not the status current moment<br />
<br />
<code class="plain plain">$ git log</code><br />
<br />
Still confused a bit, give them a try now, or you know what, let me give you one more hint.<br />
<br />
<b>Help! I need some help</b><br />
<br />
The easiest way to ask for help, is to write git followed by the word help, then the command that you need to know more about.<br />
<br />
<code class="plain plain">$ git help status</code><br />
<code class="plain plain">$ git help log</code><br />
<br />
Probably, it will give you some cryptic information, so let's skip it for now, at least, you now know that help it there whenever you need it.<br />
<br />
<b>Let's start the fun</b><br />
<br />
Git respects your privacy, and gives you control on what to commit (their lingo for saving) at a certain moment. So, whenever you edit your code, you have to explicitly tell it which files you need to commit later on. To add a file to git:<br />
<br />
<code class="plain plain">$ git add file_name.txt</code><br />
<br />
You can use wildcards too, written in quotes. Below you add all text and python files:<br />
<br />
<code class="plain plain">$ git add '*.txt'</code><br />
<code class="plain plain">$ git add '*.py'</code><br />
<br />
Similarly you can remove file from staging<br />
<br />
<code class="plain plain">$ git rm file_name.txt</code><br />
<br />
<b>After adding comes the committing</b><br />
<b><br />
</b> To commit files from staging area to repository:<br />
<br />
<code class="plain plain">$ git commit -m "Some committing comment here"</code><br />
<br />
I know, 'staging', 'repository' and 'committing', all sound Chinese to you now. Well, if staging is like the RAM, some temp location or so, and the repository is like the Hard Disk, then committing is like saving. The text in quotes after the '-m' is mandatory, but it is up to you to write anything there, you can even write a single dot in there if you want to. However, it is useful for your reference later on in case you needed to revert to a certain version of your software. So, it is always a good practice to write down what you have actually done before this commit. 'Add a hocus_pocus method to my Magic class', 'Corrected a typo in README', etc.<br />
<br />
<b>Github FTW</b><br />
<br />
So far, we have been doing thing on our local machine, let's see how to publish all that to github. In your github homepage, there is a button called "New repository", click on it to create a new repo. They will ask you some question about your project's name etc. When done go to that repo, and on top of the page, you will find a URL that looks like this:<br />
<br />
<code class="plain plain">https://github.com/[YOUR-USERNAME]/[PROJECT-NAME].git</code><br />
<br />
Copy it, and go back to your GNU/Linux termina and write the following command<br />
<br />
<code class="plain plain">$ git remote add origin [URL]</code><br />
<br />
Well, I believe origin can be replaced with any other name, but I still have no clue about it, so let's stick to origin for now, I am just a monkey-see monkey-do at the moment.<br />
<br />
<b>Publishing your work</b><br />
<br />
Now you connected your local git to github, what to do next? Exactly, publish that changes you have just committed. Or in our case, we will be publishing everything from scratch since our github repo is still empty now. Once more, those git people use their own lingo, so they call publishing pushing. <br />
<br />
<code class="plain plain">$ git push origin master</code><br />
<br />
Remember, we used origin before, so we use it again here, as for master, this is something called branches, but let's not confuse ourselves with it now, let's stick to origin and master for now.<br />
<br />
You know what, I've got a short-cut for you. Let's add a '-u' to the previous command<br />
<br />
<code class="plain plain">$ git push -u origin master</code><br />
<br />
Great, by doing so, from now on, git will remember your choices and you will not need to say origin and master in your pushes again again. I.e. next time, just write the following and it will work:<br />
<br />
<code class="plain plain">$ git push</code><br />
<br />
<b>You 3 useful commands</b><br />
<br />
Most of the time from now on, you will be editing files locally, then pushing them to git hub, to publish your changes all you need to do is the following 3 steps. Adding files, committing then pushing.<br />
<br />
<code class="plain plain">$ git add '*.py'</code><br />
<code class="plain plain">$ git commit -m "Cleaned my code a bit"</code><br />
<code class="plain plain">$ git push</code><br />
<br />
<b>Sharing is caring</b><br />
<br />
Like any social network, github is mean for people to share code. So, most probably you will have some other friends working on the same project with you, and they do make their own changes to the code as well. So, how to synchronize your local repo with the changes they already published on githib. Easy peasy! If push was our way of pushing our code to github, then pull is the way to get the updates from there.<br />
<br />
<code class="plain plain">$ git pull -u origin master</code><br />
<br />
See, we added our magical '-u', so next time, we can simple write the following.<br />
<br />
<code class="plain plain">$ git pull</code><br />
<br />
Well, that's enough for now, in the following section, I will list some other commands for your (and my) reference, but you can skip them for now.<br />
<br />
To see difference between last commit and current files<br />
<br />
<code class="plain plain">$ git diff head</code><br />
<br />
Also you can see differences for staged files<br />
<br />
<code class="plain plain">$ git diff --staged</code><br />
<br />
To create a branch to play in<br />
<br />
<code class="plain plain">$ git branch branch_name</code><br />
<br />
To see which branch you are in, just type:<br />
<br />
<code class="plain plain">$ git branch</code><br />
<br />
To move to your new branch, type:<br />
<br />
<code class="plain plain">$ git checkout branch_name</code><br />
<br />
To merge changes in branch_name to master, type the following wile on master <br />
<br />
<code class="plain plain">git merge branch_name</code><div class="blogger-post-footer"><script expr:src='"http://feeds.feedburner.com/~s/GreenData?i=" + data:post.url' type="text/javascript" charset="utf-8"></script></div>Anonymoushttp://www.blogger.com/profile/04040899001187322598noreply@blogger.com0tag:blogger.com,1999:blog-10943611.post-78256898051280311462012-12-26T15:12:00.000+02:002012-12-26T15:14:51.692+02:00Linkedin's Skills Endorsement is flawedLinkedin's Skills Endorsement is flawed. I love the idea, but the problem is that the way it suggests for others to endorse their connections is flawed. They only show you the top endorsed skill for one of your friend and invite you to endorse it, and what happens is that (99% of the time), you will just follow their suggestion, rather than selecting the skills your connection really has. In other words, <b>the rich (skills) get richer, and the poor (skills) get poorer</b>.<br />
<br />
Another problem, is that I am doing a career shift at the moment, but because most of my connections so far either know me Network Security Engineer or Blogger, my top endorsements are Juniper, Social Media and Networks Security, followed by ones like Firewalls and Twitter. For sure it reflects my expertise, at least the past one, but I would love to see some balance there, and see more endorsements for skills like <b>Python</b>, <b>Machine Learning</b>, <b>Information Retrieval</b>, <b>Data Science</b>, <b>Statistics</b> and the other skills at the tail of my list. One way is form more connection in those new fields so they can reflect my true skills now, but back to the first problem, the Linkedin suggestion system will keep them buried and it will be harder for those skills to get promoted as I want.<br />
<br />
Hope they change such suggestion system one day, so <a href="http://www.linkedin.com/in/gr33ndata">my profile reflects what I really am at the moment</a>.<br />
<br /><div class="blogger-post-footer"><script expr:src='"http://feeds.feedburner.com/~s/GreenData?i=" + data:post.url' type="text/javascript" charset="utf-8"></script></div>Anonymoushttp://www.blogger.com/profile/04040899001187322598noreply@blogger.com1tag:blogger.com,1999:blog-10943611.post-19029382107099156302012-12-24T22:39:00.004+02:002012-12-24T22:39:49.261+02:00One line rsync tutorialYou might need to read <a href="http://everythinglinux.org/rsync/">rsync man page</a> to understand all the options and bells and whistles of that software, but for me, all I need now is a one line tutorial:<br />
<blockquote class="tr_bq">
rsync -rv src/ dst/</blockquote>
<br />
<div class="blogger-post-footer"><script expr:src='"http://feeds.feedburner.com/~s/GreenData?i=" + data:post.url' type="text/javascript" charset="utf-8"></script></div>Anonymoushttp://www.blogger.com/profile/04040899001187322598noreply@blogger.com0tag:blogger.com,1999:blog-10943611.post-40446412542089544792012-12-24T19:02:00.001+02:002012-12-24T19:42:27.616+02:00Security Predictions For 2013At this time of the year, experts like myself should write their predictions for the next year. So, have a seat, grab a sandwich, and read what my crystal ball says:<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="http://www.flickr.com/photos/79818573@N04/8180063833/" imageanchor="1" style="margin-left:1em; margin-right:1em"><img border="0" height="240" width="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLSRLQbVJdwgazrmEZZXXdkl4yVdxWRq_c2EO8Hlw08DaQ3aEWL8h4HKvCRXl7apkaWH25Za_6Lh6iDspS_1GNOXsZLYbDSGj_1tVoNpzQW28dUMqhAYiOTVTf5gOhzz975swCWQ/s320/Fortune-Teller-2013.jpg" alt="Fortune Teller - Predictions for 2013" /></a></div><br />
<br />
<ol><li><b>Computer attacks will get even more sophisticated:</b><br />
Attackers are going to develop more sophisticated attacks, and the tools they use will get more powerful and complex, they will be as complex as double cheese burger compared to the normal burger sandwich.<br />
</li>
<li><b>Attacks will come from anywhere and everywhere:</b><br />
Attackers will not only attack from the door, they will also attack from the fireplace's chimney like Santa. Or, let's put it in a more professional way, attack surfaces will continue to expand. Remember, we've just said that attackers are now using double-cheese-burger-like tools, and the sauce now can come out from any layer to fall on your shirt. Beware of the pickles too! <br />
</li>
<li><b>More security experts will be needed:</b><br />
Come on, we just said attacks are getting more complex and scary, so it is obvious that you will need to hire top-notch security experts to protect you.<br />
</li>
<li><b>Security experts are so damn hard to be found:</b><br />
Wait, didn't I just say that you will need to hire security experts, and now I added that they are hard to be found!? Gotcha, this is the real reason behind writing this whole post, I am sorry to tell you pal, you are doomed my friend, unless you buy our uber-sophisticated-expensive-god-damn-useless security products!<br />
</li>
</ol><br />
Well, this is basically the type of posts you will read nowadays. And guess what, this is not only true for the computer security field, it is almost everywhere, so be prepared. <div class="blogger-post-footer"><script expr:src='"http://feeds.feedburner.com/~s/GreenData?i=" + data:post.url' type="text/javascript" charset="utf-8"></script></div>Anonymoushttp://www.blogger.com/profile/04040899001187322598noreply@blogger.com0tag:blogger.com,1999:blog-10943611.post-40448870023901492082012-12-24T16:52:00.000+02:002012-12-24T17:33:09.937+02:00HCI AssignmentsThese are two reports that I've written as part of my Human-Computer Interaction course in <a href="http://www.uea.ac.uk/study/postgraduate/taught-degree/detail/msc-knowledge-discovery-and-datamining">University of East Anglia</a>:<br />
<br />
<br />
<b>Mobile Observations</b><br />
The first reports tries to shed the light on the ongoing trends in mobile phones usage. We will try to summarize how people are using their phones, whether offline or online. What content do they access online and how do they access it. And if there is a relationship between mobile usage and demographic differences. Finally, we will see how businesses are responding to these trends by adapting their online presence.<br />
<a href="https://docs.google.com/open?id=0B2bldjoHWBdZakM0dzRJZ0U1cDg">Mobile Observations Report</a><br />
<br />
<b>Usability Evaluation and Websites Design</b><br />
Usability is defined by ISO/IEC 9241 as the extent to which software products satisfy the users' needs in an effective and efficient manner. In this study we introduce the various sets of usability evaluation and design guidelines available today. Then, we apply a subset of those evaluation guidelines to three accommodation booking websites, and attempt to offer an alternative design that covers the deficiencies found in our evaluation. <br />
<a href="https://docs.google.com/open?id=0B2bldjoHWBdZY3VwZmgtNHV1MjQ">Website Evaluation</a><br />
<br />
<br /><div class="blogger-post-footer"><script expr:src='"http://feeds.feedburner.com/~s/GreenData?i=" + data:post.url' type="text/javascript" charset="utf-8"></script></div>Anonymoushttp://www.blogger.com/profile/04040899001187322598noreply@blogger.com0tag:blogger.com,1999:blog-10943611.post-42535401961683500842012-12-08T20:22:00.000+02:002012-12-24T22:43:50.260+02:00Python ProfilerWas writing a code today and it was so unoptimized and slow. A friend of mine told me about the Profilers. They are a nice way to see which parts of your code are swallowing all of the execution time to work on optimizing them later on.<br />
<br />
Here is how to use '<a href="http://docs.python.org/2/library/profile.html">cProfile</a>' in Python. Let's say your main function is called 'main()', so instead of directly calling it, write down the following code:<br />
<blockquote class="tr_bq">
import cProfile<br />
import pstats<br />
cProfile.run('main()','my_prof')<br />
p = pstats.Stats('my_prof')<br />
p.sort_stats('time').print_stats(10) </blockquote>
By the way, it came out that 'math.pow(x,2)' was one of the bad guys here, and replacing it with a simple 'x*x' improved the performance a bit.<div class="blogger-post-footer"><script expr:src='"http://feeds.feedburner.com/~s/GreenData?i=" + data:post.url' type="text/javascript" charset="utf-8"></script></div>Anonymoushttp://www.blogger.com/profile/04040899001187322598noreply@blogger.com0tag:blogger.com,1999:blog-10943611.post-49201597089947867922012-10-28T00:26:00.000+02:002012-10-28T00:26:07.889+02:00Screencast on LinuxThis is how to record a ScreenCast on Linux.<br />
<br />
# ffmpeg -f x11grab -s $(xrandr | grep '\*\+' | awk '{print $1}') -i :0.0 -sameq screencast.mp4<br />
<br />
In case you don't have ffmpeg, type "sudo apt-get install ffmpeg" first.<br />
<br />
H/t @<a href="https://twitter.com/uggedal">uggedal</a><div class="blogger-post-footer"><script expr:src='"http://feeds.feedburner.com/~s/GreenData?i=" + data:post.url' type="text/javascript" charset="utf-8"></script></div>Anonymoushttp://www.blogger.com/profile/04040899001187322598noreply@blogger.com1tag:blogger.com,1999:blog-10943611.post-68921254905654620332012-10-01T22:57:00.000+02:002012-11-21T02:20:03.749+02:00Introduction to HCII am currently doing my postgraduate degree in <a href="http://www.uea.ac.uk/">University of East Anglia</a>, and one of the modules that we are studying now is <a href="http://www.uea.ac.uk/courses/admission/units/Computing+Sciences/Level+M/human-computer-interaction">HCI</a> (<a href="http://en.wikipedia.org/wiki/Human%E2%80%93computer_interaction">Human-Computer Interaction</a> - Lecturer <a href="http://www.uea.ac.uk/cmp/People/Faculty/Dan+Smith">Dr. Dan Smith</a>). I'll try to blog here about the different courses we study, and notes I take throughout them or any related books.<br />
<br />
<b>What is Human-computer Interaction?</b><br />
According to <a href="http://old.sigchi.org/cdg/cdg2.html">this</a>, Human-computer interaction is a discipline concerned with the design, evaluation and implementation of interactive computing systems for human use and with the study of major phenomena surrounding them.<br />
<br />
Two questions to ask oneself here. What problems do people face when using modern computer-based technologies? (Keep in mind that now computers are everywhere from your car to your washing machine). How to evaluate users interaction with computers? (It's said that up to 50% of all software code is <a href="http://en.wikipedia.org/wiki/User_interface">UI</a> code)<br />
<br />
The most important thing to know is that HCI is not about the beauty of the design, but rather how useful it is. Knowing that for every dollar spent acquiring a customer, you will spend $100 dollars reacquiring them after they leave because of poor usability or bad customer service, you need to think twice about the usability of your product. A website's business (B) can be calculated as the product of the number of unique visitors (V), conversion rate from visitor to customer (C) and loyalty rate of returning customers (L)<br />
<br />
The recommended textbook for this course is "<a href="http://www.amazon.co.uk/Human-Computer-Interaction-Alan-Dix/dp/0130461091">Human-Computer Interaction</a>", Alan Dix, Janet Finlay. But there there other books such as "<a href="http://www.amazon.co.uk/Dont-Make-Me-Think-Usability/dp/0321344758/">Don't Make Me Think</a>", which I've read a couple of years ago, and "<a href="http://www.amazon.co.uk/The-Design-Everyday-Things-Norman/dp/0465067107/">The Psychology/Design of Everyday Things</a>", which I am currently reading.<br />
<br />
<b>Conceptual Models</b><br />
In "The Design of Everyday Things", Donald Norman pointed out what is known as "Conceptual Model". Conceptual models <a href="http://www.csse.monash.edu.au/~cema/courses/CSE3325/lect4.html">are</a> mental models of the way an object operates. A user expects to have buttons lowering the volume and others playing and stopping a song one he has a music player in her hand, she may need to find out those buttons, but at least she knows they are there, and expect what they should be doing. Having a good conceptual model makes it easier for the users to anticipate and understand the consequences of their actions. Another term that we are going to discover later on is Cognition. Cognition comes from the two Latin words, Con (with) and Gosco (Know), and <a href="http://oxforddictionaries.com/definition/english/cognition">it means</a> the mental action or process of acquiring knowledge and understandingly through though, experience or senses.<br />
<br />
A user's conceptual model may not always match that of the maker of the product, and one of the tasks of the HCI Designer is to guide the user to have a good conceptual model and give him feedback to correct it when it is wrong. And back to Donald Norman, a designer can help building a correct conceptual model in the user's mind using the means of "mapping", "affordances" and "constrains". <br />
<br />
Mapping: It is the relation between the controls and their effect. It makes perfect sense that turning the car's steering wheel clockwise (moving its top part to the right) will turn the car to the right.<br />
<br />
Affordance: If it is a knob, you turn it. I.e. It affords (is for) turning. If it is a button, you push it. If it is a chair, you sit on it. Sometimes, it if is a glass, you break it, because you are into vandalism. Back to our steering wheel example, it affords being steered.<br />
<br />
Constrains: Let's assume someone decided that pushing the steering wheel will make the car move faster, and pulling it will make it stop. Now, they user has an incorrect conceptual model, and the designer's role here is to put some constrains on the steering wheel and make sure it doesn't respond to pushing and pulling. The USB only works if plugged in a certain way, so putting constrains here on its shape is essential to make sure you do not plug it in an upside-down position.<br />
<br />
Visibility: The controllers should be clear and visible to the user. It's also good to make the more essential controllers (those doing the main functions) more visible than the others. You know you should be pushing a door from the non-hinged side, so hiding the door's pillars is in fact a visibility problem. Hiding the hold functionality of a phone in a combination of two buttons instead of a clear dedicated hold button is also a visibility problem here.<br />
<br />
Feedback: You should give the user immediate feedback. When you steer the wheel of the car it just turns. Whether your program is copying a file or doing some AJAX request, you should make it clear to the user that you are doing something, or else they might think that your software is not responding or quit or keep on trying the same actions over and over again.<br />
<br />
Consistency: Don't make the user think. The symbols on the cassette's play, pause and skip buttons are universally accepted, so whenever you are playing an audio file, just stick to those symbols.<br />
<br />
<b>Let' take a shower now!</b><br />
Now let me have a HCI-related rant here. I've got shower in my room, where they decided to combine the functionality of the tabs and the heater in one place, in the below not-so-black-box.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiYf9_-_CU0Jfody_NRiIH8ikQiubBBSNHiGS2v_mEx9JCFYkGmwIjL-m_FzzE0xW0ycskipZR92e87MOAl8-fjJUuELBAPvkDS1SfffwrRI8LV93_JMSIF_-g7B4azkboCivEEdw/s1600/DSC_0248.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiYf9_-_CU0Jfody_NRiIH8ikQiubBBSNHiGS2v_mEx9JCFYkGmwIjL-m_FzzE0xW0ycskipZR92e87MOAl8-fjJUuELBAPvkDS1SfffwrRI8LV93_JMSIF_-g7B4azkboCivEEdw/s320/DSC_0248.JPG" width="240" /></a></div>
<br />
That thing for sure has got huge HCI problems. I failed to use it correctly, I just try different combinations each time till it works.<br />
<br />
Let's first assemble a conceptual model in our minds. It should be basically doing two things, controlling the water's flow and temperature. right? It's has got two knobs, one with a scale going from red to blue. So that should be the one for the temperature. Now the other one has got words like Off, High and Medium. So this should be the one for the flow. But wait a minute. There is cold next to Cold there too. What is that knob doing then!? We seem to have a mapping problem here!<br />
<br />
I'm sure we have no feedback problems whatsoever here, I've already burnt myself twice, so the feedback is already there, and it is instantaneous. But when it comes to the temperature (Temp) meter shown there, it is not that obvious feedback there. <br />
<br />
We may construct another more accurate conceptual model here. Since this thing is basically a heater, so we may assume is the knob with Cold, Med, High and Off is to "Pass just cold water without any input from the heater side", "Mixing the cold water with some hot water", "Mixing the cold water with more hot water" and "Turning the water off altogether" respectively. But, now what is the use of the rad-blue knob? Fine tuning the above choices? <br />
<br />
Seeing a scale going from red to blue makes you expect that putting the pointer at the end of the red scale gives you the hottest temperature and moving it to the end of the blue scale gives you the coldest one. Not true! The designer here decided to ignore the mapping (or consistency, not quite sure) principles and made the knob move beyond the end of the scale. So you can simply put it at the end of the blue scale and still get burnt. Enjoy!<br />
<br />
<b>Books to Read</b><br />
<a href="http://www.goodreads.com/book/show/840.The_Design_of_Everyday_Things">The Design of Everyday Things</a>, by Donald A. Norman<br />
<a href="http://www.goodreads.com/book/show/457117.Human_Computer_Interaction">Human-Computer Interaction</a>, by Alan Dix and Janet E. Finlay<br />
<a href="http://www.goodreads.com/book/show/3368.Don_t_Make_Me_Think">Don't Make Me Think</a>, by Steve Krug <br />
<a href="http://prezi.com/llk19sa0raib/mobile-observations/">Mobile Observations</a>, by Tarek Amr<br />
<br />
P.S. You might like to have a look at <a href="http://www.slideshare.net/gr33ndata/humancomputer-interaction-14578323">these slides</a> too.<div class="blogger-post-footer"><script expr:src='"http://feeds.feedburner.com/~s/GreenData?i=" + data:post.url' type="text/javascript" charset="utf-8"></script></div>Anonymoushttp://www.blogger.com/profile/04040899001187322598noreply@blogger.com0tag:blogger.com,1999:blog-10943611.post-13784210474504595932012-06-08T20:56:00.000+02:002012-06-08T20:56:18.265+02:00Quick Intro to Ruby on RailsThere are a lot of tutorials and <a href="http://guides.rubyonrails.org/getting_started.html#creating-a-resource">Getting Started guides</a>, but I still need to write, not really a tutorial, but consider it as me taking notes of what I am learning so far, focusing mainly on <a href="http://guides.rubyonrails.org/command_line.html">Rails CLI</a>.<br />
<br />
<b>Installing Rails: </b><br />
<code class="plain plain">$ gem install rails</code><br />
<br />
<b>Creating You Application (let's call it myblog)</b><br />
<code class="plain plain">$ rails new myblog</code><br />
This will create a new folder with <a href="http://guides.rubyonrails.org/getting_started.html#creating-the-blog-application">some stuff</a> in there, i.e. your project folder.<br />
<br />
<b>To Run the Rails Server</b><br />
<code class="plain plain">$ rails server </code><br />
<br />
<b>What Are Rails Generators?</b><br />
<code class="plain plain">$ rails generate --help<br />
Usage: rails generate GENERATOR [args] [options]</code><br />
<br />
You can watch this <a href="http://railscasts.com/episodes/216-generators-in-rails-3">Webcast</a> about Rails3 Generators and then come back here l8r...<br />
<br />
<i>Types of Generators:</i><br />
<code class="plain plain"><br />
Rails:<br />
assets<br />
controller<br />
generator<br />
helper<br />
integration_test<br />
mailer<br />
migration<br />
model<br />
observer<br />
performance_test<br />
resource<br />
scaffold<br />
scaffold_controller<br />
session_migration<br />
task<br />
Coffee:<br />
coffee:assets<br />
Jquery:<br />
jquery:install<br />
Js: <br />
js:assets</code><br />
<br />
<b>Generating Controller:</b><br />
<code class="plain plain">$ rails generate controller --help<br />
$ rails generate controller CreditCard open debit credit close<br />
<br />
<i>Description:</i><br />
Stubs out a new controller and its views. Pass the controller name, either CamelCased or under_scored, and a list of views as arguments.<br />
<br />
To create a controller within a module, specify the controller name as a path like 'parent_module/controller_name'.<br />
<br />
This generates a controller class in app/controllers and invokes helper, template engine and test framework generators.<br />
<br />
<i>Example:</i><br />
`rails generate controller CreditCard open debit credit close`<br />
<br />
Credit card controller with URLs like /credit_card/debit.<br />
Controller: app/controllers/credit_card_controller.rb<br />
Functional Test: test/functional/credit_card_controller_test.rb<br />
Views: app/views/credit_card/debit.html.erb [...]<br />
Helper: app/helpers/credit_card_helper.rb</code> <br />
<br />
<b>Scaffold Generator</b><br />
<code class="plain plain">$ rails generate scaffold --help<br />
Usage:<br />
rails generate scaffold NAME [field[:type][:index] field[:type][:index]] [optons]<br />
<br />
<i>Description:</i> </code><br />
<code class="plain plain">According to <a href="http://en.wikipedia.org/wiki/Scaffold_%28programming%29">Wikipedia</a>, Scaffolding is a technique supported by some model-view-controller frameworks, in which the programmer may write a specification that describes how the application database may be used. The compiler uses this specification to generate code that the application can use to create, read, update and delete database entries, effectively treating the template as a "scaffold" on which to build a more powerful application. [I.e. It creates tables, fields, and web forms to edit those tables, etc.]<br />
<br />
Scaffolds an entire resource, from <b><i>Model</i></b> and <a href="http://guides.rubyonrails.org/getting_started.html#running-a-migration">Migration</a> to <b><i>Controller</i></b> and <b><i>Views</i></b>, along with a full test suite. The resource is ready to use as a starting point for your RESTful, resource-oriented application.<br />
<br />
Pass the name of the model (in singular form), either CamelCased or under_scored, as the first argument, and an optional list of attribute pairs.<br />
<br />
Attributes are field arguments specifying the model's attributes. You can optionally pass the type and an index to each field. For instance: "title body:text tracking_id:integer:uniq" will generate a title field of string type, a body with text type and a tracking_id as an integer with an unique index. "index" could also be given instead of "uniq" if one desire a non unique index.</code> <br />
<br />
<b>Database</b><br />
<code class="plain plain"># Database configuration are stored in </code><tt>config/database.yml</tt><code class="plain plain"> </code><br />
<code class="plain plain"># To create the actual database, use the following commnad: </code><br />
<code class="plain plain">$</code><code class="plain plain"> rake db:create</code> <br />
<b><br />
Gemfiles [In Application Home Directory]</b><br />
<code class="plain plain">Gemfile (and Gemfile.lock): These files allow you to specify what gem dependencies are needed for your Rails application.</code><br />
<code class="plain plain">$ bundle install # Use this command to install newly added gems </code> <br />
<br />
<b>Some Ruby Tips</b><br />
Since I don't speak ruby, here are some things I stumbled upon today<br />
<code class="plain plain">$myVar ==> Global Variable.<br />
:myVar ==> I have no idea what's that, they call it <a href="http://rubylearning.com/satishtalim/ruby_symbols.html">Symbol</a>, looks like constant string or something.<br />
</code> <br />
<br />
<a href="http://www.youtube.com/watch?v=_hZrXdJ-ibo">That's all folks for today</a>.<div class="blogger-post-footer"><script expr:src='"http://feeds.feedburner.com/~s/GreenData?i=" + data:post.url' type="text/javascript" charset="utf-8"></script></div>Anonymoushttp://www.blogger.com/profile/04040899001187322598noreply@blogger.com0tag:blogger.com,1999:blog-10943611.post-63440140635790345692012-05-18T12:46:00.001+02:002012-05-18T12:46:10.740+02:00Bye-bye uTorrentThere are things in life that I can never forgive, one of them is when a software program adds a toolbar to my browser and changes my homepage or my search settings. Today, I was prompted by uTorrent to update it to the latest release, I did, and hell no, it now became one of those crappy/creepy software's that I can never trust any more.<br />
<br />
That's it! Bye-bye uTorrent!<div class="blogger-post-footer"><script expr:src='"http://feeds.feedburner.com/~s/GreenData?i=" + data:post.url' type="text/javascript" charset="utf-8"></script></div>Anonymoushttp://www.blogger.com/profile/04040899001187322598noreply@blogger.com1