tag:blogger.com,1999:blog-247796792024-03-07T15:18:10.008-08:00Thoughtsmahmoudhttp://www.blogger.com/profile/09457586853819956435noreply@blogger.comBlogger91125tag:blogger.com,1999:blog-24779679.post-57149060752128127342016-05-05T10:51:00.000-07:002016-05-05T10:51:40.470-07:00The butterfly side effect in making later appointments<div dir="ltr" style="text-align: left;" trbidi="on">
One of the things I learned in life when dealing with appointments at service centers, specifically Visa Related appointments, is to be there as early as possible. pick the first appointment possible.<br />
<br />
KSA visa appointments with <a href="http://vfstasheel.com/">vfstasheel</a> in Egypt starts at 9:00 and is available as 15 minutes slots. The point is, if you picked 9:00, you should be there 15 minutes earlier which might be too early for some people. However, picking 9:30 appointment doesn't mean you are simply shifting everything for 30 minutes. You will be subjecting yourself to lots of factors that cause delay in the processing of your paperwork. you might be actually 1.5 hours later in finishing time. Picking an appointment at 2:00 pm might cause you to finish at 7:00 pm or even later.<br />
<br />
Shit happens, and the less early you are, the more you are to be affected by issues with other people or even issues with the employees themselves.<br />
<br />
Best practice, be as early as possible when it comes to this model of making appointments</div>
mahmoudhttp://www.blogger.com/profile/09457586853819956435noreply@blogger.com0tag:blogger.com,1999:blog-24779679.post-86171214782524660232015-12-21T00:16:00.000-08:002015-12-21T00:48:03.417-08:00Sharing Is Caring<div dir="ltr" style="text-align: left;" trbidi="on">
As they always say "Sharing is caring", However, it struck me that for new generations, specially with those heavily using <a href="https://www.facebook.com/" target="_blank">Facebook</a>, that it might need emphasize on the different meanings that the term sharing started to have.<br />
<br />
"Sharing is caring" means allowing others to use or consume something that belongs to self. usually food or toys among children.<br />
<br />
The term has evolved in the modern Facebook sphere. Sharing on Facebook started as actually something similar. You find something nice, you share it with others because you care about those others. <br />
<br />
However, when "others" become a mass, things gets different. You can care about someone but you cannot care about "others", that's why we call them "others". The caring implied by sharing drifted from those to whom we share, to the person who is involved in the topic of sharing. Or the voice of original author of something, who will be offered more exposure and outreach by you sharing his posts.<br />
<br />
Sharing, in the Facebook world, has lots of meanings, including: contributing into someone's effort to voice his thoughts out to everyone.<br />
<br />
<br /></div>
mahmoudhttp://www.blogger.com/profile/09457586853819956435noreply@blogger.com0tag:blogger.com,1999:blog-24779679.post-27804677452088728452015-10-24T14:36:00.001-07:002015-10-28T03:20:49.721-07:00Android Marshmallow highlights<div dir="ltr" style="text-align: left;" trbidi="on">
Nearly a couple of weeks ago, I got system update of <a href="https://www.android.com/versions/marshmallow-6-0/" target="_blank">Android 6</a>, Marshmallow on my <a href="http://www.amazon.com/gp/product/B00GC1JU1Q/ref=as_li_tl?ie=UTF8&camp=1789&creative=390957&creativeASIN=B00GC1JU1Q&linkCode=as2&tag=modsaidblog00-20&linkId=UQMTLBOTPZDGFIVJ" rel="nofollow">Google Nexus 5</a><img alt="" border="0" src="http://ir-na.amazon-adsystem.com/e/ir?t=modsaidblog00-20&l=as2&o=1&a=B00GC1JU1Q" height="1" style="border: none !important; margin: 0px !important;" width="1" />. Having system updates early is one of the things I like much about Google Nexus devices.<br />
<br />
<div style="text-align: center;">
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-E636x2Xc8Md0fFJTNWwQx8dHTyY9UMZVeXYLuggLVeGeuUzvDNFXGG8dgwurghBUPXx3ALIA3MAj6Bz2MHClYlXIF7qhkL9KDtIHH0mOrut10tQJfgXQ0kU45_7lcwxfOLdI/s1600/Screenshot_2015-10-14-22-47-59.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="84" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-E636x2Xc8Md0fFJTNWwQx8dHTyY9UMZVeXYLuggLVeGeuUzvDNFXGG8dgwurghBUPXx3ALIA3MAj6Bz2MHClYlXIF7qhkL9KDtIHH0mOrut10tQJfgXQ0kU45_7lcwxfOLdI/s320/Screenshot_2015-10-14-22-47-59.png" width="320" /></a></div>
<br /></div>
<br />
There are several wonderful things in the new android, but I was eagerly waiting for this update, specifically for the selective permissions module. Lots of android apps use lots of excessive permissions. too much than necessary IMHO. However, let me tell you about how I found things.<br />
<br />
One of the things I liked a lot since my last version of android is the launcher app menu, I used to have to swipe left several times to get to apps with names starting with letters coming late in the alphabet (Z, x, S, and arabic names). Android 6 default app menu avoids this horizontal scrolling. and:<br />
1) Uses vertical scrolling which is more natural and usable for users<br />
2) Allows you to search apps, to reach the app quickly by typing a couple of letters form its name<br />
3) The most frequent used apps are listed in the top row, to make them even more reachable<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgjtJzJRPge-MjRocPgnSLuj0pulPetFeqLsPTVGqh_NsS1OeNd-efvEbPCn5iiXbFgHMcL7mqDttJFLeJJ4PDExtEtgGYEN8N1E-SKAgWZshn5v6DXnDfZKl32h1yfNQgyQ-tN/s1600/launcher.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="199" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgjtJzJRPge-MjRocPgnSLuj0pulPetFeqLsPTVGqh_NsS1OeNd-efvEbPCn5iiXbFgHMcL7mqDttJFLeJJ4PDExtEtgGYEN8N1E-SKAgWZshn5v6DXnDfZKl32h1yfNQgyQ-tN/s200/launcher.png" width="200" /></a></div>
<div style="text-align: center;">
<br /></div>
Permissions Revamp. and this is the big thing in this update. now we can have selective permissions per app. it is no longer all or none permissions. Android users have suffered from apps asking for excessive permissions all the time. like this one:<br />
<a href="https://play.google.com/store/apps/details?id=com.ferrero.magickinder.tablet" target="_blank">Magic Kinder</a>, is an app that is promoted by the kids candy known as Kinder Joy, the app supposedly have stories and games for kids. however, I find this too much permissions to ask for:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgIBeXZp6sfazGdwKyFpvgEqghxgKVPhP7d0kX3aEtLbIO3ho5egwD5ADO0n2Mk_5up-vqB5XD65o3sMN6GOVdgiO5aKY6qr31eTtPuj_MqKqh9e1zDVY_kEMeVJtGRntVKKa-d/s1600/Screenshot_2015-09-27-10-43-29.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgIBeXZp6sfazGdwKyFpvgEqghxgKVPhP7d0kX3aEtLbIO3ho5egwD5ADO0n2Mk_5up-vqB5XD65o3sMN6GOVdgiO5aKY6qr31eTtPuj_MqKqh9e1zDVY_kEMeVJtGRntVKKa-d/s320/Screenshot_2015-09-27-10-43-29.png" width="205" /></a></div>
<div style="text-align: center;">
<br /></div>
So, how permissions go in Android 6?<br />
At first, when you update to 6, all already installed apps will have all permissions they had gained, but you now can list those permissions and revoke them, through settings > apps:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEikhv3XBnLk-u519AcJ2qlJo77LxVCmLycPDtZxXMfmPLF_Qy62r5DaoT0GucKFTCoKHt27_4z1UKA6_6ULMIIqhbnEo9CU9QlPaYrElTeN_hnxK1uzYUC8licoeTHjUZ100VG9/s1600/Screenshot_20151015+105537.png++1080%25C3%25971920+.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEikhv3XBnLk-u519AcJ2qlJo77LxVCmLycPDtZxXMfmPLF_Qy62r5DaoT0GucKFTCoKHt27_4z1UKA6_6ULMIIqhbnEo9CU9QlPaYrElTeN_hnxK1uzYUC8licoeTHjUZ100VG9/s200/Screenshot_20151015+105537.png++1080%25C3%25971920+.png" width="125" /></a><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjvNIl4sHdY_RdSnJ-o0bFA0UrWV1-Q83RBsy0o0I1RcK03iCwAHoduAG0vuKnakfD-Cxyco9WXelEh3_qQvMF6Dd4KcPbUZMqCd1Ov_v81UWbcVTA2AcyadNqIhS-xRafQ5PHw/s1600/Screenshot_20151015+105544.png++1080%25C3%25971920+.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjvNIl4sHdY_RdSnJ-o0bFA0UrWV1-Q83RBsy0o0I1RcK03iCwAHoduAG0vuKnakfD-Cxyco9WXelEh3_qQvMF6Dd4KcPbUZMqCd1Ov_v81UWbcVTA2AcyadNqIhS-xRafQ5PHw/s200/Screenshot_20151015+105544.png++1080%25C3%25971920+.png" width="125" /></a><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiyJIGFugRGBVHUyPwUpkXDRIIna6HwIV6ZrNWIWX1k2cmZ02WKSt7-_hDPEo4tQgFoyLA2jNTR9ssACYJc9HZ1k4IKFm5IkKPuLgC43gX_iOXTWTcsjTTJUneSiP3vP-LEJ3VR/s1600/Screenshot_20151015+105553.png++1080%25C3%25971920+.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiyJIGFugRGBVHUyPwUpkXDRIIna6HwIV6ZrNWIWX1k2cmZ02WKSt7-_hDPEo4tQgFoyLA2jNTR9ssACYJc9HZ1k4IKFm5IkKPuLgC43gX_iOXTWTcsjTTJUneSiP3vP-LEJ3VR/s200/Screenshot_20151015+105553.png++1080%25C3%25971920+.png" width="127" /></a></div>
<br />
<br />
Let me elaborate on the effect of this making use of <a href="https://play.google.com/store/apps/details?id=com.instagram.android" target="_blank">Instagram</a> app:<br />
Instagram needs access to the camera by nature. it also needs access to the file system (to let you share from your gallery), and access to location (to specify photo location on map)<br />
What if i didn't want any of those 2 features?. Actually I want only the camera<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEguJ68YIlVkzZtKkMD31TDNI5W7lxN1I5BQc73gSLvyE0ScvfLYtJCQGv3p1KXpS1xgXNP9iQWTHuKP5M3CNeRlwkwcum17R9SXrn36rnasLLC4ShlS0o9NC67JYh_zaob4udXs/s1600/Screenshot_20151024-231844.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEguJ68YIlVkzZtKkMD31TDNI5W7lxN1I5BQc73gSLvyE0ScvfLYtJCQGv3p1KXpS1xgXNP9iQWTHuKP5M3CNeRlwkwcum17R9SXrn36rnasLLC4ShlS0o9NC67JYh_zaob4udXs/s200/Screenshot_20151024-231844.png" width="168" /></a></div>
So Instagram will ask for further permissions when needed, and I do not have to grant those permission to the app any more<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjIlIUfD1x8qVloi6ZE7MFtFrr1CKyIn2P-zESg10BZ6t_cgatxNRZNRhRgLut7cz06OOaOK_MRxAJyYtF6pAWFCFxzJt1vrQYQNnOVEVZOPAVAjY2D7-I9RLdGTi1cDQlgns32/s1600/Screenshot_20151018-173750.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjIlIUfD1x8qVloi6ZE7MFtFrr1CKyIn2P-zESg10BZ6t_cgatxNRZNRhRgLut7cz06OOaOK_MRxAJyYtF6pAWFCFxzJt1vrQYQNnOVEVZOPAVAjY2D7-I9RLdGTi1cDQlgns32/s200/Screenshot_20151018-173750.png" width="120" /></a><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpa-oOaq2Mu3ubuXSK1rprOqpsr5tprvS3iknwyGQ6AWwGHY7Chb53w4UroH6d_mDBlLUPUPMvm2J0q11fvv0mbsz4A4HLZXk7XP8co9Vp3IDCqTfZUGLhXUlp8-mmxx5Kq2-X/s1600/Screenshot_20151018-173757.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpa-oOaq2Mu3ubuXSK1rprOqpsr5tprvS3iknwyGQ6AWwGHY7Chb53w4UroH6d_mDBlLUPUPMvm2J0q11fvv0mbsz4A4HLZXk7XP8co9Vp3IDCqTfZUGLhXUlp8-mmxx5Kq2-X/s200/Screenshot_20151018-173757.png" width="121" /></a><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9fYvoUFEDBCILebQgES8V0EIoCeHv-jwEyHSg0JQJb-JUOOv_f6Esibkrw9eQTjpQ-PICx4v0CN1UoGdo_m8RUbAQ03cluSdypmxB5jnFVCnj7-6mq4QnUDE_FDbPZRNaYmLR/s1600/Screenshot_20151018-173804.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9fYvoUFEDBCILebQgES8V0EIoCeHv-jwEyHSg0JQJb-JUOOv_f6Esibkrw9eQTjpQ-PICx4v0CN1UoGdo_m8RUbAQ03cluSdypmxB5jnFVCnj7-6mq4QnUDE_FDbPZRNaYmLR/s200/Screenshot_20151018-173804.png" width="112" /></a><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhuPugcSvQZU3FaoVwMVqMjQDKvNr7ZwKmssxYVN6rKiFgEw3sXl7wnO0ok4rwMyQALqHHcSk0PMCZy6uvFKxqsEd0MXYcDxIdRHgc7cT4qefFtrdg1I0w728UUPr_rcX_-uxOf/s1600/Screenshot_20151018-173832.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhuPugcSvQZU3FaoVwMVqMjQDKvNr7ZwKmssxYVN6rKiFgEw3sXl7wnO0ok4rwMyQALqHHcSk0PMCZy6uvFKxqsEd0MXYcDxIdRHgc7cT4qefFtrdg1I0w728UUPr_rcX_-uxOf/s200/Screenshot_20151018-173832.png" width="121" /></a><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhXzS3y6vjM-lFAo3jMwLJrjnHQs6LHmUqo5ZJcr_PtKLNN67vlFfZKxjKPmDXy86tcKkSQguy7BEthj9-x7sHDB3YEDGbi1LqWrq17sLh1bQI6Icz-WIsI1CobnSHjiTqBT6eE/s1600/Screenshot_20151018-173924.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhXzS3y6vjM-lFAo3jMwLJrjnHQs6LHmUqo5ZJcr_PtKLNN67vlFfZKxjKPmDXy86tcKkSQguy7BEthj9-x7sHDB3YEDGbi1LqWrq17sLh1bQI6Icz-WIsI1CobnSHjiTqBT6eE/s200/Screenshot_20151018-173924.png" width="127" /></a></div>
<br />
<br />
<br />
And this is quite good for me, I do not want to share location or post from gallery<br />
<br />
<a href="https://play.google.com/store/apps/details?id=com.truecaller" target="_blank">TrueCaller</a> is also one of the service I that used to use through the browser, and not the app. the reason is that I do not want to expose my contacts to any app, specially if they were being used to build a global directory.. however, i'm ok with sharing information about what number is spam and what is not, and I could also lookup the names of some numbers. But in the end, that was an application that can never be installed.<br />
<br />
Now I have Truecaller installed and handy, without granting it access to the contacts. the side effect is that it assumes that any calling number is a new number, since it cannot reach the existing contacts to know if it does exist to know before or not. so now, whenever i get a call, I get the name from the phone book. and the name in true caller directory. not convenient for most end users, but doesn't seem bad to me<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-HFwOimqcySeyd9VdAVgIDnEKN2tXRG30je3P3Nr5cCerz8GN19ATLIov-dY_sf_6aVEFW99zQVTP_UXRk8gx1R3_1aK35C0TjTE7uAkiWa97fKimYXmBW9E7QHFy_fF6EQTd/s1600/Screenshot_20151017+093214.png++1080%25C3%25971920+.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-HFwOimqcySeyd9VdAVgIDnEKN2tXRG30je3P3Nr5cCerz8GN19ATLIov-dY_sf_6aVEFW99zQVTP_UXRk8gx1R3_1aK35C0TjTE7uAkiWa97fKimYXmBW9E7QHFy_fF6EQTd/s320/Screenshot_20151017+093214.png++1080%25C3%25971920+.png" width="219" /></a></div>
<div style="text-align: center;">
<br /></div>
Android provides a wonderful way to review the apps utilizing permission on every component of the device. this allows you to easily review all apps that has access to the camera for example (I noticed that most of apps wanted access to "contacts" although i'm sure i do not need such a thing)<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj8DYkwOvVwbMCCYY_3cZG12k2g-EeJGtJTqff-KL8cAt5aJ0x2hyphenhyphenqzq6JeWOcBv_X78ojVpHnEYm4BMAbodBqxK1UD1pJCLMihqLet2xcSVcaI3XXRzHKoLC1drdtJl5tu8rmi/s1600/Screenshot_20151028+115519.png++1080%25C3%25971920+.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj8DYkwOvVwbMCCYY_3cZG12k2g-EeJGtJTqff-KL8cAt5aJ0x2hyphenhyphenqzq6JeWOcBv_X78ojVpHnEYm4BMAbodBqxK1UD1pJCLMihqLet2xcSVcaI3XXRzHKoLC1drdtJl5tu8rmi/s200/Screenshot_20151028+115519.png++1080%25C3%25971920+.png" width="125" /></a><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjtRAiWpi2J99AVOfVQ0pGWagNiGPjf_5xk3RxmZtIY1M83kk63F7ri1q8ZLjxjIh_9ozEV75-ECzkklMKDA5hVmNO8aeaBPTulY95ZBWjY6SUWl5N2aKHft1X5ChHTSPSMLbFh/s1600/Screenshot_20151028+115524.png++1080%25C3%25971920+.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjtRAiWpi2J99AVOfVQ0pGWagNiGPjf_5xk3RxmZtIY1M83kk63F7ri1q8ZLjxjIh_9ozEV75-ECzkklMKDA5hVmNO8aeaBPTulY95ZBWjY6SUWl5N2aKHft1X5ChHTSPSMLbFh/s200/Screenshot_20151028+115524.png++1080%25C3%25971920+.png" width="126" /></a><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjloP3d8BHjr9z4I2m6Q8NPMwgBKcsn_TckpHO0fDe_YzkGTpJb7m7iQIVHIAhgJ0w0olO99xAejMElxX5i5XOzDT0f2m2lsYyH7mGUn4667gd5gcww420mygykyQzFzc1azVj7/s1600/Screenshot_20151028+115530.png++1080%25C3%25971920+.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjloP3d8BHjr9z4I2m6Q8NPMwgBKcsn_TckpHO0fDe_YzkGTpJb7m7iQIVHIAhgJ0w0olO99xAejMElxX5i5XOzDT0f2m2lsYyH7mGUn4667gd5gcww420mygykyQzFzc1azVj7/s200/Screenshot_20151028+115530.png++1080%25C3%25971920+.png" width="126" /></a></div>
<br />
<br />
<br />
There are other points in Android Marshmallow including performance and battery consumption improvements. but I will stop at this point<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgsqntBCxnpzt9S9VZGHBYIfu8-P6Cvx9djDXRoINd6W206OT8GbAHTb9pXIKihdHsh5X0pp-sbdpIdcHntzIU7RNIig1IkDlF-togWPZlJsdBgV3P_9cZB5Szk_NOtIxsIyX3Z/s1600/Screenshot_20151015-011614.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgsqntBCxnpzt9S9VZGHBYIfu8-P6Cvx9djDXRoINd6W206OT8GbAHTb9pXIKihdHsh5X0pp-sbdpIdcHntzIU7RNIig1IkDlF-togWPZlJsdBgV3P_9cZB5Szk_NOtIxsIyX3Z/s320/Screenshot_20151015-011614.png" width="190" /></a></div>
<br />
<br /></div>
mahmoudhttp://www.blogger.com/profile/09457586853819956435noreply@blogger.com0tag:blogger.com,1999:blog-24779679.post-17109388553102237642015-09-14T13:57:00.000-07:002015-09-14T13:58:33.817-07:00Converting a batch of files of csv format to xls or xlsx<div dir="ltr" style="text-align: left;" trbidi="on">
While working with data, we tend to deal a lot with CSV files. It is more efficient and trivial to manipulate csv data either through command line tools or through programming languages like ruby.<br />
<br />
However, occasionally we need to convert files to MS Excel format before sending them to 3rd party.<br />
<a href="http://www.gnumeric.org/" target="_blank">Gnumeric</a> is a wonderful opensource spreadsheet program. It contains a command line convertion tool called ssconvert that can be used to perform direct conversion among lots of supported formats easily from the command line.<br />
<br />
For example, conversion from csv to xlsx can be done via<br />
<blockquote class="tr_bq">
ssconvert file.csv file.xlsx</blockquote>
OR<br />
<blockquote class="tr_bq">
ssconvert file.csv --export-type=Gnumeric_Excel:xlsx</blockquote>
It can be installed in ubuntu via<br />
<blockquote class="tr_bq">
apt-get install gnumeric</blockquote>
In order to convert lots of files, I wrote a simple bash script that will process all csv files in the current directory and generate the corresponding xlsx files. The script came pretty handy in data preparation. I believe i can be helpful to many people<br />
<br />
<script src="https://gist.github.com/modsaid/9437e283c4b2dd2dfe31.js"></script>
This can be simply downloaded and placed at /usr/local/bin, and be used directly any where.</div>
mahmoudhttp://www.blogger.com/profile/09457586853819956435noreply@blogger.com0tag:blogger.com,1999:blog-24779679.post-28984929684240139442015-04-03T16:31:00.000-07:002015-04-03T16:31:21.822-07:00Google Adsense Sensitive Categories<div dir="ltr" style="text-align: left;" trbidi="on">
According to a note from Google Adsense website, starting last month, they rolled out new beta inventory of ads that might be bothering to some people, which is "Social Casino Games".<br />
<br />
This includes poker, bingo, lotteries among other games.<br />
<br />
If you are like me, do not like showing such ads even with the slightest possibility that they could be seen by the ads engine as relevant to some of your content, you can opt out of them. Simply by clicking "Allow and block ads" at the top, then choosing "Sensitive Categories", and block the categories you do not like. (see the image below)<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYAEFLlV5aYY9O0aovpRYThEGF7USEFH4W9eYBLc4yBlbnR_I-2xWlwNVYmqLLBPfC8xJZlV7WTp0UEHP1l7ENzcn3p1F5USMGBSLnxwjEr2I-OSz2o-wBo0JbIBqm6FeRzPlV/s1600/Allow+++block+ads++Google+AdSense.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYAEFLlV5aYY9O0aovpRYThEGF7USEFH4W9eYBLc4yBlbnR_I-2xWlwNVYmqLLBPfC8xJZlV7WTp0UEHP1l7ENzcn3p1F5USMGBSLnxwjEr2I-OSz2o-wBo0JbIBqm6FeRzPlV/s1600/Allow+++block+ads++Google+AdSense.png" height="320" width="302" /></a></div>
<div style="text-align: center;">
<br /></div>
</div>
mahmoudhttp://www.blogger.com/profile/09457586853819956435noreply@blogger.com0tag:blogger.com,1999:blog-24779679.post-32714230336244169022014-12-07T06:37:00.004-08:002014-12-07T06:40:02.857-08:00Smarter Egypt Hackathon, Nov 2014<div dir="ltr" style="text-align: left;" trbidi="on">
Last weekend, IBM Egypt in cooperation with ITI and other parties organized <a href="http://www.iti.gov.eg/news/1161/iti-is-announce-the-first-big-data-cloud-and-mobile-hackathon-in-egypt" target="_blank">a 4 days hackathon in the theme of applying big data technologies to solve national problems in Egypt</a>.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj49qS8Q2HQDD_sD-278t6GLfz7FQBvmjXfrtfRopX4Cgff2Fwf5amsj4fpiZp9jmXpC3vw4Rt4pbK5WVaN9yVFHl2d_p_QNG2IblwjQ5_U0dkKpO4OwS-GsqvC8et9TSIA5mFu/s1600/smarter-egypt-hackathon.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj49qS8Q2HQDD_sD-278t6GLfz7FQBvmjXfrtfRopX4Cgff2Fwf5amsj4fpiZp9jmXpC3vw4Rt4pbK5WVaN9yVFHl2d_p_QNG2IblwjQ5_U0dkKpO4OwS-GsqvC8et9TSIA5mFu/s1600/smarter-egypt-hackathon.jpg" height="320" width="228" /></a></div>
<br />
<br />
The organizing parties involved:<br />
<br />
<ul style="text-align: left;">
<li>Information Technology Institute (ITI) that hosted the event and highly promoted it, in belief of the value of such activity towards the national development of the country, as well as allowing its students, among others, a chance to refine their skills, gain hands on experience on real world critical problems and a chance to make sounding success stories.</li>
<li>IBM, Beside the national target, IBM has ongoing cooperation with ITI. and the event was a good chance to promote IBM Technologies, specially in the national projects domain. possible success stories would have high ROI for IBM.</li>
<li>Government representatives from few domains that were target of the hackathon theme. The representatives brought sample amounts of data, and their domain experience about their fields. specifically:</li>
<ul>
<li>Water</li>
<li>Agriculture</li>
<li>Health</li>
</ul>
</ul>
<div>
I was a participant in the hackathon. along with the couple of professionals from alexandria, and 4 ITI students. We called our team "waterfall" and worked on designing a product to make the operations of water network maintenance more efficient reducing the wasted time, effort and downtime. We were the 2nd place winners AHL.</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9_MDWs6y1iOImTy6FGsLLnLReNctDOrFuYjy_CsEDsFMZtyJUVSDW3qQFDFuwzUYO-KE741-rpk1xEwFH70J2hj5f7E14v319S1wjjC3yK0FQIAIT-oJQGfiQLFyEhdryc04a/s1600/team-waterfall.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9_MDWs6y1iOImTy6FGsLLnLReNctDOrFuYjy_CsEDsFMZtyJUVSDW3qQFDFuwzUYO-KE741-rpk1xEwFH70J2hj5f7E14v319S1wjjC3yK0FQIAIT-oJQGfiQLFyEhdryc04a/s1600/team-waterfall.jpg" height="214" width="320" /></a></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
I would like to elaborate on some notes regarding the event:</div>
<div>
<ul style="text-align: left;">
<li>Tremendous effort and results has been made to organize such event. i'm really thankful to all entities involved</li>
<li>While the government entities are usually closed minded when it comes to data. I am glad some were convinced to disclose some of their data. However, declaring the event to carry "Big Data" theme, while the samples of the data doesn't include more than few thousands (one of the samples in a specific domain was less than 200 records) can be considered a joke. I'd call it "data" hackathon, rather than "Big Data" one.</li>
<li>Although The hackathon was announced about and some resources were posted earlier, more benefit could have been made by replacing the technical sessions in the first day with actual workshops a week ahead or so. at least for students, who needed time to be able to use the technologies proposed.</li>
<li>The government can make use of similar activities on a large scale by inviting professional as Entities, as well as individual. with larger time span in a similar kind of competition (not necessarily on site) and with potential actual projects afterwards. Of course, companies can make this effort and try to proceed working on proposed solutions for the discussed problems. </li>
</ul>
<div>
<br /></div>
</div>
<div>
Overall, i'm highly satisfied and enthusiastic with the event. and looking forward for next steps from both the community and interested parties.</div>
</div>
mahmoudhttp://www.blogger.com/profile/09457586853819956435noreply@blogger.com0tag:blogger.com,1999:blog-24779679.post-89902966999777030172014-11-23T01:51:00.001-08:002014-11-23T04:34:50.415-08:00Facebook "Thank you" moments<div dir="ltr" style="text-align: left;" trbidi="on">
Few years ago, <a href="http://www.facebook.com/" target="_blank">Facebook</a> launched their "7 years look back" videos. where any Facebook user can go to <a href="https://www.facebook.com/lookback">https://www.facebook.com/lookback</a> to find a video generated for him, showing highlights over his historical activities and photos, beautifully animated along with a nice background music, and it went viral. everybody like to watch and share his highlights.<br />
<br />
Nowadays, something more of that kind is up. Facebook launched "Thank you" videos. Facebook users can visit <a href="https://www.facebook.com/thanks">https://www.facebook.com/thanks</a> with a list of friends on the side. Upon selecting a friend, a video will be generated with a wonderful theme and soundtrack showing highlights between you both. with generic thank you words. The content is usually photos where are you both tagged in, or posts made by one of you where the other is tagged. Of course starting with your spouse by default :)<br />
<br />
The wonderful part is that you can go through the list, and see highlights of you and different people. which eventually you would love to share with some of them. even with those friends with not much interaction. facebook stays abstract and short, instead of making assumptions and looking stupid. well done at that part.<br />
<br />
Try it now <a href="https://www.facebook.com/thanks">https://www.facebook.com/thanks</a></div>
mahmoudhttp://www.blogger.com/profile/09457586853819956435noreply@blogger.com0tag:blogger.com,1999:blog-24779679.post-20789770004803056842014-04-28T11:39:00.000-07:002015-04-09T14:16:52.510-07:00Stress Testing with Siege and Bombard, know your limits<div dir="ltr" style="text-align: left;" trbidi="on">
I couldn't find a clear quick intro on getting siege and bombard in action, so I'm writing one here.<br />
<br />
<a href="http://www.joedog.org/siege-home/" target="_blank">Siege</a> is a load testing and benchmarking utility that has been available for quite a while, It allows you to hit your web application on a specific url (or a set of urls in a file) with specific concurrency and size settings. siege summarizes the measures of the test outcome including:<br />
<br />
<ul style="text-align: left;">
<li>Transaction rate (requests/sec)</li>
<li>Actual concurrency (even if you hit with 200 concurrent connections, your server might be responding with just 80)</li>
<li>Average, longest and shortest response time</li>
</ul>
<div>
example:</div>
<div>
<br /></div>
<div>
triggering 200 concurrent users, each hitting the url twice</div>
<div>
<br /></div>
<div>
<div>
<span style="font-family: Courier New, Courier, monospace;">siege -c200 -r2 http://www.modsaid.com/</span></div>
</div>
<div>
<br /></div>
<div>
summary:</div>
<div>
<br /></div>
<div>
<div>
<span style="font-family: Courier New, Courier, monospace;">Transactions:<span class="Apple-tab-span" style="white-space: pre;"> </span> 400 hits</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;">Availability:<span class="Apple-tab-span" style="white-space: pre;"> </span> 100.00 %</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;">Elapsed time:<span class="Apple-tab-span" style="white-space: pre;"> </span> 38.44 secs</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;">Data transferred:<span class="Apple-tab-span" style="white-space: pre;"> </span> 0.26 MB</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;">Response time:<span class="Apple-tab-span" style="white-space: pre;"> </span> 10.09 secs</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;">Transaction rate:<span class="Apple-tab-span" style="white-space: pre;"> </span> 10.41 trans/sec</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;">Throughput:<span class="Apple-tab-span" style="white-space: pre;"> </span> 0.01 MB/sec</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;">Concurrency:<span class="Apple-tab-span" style="white-space: pre;"> </span> 104.96</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;">Successful transactions: 400</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;">Failed transactions:<span class="Apple-tab-span" style="white-space: pre;"> </span> 0</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;">Longest transaction:<span class="Apple-tab-span" style="white-space: pre;"> </span> 34.19</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;">Shortest transaction:<span class="Apple-tab-span" style="white-space: pre;"> </span> 0.52</span></div>
</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
Siege is available in most repos and can be installed directly on ubuntu/debian via</div>
<div>
<br /></div>
<div>
<span style="font-family: Courier New, Courier, monospace;">apt-get install siege</span></div>
<div>
<br /></div>
<div>
However, in order for POST requests to work normally, I'd recommend installing the latest version (currently 3.0.5) from source</div>
<div>
<br /></div>
<div>
<span style="font-family: Courier New, Courier, monospace;">wget <a href="http://www.joedog.org/pub/siege/siege-3.0.5.tar.gz" style="color: #3465a4;">http://www.joedog.org/pub/siege/siege-3.0.5.tar.gz</a><br />tar zxvf siege-3.0.5.tar.gz<br />cd siege-3.0.5/ <br />./configure && make && sudo make install</span></div>
<div>
<br /></div>
<div>
Similar tools exist, mainly <a href="http://httpd.apache.org/docs/2.2/programs/ab.html" target="_blank">ab of apache</a>, but ab is very basic compared to the flexibility of siege</div>
<div>
<br /></div>
<div>
Using siege is great for a single test, but you'll need to run it several times with different parameters in order to be able to understand your limits. and there comes the handy wrapper, bombard.</div>
<div>
<br /></div>
<div>
<a href="https://github.com/allardhoeve/bombard" target="_blank">Bombard</a> is a wrapper for siege that allows you to start your load testing with certain parameters and increase the load (concurrency) incrementally. and it draws charts that let's you see how your server reacts. plotting makes things more clear and gives you a better sense of your server current limits.</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
Installing bombard requires dependencies:</div>
<div>
<ul style="text-align: left;">
<li>GD2 perl module<br /><span style="font-family: Courier New, Courier, monospace;">sudo apt-get install libgd-graph-perl</span></li>
<li>Chart-2.x<br /><span style="font-family: Courier New, Courier, monospace;">wget http://www.cpan.org/authors/id/C/CH/CHARTGRP/Chart-2.4.6.tar.gz<br />tar zxf Chart-2.4.6.tar.gz && cd Chart-2.4.6 && \<br />perl Makefile.PL && make && make test && sudo make install</span></li>
</ul>
</div>
<div>
Then you can install bombard from the source</div>
<div>
<br /></div>
<div>
<span style="font-family: Courier New, Courier, monospace;">git clone git@github.com:allardhoeve/bombard.git</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;">cd bombard</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;">./configure</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;">make && sudo make install</span></div>
<div>
<br /></div>
<div>
Now you can check all options through <span style="font-family: Courier New, Courier, monospace;">bombard -h</span></div>
<div>
<br /></div>
<div>
let's try experimenting out site:</div>
<div>
Let's start with:</div>
<div>
<ul style="text-align: left;">
<li>starting concurrency 50</li>
<li>increment 10</li>
<li>runs 10 times (so it will try 50, 60, 70, 80, ..., 140)</li>
<li>each run will take 1 minute</li>
</ul>
<div>
<b>Note: Bombard expects the absolute path of the file, it will not work with relative paths</b></div>
</div>
<div>
<b><br /></b></div>
<div>
<div>
<span style="font-family: Courier New, Courier, monospace;">bombard -f /home/me/bombard-test-urls.txt -i10 -r10 -s50 -t1</span></div>
</div>
<div>
<span style="font-family: Courier New, Courier, monospace;"><br /></span>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjrvfOODyHaF7Waj1XyvIQsqGdJrct67zDlo0g-nPythhsJf85xo6NKrDJK1kDO7sTPB4vNIr241dHQ3Sf9Sng1Df7RUgj7-jVTXDOUBm_qnkau1NNnxn0SIdgLhBytPTiV2o-v/s1600/1820.tps.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjrvfOODyHaF7Waj1XyvIQsqGdJrct67zDlo0g-nPythhsJf85xo6NKrDJK1kDO7sTPB4vNIr241dHQ3Sf9Sng1Df7RUgj7-jVTXDOUBm_qnkau1NNnxn0SIdgLhBytPTiV2o-v/s1600/1820.tps.png" height="240" width="320" /></a></div>
<span style="font-family: Courier New, Courier, monospace;"><br /></span>
<span style="font-family: Courier New, Courier, monospace;"><br /></span></div>
<div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj4I75CA2f4TPdZvF6wbP0hA6wSfTkjX9b7S-dd-ohmN_3agNoChkDpy9-eHm9yilWiw5tt2mnd1vJS2mlvaqVUbQF_Wfp0sf_y71oHfDTRA3Oeu3vG_Lw0calaYkbhFoINqTlJ/s1600/1820.resp.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj4I75CA2f4TPdZvF6wbP0hA6wSfTkjX9b7S-dd-ohmN_3agNoChkDpy9-eHm9yilWiw5tt2mnd1vJS2mlvaqVUbQF_Wfp0sf_y71oHfDTRA3Oeu3vG_Lw0calaYkbhFoINqTlJ/s1600/1820.resp.png" height="240" width="320" /></a></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>
<span style="font-family: Courier New, Courier, monospace;"><span id="goog_907541019"></span><span id="goog_907541020"></span><br /></span></div>
<div>
<br /></div>
<div>
From both graphs we can see that the transactions rate increases as we increase test concurrency. but it nearly saturates at concurrency 80. The response time starts at nearly half a second, and remains so as we increase the load. until we reach 80 concurrency. then it increases. the increase here is not from our web application itself, It is actually from having the requests buffer at the web server and application.<br />
<br />
The two graphs indicate that our setup is able to handle up to 80 concurrent requests decently. then the performance will degrade as the load increases.</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
If you find this useful, please share your experience via comments, or get it touch with <a href="https://twitter.com/modsaid" target="_blank">@modsaid</a></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
</div>
mahmoudhttp://www.blogger.com/profile/09457586853819956435noreply@blogger.com6tag:blogger.com,1999:blog-24779679.post-70079434759187045322014-04-18T20:47:00.001-07:002014-04-18T20:47:27.703-07:00Linode finally back to the new baseline of VPS Hosting<div dir="ltr" style="text-align: left;" trbidi="on">
2 days ago <a href="https://www.linode.com/" target="_blank">Linode</a> finally announced their <a href="https://blog.linode.com/2014/04/17/linode-cloud-ssds-double-ram-much-more/" target="_blank">new VPS Hosting offering with doubling the RAM and moving to Fast SSD storage</a><br />
<br />
SSD Storage will allow much faster operations for both setup operations, compilation and ongoing running services.<br />
<br />
And the new memory upgrade is considered a drop in the pricing to the half, since people can now use the same server Ram with half the price they used to pay.<br />
<br />
The smallest Instance offered by linode is now the 2GB Instance with $20/mo as stated in their pricing list:<br />
<br />
<table border="0" cellspacing="0" cols="6">
<colgroup width="85"></colgroup>
<colgroup width="67"></colgroup>
<colgroup width="63"></colgroup>
<colgroup width="68"></colgroup>
<colgroup width="85"></colgroup>
<colgroup width="129"></colgroup>
<tbody>
<tr>
<td align="CENTER" height="32" style="border-bottom: 1px solid #999999; border-left: 1px solid #999999; border-right: 1px solid #999999; border-top: 1px solid #999999;"><b><span style="color: #4c4c4c; font-family: Times New Roman;">Plan RAM</span></b></td>
<td align="CENTER" style="border-bottom: 1px solid #999999; border-left: 1px solid #999999; border-right: 1px solid #999999; border-top: 1px solid #999999;"><b><span style="color: #4c4c4c; font-family: Times New Roman;">SSD</span></b></td>
<td align="CENTER" style="border-bottom: 1px solid #999999; border-left: 1px solid #999999; border-right: 1px solid #999999; border-top: 1px solid #999999;"><b><span style="color: #4c4c4c; font-family: Times New Roman;">CPU</span></b></td>
<td align="CENTER" style="border-bottom: 1px solid #999999; border-left: 1px solid #999999; border-right: 1px solid #999999; border-top: 1px solid #999999;"><b><span style="color: #4c4c4c; font-family: Times New Roman;">Transfer</span></b></td>
<td align="CENTER" style="border-bottom: 1px solid #999999; border-left: 1px solid #999999; border-right: 1px solid #999999; border-top: 1px solid #999999;"><b><span style="color: #4c4c4c; font-family: Times New Roman;">Outbound<br />Bandwidth</span></b></td>
<td align="CENTER" style="border-bottom: 1px solid #999999; border-left: 1px solid #999999; border-right: 1px solid #999999; border-top: 1px solid #999999;"><b><span style="color: #4c4c4c; font-family: Times New Roman;">Price</span></b></td>
</tr>
<tr>
<td align="LEFT" height="17" style="border-bottom: 1px solid #999999; border-left: 1px solid #999999; border-right: 1px solid #999999; border-top: 1px solid #999999;"><span style="color: #4c4c4c; font-family: Times New Roman;">Linode 2G</span></td>
<td align="LEFT" style="border-bottom: 1px solid #999999; border-left: 1px solid #999999; border-right: 1px solid #999999; border-top: 1px solid #999999;"><span style="color: #4c4c4c; font-family: Times New Roman;">48 GB</span></td>
<td align="LEFT" style="border-bottom: 1px solid #999999; border-left: 1px solid #999999; border-right: 1px solid #999999; border-top: 1px solid #999999;"><span style="color: #4c4c4c; font-family: Times New Roman;">2 cores</span></td>
<td align="LEFT" style="border-bottom: 1px solid #999999; border-left: 1px solid #999999; border-right: 1px solid #999999; border-top: 1px solid #999999;"><span style="color: #4c4c4c; font-family: Times New Roman;">3 TB</span></td>
<td align="LEFT" style="border-bottom: 1px solid #999999; border-left: 1px solid #999999; border-right: 1px solid #999999; border-top: 1px solid #999999;"><span style="color: #4c4c4c; font-family: Times New Roman;">250 Mbps</span></td>
<td align="LEFT" style="border-bottom: 1px solid #999999; border-left: 1px solid #999999; border-right: 1px solid #999999; border-top: 1px solid #999999;"><span style="color: #4c4c4c; font-family: Times New Roman;">$0.03/hr | $20/mo</span></td>
</tr>
<tr>
<td align="LEFT" height="17" style="border-bottom: 1px solid #999999; border-left: 1px solid #999999; border-right: 1px solid #999999; border-top: 1px solid #999999;"><span style="color: #4c4c4c; font-family: Times New Roman;">Linode 4G</span></td>
<td align="LEFT" style="border-bottom: 1px solid #999999; border-left: 1px solid #999999; border-right: 1px solid #999999; border-top: 1px solid #999999;"><span style="color: #4c4c4c; font-family: Times New Roman;">96 GB</span></td>
<td align="LEFT" style="border-bottom: 1px solid #999999; border-left: 1px solid #999999; border-right: 1px solid #999999; border-top: 1px solid #999999;"><span style="color: #4c4c4c; font-family: Times New Roman;">4 cores</span></td>
<td align="LEFT" style="border-bottom: 1px solid #999999; border-left: 1px solid #999999; border-right: 1px solid #999999; border-top: 1px solid #999999;"><span style="color: #4c4c4c; font-family: Times New Roman;">4 TB</span></td>
<td align="LEFT" style="border-bottom: 1px solid #999999; border-left: 1px solid #999999; border-right: 1px solid #999999; border-top: 1px solid #999999;"><span style="color: #4c4c4c; font-family: Times New Roman;">500 Mbps</span></td>
<td align="LEFT" style="border-bottom: 1px solid #999999; border-left: 1px solid #999999; border-right: 1px solid #999999; border-top: 1px solid #999999;"><span style="color: #4c4c4c; font-family: Times New Roman;">$0.06/hr | $40/mo</span></td>
</tr>
<tr>
<td align="LEFT" height="17" style="border-bottom: 1px solid #999999; border-left: 1px solid #999999; border-right: 1px solid #999999; border-top: 1px solid #999999;"><span style="color: #4c4c4c; font-family: Times New Roman;">Linode 8G</span></td>
<td align="LEFT" style="border-bottom: 1px solid #999999; border-left: 1px solid #999999; border-right: 1px solid #999999; border-top: 1px solid #999999;"><span style="color: #4c4c4c; font-family: Times New Roman;">192 GB</span></td>
<td align="LEFT" style="border-bottom: 1px solid #999999; border-left: 1px solid #999999; border-right: 1px solid #999999; border-top: 1px solid #999999;"><span style="color: #4c4c4c; font-family: Times New Roman;">6 cores</span></td>
<td align="LEFT" style="border-bottom: 1px solid #999999; border-left: 1px solid #999999; border-right: 1px solid #999999; border-top: 1px solid #999999;"><span style="color: #4c4c4c; font-family: Times New Roman;">8 TB</span></td>
<td align="LEFT" style="border-bottom: 1px solid #999999; border-left: 1px solid #999999; border-right: 1px solid #999999; border-top: 1px solid #999999;"><span style="color: #4c4c4c; font-family: Times New Roman;">1 Gbps</span></td>
<td align="LEFT" style="border-bottom: 1px solid #999999; border-left: 1px solid #999999; border-right: 1px solid #999999; border-top: 1px solid #999999;"><span style="color: #4c4c4c; font-family: Times New Roman;">$0.12/hr | $80/mo</span></td>
</tr>
<tr>
<td align="LEFT" height="17" style="border-bottom: 1px solid #999999; border-left: 1px solid #999999; border-right: 1px solid #999999; border-top: 1px solid #999999;"><span style="color: #4c4c4c; font-family: Times New Roman;">Linode 16G</span></td>
<td align="LEFT" style="border-bottom: 1px solid #999999; border-left: 1px solid #999999; border-right: 1px solid #999999; border-top: 1px solid #999999;"><span style="color: #4c4c4c; font-family: Times New Roman;">384 GB</span></td>
<td align="LEFT" style="border-bottom: 1px solid #999999; border-left: 1px solid #999999; border-right: 1px solid #999999; border-top: 1px solid #999999;"><span style="color: #4c4c4c; font-family: Times New Roman;">8 cores</span></td>
<td align="LEFT" style="border-bottom: 1px solid #999999; border-left: 1px solid #999999; border-right: 1px solid #999999; border-top: 1px solid #999999;"><span style="color: #4c4c4c; font-family: Times New Roman;">16 TB</span></td>
<td align="LEFT" style="border-bottom: 1px solid #999999; border-left: 1px solid #999999; border-right: 1px solid #999999; border-top: 1px solid #999999;"><span style="color: #4c4c4c; font-family: Times New Roman;">2 Gbps</span></td>
<td align="LEFT" style="border-bottom: 1px solid #999999; border-left: 1px solid #999999; border-right: 1px solid #999999; border-top: 1px solid #999999;"><span style="color: #4c4c4c; font-family: Times New Roman;">$0.24/hr | $160/mo</span></td>
</tr>
<tr>
<td align="LEFT" height="17" style="border-bottom: 1px solid #999999; border-left: 1px solid #999999; border-right: 1px solid #999999; border-top: 1px solid #999999;"><span style="color: #4c4c4c; font-family: Times New Roman;">Linode 32G</span></td>
<td align="LEFT" style="border-bottom: 1px solid #999999; border-left: 1px solid #999999; border-right: 1px solid #999999; border-top: 1px solid #999999;"><span style="color: #4c4c4c; font-family: Times New Roman;">768 GB</span></td>
<td align="LEFT" style="border-bottom: 1px solid #999999; border-left: 1px solid #999999; border-right: 1px solid #999999; border-top: 1px solid #999999;"><span style="color: #4c4c4c; font-family: Times New Roman;">12 cores</span></td>
<td align="LEFT" style="border-bottom: 1px solid #999999; border-left: 1px solid #999999; border-right: 1px solid #999999; border-top: 1px solid #999999;"><span style="color: #4c4c4c; font-family: Times New Roman;">20 TB</span></td>
<td align="LEFT" style="border-bottom: 1px solid #999999; border-left: 1px solid #999999; border-right: 1px solid #999999; border-top: 1px solid #999999;"><span style="color: #4c4c4c; font-family: Times New Roman;">4 Gbps</span></td>
<td align="LEFT" style="border-bottom: 1px solid #999999; border-left: 1px solid #999999; border-right: 1px solid #999999; border-top: 1px solid #999999;"><span style="color: #4c4c4c; font-family: Times New Roman;">$0.48/hr | $320/mo</span></td>
</tr>
<tr>
<td align="LEFT" height="17" style="border-bottom: 1px solid #999999; border-left: 1px solid #999999; border-right: 1px solid #999999; border-top: 1px solid #999999;"><span style="color: #4c4c4c; font-family: Times New Roman;">Linode 48G</span></td>
<td align="LEFT" style="border-bottom: 1px solid #999999; border-left: 1px solid #999999; border-right: 1px solid #999999; border-top: 1px solid #999999;"><span style="color: #4c4c4c; font-family: Times New Roman;">1152 GB</span></td>
<td align="LEFT" style="border-bottom: 1px solid #999999; border-left: 1px solid #999999; border-right: 1px solid #999999; border-top: 1px solid #999999;"><span style="color: #4c4c4c; font-family: Times New Roman;">16 cores</span></td>
<td align="LEFT" style="border-bottom: 1px solid #999999; border-left: 1px solid #999999; border-right: 1px solid #999999; border-top: 1px solid #999999;"><span style="color: #4c4c4c; font-family: Times New Roman;">20 TB</span></td>
<td align="LEFT" style="border-bottom: 1px solid #999999; border-left: 1px solid #999999; border-right: 1px solid #999999; border-top: 1px solid #999999;"><span style="color: #4c4c4c; font-family: Times New Roman;">8 Gbps</span></td>
<td align="LEFT" style="border-bottom: 1px solid #999999; border-left: 1px solid #999999; border-right: 1px solid #999999; border-top: 1px solid #999999;"><span style="color: #4c4c4c; font-family: Times New Roman;">$0.72/hr | $480/mo</span></td>
</tr>
<tr>
<td align="LEFT" height="17" style="border-bottom: 1px solid #999999; border-left: 1px solid #999999; border-right: 1px solid #999999; border-top: 1px solid #999999;"><span style="color: #4c4c4c; font-family: Times New Roman;">Linode 64G</span></td>
<td align="LEFT" style="border-bottom: 1px solid #999999; border-left: 1px solid #999999; border-right: 1px solid #999999; border-top: 1px solid #999999;"><span style="color: #4c4c4c; font-family: Times New Roman;">1536 GB</span></td>
<td align="LEFT" style="border-bottom: 1px solid #999999; border-left: 1px solid #999999; border-right: 1px solid #999999; border-top: 1px solid #999999;"><span style="color: #4c4c4c; font-family: Times New Roman;">20 cores</span></td>
<td align="LEFT" style="border-bottom: 1px solid #999999; border-left: 1px solid #999999; border-right: 1px solid #999999; border-top: 1px solid #999999;"><span style="color: #4c4c4c; font-family: Times New Roman;">20 TB</span></td>
<td align="LEFT" style="border-bottom: 1px solid #999999; border-left: 1px solid #999999; border-right: 1px solid #999999; border-top: 1px solid #999999;"><span style="color: #4c4c4c; font-family: Times New Roman;">10 Gbps</span></td>
<td align="LEFT" style="border-bottom: 1px solid #999999; border-left: 1px solid #999999; border-right: 1px solid #999999; border-top: 1px solid #999999;"><span style="color: #4c4c4c; font-family: Times New Roman;">$0.96/hr | $640/mo</span></td>
</tr>
<tr>
<td align="LEFT" height="17" style="border-bottom: 1px solid #999999; border-left: 1px solid #999999; border-right: 1px solid #999999; border-top: 1px solid #999999;"><span style="color: #4c4c4c; font-family: Times New Roman;">Linode 96G</span></td>
<td align="LEFT" style="border-bottom: 1px solid #999999; border-left: 1px solid #999999; border-right: 1px solid #999999; border-top: 1px solid #999999;"><span style="color: #4c4c4c; font-family: Times New Roman;">1920 GB</span></td>
<td align="LEFT" style="border-bottom: 1px solid #999999; border-left: 1px solid #999999; border-right: 1px solid #999999; border-top: 1px solid #999999;"><span style="color: #4c4c4c; font-family: Times New Roman;">20 cores</span></td>
<td align="LEFT" style="border-bottom: 1px solid #999999; border-left: 1px solid #999999; border-right: 1px solid #999999; border-top: 1px solid #999999;"><span style="color: #4c4c4c; font-family: Times New Roman;">20 TB</span></td>
<td align="LEFT" style="border-bottom: 1px solid #999999; border-left: 1px solid #999999; border-right: 1px solid #999999; border-top: 1px solid #999999;"><span style="color: #4c4c4c; font-family: Times New Roman;">10 Gbps</span></td>
<td align="LEFT" style="border-bottom: 1px solid #999999; border-left: 1px solid #999999; border-right: 1px solid #999999; border-top: 1px solid #999999;"><span style="color: #4c4c4c; font-family: Times New Roman;">$1.44/hr | $960/mo</span></td>
</tr>
</tbody></table>
<table border="1" class="cake" style="background-color: white; border-collapse: collapse; border-spacing: 0px; box-sizing: border-box; font-family: Helvetica, Arial, sans-serif; font-size: 16px; line-height: 22.85714340209961px; margin-bottom: 20px; max-width: 100%; width: 100%px;"><tbody style="box-sizing: border-box; margin-bottom: 0px; margin-top: 0px;"></tbody></table>
<br />
This is considered a good Getting Back in Track for linode. both offering has been there from <a href="https://www.digitalocean.com/" target="_blank">DigitalOcean</a> for more than 15 months. Causing lots of users to test waters with it and others to actually migrate to digital ocean.<br />
<br />
Now the cost of the 2G Instance and larger instances is now the same for both hosting providers.<br />
However, Digital Ocean still offers smaller setup starting from 512MB Server for $5/mo which can be more suitable for lots of users. Digital Ocean offering since the beginning of 2013 and still today:<br />
<br />
<br />
<table border="0" cellspacing="0" cols="5">
<colgroup width="85"></colgroup>
<colgroup width="67"></colgroup>
<colgroup width="63"></colgroup>
<colgroup width="68"></colgroup>
<colgroup width="85"></colgroup>
<tbody>
<tr>
<td align="CENTER" height="17" style="border-bottom: 1px solid #999999; border-left: 1px solid #999999; border-right: 1px solid #999999; border-top: 1px solid #999999;"><b><span style="color: #4c4c4c; font-family: Times New Roman;">Plan RAM</span></b></td>
<td align="CENTER" style="border-bottom: 1px solid #999999; border-left: 1px solid #999999; border-right: 1px solid #999999; border-top: 1px solid #999999;"><b><span style="color: #4c4c4c; font-family: Times New Roman;">SSD</span></b></td>
<td align="CENTER" style="border-bottom: 1px solid #999999; border-left: 1px solid #999999; border-right: 1px solid #999999; border-top: 1px solid #999999;"><b><span style="color: #4c4c4c; font-family: Times New Roman;">CPU</span></b></td>
<td align="CENTER" style="border-bottom: 1px solid #999999; border-left: 1px solid #999999; border-right: 1px solid #999999; border-top: 1px solid #999999;"><b><span style="color: #4c4c4c; font-family: Times New Roman;">Transfer</span></b></td>
<td align="CENTER" style="border-bottom: 1px solid #999999; border-left: 1px solid #999999; border-right: 1px solid #999999; border-top: 1px solid #999999;"><b><span style="color: #4c4c4c; font-family: Times New Roman;">Price</span></b></td>
</tr>
<tr>
<td align="LEFT" height="17" style="border-bottom: 1px solid #999999; border-left: 1px solid #999999; border-right: 1px solid #999999; border-top: 1px solid #999999;"><span style="color: #4c4c4c; font-family: Times New Roman;">512MB</span></td>
<td align="LEFT" style="border-bottom: 1px solid #999999; border-left: 1px solid #999999; border-right: 1px solid #999999; border-top: 1px solid #999999;"><span style="color: #4c4c4c; font-family: Times New Roman;">20GB</span></td>
<td align="LEFT" style="border-bottom: 1px solid #999999; border-left: 1px solid #999999; border-right: 1px solid #999999; border-top: 1px solid #999999;"><span style="color: #4c4c4c; font-family: Times New Roman;">1 Core</span></td>
<td align="LEFT" style="border-bottom: 1px solid #999999; border-left: 1px solid #999999; border-right: 1px solid #999999; border-top: 1px solid #999999;"><span style="color: #4c4c4c; font-family: Times New Roman;">1TB</span></td>
<td align="CENTER" style="border-bottom: 1px solid #999999; border-left: 1px solid #999999; border-right: 1px solid #999999; border-top: 1px solid #999999;"><b><span style="color: #4c4c4c; font-family: Times New Roman;">$5/mo</span></b></td>
</tr>
<tr>
<td align="LEFT" height="17" style="border-bottom: 1px solid #999999; border-left: 1px solid #999999; border-right: 1px solid #999999; border-top: 1px solid #999999;"><span style="color: #4c4c4c; font-family: Times New Roman;">1GB</span></td>
<td align="LEFT" style="border-bottom: 1px solid #999999; border-left: 1px solid #999999; border-right: 1px solid #999999; border-top: 1px solid #999999;"><span style="color: #4c4c4c; font-family: Times New Roman;">30GB</span></td>
<td align="LEFT" style="border-bottom: 1px solid #999999; border-left: 1px solid #999999; border-right: 1px solid #999999; border-top: 1px solid #999999;"><span style="color: #4c4c4c; font-family: Times New Roman;">1 Core</span></td>
<td align="LEFT" style="border-bottom: 1px solid #999999; border-left: 1px solid #999999; border-right: 1px solid #999999; border-top: 1px solid #999999;"><span style="color: #4c4c4c; font-family: Times New Roman;">2TB</span></td>
<td align="CENTER" style="border-bottom: 1px solid #999999; border-left: 1px solid #999999; border-right: 1px solid #999999; border-top: 1px solid #999999;"><b><span style="color: #4c4c4c; font-family: Times New Roman;">$10/mo</span></b></td>
</tr>
<tr>
<td align="LEFT" height="17" style="border-bottom: 1px solid #999999; border-left: 1px solid #999999; border-right: 1px solid #999999; border-top: 1px solid #999999;"><span style="color: #4c4c4c; font-family: Times New Roman;">2GB</span></td>
<td align="LEFT" style="border-bottom: 1px solid #999999; border-left: 1px solid #999999; border-right: 1px solid #999999; border-top: 1px solid #999999;"><span style="color: #4c4c4c; font-family: Times New Roman;">40GB</span></td>
<td align="LEFT" style="border-bottom: 1px solid #999999; border-left: 1px solid #999999; border-right: 1px solid #999999; border-top: 1px solid #999999;"><span style="color: #4c4c4c; font-family: Times New Roman;">2 Core</span></td>
<td align="LEFT" style="border-bottom: 1px solid #999999; border-left: 1px solid #999999; border-right: 1px solid #999999; border-top: 1px solid #999999;"><span style="color: #4c4c4c; font-family: Times New Roman;">3TB</span></td>
<td align="CENTER" style="border-bottom: 1px solid #999999; border-left: 1px solid #999999; border-right: 1px solid #999999; border-top: 1px solid #999999;"><b><span style="color: #4c4c4c; font-family: Times New Roman;">$20/mo</span></b></td>
</tr>
<tr>
<td align="LEFT" height="17" style="border-bottom: 1px solid #999999; border-left: 1px solid #999999; border-right: 1px solid #999999; border-top: 1px solid #999999;"><span style="color: #4c4c4c; font-family: Times New Roman;">4GB</span></td>
<td align="LEFT" style="border-bottom: 1px solid #999999; border-left: 1px solid #999999; border-right: 1px solid #999999; border-top: 1px solid #999999;"><span style="color: #4c4c4c; font-family: Times New Roman;">60GB</span></td>
<td align="LEFT" style="border-bottom: 1px solid #999999; border-left: 1px solid #999999; border-right: 1px solid #999999; border-top: 1px solid #999999;"><span style="color: #4c4c4c; font-family: Times New Roman;">2 Core</span></td>
<td align="LEFT" style="border-bottom: 1px solid #999999; border-left: 1px solid #999999; border-right: 1px solid #999999; border-top: 1px solid #999999;"><span style="color: #4c4c4c; font-family: Times New Roman;">4TB</span></td>
<td align="CENTER" style="border-bottom: 1px solid #999999; border-left: 1px solid #999999; border-right: 1px solid #999999; border-top: 1px solid #999999;"><b><span style="color: #4c4c4c; font-family: Times New Roman;">$40/mo</span></b></td>
</tr>
<tr>
<td align="LEFT" height="17" style="border-bottom: 1px solid #999999; border-left: 1px solid #999999; border-right: 1px solid #999999; border-top: 1px solid #999999;"><span style="color: #4c4c4c; font-family: Times New Roman;">8GB</span></td>
<td align="LEFT" style="border-bottom: 1px solid #999999; border-left: 1px solid #999999; border-right: 1px solid #999999; border-top: 1px solid #999999;"><span style="color: #4c4c4c; font-family: Times New Roman;">80GB</span></td>
<td align="LEFT" style="border-bottom: 1px solid #999999; border-left: 1px solid #999999; border-right: 1px solid #999999; border-top: 1px solid #999999;"><span style="color: #4c4c4c; font-family: Times New Roman;">4 Core</span></td>
<td align="LEFT" style="border-bottom: 1px solid #999999; border-left: 1px solid #999999; border-right: 1px solid #999999; border-top: 1px solid #999999;"><span style="color: #4c4c4c; font-family: Times New Roman;">5TB</span></td>
<td align="CENTER" style="border-bottom: 1px solid #999999; border-left: 1px solid #999999; border-right: 1px solid #999999; border-top: 1px solid #999999;"><b><span style="color: #4c4c4c; font-family: Times New Roman;">$80/mo</span></b></td>
</tr>
</tbody></table>
<br />
Linode, however still have an edge for better processor offering in some of the package, and is still known for their reliable support.<br />
<br />
<br />
<br /></div>
mahmoudhttp://www.blogger.com/profile/09457586853819956435noreply@blogger.com0tag:blogger.com,1999:blog-24779679.post-34238557962775980962014-03-06T01:34:00.003-08:002014-03-06T01:34:59.537-08:00Redmine service hook for github<div dir="ltr" style="text-align: left;" trbidi="on">
<h2 id="GithubServiceHooks-githubservices" style="background-color: white; border-bottom-color: rgb(46, 61, 84); font-family: Arial, sans-serif; font-size: 20px; font-weight: normal; line-height: 1.5; margin: 30px 0px 0px; padding: 0px;">
Github services</h2>
<div style="background-color: white; color: #333333; font-family: Arial, sans-serif; font-size: 14px; line-height: 20px; margin-top: 10px; padding: 0px;">
<a href="http://github.com/">github.com</a> allows you to activate some service hooks on your code repository. Hooks include lots of interesting functionality like posting email notification about commits among others.</div>
<div style="background-color: white; color: #333333; font-family: Arial, sans-serif; font-size: 14px; line-height: 20px; margin-top: 10px; padding: 0px;">
At <a href="http://www.espace.com.eg/" target="_blank">eSpace</a>, we use <a href="http://github.com/">github.com</a> as our code repository, and <a href="http://www.redmine.org/" target="_blank">redmine</a> as our project management tool and issue tracking. We wanted commits to reflect automatically in the project management tool, which will keep the whole team feeling the progress directly.</div>
<div style="background-color: white; color: #333333; font-family: Arial, sans-serif; font-size: 14px; line-height: 20px; margin-top: 10px; padding: 0px;">
All service hooks are open source, you'll need to add them to <a class="external-link" href="https://github.com/github/github-services" rel="nofollow" style="color: #326ca6; text-decoration: none;">https://github.com/github/github-services</a> by</div>
<ol style="background-color: white; color: #333333; font-family: Arial, sans-serif; font-size: 14px; line-height: 20px; margin: 10px 0px 0px;">
<li>Forking <a class="external-link" href="https://github.com/github/github-services" rel="nofollow" style="color: #326ca6; text-decoration: none;">https://github.com/github/github-services</a></li>
<li>implementing ur new service or patch</li>
<li>sending pull request to the original repo</li>
</ol>
<div>
<h2 id="GithubServiceHooks-redmineservicehook" style="background-color: white; border-bottom-color: rgb(46, 61, 84); font-family: Arial, sans-serif; font-size: 20px; font-weight: normal; line-height: 1.5; margin: 30px 0px 0px; padding: 0px;">
Redmine service hook</h2>
<div style="background-color: white; color: #333333; font-family: Arial, sans-serif; font-size: 14px; line-height: 20px; margin-top: 10px; padding: 0px;">
A service already existed for redmine to cover the following need:</div>
<div style="background-color: white; color: #333333; font-family: Arial, sans-serif; font-size: 14px; line-height: 20px; margin-top: 10px; padding: 0px;">
For code browsing to work well in redmine, it was found that the best way to do it with git, is to let redmine watch a local clone of the repo... upon pushing new commits to github, the service hook is used to trigger pulling those updates to the local repo on redmine server so the code seen through redmine remains updated.</div>
<h2 id="GithubServiceHooks-redmineissueupdater" style="background-color: white; border-bottom-color: rgb(46, 61, 84); font-family: Arial, sans-serif; font-size: 20px; font-weight: normal; line-height: 1.5; margin: 30px 0px 0px; padding: 0px;">
Redmine issue updater</h2>
<div>
<br /></div>
<div style="background-color: white; color: #333333; font-family: Arial, sans-serif; font-size: 14px; line-height: 20px; margin-top: 10px; padding: 0px;">
Great thanks to <a href="https://github.com/basayel" style="background-color: transparent;">@basayel</a> for helping me out in this. We modified the redmine service in github to add another different functionality. </div>
<div style="background-color: white; color: #333333; font-family: Arial, sans-serif; font-size: 14px; line-height: 20px; margin-top: 10px; padding: 0px;">
When a team member pushes a commit that includes "Fixing #1234", we wanted an update to be made to issue #1234 on redmine about that commit. so we can easily from redmine reach commits that are related to the feature or bug fix</div>
<h3 id="GithubServiceHooks-Activatingtheplugin" style="background-color: white; font-family: Arial, sans-serif; font-size: 16px; line-height: 1.5625; margin: 30px 0px 0px; padding: 0px;">
Activating the plugin</h3>
<div style="background-color: white; color: #333333; font-family: Arial, sans-serif; font-size: 14px; line-height: 20px; margin-top: 10px; padding: 0px;">
To make the issue updater active, you need to be the admin of the repo on github</div>
<ol style="background-color: white; color: #333333; font-family: Arial, sans-serif; font-size: 14px; line-height: 20px; margin: 10px 0px 0px;">
<li>visit "admin" tab for your repo</li>
<li>select service-hooks > redmine</li>
<li>enter the<ol style="list-style-type: lower-alpha; margin: 0px;">
<li>redmine url</li>
<li>API Key (can be generated from the account settings on redmine)</li>
<li>check both <em><strong>active</strong></em> and <strong><em>Update Redmine Issues About Commits</em></strong></li>
</ol>
</li>
<li>save and you are good to go</li>
</ol>
<div style="background-color: white; color: #333333; font-family: Arial, sans-serif; font-size: 14px; line-height: 20px; margin: 0px; padding: 0px;">
<strong>Notes:</strong></div>
<div style="background-color: white; color: #333333; font-family: Arial, sans-serif; font-size: 14px; line-height: 20px; margin: 0px; padding: 0px;">
<ul style="margin: 0px;">
<li>The updates will be posted on redmine authored by the owner of the API key</li>
<li>We created a user "github watcher" that we shall use for this in all our projects</li>
</ul>
<div>
<br /></div>
</div>
<div style="background-color: white; color: #333333; font-family: Arial, sans-serif; font-size: 14px; line-height: 20px; margin-top: 10px; padding: 0px;">
The related pull request pull request: <a class="external-link" href="https://github.com/github/github-services/pull/374" rel="nofollow" style="color: #326ca6; text-decoration: none;">https://github.com/github/github-services/pull/374</a> has been merged on September 2012 and has been working well since then</div>
<div style="background-color: white; color: #333333; font-family: Arial, sans-serif; font-size: 14px; line-height: 20px; margin-top: 10px; padding: 0px;">
We had an issue when working with <a href="https://github.com/github/github-services/issues/639" target="_blank">redmine instances that run over https</a></div>
<div style="background-color: white; color: #333333; font-family: Arial, sans-serif; font-size: 14px; line-height: 20px; margin-top: 10px; padding: 0px;">
<br /></div>
</div>
</div>
mahmoudhttp://www.blogger.com/profile/09457586853819956435noreply@blogger.com0tag:blogger.com,1999:blog-24779679.post-23237151463486513142013-12-24T23:00:00.001-08:002013-12-24T23:00:20.485-08:00Organize your readings with Pocket, opportunity for more<div dir="ltr" style="text-align: left;" trbidi="on">
I have been using <a href="http://getpocket.com/" target="_blank">pocket</a> for a while now to queue all the articles I want to read, so I can avoid interruptions and read them when the time is more convenient. This was actually the philosophy of the app since it was known as <a href="http://getpocket.com/blog/2012/04/introducing-the-all-new-read-it-later-now-called-pocket/" target="_blank">Read It Later</a>.<br />
<br />
This allows me to go through the list later on mobile while i'm in transportation or waiting at some facility.<br />
<br />
Seems perfect, but actually things don't go just perfect. not something wrong in the app, but rather myself. Like lots of people out there, I'm a lazy procrastinating person. I'm working on fixing this, however, it is a fact I have to admit.<br />
<br />
This resulted in a fact that I queue lots and lots of stuff in pocket, and read a lot lot less than what's there. Saving things on pocket queue gives you a sense that it won't be lost and you can always get back to read it whenever you want. well... sometimes this "whenever" is not good with lazy people.<br />
<br />
With a clear options to ignore those people, which is truly understandable. there is another opportunity in helping them fix their habits and attitude by several approaches. here is one:<br />
<br />
What about having an optional functionality to automatically retire/archive entries older than X days or weeks. Articles do get obsolete anyway. So instead of feeling secure that the entries will not get lost. one will know that it is a limited time, and you have to go through things, and perhaps skip unimportant ones and read what matters in a reasonable time.<br />
<br />
Everything online is a stream, it doesn't matter what's the first article you ever saved. you always get to capture the latest. This is actually has a better analogy with life itself. everything happening around us is a stream, and life is limited.<br />
<br />
Now is this idea really an opportunity or just a meaningless thought. I guess the attitude of current users might tell better. maybe i am the only lazy person in here :). To figure this out, there can be a measure<br />
The percentage of "read" items to the total items queued per person. or maybe a more complex measure taking the rate of read items vs added items per month.<br />
<br />
There is no easy way to see those numbers for myself, but definitely pocket team can tell.<br />
X= (number of read items) / (number of queued non-archived items)<br />
<br />
and the question is. what's the average of that measure across all users?... what's the value for me "modsaid" ?<br />
<br />
<br /></div>
mahmoudhttp://www.blogger.com/profile/09457586853819956435noreply@blogger.com0tag:blogger.com,1999:blog-24779679.post-66676365070493536622013-12-03T08:41:00.002-08:002016-04-14T02:32:27.988-07:00Exporting data from remote mysql instance in csv, using mysql client and sed<div dir="ltr" style="text-align: left;" trbidi="on">
Mysql allows exporting query results to csv using the <a href="http://dev.mysql.com/doc/refman/5.0/en/select-into.html" target="_blank">INTO OUTFILE</a>, like the following example:<br />
<br />
<br />
<pre class="programlisting" style="background-color: #eeeeee; border: 0px; font-family: 'Courier New', Courier, fixed, monospace; font-size: 13px; line-height: 20px; max-width: 720px; outline: 0px; padding: 2px; vertical-align: baseline; color: black; overflow-x: none;">SELECT a,b,a+b INTO OUTFILE '/tmp/result.csv'
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'
FROM test_table;</pre>
<br />
<br />
<br />
This, however, will cause the data to be exported to the file system of the database server. Sometimes you do not have access to that server and you are only connected remotely from a different machine using mysql command line.<br />
<br />
One way to export the data is to pass a query and redirect the output to a file as follows<br />
<br />
<br />
<br />
<pre class="programlisting" style="background-color: #eeeeee; border: 0px; font-family: 'Courier New', Courier, fixed, monospace; font-size: 13px; line-height: 20px; max-width: 720px; outline: 0px; padding: 2px; vertical-align: baseline;"><span style="color: black; overflow-x: none;">$ mysql -u USERNAME -p PASSWORD -h DB_SERVER mydb -e "SELECT a,b,a+b INTO OUTFILE
FROM test_table;" > output.txt</span></pre>
<br />
<br />
<br />
This will do the trick, except that the resulting file is TAB separated instead of CSV.<br />
<br />
You can simply download the file and open it using any text editor and replace all tabs with commas. but that's not practical for large data sets. Instead, we can use <a href="http://www.gnu.org/software/sed/manual/sed.html" target="_blank">sed</a>. Sed is a powerful tool that can be used to replace text in streams. If you are unfamiliar with it, i recommend you check it out. the simple example below describes the usage quickly<br />
<br />
<br />
<br />
<pre class="programlisting" style="background-color: #eeeeee; border: 0px; max-width: 720px; outline: 0px; padding: 2px; vertical-align: baseline;color: black; overflow-x: none;"><span style="font-family: "courier new" , "courier" , "fixed" , monospace; font-size: x-small;"><span style="line-height: 20px;">$ echo "this is original text"
this is original text
</span></span></pre>
<pre class="programlisting" style="background-color: #eeeeee; border: 0px; max-width: 720px; outline: 0px; padding: 2px; vertical-align: baseline;color: black; overflow-x: none;"><span style="font-family: "courier new" , "courier" , "fixed" , monospace;"><span style="line-height: 20px;"><span style="font-size: x-small;">$ echo "this is original text" | sed -e's/original/manipulated/g'
this is manipulated text</span>
</span></span></pre>
<div>
<br /></div>
<div>
Seems perfect. So we can only use it to replace TAB with COMMA. but wait. sed does not understand "\t".. how can we pass it as part of the argument?!!</div>
<div>
<br /></div>
<div>
Luckly, <a href="http://stackoverflow.com/a/6363672/1676516" rel="" target="_blank">brandizzi explained the proper way to do it</a>. To write TAB into the command line, just hit CTRL+V then TAB</div>
<div>
<br /></div>
<div>
So our final step will be</div>
<div>
<pre class="programlisting" style="background-color: #eeeeee; border: 0px; font-family: 'Courier New', Courier, fixed, monospace; font-size: 13px; line-height: 20px; max-width: 720px; outline: 0px; padding: 2px; vertical-align: baseline;color: black; overflow-x: none;">$ sed -i -e 's/ /,/g' output.txt</pre>
</div>
<div>
<br /></div>
<div>
Voila</div>
<br />
<br /></div>mahmoudhttp://www.blogger.com/profile/09457586853819956435noreply@blogger.com3tag:blogger.com,1999:blog-24779679.post-26167572222218091242013-05-15T20:24:00.000-07:002015-03-01T06:44:33.632-08:00Backup and Restore Git Repositories<div dir="ltr" style="text-align: left;" trbidi="on">
Sometimes you need to move repositories from your local git server to github.com, bitbucket.org or vice versa. the situation where you want to archive the whole "bare" repo, not just a clone with the master or a single branch.<br />
<br />
Backup can be done simply by adding --bare to the clone command<br />
<table border="0" cellpadding="0" cellspacing="0" style="background-image: none !important; border-bottom-left-radius: 0px !important; border-bottom-right-radius: 0px !important; border-top-left-radius: 0px !important; border-top-right-radius: 0px !important; border: 0px !important; bottom: auto !important; box-sizing: content-box !important; clear: left; color: #333333; float: none !important; font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace !important; font-size: 13px; height: auto !important; left: auto !important; line-height: 1.2em !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; right: auto !important; top: auto !important; vertical-align: baseline !important; width: 919px;"><tbody style="background-image: none !important; border-bottom-left-radius: 0px !important; border-bottom-right-radius: 0px !important; border-top-left-radius: 0px !important; border-top-right-radius: 0px !important; border: 0px !important; bottom: auto !important; box-sizing: content-box !important; float: none !important; font-size: 1em !important; height: auto !important; left: auto !important; line-height: 1.2em !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; right: auto !important; top: auto !important; vertical-align: baseline !important; width: auto !important;">
<tr style="background-image: none !important; border-bottom-left-radius: 0px !important; border-bottom-right-radius: 0px !important; border-top-left-radius: 0px !important; border-top-right-radius: 0px !important; border: 0px !important; bottom: auto !important; box-sizing: content-box !important; float: none !important; font-size: 1em !important; height: auto !important; left: auto !important; line-height: 1.2em !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; right: auto !important; top: auto !important; vertical-align: baseline !important; width: auto !important;"><td class="code" style="background-color: white; background-image: none !important; border-bottom-left-radius: 0px !important; border-bottom-right-radius: 0px !important; border-top-left-radius: 0px !important; border-top-right-radius: 0px !important; border: 0px dashed !important; bottom: auto !important; box-sizing: content-box !important; float: none !important; font-size: 1em !important; height: auto !important; left: auto !important; line-height: 1.2em !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; right: auto !important; top: auto !important; vertical-align: baseline !important; width: 919px;"><div class="container" style="background-image: none !important; border-bottom-left-radius: 0px !important; border-bottom-right-radius: 0px !important; border-top-left-radius: 0px !important; border-top-right-radius: 0px !important; border: 0px !important; bottom: auto !important; box-sizing: content-box !important; float: none !important; font-size: 1em !important; height: auto !important; left: auto !important; line-height: 1.2em !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 0px 0px 0em !important; position: relative !important; right: auto !important; top: auto !important; vertical-align: baseline !important; white-space: pre-wrap !important; width: auto !important;" title="Hint: double-click to select code">
<div class="line number1 index0 alt2" style="background-image: none !important; border-bottom-left-radius: 0px !important; border-bottom-right-radius: 0px !important; border-top-left-radius: 0px !important; border-top-right-radius: 0px !important; border: 0px !important; bottom: auto !important; box-sizing: content-box !important; float: none !important; font-size: 1em !important; height: auto !important; left: auto !important; line-height: 1.2em !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0em !important; position: static !important; right: auto !important; top: auto !important; vertical-align: baseline !important; width: auto !important;">
<code class="java plain" style="background-image: none !important; border-bottom-left-radius: 0px !important; border-bottom-right-radius: 0px !important; border-top-left-radius: 0px !important; border-top-right-radius: 0px !important; border: 0px !important; bottom: auto !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace !important; font-size: 1em !important; height: auto !important; left: auto !important; line-height: 1.2em !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; right: auto !important; top: auto !important; vertical-align: baseline !important; width: auto !important;"><br /></code></div>
<div class="line number1 index0 alt2" style="background-image: none !important; border-bottom-left-radius: 0px !important; border-bottom-right-radius: 0px !important; border-top-left-radius: 0px !important; border-top-right-radius: 0px !important; border: 0px !important; bottom: auto !important; box-sizing: content-box !important; float: none !important; font-size: 1em !important; height: auto !important; left: auto !important; line-height: 1.2em !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0em !important; position: static !important; right: auto !important; top: auto !important; vertical-align: baseline !important; width: auto !important;">
<code class="java plain" style="background-image: none !important; border-bottom-left-radius: 0px !important; border-bottom-right-radius: 0px !important; border-top-left-radius: 0px !important; border-top-right-radius: 0px !important; border: 0px !important; bottom: auto !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace !important; font-size: 1em !important; height: auto !important; left: auto !important; line-height: 1.2em !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; right: auto !important; top: auto !important; vertical-align: baseline !important; width: auto !important;">git clone --bare git</code><code class="java color1" style="background-image: none !important; border-bottom-left-radius: 0px !important; border-bottom-right-radius: 0px !important; border-top-left-radius: 0px !important; border-top-right-radius: 0px !important; border: 0px !important; bottom: auto !important; box-sizing: content-box !important; color: rgb(128, 128, 128) !important; float: none !important; font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace !important; font-size: 1em !important; height: auto !important; left: auto !important; line-height: 1.2em !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; right: auto !important; top: auto !important; vertical-align: baseline !important; width: auto !important;">@github</code><code class="java plain" style="background-image: none !important; border-bottom-left-radius: 0px !important; border-bottom-right-radius: 0px !important; border-top-left-radius: 0px !important; border-top-right-radius: 0px !important; border: 0px !important; bottom: auto !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace !important; font-size: 1em !important; height: auto !important; left: auto !important; line-height: 1.2em !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; right: auto !important; top: auto !important; vertical-align: baseline !important; width: auto !important;">.com:modsaid/test-repo.git</code></div>
</div>
</td></tr>
</tbody></table>
<br />
This will result in a cloned repo on the filesystem that is similar in structure to a bare repository<br />
<br />
Restoring can be done by creating an empty repository on your git server (github.com or bitbucket.org). and running<br />
<br />
<table border="0" cellpadding="0" cellspacing="0" style="background-image: none !important; border-bottom-left-radius: 0px !important; border-bottom-right-radius: 0px !important; border-top-left-radius: 0px !important; border-top-right-radius: 0px !important; border: 0px !important; bottom: auto !important; box-sizing: content-box !important; clear: left; color: #333333; float: none !important; font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace !important; font-size: 13px; height: auto !important; left: auto !important; line-height: 1.2em !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; right: auto !important; top: auto !important; vertical-align: baseline !important; width: 919px;"><tbody style="background-image: none !important; border-bottom-left-radius: 0px !important; border-bottom-right-radius: 0px !important; border-top-left-radius: 0px !important; border-top-right-radius: 0px !important; border: 0px !important; bottom: auto !important; box-sizing: content-box !important; float: none !important; font-size: 1em !important; height: auto !important; left: auto !important; line-height: 1.2em !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; right: auto !important; top: auto !important; vertical-align: baseline !important; width: auto !important;">
<tr style="background-image: none !important; border-bottom-left-radius: 0px !important; border-bottom-right-radius: 0px !important; border-top-left-radius: 0px !important; border-top-right-radius: 0px !important; border: 0px !important; bottom: auto !important; box-sizing: content-box !important; float: none !important; font-size: 1em !important; height: auto !important; left: auto !important; line-height: 1.2em !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; right: auto !important; top: auto !important; vertical-align: baseline !important; width: auto !important;"><td class="code" style="background-color: white; background-image: none !important; border-bottom-left-radius: 0px !important; border-bottom-right-radius: 0px !important; border-top-left-radius: 0px !important; border-top-right-radius: 0px !important; border: 0px dashed !important; bottom: auto !important; box-sizing: content-box !important; float: none !important; font-size: 1em !important; height: auto !important; left: auto !important; line-height: 1.2em !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; right: auto !important; top: auto !important; vertical-align: baseline !important; width: 919px;"><div class="container" style="background-image: none !important; border-bottom-left-radius: 0px !important; border-bottom-right-radius: 0px !important; border-top-left-radius: 0px !important; border-top-right-radius: 0px !important; border: 0px !important; bottom: auto !important; box-sizing: content-box !important; float: none !important; font-size: 1em !important; height: auto !important; left: auto !important; line-height: 1.2em !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 0px 0px 0em !important; position: relative !important; right: auto !important; top: auto !important; vertical-align: baseline !important; white-space: pre-wrap !important; width: auto !important;" title="Hint: double-click to select code">
<div class="line number1 index0 alt2" style="background-image: none !important; border-bottom-left-radius: 0px !important; border-bottom-right-radius: 0px !important; border-top-left-radius: 0px !important; border-top-right-radius: 0px !important; border: 0px !important; bottom: auto !important; box-sizing: content-box !important; float: none !important; font-size: 1em !important; height: auto !important; left: auto !important; line-height: 1.2em !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0em !important; position: static !important; right: auto !important; top: auto !important; vertical-align: baseline !important; width: auto !important;">
<code class="java plain" style="background-image: none !important; border-bottom-left-radius: 0px !important; border-bottom-right-radius: 0px !important; border-top-left-radius: 0px !important; border-top-right-radius: 0px !important; border: 0px !important; bottom: auto !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace !important; font-size: 1em !important; height: auto !important; left: auto !important; line-height: 1.2em !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; right: auto !important; top: auto !important; vertical-align: baseline !important; width: auto !important;">cd test-repo.git</code></div>
<div class="line number2 index1 alt1" style="background-image: none !important; border-bottom-left-radius: 0px !important; border-bottom-right-radius: 0px !important; border-top-left-radius: 0px !important; border-top-right-radius: 0px !important; border: 0px !important; bottom: auto !important; box-sizing: content-box !important; float: none !important; font-size: 1em !important; height: auto !important; left: auto !important; line-height: 1.2em !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0em !important; position: static !important; right: auto !important; top: auto !important; vertical-align: baseline !important; width: auto !important;">
<code class="java plain" style="background-image: none !important; border-bottom-left-radius: 0px !important; border-bottom-right-radius: 0px !important; border-top-left-radius: 0px !important; border-top-right-radius: 0px !important; border: 0px !important; bottom: auto !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace !important; font-size: 1em !important; height: auto !important; left: auto !important; line-height: 1.2em !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; right: auto !important; top: auto !important; vertical-align: baseline !important; width: auto !important;">git push --mirror git</code><code class="java color1" style="background-image: none !important; border-bottom-left-radius: 0px !important; border-bottom-right-radius: 0px !important; border-top-left-radius: 0px !important; border-top-right-radius: 0px !important; border: 0px !important; bottom: auto !important; box-sizing: content-box !important; color: rgb(128, 128, 128) !important; float: none !important; font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace !important; font-size: 1em !important; height: auto !important; left: auto !important; line-height: 1.2em !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; right: auto !important; top: auto !important; vertical-align: baseline !important; width: auto !important;">@bitbucket</code><code class="java plain" style="background-image: none !important; border-bottom-left-radius: 0px !important; border-bottom-right-radius: 0px !important; border-top-left-radius: 0px !important; border-top-right-radius: 0px !important; border: 0px !important; bottom: auto !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace !important; font-size: 1em !important; height: auto !important; left: auto !important; line-height: 1.2em !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; right: auto !important; top: auto !important; vertical-align: baseline !important; width: auto !important;">.org:modsaid/test-repo.git</code></div>
<div class="line number2 index1 alt1" style="background-image: none !important; border-bottom-left-radius: 0px !important; border-bottom-right-radius: 0px !important; border-top-left-radius: 0px !important; border-top-right-radius: 0px !important; border: 0px !important; bottom: auto !important; box-sizing: content-box !important; float: none !important; font-size: 1em !important; height: auto !important; left: auto !important; line-height: 1.2em !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0em !important; position: static !important; right: auto !important; top: auto !important; vertical-align: baseline !important; width: auto !important;">
<code class="java plain" style="background-image: none !important; border-bottom-left-radius: 0px !important; border-bottom-right-radius: 0px !important; border-top-left-radius: 0px !important; border-top-right-radius: 0px !important; border: 0px !important; bottom: auto !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace !important; font-size: 1em !important; height: auto !important; left: auto !important; line-height: 1.2em !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; right: auto !important; top: auto !important; vertical-align: baseline !important; width: auto !important;"><br /></code></div>
<div class="line number2 index1 alt1" style="background-image: none !important; border-bottom-left-radius: 0px !important; border-bottom-right-radius: 0px !important; border-top-left-radius: 0px !important; border-top-right-radius: 0px !important; border: 0px !important; bottom: auto !important; box-sizing: content-box !important; float: none !important; font-size: 1em !important; height: auto !important; left: auto !important; line-height: 1.2em !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0em !important; position: static !important; right: auto !important; top: auto !important; vertical-align: baseline !important; width: auto !important;">
<code class="java plain" style="background-image: none !important; border-bottom-left-radius: 0px !important; border-bottom-right-radius: 0px !important; border-top-left-radius: 0px !important; border-top-right-radius: 0px !important; border: 0px !important; bottom: auto !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace !important; font-size: 1em !important; height: auto !important; left: auto !important; line-height: 1.2em !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; right: auto !important; top: auto !important; vertical-align: baseline !important; width: auto !important;">voila</code></div>
</div>
</td></tr>
</tbody></table>
</div>
mahmoudhttp://www.blogger.com/profile/09457586853819956435noreply@blogger.com1tag:blogger.com,1999:blog-24779679.post-21970712163831279262013-01-15T02:52:00.000-08:002013-01-15T02:52:33.670-08:00Migrating repos from SVN to git<div dir="ltr" style="text-align: left;" trbidi="on">
It is straight forward to migrate your old SVN code to git. I highly advice everyone to do that even if they're not going to publish it on github or actually use it. but backing up a git repo can get to be very handy.<br />
<br />
Thanks to <a href="https://github.com/nirvdrum">Kevin Menard</a> for his <a href="https://github.com/nirvdrum/svn2git">svn2git</a>, the migration can be very straight forward. I have created a usage repo, <a href="https://github.com/modsaid/using-svn2git">using-svn2git</a>, to speed things by adding it to Gemfile and using a specific rvm gemset, assuming you are using rvm. to make it as simple as:<br />
<ul style="text-align: left;">
<li>git clone</li>
<li>bundle install</li>
<li>start the migration...</li>
</ul>
<div>
<br />
Of course having the standard SVN repo structure will save you a lot. You will probably only have to maintain the proper author.txt mapping file between svn and git users (example of the file is in the repo).</div>
<div>
<br /></div>
<div>
I have tried to keep the <a href="https://github.com/modsaid/using-svn2git#readme">readme</a> short and to the point. I hope you find it useful.</div>
<div>
<br /></div>
<div>
Regards</div>
</div>
mahmoudhttp://www.blogger.com/profile/09457586853819956435noreply@blogger.com0tag:blogger.com,1999:blog-24779679.post-11117071178879131682012-11-25T03:32:00.000-08:002012-11-25T03:32:18.501-08:00Writing usable scripts in Ruby<div dir="ltr" style="text-align: left;" trbidi="on">
<br />
<h3 style="text-align: left;">
Usable command line tools/scripts</h3>
<div style="background-color: white; background-image: none; color: #333333; font-family: Arial, Helvetica, FreeSans, sans-serif; font-size: 13px; line-height: 17.33333396911621px; margin-bottom: 10px; padding: 0px;">
There are a lot of command line tools written in ruby, python, bash, c or any other languages. They are usable simply because there is a standard way in dealing with them</div>
<div style="background-color: white; background-image: none; color: #333333; font-family: Arial, Helvetica, FreeSans, sans-serif; font-size: 13px; line-height: 17.33333396911621px; margin-bottom: 10px; padding: 0px;">
this way can be summarized in the following points:</div>
<ol style="text-align: left;">
<li style="font-size: 10pt; line-height: 13pt; margin: 0px; padding: 0px;">There has to be a usage example/brief help at the finger tips of the user ( by running with <span style="margin-bottom: 0px; margin-top: 0px; text-decoration: line-through;">--</span>help or -h)</li>
<li style="font-size: 10pt; line-height: 13pt; margin: 0px; padding: 0px;">arguments should have default values which are explained in the help</li>
<li style="font-size: 10pt; line-height: 13pt; margin: 0px; padding: 0px;">misusage or missing mandatory arguments should fire the help message</li>
</ol>
<h3 style="text-align: left;">
ruby tools</h3>
<div style="background-color: white; background-image: none; color: #333333; font-family: Arial, Helvetica, FreeSans, sans-serif; font-size: 13px; line-height: 17.33333396911621px; margin-bottom: 10px; padding: 0px;">
<a class="external-link" href="http://apidock.com/ruby/OptionParser" rel="nofollow" style="color: #006daf; outline: none;">OptionParser</a> is part of the standard library in ruby that takes care of this script packaging. they show long and short examples</div>
<div style="background-color: white; background-image: none; color: #333333; font-family: Arial, Helvetica, FreeSans, sans-serif; font-size: 13px; line-height: 17.33333396911621px; margin-bottom: 10px; padding: 0px;">
This is an example of the script:</div>
<blockquote style="background-color: white; border-left-color: rgb(60, 120, 181); border-left-style: solid; border-left-width: 1px; color: #333333; font-family: Arial, Helvetica, FreeSans, sans-serif; font-size: 13px; font-style: italic; line-height: 17.33333396911621px; margin: 10px 20px; padding: 0px 20px;">
<div style="background-image: none; font-size: 10pt; line-height: 13pt; margin-bottom: 10px; padding: 0px;">
require 'optparse'</div>
<div style="background-image: none; font-size: 10pt; line-height: 13pt; margin-bottom: 10px; padding: 0px;">
options = {}<br />OptionParser.new do |opts|<br />opts.banner = "Usage: script_name.rb [options]"</div>
<div style="background-image: none; font-size: 10pt; line-height: 13pt; margin-bottom: 10px; padding: 0px;">
opts.on("-v", "--[no-]verbose", "Run verbosely") do |v|<br /> options[:verbose] = v<br />end</div>
<div style="background-image: none; font-size: 10pt; line-height: 13pt; margin-bottom: 10px; padding: 0px;">
end.parse!</div>
<div style="background-image: none; font-size: 10pt; line-height: 13pt; margin-bottom: 10px; padding: 0px;">
p options<br />p ARGV</div>
<div style="background-image: none; font-size: 10pt; line-height: 13pt; margin-bottom: 10px; padding: 0px;">
# Actual script code goes here</div>
</blockquote>
<div style="background-color: white; background-image: none; color: #333333; font-family: Arial, Helvetica, FreeSans, sans-serif; font-size: 13px; line-height: 17.33333396911621px; margin-bottom: 10px; padding: 0px;">
this allows the script to be used as:</div>
<blockquote style="background-color: white; border-left-color: rgb(60, 120, 181); border-left-style: solid; border-left-width: 1px; color: #333333; font-family: Arial, Helvetica, FreeSans, sans-serif; font-size: 13px; font-style: italic; line-height: 17.33333396911621px; margin: 10px 20px; padding: 0px 20px;">
<div style="background-image: none; font-size: 10pt; line-height: 13pt; margin-bottom: 10px; padding: 0px;">
$ ./script_name.rb -h<br />Usage: script_name.rb [options]<br /> -v, --[no-]verbose Run verbosely</div>
</blockquote>
<div style="background-color: white; background-image: none; color: #333333; font-family: Arial, Helvetica, FreeSans, sans-serif; font-size: 13px; line-height: 17.33333396911621px; margin-bottom: 10px; padding: 0px;">
<br /></div>
<blockquote style="background-color: white; border-left-color: rgb(60, 120, 181); border-left-style: solid; border-left-width: 1px; color: #333333; font-family: Arial, Helvetica, FreeSans, sans-serif; font-size: 13px; font-style: italic; line-height: 17.33333396911621px; margin: 10px 20px; padding: 0px 20px;">
<div style="background-image: none; font-size: 10pt; line-height: 13pt; margin-bottom: 10px; padding: 0px;">
$ ./script_name.rb -v<br />{:verbose=>true}<br />[]</div>
</blockquote>
<div style="background-color: white; background-image: none; color: #333333; font-family: Arial, Helvetica, FreeSans, sans-serif; font-size: 13px; line-height: 17.33333396911621px; margin-bottom: 10px; padding: 0px;">
<br /></div>
<blockquote style="background-color: white; border-left-color: rgb(60, 120, 181); border-left-style: solid; border-left-width: 1px; color: #333333; font-family: Arial, Helvetica, FreeSans, sans-serif; font-size: 13px; font-style: italic; line-height: 17.33333396911621px; margin: 10px 20px; padding: 0px 20px;">
<div style="background-image: none; font-size: 10pt; line-height: 13pt; margin-bottom: 10px; padding: 0px;">
$ ./script_name.rb<br />{}<br />[]</div>
</blockquote>
<h3 style="text-align: left;">
Packaging</h3>
<div style="background-color: white; background-image: none; color: #333333; font-family: Arial, Helvetica, FreeSans, sans-serif; font-size: 13px; line-height: 17.33333396911621px; margin-bottom: 10px; padding: 0px;">
no matter how small your script is, it is still better to package it as a gem. to keep track of releases, version, author.</div>
<div style="background-color: white; background-image: none; color: #333333; font-family: Arial, Helvetica, FreeSans, sans-serif; font-size: 13px; line-height: 17.33333396911621px; margin-bottom: 10px; padding: 0px;">
let the actual code be part of the lib content. and the wrapper running (under bin) user OptParser and then call the script code with the specified options</div>
</div>
mahmoudhttp://www.blogger.com/profile/09457586853819956435noreply@blogger.com0tag:blogger.com,1999:blog-24779679.post-54910606880246591652012-11-20T16:04:00.000-08:002012-11-20T16:26:44.808-08:00Success of Startups<div dir="ltr" style="text-align: left;" trbidi="on">
Entrepreneurship has become one of the one of the most interesting topic in the business side in any country in the world. While it is digging its way in the middle east, there is some sort of confusion and a lot of aspects related to that topic. A Startup can act and advance to tackle business opportunities in a way that competes with large enterprises. and most of the times, they need to be supported by Investors to back them up.<br />
<br />
One of the things that started to really bother me in the culture is the definition of success of a startup. No one denies that a decent revenue generating startup is a successful one. However, some people believe that just raising an investment is a success.... umm, debatable.<br />
<br />
I believe we can make some kind of analogy with some entities that showed up in the past decade like biznas and skybiz (I'm sure some of you will remember those names). they used an invalid scheme summarized as:<br />
<br />
<ul style="text-align: left;">
<li>People can register and join the network for a fee (as an investment, their money will get back doubled and doubled)</li>
<li>They need to invite 10 friends, and will get rewarded when their friends register and join the network</li>
<li>each of the new invited friends will get his money back with profit when he invites more friends.. and so on</li>
</ul>
<div>
The problem here is that, as an entity, you are not providing any value... you are rewarding people on reselling what u offer (which is nothing)... early adopters are usually rewarded and set as a successful example to motivate new ones.. but as time goes on, users form a kind of pyramid while people on top are relieved, and at the bottom are still trying to invite more friends. at least to cover their fees. this is a flawed business.. and officially stated as <a href="http://www.ftc.gov/opa/2001/06/sky.shtm">unlawful scheme</a><br />
<br />
This is known as the "<a href="http://en.wikipedia.org/wiki/Pyramid_scheme">Pyramid Scheme</a>". from wikipedia: <i>"A pyramid scheme is a non-sustainable business model that involves promising participants payment or services, primarily for enrolling other people into the scheme, rather than supplying any real investment or sale of products or services to the public.[1][2]"</i></div>
<div>
<br /></div>
<div>
Investment in Startups is different, because startups are meaningful entities with a mission, and need the investment on different levels to expand and grow up. However, if we took the value, the mission and revenue generation of a startup out of our evaluation, And focused only on the amount of money they were able to raise, then we're not anywhere far from the flawed scheme that was used by biznas and others.</div>
<div>
<br /></div>
<div>
We can think of raising investments as an indication that they're progressing in the right direction. well, at least someone has double checked that and invested his own money in this. But if the investor himself was not that mature, and only thought of the value of his equity when the startups goes for VC rounds of investments, then we're also back to the same flawed scheme.</div>
<div>
<br /></div>
<div>
That's why I believe that raising investments alone cannot be a success measure for a Startup</div>
<br />
<br /></div>
mahmoudhttp://www.blogger.com/profile/09457586853819956435noreply@blogger.com1Cairo - Alexandria Desert Rd, Qesm Al Amereyah, Alexandria, Egypt31.147006308556566 29.926757812529.397239808556566 27.3999023125 32.89677280855657 32.453613312499996tag:blogger.com,1999:blog-24779679.post-9672349050369882812012-03-26T09:39:00.001-07:002012-03-26T09:39:36.221-07:00Utilizing Page Caching while using query string parameters using Nginx<p style="font-size: 13px; line-height: 17px; color: rgb(51, 51, 51); background-image: none; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: rgb(255, 255, 255); padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-bottom: 10px; font-family: Arial, Helvetica, FreeSans, sans-serif; ">One of the common practices for ruby on rails developers is to wrap all parameters in the URI itself, so they can easily make use of page caching. Sometimes having a lot of parameters can start being confusing specially with the ordering of the parameters to match the defined routes.</p><p style="font-size: 13px; line-height: 17px; color: rgb(51, 51, 51); background-image: none; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: rgb(255, 255, 255); padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-bottom: 10px; font-family: Arial, Helvetica, FreeSans, sans-serif; ">Let's elaborate with an example.</p><p style="font-size: 13px; line-height: 17px; color: rgb(51, 51, 51); background-image: none; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: rgb(255, 255, 255); padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-bottom: 10px; font-family: Arial, Helvetica, FreeSans, sans-serif; ">Consider an API that provides a list of entries, with possible filters:</p><pre style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-bottom: 10px; overflow-x: visible; overflow-y: visible; color: rgb(51, 51, 51); font-size: 13px; line-height: 17px; background-color: rgb(255, 255, 255); ">http://api.example.com/feed.json</pre><p style="font-size: 13px; line-height: 17px; color: rgb(51, 51, 51); background-image: none; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: rgb(255, 255, 255); padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-bottom: 10px; font-family: Arial, Helvetica, FreeSans, sans-serif; ">This can simply be page cached, rails will place the proper feed.json file in the public directory.</p><p style="font-size: 13px; line-height: 17px; color: rgb(51, 51, 51); background-image: none; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: rgb(255, 255, 255); padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-bottom: 10px; font-family: Arial, Helvetica, FreeSans, sans-serif; ">If we wanted to add use some supported filters like:</p><ol style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; padding-left: 3em; font-size: 13px; line-height: 17px; padding-top: 0px; color: rgb(51, 51, 51); font-family: Arial, Helvetica, FreeSans, sans-serif; background-color: rgb(255, 255, 255); "><li style="font-size: 10pt; line-height: 13pt; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">date (in the format of 2012-03-25)</li><li style="font-size: 10pt; line-height: 13pt; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">order (by date, score or relevance)</li><li style="font-size: 10pt; line-height: 13pt; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">page (used to get the next pages of the feed)</li><li style="font-size: 10pt; line-height: 13pt; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">limit (or the page size.. the expected number of entries per response)</li><li style="font-size: 10pt; line-height: 13pt; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">type (some app related filter. let's assume the values can be: post, comment, announcement)</li></ol><p style="font-size: 13px; line-height: 17px; color: rgb(51, 51, 51); background-image: none; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: rgb(255, 255, 255); padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-bottom: 10px; font-family: Arial, Helvetica, FreeSans, sans-serif; ">If we used the simply form of</p><pre style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-bottom: 10px; overflow-x: visible; overflow-y: visible; color: rgb(51, 51, 51); font-size: 13px; line-height: 17px; background-color: rgb(255, 255, 255); ">http://api.example.com/feed.json?date=2012-03-25&page=2&limit=20&type=comment&order=score</pre><p style="font-size: 13px; line-height: 17px; color: rgb(51, 51, 51); background-image: none; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: rgb(255, 255, 255); padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-bottom: 10px; font-family: Arial, Helvetica, FreeSans, sans-serif; ">all the requests will be page cached at public/feed.json regardless of the parameter values. causing them to be ignored. And even worse, if the cached page happened to be generated with filtered requests, the cached response will be filtered for further requests even if no filters was specified.</p><p style="font-size: 13px; line-height: 17px; color: rgb(51, 51, 51); background-image: none; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: rgb(255, 255, 255); padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-bottom: 10px; font-family: Arial, Helvetica, FreeSans, sans-serif; ">To Avoid this, most developers will include the parameters in the URL directly with the following route in the config/routes.rb</p><pre style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-bottom: 10px; overflow-x: visible; overflow-y: visible; color: rgb(51, 51, 51); font-size: 13px; line-height: 17px; background-color: rgb(255, 255, 255); ">match '(/date/:date)(/type/:type)(/page/:page)(/limit/:limit)(/order/:order)/feed.json', :to=>'api/feed_entries#index'</pre><p style="font-size: 13px; line-height: 17px; color: rgb(51, 51, 51); background-image: none; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: rgb(255, 255, 255); padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-bottom: 10px; font-family: Arial, Helvetica, FreeSans, sans-serif; ">And expect request to be:</p><pre style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-bottom: 10px; overflow-x: visible; overflow-y: visible; color: rgb(51, 51, 51); font-size: 13px; line-height: 17px; background-color: rgb(255, 255, 255); ">http://api.example.com/date/2012-03-25/type/comment/page/2/limit/20/order/score/feed.json</pre><pre style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-bottom: 10px; overflow-x: visible; overflow-y: visible; color: rgb(51, 51, 51); font-size: 13px; line-height: 17px; background-color: rgb(255, 255, 255); ">http://api.example.com/page/1/limit/20/order/relevance/feed.json</pre><pre style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-bottom: 10px; overflow-x: visible; overflow-y: visible; color: rgb(51, 51, 51); font-size: 13px; line-height: 17px; background-color: rgb(255, 255, 255); ">http://api.example.com/date/2012-03-20/page/1/limit/30/order/score/feed.json</pre><pre style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-bottom: 10px; overflow-x: visible; overflow-y: visible; color: rgb(51, 51, 51); font-size: 13px; line-height: 17px; background-color: rgb(255, 255, 255); ">http://api.example.com/type/post/page/2/limit/20/feed.json</pre><p style="font-size: 13px; line-height: 17px; color: rgb(51, 51, 51); background-image: none; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: rgb(255, 255, 255); padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-bottom: 10px; font-family: Arial, Helvetica, FreeSans, sans-serif; ">This will cause all requests to be cached separately and properly. and will work like charm. However, it makes it easy for other developers and API users to mess up the parameters order while constructing the URL. The first approach is definitely easier for them to use. but hard for us to cache.</p><p style="font-size: 13px; line-height: 17px; color: rgb(51, 51, 51); background-image: none; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: rgb(255, 255, 255); padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-bottom: 10px; font-family: Arial, Helvetica, FreeSans, sans-serif; ">One approach to fix this, is to step out of the rails app box. and to utilize the webserver (in our case, nginx). Using nginx rewrite module, you can allow developers to use the query string parameters that is easy for them, map the query string parameters to the proper route that is expected by rails, and make use of page caching.</p><p style="font-size: 13px; line-height: 17px; color: rgb(51, 51, 51); background-image: none; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: rgb(255, 255, 255); padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-bottom: 10px; font-family: Arial, Helvetica, FreeSans, sans-serif; ">Here is the nginx configuration snippet that does the mapping:</p><pre style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-bottom: 10px; overflow-x: visible; overflow-y: visible; color: rgb(51, 51, 51); font-size: 13px; line-height: 17px; background-color: rgb(255, 255, 255); ">location = /feed.json {<br /> set $apiurl '';<br /> if ($arg_date != '') { set $apiurl /date/$arg_date ;}<br /> if ($arg_type != '') { set $apiurl $apiurl/type/$arg_type ;}<br /> if ($arg_page != '') { set $apiurl $apiurl/page/$arg_page ;}<br /> if ($arg_limit != '') { set $apiurl $apiurl/limit/$arg_limit ;}<br /> if ($arg_order != '') { set $apiurl $apiurl/order/$arg_order ;}<br /> if ($apiurl != '') {rewrite ^ $apiurl/feed.json ; break; }<br />}</pre><p style="font-size: 13px; line-height: 17px; color: rgb(51, 51, 51); background-image: none; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: rgb(255, 255, 255); padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-bottom: 10px; font-family: Arial, Helvetica, FreeSans, sans-serif; ">So, using this, both you and developers using your API will be happy. This will needs you to maintain your routes synchronized with nginx configuration. but the gains are awesome.</p><p style="font-size: 13px; line-height: 17px; color: rgb(51, 51, 51); background-image: none; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: rgb(255, 255, 255); padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-bottom: 10px; font-family: Arial, Helvetica, FreeSans, sans-serif; ">I am sure the same can be achieved via a rack middleware. which will be fine if handling nginx was not possible. but for high traffic websites. handling this on nginx level will be much more better than reaching rails stack. That's why we used page caching in the first place</p><p style="font-size: 13px; line-height: 17px; color: rgb(51, 51, 51); background-image: none; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: rgb(255, 255, 255); padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-bottom: 10px; font-family: Arial, Helvetica, FreeSans, sans-serif; ">The point is that if you are a web developer, you should never be restricted to the constrains made by your application framework. You can utilize anything between the end client/browser to ur most wrapped DB storage. The application server is only one of those components.</p>mahmoudhttp://www.blogger.com/profile/09457586853819956435noreply@blogger.com0tag:blogger.com,1999:blog-24779679.post-69853910709009032692012-01-31T19:20:00.000-08:002012-01-31T19:25:12.879-08:00Cuban Pete<center><iframe width="420" height="315" src="http://www.youtube.com/embed/1iwOFoSVfbU" frameborder="0" allowfullscreen></iframe></center><br /><br /><p style="font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 11px; line-height: 16px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-align: -webkit-auto; "><br /></p><p style="font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 11px; line-height: 16px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-align: -webkit-auto; "><br /></p><p style="font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 11px; line-height: 16px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-align: -webkit-auto; ">They call me Cuban Pete<br /></p><p style="font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 11px; line-height: 16px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-align: -webkit-auto; ">I'm the King of the Rumba beat<br /></p><p style="font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 11px; line-height: 16px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-align: -webkit-auto; ">When I play the marracas<br /></p><p style="font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 11px; line-height: 16px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-align: -webkit-auto; ">I go chick-chicky-boom<br /></p><p style="font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 11px; line-height: 16px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-align: -webkit-auto; ">chick-chicky-boom<br /></p><p style="font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 11px; line-height: 16px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-align: -webkit-auto; "><br /></p><p style="font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 11px; line-height: 16px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-align: -webkit-auto; ">Yes, Sir, I'm Cuban Pete<br /></p><p style="font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 11px; line-height: 16px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-align: -webkit-auto; ">I'm the craze of my native street<br /></p><p style="font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 11px; line-height: 16px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-align: -webkit-auto; ">when I start to dance<br /></p><p style="font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 11px; line-height: 16px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-align: -webkit-auto; ">everything goes chick-chicky-boom<br /></p><p style="font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 11px; line-height: 16px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-align: -webkit-auto; ">chick-chicky-boom<br /></p><p style="font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 11px; line-height: 16px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-align: -webkit-auto; "><br /></p><p style="font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 11px; line-height: 16px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-align: -webkit-auto; ">There Senoritas they sing<br /></p><p style="font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 11px; line-height: 16px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-align: -webkit-auto; ">and how they swing<br /></p><p style="font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 11px; line-height: 16px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-align: -webkit-auto; ">with this rumbero<br /></p><p style="font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 11px; line-height: 16px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-align: -webkit-auto; ">it's very nice so full of spice<br /></p><p style="font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 11px; line-height: 16px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-align: -webkit-auto; "><br /></p><p style="font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 11px; line-height: 16px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-align: -webkit-auto; ">and when they dance and they bring a happy ring of vaqueros</p><p style="font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 11px; line-height: 16px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-align: -webkit-auto; ">singing a song all the day long<br /></p><p style="font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 11px; line-height: 16px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-align: -webkit-auto; "><br /></p><p style="font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 11px; line-height: 16px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-align: -webkit-auto; ">So if you like the beat<br /></p><p style="font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 11px; line-height: 16px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-align: -webkit-auto; ">take a lesson from Cuban Pete<br /></p><p style="font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 11px; line-height: 16px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-align: -webkit-auto; ">and I'll teach you to chick-chicky-boom<br /></p><p style="font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 11px; line-height: 16px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-align: -webkit-auto; ">chick-chicky-boom chick-chicky-boom<br /></p><p style="font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 11px; line-height: 16px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-align: -webkit-auto; "><br /></p><p style="font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 11px; line-height: 16px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-align: -webkit-auto; ">Si, Senorita, I know that you will like the chicky boom chick<br /></p><p style="font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 11px; line-height: 16px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-align: -webkit-auto; ">'cause it's the dance of Latin romance<br /></p><p style="font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 11px; line-height: 16px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-align: -webkit-auto; ">and Cuban Pete doesn't teach you<br /></p><p style="font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 11px; line-height: 16px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-align: -webkit-auto; ">in a hurry like Arthur Murray<br /></p><p style="font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 11px; line-height: 16px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-align: -webkit-auto; ">I come from Havanah and there's always manana<br /></p><p style="font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 11px; line-height: 16px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-align: -webkit-auto; "><br /></p><p style="font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 11px; line-height: 16px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-align: -webkit-auto; ">* * *</p><p style="font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 11px; line-height: 16px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-align: -webkit-auto; "><br /></p><p style="font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 11px; line-height: 16px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-align: -webkit-auto; ">They call me Sally Sweet</p><p style="font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 11px; line-height: 16px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-align: -webkit-auto; ">I'm the Queen of Delancy Street<br /></p><p style="font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 11px; line-height: 16px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-align: -webkit-auto; ">When I start to dance everything goes chick-chicky-boom<br /></p><p style="font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 11px; line-height: 16px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-align: -webkit-auto; ">chick-chicky-boom<br /></p><p style="font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 11px; line-height: 16px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-align: -webkit-auto; "><br /></p><p style="font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 11px; line-height: 16px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-align: -webkit-auto; ">Excuse me Mister Pete</p><p style="font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 11px; line-height: 16px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-align: -webkit-auto; ">have the Cubans a different beat<br /></p><p style="font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 11px; line-height: 16px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-align: -webkit-auto; ">if they have will you teach me to chick<br /></p><p style="font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 11px; line-height: 16px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-align: -webkit-auto; ">chick-chicky-boom chick-chicky-boom<br /></p><p style="font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 11px; line-height: 16px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-align: -webkit-auto; "><br /></p><p style="font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 11px; line-height: 16px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-align: -webkit-auto; ">* * *</p><p style="font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 11px; line-height: 16px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-align: -webkit-auto; "><br /></p><p style="font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 11px; line-height: 16px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-align: -webkit-auto; ">Si, Senorita, I know that you will like the chicky boom chick</p><p style="font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 11px; line-height: 16px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-align: -webkit-auto; ">It's very nice so full of spice<br /></p><p style="font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 11px; line-height: 16px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-align: -webkit-auto; ">I place my hand your hip and if you will just give me your hand<br /></p><p style="font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 11px; line-height: 16px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-align: -webkit-auto; ">then we shall try just you and I<br /></p><div><br /></div>mahmoudhttp://www.blogger.com/profile/09457586853819956435noreply@blogger.com0tag:blogger.com,1999:blog-24779679.post-51232660631352807212011-10-28T17:32:00.001-07:002011-10-28T17:37:03.274-07:00Media and Advertising panel in ArabNetCairoOne of the most interesting panel discussions in ArabNetCairo was about Media & Advertising. The speakers were:<div><br /></div><div><div><ul><li>Fawzi Rahal: Founder of The Next Web Middle East and Regional Digital Director at Grey in the Middle East and North Africa.</li><li>Waseem El Tanahi: Founder & CEO, MediaRepublic / Cairo360</li><li>Brendon Ogilvy: VP Digital Insights, EffectiveMeasure</li><li>Shady Sherif: CEO, Core Publications</li></ul><br /></div></div><iframe width="560" height="315" src="http://www.youtube.com/embed/ia-m_A79-wg" frameborder="0" allowfullscreen=""></iframe>mahmoudhttp://www.blogger.com/profile/09457586853819956435noreply@blogger.com0tag:blogger.com,1999:blog-24779679.post-63955043010228848282011-10-27T03:31:00.000-07:002011-10-27T03:40:21.612-07:00Meet Zaytouneh, arabic short video recipesOne of the amazing startups presented in ArabNetCairo, was <a href="http://zaytouneh.com/">Zaytouneh</a>, which provides its end users with easy recipes elaborated in short videos (upto 2 minutes). The founder, <a href="http://www.twitter.com/FidaTaher">@FidaTaher</a>, is a video content producer with a lot of experience.. Her passion for the startup was clear in her demo.<div><br /></div><div>On the personal level, I liked this demo a lot from the video recording prospective because: Fida stood directly next to the slides which made things better and clearer than other videos. and because she was on stage. so she didn't cover the lower part of the screen as in the videos of the other startups :)</div><div><br /></div><div>I better leave you with the demo </div><div><br /></div><div><br /></div><iframe width="560" height="315" src="http://www.youtube.com/embed/xonzPlFH5hs" frameborder="0" allowfullscreen=""></iframe>mahmoudhttp://www.blogger.com/profile/09457586853819956435noreply@blogger.com0tag:blogger.com,1999:blog-24779679.post-8901353539448662562011-10-27T03:28:00.000-07:002011-10-27T03:31:11.303-07:00New mothers, You are not aloneSuperMama, The winner of the first positions in StartupDemo of ArabNetCairo, is a community based website that supports mothers through the rough times of motherhood..<div><br /></div><div>Check their wonderful presentation</div><div><br /></div><div><br /></div><br /><br /><iframe width="560" height="315" src="http://www.youtube.com/embed/l0AN6u_vB0c" frameborder="0" allowfullscreen></iframe>mahmoudhttp://www.blogger.com/profile/09457586853819956435noreply@blogger.com0tag:blogger.com,1999:blog-24779679.post-7583962451348474482011-10-27T02:48:00.000-07:002011-10-27T03:27:54.560-07:00Marhaba PalestineOne of the most remarkable startups that are valuable to the community. <a href="http://www.marhabapalestine.com/">Marhaba Palestine</a> is there to change the way the world looks at palestine. and shows how it is a wonderful country for tourism. enriching the economy and the culture.<div><br /></div><div>follow them at <a href="http://twitter.com/marhabaPLS">@marhabaPLS</a> <span class="Apple-style-span" style="color: rgb(54, 43, 54); font-family: Helvetica, Arial, sans-serif; font-size: 13px; background-color: rgba(255, 255, 0, 0.148438); "> </span></div><div><span class="Apple-style-span" style="color: rgb(54, 43, 54); font-family: Helvetica, Arial, sans-serif; font-size: 13px; background-color: rgba(255, 255, 0, 0.148438); "><br /></span></div><div><span class="Apple-style-span" style="color: rgb(54, 43, 54); font-family: Helvetica, Arial, sans-serif; font-size: 13px; background-color: rgba(255, 255, 0, 0.148438); "><br /></span></div><br /><br /><iframe width="560" height="315" src="http://www.youtube.com/embed/bJxKHRsoxxc" frameborder="0" allowfullscreen></iframe>mahmoudhttp://www.blogger.com/profile/09457586853819956435noreply@blogger.com0tag:blogger.com,1999:blog-24779679.post-71777034391078093712011-10-27T02:42:00.000-07:002011-10-27T03:40:58.057-07:00Enrich your travel experience with TouringaIf you happen to travel to other places, you can find more about those new places easily and effectively with <a href="http://www.touringa.com/">Tourunga</a>. It connects travelers with other travelers and with the locals of the country, allowing a rich collaborative community for much better traveling experience.<div><br /></div><div><br /></div><br /><br /><iframe width="560" height="315" src="http://www.youtube.com/embed/0_4ve-jeiVg" frameborder="0" allowfullscreen></iframe>mahmoudhttp://www.blogger.com/profile/09457586853819956435noreply@blogger.com0tag:blogger.com,1999:blog-24779679.post-67371942717959346442011-10-27T02:37:00.000-07:002011-10-27T03:41:03.464-07:00Find your sports mate with SporBroSporBro is one of the startups creating during STartupWeekendCairo on April 2011. They've launched the <a href="http://beta.sporbro.com/">beta version</a>. and participated in Startup Demo of ArabNetCairo.<div><br /></div><div>It is basically about match making. To help you find sports partner if you are interested in a game, and do not have someone to practice with.</div><div><br /></div><div><br /></div><br /><br /><iframe width="560" height="315" src="http://www.youtube.com/embed/EwBxCrji5wY" frameborder="0" allowfullscreen></iframe>mahmoudhttp://www.blogger.com/profile/09457586853819956435noreply@blogger.com0tag:blogger.com,1999:blog-24779679.post-6263323481267038552011-10-27T02:32:00.000-07:002011-10-27T03:41:09.942-07:00Eventtus in ArabNetCairo<div>"Eventtus will help you Find interesting events you don't want to miss, Share your plans with friends, Socialize during events like never before, Meet new people who share same interests, Organize awesome events in simple steps for free, and Have fun." from the official website of <a href="http://eventtus.com/">Eventtus</a></div><div><br /></div><br /><iframe width="560" height="315" src="http://www.youtube.com/embed/kDfrl6NM_uI" frameborder="0" allowfullscreen></iframe>mahmoudhttp://www.blogger.com/profile/09457586853819956435noreply@blogger.com0