tag:blogger.com,1999:blog-25282161598051277902024-02-20T11:22:04.600-08:00piczkowskiMarcin Piczkowskihttp://www.blogger.com/profile/05961375583331768059noreply@blogger.comBlogger36125tag:blogger.com,1999:blog-2528216159805127790.post-62451888578835267922017-10-01T03:08:00.001-07:002017-10-01T03:09:08.771-07:0039. PZU Warsaw Marathon<div dir="ltr" style="text-align: left;" trbidi="on">
Somehow 3 years had to pass since my last marathon in Lodz in 2014.<br />
<br />
This time I registered in the marathon very spontaneously for several reasons:<br />
<br />
1. I wanted to remind myself how is it to attend a marathon, feel the atmosphere and cheer of viewers and to race with others<br />
<br />
2. Last 3 months I had off work and sedentary lifestyle and I wanted to verify if it brought any positive effects on me and how it would affect my score in a marathon. During these months I have run a lot and long distances (20-30km) so the effect should be visible.<br />
<br />
Indeed, this brought positive results and I've beaten my last record by 20min and finished with net time of 04:05:36<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiHB_CZpVQEEsCgEWiuWbS3i6lodBaUd5FO0_o7pfLPL-p7VDbwQaXxE66KFGvTjvJcxuO6tLMpRsa1CjX88i-a4WCdWgkaCleVqB_s9D5rH6LyQTkXzFJRr0_iL7KF9JT9f0YXKsdySHoz/s1600/pzum.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="167" data-original-width="1419" height="74" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiHB_CZpVQEEsCgEWiuWbS3i6lodBaUd5FO0_o7pfLPL-p7VDbwQaXxE66KFGvTjvJcxuO6tLMpRsa1CjX88i-a4WCdWgkaCleVqB_s9D5rH6LyQTkXzFJRr0_iL7KF9JT9f0YXKsdySHoz/s640/pzum.png" width="640" /></a></div>
<br />
<br />
The weather also helped a bit. It was perfect for running: not too cold, not too hot, cloudy and a bit pluvial.<br />
<br />
Of course, I have tracked it.<br />
<br />
<iframe allowtransparency="true" frameborder="0" height="405" scrolling="no" src="https://www.strava.com/activities/1199106590/embed/4aceb5e61a3c0e12f46a319ee3079d631e96fc95" width="590"></iframe>
<br />
<br />
My condition was so good that on the last meters I could push more. I remember the previous marathon when my legs failed more after 35km and I have almost crawled to the finish.<br />
<br />
Below are some photos to commemorate that day.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLKYn6Zg0YAoSbSQqV7SNFfz7wJcDfo0hz84vQOh6daLZvUhRDg-3L5peQFHneluSxgEl9a5U-ntM6MGSYV0nEbmW6gkg55i1FkVNUV3L3T_XxTWiWYzmZDDxxI_18jIpYY8oFH22PXk1E/s1600/mwa17_02_mtr_20170924_093615.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="280" data-original-width="420" height="213" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLKYn6Zg0YAoSbSQqV7SNFfz7wJcDfo0hz84vQOh6daLZvUhRDg-3L5peQFHneluSxgEl9a5U-ntM6MGSYV0nEbmW6gkg55i1FkVNUV3L3T_XxTWiWYzmZDDxxI_18jIpYY8oFH22PXk1E/s320/mwa17_02_mtr_20170924_093615.jpg" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9vbNNEd7W5GKmdRPGzkZSmBpikfu03sHhna5aBaSUqsfNoI3jcGeAKHm3FclIjylI_oGPQLTw6Lh1F-suFxDGrajodUQrlMXb0r3cB10mHIPF2iR41sNRISFsrApV831OZdWIbq6SaMoO/s1600/mwa17_02_rkl_20170924_130131.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="279" data-original-width="420" height="212" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9vbNNEd7W5GKmdRPGzkZSmBpikfu03sHhna5aBaSUqsfNoI3jcGeAKHm3FclIjylI_oGPQLTw6Lh1F-suFxDGrajodUQrlMXb0r3cB10mHIPF2iR41sNRISFsrApV831OZdWIbq6SaMoO/s320/mwa17_02_rkl_20170924_130131.jpg" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQdezC2qU7RFqJ4QxkEyCQcnU8ipcCokCKrxrFuuw3nEcvb2sdLv5YF156AGnRpA1et_cBKaUH4XituzpLDPdJXrgmV-5RJtkLHyfCgqisn4IIEDme33vHHOFsKa6SxPAgKgAcZV32bUqo/s1600/mwa17_02_sch_20170924_113350_1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="280" data-original-width="420" height="213" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQdezC2qU7RFqJ4QxkEyCQcnU8ipcCokCKrxrFuuw3nEcvb2sdLv5YF156AGnRpA1et_cBKaUH4XituzpLDPdJXrgmV-5RJtkLHyfCgqisn4IIEDme33vHHOFsKa6SxPAgKgAcZV32bUqo/s320/mwa17_02_sch_20170924_113350_1.jpg" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhSK2RI0F4jq4UKh8kxOEY6Om4Y71sMUI1up0T7luZ9LBkOB1w_LcAKb7SBp_WMsACJlYSuGtRqmpfSuc1xSpvPebXxZHIV0ua1FzR7nLMMivQzoPrJyDzsZB7E1id3Dz4_YrGSLrW774mv/s1600/mwa17_02_sch_20170924_113348.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="280" data-original-width="420" height="213" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhSK2RI0F4jq4UKh8kxOEY6Om4Y71sMUI1up0T7luZ9LBkOB1w_LcAKb7SBp_WMsACJlYSuGtRqmpfSuc1xSpvPebXxZHIV0ua1FzR7nLMMivQzoPrJyDzsZB7E1id3Dz4_YrGSLrW774mv/s320/mwa17_02_sch_20170924_113348.jpg" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh97k8PAt_7KU819VX3LsMFlfSFHu5hZ3qL2FZ2-0ssSqT7l4PqqVSoCD8u11T915qcxP9fYR80e5ikoPLu_k7y4TTLDWjAcFQx2nhfnb_NiXrdSwgqTt1c2AvifekUiEeHPR58oNrS3ijQ/s1600/mwa17_04_srv_20170924_131331.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="280" data-original-width="420" height="213" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh97k8PAt_7KU819VX3LsMFlfSFHu5hZ3qL2FZ2-0ssSqT7l4PqqVSoCD8u11T915qcxP9fYR80e5ikoPLu_k7y4TTLDWjAcFQx2nhfnb_NiXrdSwgqTt1c2AvifekUiEeHPR58oNrS3ijQ/s320/mwa17_04_srv_20170924_131331.jpg" width="320" /></a></div>
<br />
<br /></div>
Marcin Piczkowskihttp://www.blogger.com/profile/05961375583331768059noreply@blogger.com0tag:blogger.com,1999:blog-2528216159805127790.post-23124450574429710062017-06-18T13:44:00.000-07:002017-06-18T13:44:27.250-07:00Confessions of a young father programmer<div dir="ltr" style="text-align: left;" trbidi="on">
<br />
<br />
This is a first blog entry after a long absence.<br />
A lot of stuff was happening recently. Let me explain a bit why it was difficult to force myself to write.<br />
<br />
Mostly, this is due to my son who was born in June 2016.<br />
Before my sun was born I heard from many other young fathers that this will completely turn my life upside down and i have to admit - nothing is as it used to be anymore, but that's completely fine. Having a child is as much rewarding as exhausting sometimes :)<br />
<br />
Anyway, I'm trying to get myself together and keep up with all the new techs that came to my ear since then but I did not have time to learn more, such as non-blocking, async servers ( e.g. ratpack), JavaRX, JavaScript frameworks (like React), Big Data ( Spark, Flink, Flume, .. do we have any more "F"-like fancy names here?) and Spring ecosystem (Spring Boot and latest Spring 4 new features).<br />
<br />
This is an instant fight with self-discipline, planning and.. changing plans when all depends on our "Little Chief".<br />
<br />
I know if I wanted to do them all I would do none, so I just thought to concentrate on a single thing first. Just by chance I heard about a contest called "Get Noticed!" (explanation in Polish: http://devstyle.pl/daj-sie-poznac/).<br />
The rule is simple. Each participant has to blog at least twice a week during 3 moths. Every week at least one post should be about the progress in open source project which author should contribute to on Github.<br />
I decided to give it a try and started a brand new blog: https://cloudly.tech where I'm going to write about Cloud related topics and describe my pet project - Servlerless Reservation System.<br />
<br />
<br />
As I am working from home for over 1.5 year already, it is sometimes hard to sit down and concentrate when all the attention is dragged by a baby screaming in the second room or my wife dragged to tears by him and seeking help from me. What makes it ever worse is the kind of remote work I do which is very demanding (in CrossOver with a very special model of work, more about it in separate blogpost)<br />
The new remote job is also another reason of why I can hardly find some spare time off-work to write anything.<br />
In addition other non-programming projects has taken all my free time. That's it, enough of excuses :)<br />
<br />
I wonder how other young fathers programmers went through this first period and keep on going, self-organize and stay productive.<br />
I'm working on the best model now. When I find the silver bullet I will definitely write about it. Hopefully it would help other fathers like me.<br />
I would also read with pleasure experiences and tips from others.<br />
So far I came into the following things that seem to work, but I have problems to turn them into habits:<br />
<br />
1. Get up at 6-7 am yet before the kid gets up and starts "catching in the rye". My kid usually wakes up around 9-10. That gives me 2-3h of undisturbed working. After that we usually play and go for a walk until 12.00 and then eat lunch.<br />
<br />
2. Listen to podcasts<br />
When we walk I usually listen to some podcasts on my mobile when my boy usually takes a nap, the same when I run.<br />
<br />
3. I get back to work at about 1pm (after lunch) or sometimes I run before lunch, then eat a bit later and get back to work at about 2-3pm<br />
<br />
4. I try to split my 40h work into 6h * 6 + 4h. It means I have to work on Saturdays and sometimes Sundays, but I noticed that working over 8h a day influences my motivation and clear thinking very much.<br />
<br />
* 8h means real hours of work, no coffee, chats, lunch, playing ping-pong, etc.<br />
<br />
5. Do sport<br />
As I already mentioned, I run 5-6km twice a week + 1h swimming once a week.<br />
Spreading it every second day in a week looks like a good proportion to cure myself from back and arm pains. It may be first symptoms of RSI but I need to find time to visit a doctor finally to look at it.<br />
I found keeping to this plan very important. I used to have weeks without any move at all, but this only resulted in bad mood, nervousness, pains in body, deprived sleep.<br />
<br />
6. Sleep<br />
At least 6-7h of sleep is a minimum to sustain for me. Without it I'm depressed, slow-thinking and physically exhausted.<br />
I've noticed that it is important to go to sleep and get up in regular hours.<br />
Before I was a night-awl. Recently I have an impression that I'm more productive if I go to bed earlier and wake up earlier.<br />
<br />
However, I will repeat again, this plan is extremely hard to make it a habit so far. Sometimes it's enough to stay overnight on an important task to ruin whole week plan.<br />
If I stay late, I cannot wake up early, then I start work later and stay late again (because there are always so many urgent tasks to complete that day) and go to bad late again.. and the circle goes on.<br />
<br />
I know everyone has own tricks to stay productive and keep the right work-life balance. Please share yours in comments if you like.<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br /></div>
Marcin Piczkowskihttp://www.blogger.com/profile/05961375583331768059noreply@blogger.com0tag:blogger.com,1999:blog-2528216159805127790.post-72096759465536749022015-06-01T17:10:00.003-07:002015-06-01T17:10:56.991-07:00Devoxx4Kids PL<div dir="ltr" style="text-align: left;" trbidi="on">
Another edition of <a href="http://www.devoxx4kids.pl/">devoxx4kids</a> has just passed in Warsaw and again great thanks to organizers. I was just a volunteer and felt some exhaustion but the effort of organizers must have been amazing.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgiF-ZGDSA7QeKiEkMRnRuKylqxiaVGQlV4RWDaLzV5fGh7PdNxUV07a9NnGazdDR3b2RxhajGOg7u2vm1lu_taoMwuAEBMy6uzFcxSPsEYFmIC1YJch052yft4kavVec2nKz7E-SyCZEI/s1600/20150530_123037.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgiF-ZGDSA7QeKiEkMRnRuKylqxiaVGQlV4RWDaLzV5fGh7PdNxUV07a9NnGazdDR3b2RxhajGOg7u2vm1lu_taoMwuAEBMy6uzFcxSPsEYFmIC1YJch052yft4kavVec2nKz7E-SyCZEI/s320/20150530_123037.jpg" width="320" /></a></div>
<br />
<br />
Last year i was taking care of 8-years-old group but this year i wanted a difference and became a teacher of <a href="http://code.google.com/p/blockly/">blockly</a> (similar to scratch) for 10-years-old group.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPcJizohncfRgwr6sEQMVK2Ofr3xJWgBhhWNHOQpqexRvrbasza0Tfh8R16tBQKRcNjbt07AjfF9C-ld7naz4F1y6aO61lUCDLhQMeCVrSvezM_LkI23Qa7Das1HoxC5XNICkcH5onJhU/s1600/20150530_115328.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPcJizohncfRgwr6sEQMVK2Ofr3xJWgBhhWNHOQpqexRvrbasza0Tfh8R16tBQKRcNjbt07AjfF9C-ld7naz4F1y6aO61lUCDLhQMeCVrSvezM_LkI23Qa7Das1HoxC5XNICkcH5onJhU/s320/20150530_115328.jpg" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
It was quite fun to see the difference of approaches and progress among children. When the rest of the group was in the beginning of exercise, 2 girls were clearly ahead and finishing it. As they confessed later, they already learned scratch before and this clearly shows a need for events like this. Not every school reserves sufficient amount of time for IT education and programming so important in the times we live, even less interest i observe among girls. This results later on in how many women land in IT jobs (very little).<br />
<br />
My lecture took only 2 hours so i had rest of the day to see around the other groups and workshops and i come to the conclussion that the most hard groups are the youngest. They very easily loose patience, get tired and run they own path of doing things far away from what the teachers wanted them to learn. But this is not always bad. After all they came here to have some fun and as long as they try some programming, even not according to the teacher‘s plan, i think it‘s good.<br />
<br />
The 12-years-old were the most quite and concentrated on what teacher told them to do. Isn‘t it the effect of education system over years that teaches this passiveness and taking what teacher says for granted and staying away from self-exploratory? I hope this is not the case. Thanks to such events children have chance to try their own ideas and noone shold tell them to wander away from the plan.<br />
<br />
Seeing a few different lectures like Lego Mindstorms, 3D printers, Scratch, App Inventory i must say the teachers did realy good job, even if some have mostly technical background and luck experience in working witch children (me included) the way they leaded was very professional.<br />
<br />
I know from a back-stage conversations with ordanizers that the whole project of devoxx4kids started as a group of friends who wanted to make a workshop for their own kids last year but since then the event got so much interest that people from other cities than warsaw came in touch with them to organize an event in their town.<br />
<br />
I though myself to start it in Lodz. Afer some observations this year and with some help from organizers in Warsaw i think the project has chance to succeed.<br />
Stay tuned..<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhkcnP78ADOsY7IzjCbs5-e4FSJIrYVLPVeLfMRgxn-7B407xgAYceJSZ6mkBAyohSvsgIKyPRTku-M-NWaL_PD2p85kvvfSKgRtMonBV0O-2oXLIoe2fH786AmiJaFVs81nqQvMbKvP28/s1600/20150530_122814.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhkcnP78ADOsY7IzjCbs5-e4FSJIrYVLPVeLfMRgxn-7B407xgAYceJSZ6mkBAyohSvsgIKyPRTku-M-NWaL_PD2p85kvvfSKgRtMonBV0O-2oXLIoe2fH786AmiJaFVs81nqQvMbKvP28/s320/20150530_122814.jpg" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjTTtyvyaQpD4GdnfTKtl1H1hVKUXo4Wd_kxJART-0tLC9YUcbjosuwY4k_ufBfshDNV1vYB9sHdZH2V_ObV3Vv6e-aZHRvQOK8G90p9gA7lNol0l7isJrl2HiiO5SHv_OAPUQLbIxA2oA/s1600/20150530_122838.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjTTtyvyaQpD4GdnfTKtl1H1hVKUXo4Wd_kxJART-0tLC9YUcbjosuwY4k_ufBfshDNV1vYB9sHdZH2V_ObV3Vv6e-aZHRvQOK8G90p9gA7lNol0l7isJrl2HiiO5SHv_OAPUQLbIxA2oA/s320/20150530_122838.jpg" width="320" /></a></div>
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEin4SoGIW1aVBA3aVDMgWw6LBDtHtyfDOfqfT2DNChDokrz8PMpmJwjGSJq7ACO08SSfD-Msv75XFpanuWN7wZj1WROCXHwZNXY5PTzF245My9tO7gyE4tcBP-9IhCfq2-c9vT75Bzr6GE/s1600/20150530_131443.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEin4SoGIW1aVBA3aVDMgWw6LBDtHtyfDOfqfT2DNChDokrz8PMpmJwjGSJq7ACO08SSfD-Msv75XFpanuWN7wZj1WROCXHwZNXY5PTzF245My9tO7gyE4tcBP-9IhCfq2-c9vT75Bzr6GE/s320/20150530_131443.jpg" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhXpr1gG2xVKAoVQUMiOHSwLuQdS5nsAWJuMdNwD_SgsOZLcj4XvMNaBjr42s1Y2jwkX6uriDWGMeb-1m8qW3VdU2ROaoRJUOReIkiY3mY_Lm_fOQ1UlfkMx2MpXwDF8wC4bAlFP8fcPPA/s1600/20150530_133530.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhXpr1gG2xVKAoVQUMiOHSwLuQdS5nsAWJuMdNwD_SgsOZLcj4XvMNaBjr42s1Y2jwkX6uriDWGMeb-1m8qW3VdU2ROaoRJUOReIkiY3mY_Lm_fOQ1UlfkMx2MpXwDF8wC4bAlFP8fcPPA/s320/20150530_133530.jpg" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSkrpBtJSP8a7fOqORycHkuT6EnHrD_eXAgpGPNS_GCfRSs_lsfMKytLuHBa01NWweOUytCs75_8tpq7QPzHZF9u6qS81CXtmOpGdg_yJwPc7kwMihBHA-obkP1wabYtzjA97YXk9L-Qg/s1600/20150530_141028.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSkrpBtJSP8a7fOqORycHkuT6EnHrD_eXAgpGPNS_GCfRSs_lsfMKytLuHBa01NWweOUytCs75_8tpq7QPzHZF9u6qS81CXtmOpGdg_yJwPc7kwMihBHA-obkP1wabYtzjA97YXk9L-Qg/s320/20150530_141028.jpg" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjB47NnltSzf_4xZcRb403AL06yGEHgY3e8-vNPCvuqOrE968mC8qVeRhQWJIzBnjiYZq_qvBOWkt6nFvViOclQzi4ujdlkxrTFH50H8_NO-Wu8dL_foFUCIgPqAosZOrO37SBKtG1tD-A/s1600/20150530_141053.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjB47NnltSzf_4xZcRb403AL06yGEHgY3e8-vNPCvuqOrE968mC8qVeRhQWJIzBnjiYZq_qvBOWkt6nFvViOclQzi4ujdlkxrTFH50H8_NO-Wu8dL_foFUCIgPqAosZOrO37SBKtG1tD-A/s320/20150530_141053.jpg" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
And some movies:</div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen="" frameborder="0" height="315" src="https://www.youtube.com/embed/wb7sJ_WG6I8" width="560"></iframe>
</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen="" frameborder="0" height="315" src="https://www.youtube.com/embed/Yx2uYoKspT4" width="560"></iframe>
</div>
<br /></div>
Marcin Piczkowskihttp://www.blogger.com/profile/05961375583331768059noreply@blogger.com0tag:blogger.com,1999:blog-2528216159805127790.post-15236659378352068972015-05-20T17:05:00.000-07:002015-05-25T15:13:28.148-07:00Atmosphere Conference, Cracow 18-19 May 2015<div dir="ltr" style="text-align: left;" trbidi="on">
<br />
<br />
<div dir="ltr">
This is my brain dump from Atmosphere Conference in Cracow 18-19 May 2015</div>
<div dir="ltr">
Only most important terms to memorize and google about.<br />
<br />
<br />
<img height="239" src="https://lh4.googleusercontent.com/-PlvqW1nJG_4/VVpIGARekKI/AAAAAAAAQCU/Ne6ICTVZaaI/w1135-h851-no/20150518_181917.jpg" width="320" /><img height="239" src="https://lh6.googleusercontent.com/-pxPhf2pX7cs/VVpIByRHKgI/AAAAAAAAQCI/BshFPL8uMiE/w1135-h851-no/20150518_181535.jpg" width="320" /><br />
<br /></div>
<div dir="ltr">
</div>
<div dir="ltr">
<span class="speakers" style="-webkit-text-stroke-width: 0px; background-color: white; box-sizing: border-box; color: #c92028; display: block; font-family: UniversCE-Bold; font-size: 1.3em; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 30px; orphans: auto; text-align: start; text-indent: 0px; text-transform: uppercase; white-space: normal; widows: 1; word-spacing: 0px;"><a href="http://atmosphere-conference.com/speakers/jamie-winsor" style="background: transparent; box-sizing: border-box; color: #c92028; text-decoration: none;">JAMIE WINSOR</a></span><span class="title" style="-webkit-text-stroke-width: 0px; background-color: white; box-sizing: border-box; color: #474747; display: block; font-family: UniversLT-Oblique; font-size: 1.5em; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 20px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 1; word-spacing: 0px;">Building And Releasing A Massively Multiplayer Online Game</span><span class="title" style="-webkit-text-stroke-width: 0px; background-color: white; box-sizing: border-box; color: #474747; display: block; font-family: UniversLT-Oblique; font-size: 1.5em; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 20px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 1; word-spacing: 0px;"> </span>A nice talk about caveats of game server internals and road
of choosing right technology for online platform which is Erlang
(elixir to be precise), a video of the presentation is online <a href="http://www.youtube.com/watch?v=_i6n-eWiVn4" target="_blank">http://www.youtube.com/watch?<wbr></wbr>v=_i6n-eWiVn4</a><br />
Dump:<br />
Elixir<br />
Terraform<br />
<a href="https://github.com/undeadlabs/discovery">https://github.com/undeadlabs/discovery </a></div>
<div dir="ltr">
<br /></div>
<div dir="ltr">
<span class="speakers" style="-webkit-text-stroke-width: 0px; background-color: white; box-sizing: border-box; color: #c92028; display: block; font-family: UniversCE-Bold; font-size: 1.3em; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 30px; orphans: auto; text-align: start; text-indent: 0px; text-transform: uppercase; white-space: normal; widows: 1; word-spacing: 0px;"><a href="http://atmosphere-conference.com/speakers/duncan-davidson" style="background: transparent; box-sizing: border-box; color: #c92028; text-decoration: none;">DUNCAN DAVIDSON</a></span><span class="title" style="-webkit-text-stroke-width: 0px; background-color: white; box-sizing: border-box; color: #474747; display: block; font-family: UniversLT-Oblique; font-size: 1.5em; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 20px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 1; word-spacing: 0px;">What we've learned from writing dozens of polyglot micro services</span><br />
Wunderlist jungle of polyglot micro services<br />
Dump:<br />
Json over <a href="http://en.wikipedia.org/wiki/HTTP/2">Http2</a><br />
Json over <a href="http://en.wikipedia.org/wiki/Advanced_Message_Queuing_Protocol">amqp</a><br />
Spot instances aws</div>
<div dir="ltr">
<br /></div>
<div dir="ltr">
<span class="speakers" style="-webkit-text-stroke-width: 0px; background-color: white; box-sizing: border-box; color: #c92028; display: block; font-family: UniversCE-Bold; font-size: 1.3em; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 30px; orphans: auto; text-align: start; text-indent: 0px; text-transform: uppercase; white-space: normal; widows: 1; word-spacing: 0px;"><a href="http://atmosphere-conference.com/speakers/milen-dyankov" style="background: transparent; box-sizing: border-box; color: #c92028; text-decoration: none;">MILEN DYANKOV</a></span><span class="title" style="-webkit-text-stroke-width: 0px; background-color: white; box-sizing: border-box; color: #474747; display: block; font-family: UniversLT-Oblique; font-size: 1.5em; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 20px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 1; word-spacing: 0px;">Microservices and Modularity or the difference between treatment and cure!</span> </div>
<div dir="ltr">
Great presentation of refactoring Oracle demo EJB application into
modular according to Uncle Bob`s "clean architecture" principles</div>
<div style="text-align: left;">
Slides at <a href="http://www.slideshare.net/MilenDyankov1/microservices-and-modularity">http://www.slideshare.net/MilenDyankov1/microservices-and-modularity</a> and demo at <a href="https://github.com/azzazzel/modular-dukes-forest">https://github.com/azzazzel/modular-dukes-forest</a></div>
<div dir="ltr">
<br />
Dump:<br />
Jdepend</div>
<div dir="ltr">
<br /></div>
<span class="speakers" style="-webkit-text-stroke-width: 0px; background-color: white; box-sizing: border-box; color: #c92028; display: block; font-family: UniversCE-Bold; font-size: 1.3em; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 30px; orphans: auto; text-align: start; text-indent: 0px; text-transform: uppercase; white-space: normal; widows: 1; word-spacing: 0px;"><a href="http://atmosphere-conference.com/speakers/piotr-stapp" style="background: transparent; box-sizing: border-box; color: #c92028; text-decoration: none;">PIOTR STAPP</a>,<span class="Apple-converted-space"> </span><a href="http://atmosphere-conference.com/speakers/marcin-przekop" style="background: transparent; box-sizing: border-box; color: #c92028; text-decoration: none;">MARCIN PRZEKOP</a></span><span class="title" style="-webkit-text-stroke-width: 0px; background-color: white; box-sizing: border-box; color: #474747; display: block; font-family: UniversLT-Oblique; font-size: 1.5em; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 20px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 1; word-spacing: 0px;">DevOps in mBank - lesson learned</span><span class="title" style="-webkit-text-stroke-width: 0px; background-color: white; box-sizing: border-box; color: #474747; display: block; font-family: UniversLT-Oblique; font-size: 1.5em; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 20px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 1; word-spacing: 0px;"> </span><br />
<div dir="ltr">
Dump:<br />
<a href="https://msdn.microsoft.com/en-us/library/ms731082%28v=vs.110%29.aspx">Wcf</a> connection (client-server)<br />
<a href="http://www.hanselman.com/blog/NuGetForTheEnterpriseNuGetInAContinuousIntegrationAutomatedBuildSystem.aspx">Nuget CI</a><br />
<a href="http://www.splunk.com/en_us/homepage.html">Splunk</a> for log mgmt.</div>
<div dir="ltr">
<br />
<img height="476" src="https://lh6.googleusercontent.com/-CHZukIMR3hQ/VVpG3oWg0UI/AAAAAAAAP_s/jYrIug9ichw/w1135-h851-no/20150518_164204.jpg" width="640" /></div>
<div dir="ltr">
<br />
<img height="479" src="https://lh4.googleusercontent.com/-Ai4VAEvK8QE/VVpG8BU7txI/AAAAAAAAP_4/3_b7U5SYr60/w1135-h851-no/20150518_164337.jpg" width="640" /><br />
<br />
<img height="479" src="https://lh6.googleusercontent.com/-bB1yxhhScBY/VVpHBzCyoKI/AAAAAAAAQAE/7MwqExvl0P4/w1135-h851-no/20150518_164354.jpg" width="640" /><br />
<br />
<img height="479" src="https://lh6.googleusercontent.com/-jgMdf1PeLPw/VVpHIVTl0VI/AAAAAAAAQAQ/wkE6jNlaAVc/w1135-h851-no/20150518_164536.jpg" width="640" /><br />
<br />
<img height="479" src="https://lh6.googleusercontent.com/-n5qKJss4cLg/VVpHLepQEHI/AAAAAAAAQAc/H1QMbkAAitE/w1135-h851-no/20150518_164627.jpg" width="640" /><br />
<br />
<img height="479" src="https://lh6.googleusercontent.com/-KK_4C06SpHg/VVpHPbvHajI/AAAAAAAAQAo/KZuS0w3nqFw/w1135-h851-no/20150518_164747.jpg" width="640" /><br />
<br />
<img height="479" src="https://lh4.googleusercontent.com/-CchusYhqHjs/VVpHXr9JwaI/AAAAAAAAQA0/x29sdR_M8gU/w1135-h851-no/20150518_165907.jpg" width="640" /><br />
<br />
<img height="479" src="https://lh4.googleusercontent.com/-OqJgE-YKrak/VVpHY5tbm5I/AAAAAAAAQBA/CsLcC-tQdFs/w1135-h851-no/20150518_170030.jpg" width="640" /><br />
<br />
<img height="479" src="https://lh6.googleusercontent.com/-JtxTOCpX5kM/VVpHajQW_WI/AAAAAAAAQBM/jjQGTkHBi2I/w1135-h851-no/20150518_170246.jpg" width="640" /><br />
<br />
<img height="479" src="https://lh4.googleusercontent.com/-IskbE9czQcU/VVpHfd2CtbI/AAAAAAAAQBY/nXbGcVFjalI/w1135-h851-no/20150518_170359.jpg" width="640" /><br />
<br />
<img height="479" src="https://lh6.googleusercontent.com/-_CS6FMG6gZA/VVpHiGFJuII/AAAAAAAAQBk/G_KD6UO8tvk/w1135-h851-no/20150518_170603.jpg" width="640" /><br />
<br />
<img height="479" src="https://lh6.googleusercontent.com/-0IT226eG1ls/VVpJ0RiHyAI/AAAAAAAAQCk/7Ji0_75-hMs/w1135-h851-no/20150518_170634.jpg" width="640" /><br />
<br />
<img height="479" src="https://lh4.googleusercontent.com/-gZLBpKkxDVY/VVpH8s7sYFI/AAAAAAAAQBw/Xw1H0eZhHjg/w1135-h851-no/20150518_171311.jpg" width="640" /><br />
<br />
Demo:<br />
<iframe allowfullscreen="" frameborder="0" height="315" src="https://www.youtube.com/embed/i0Fe2QGPXz4" width="560"></iframe>
<br />
<br />
<br />
<span class="speakers" style="background-color: white; box-sizing: border-box; color: #c92028; display: block; font-family: UniversCE-Bold; line-height: 30px; text-transform: uppercase;"><a href="http://atmosphere-conference.com/speakers/lev-popov" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; box-sizing: border-box; color: #c92028; text-decoration: none;">LEV POPOV</a></span><span class="title" style="background-color: white; box-sizing: border-box; color: #474747; display: block; font-family: UniversLT-Oblique; line-height: 20px;">Service Operations Evolution at Spotify</span><span class="title" style="background-color: white; box-sizing: border-box; color: #474747; display: block; font-family: UniversLT-Oblique; font-size: 1.5em; line-height: 20px;"><br /></span><span class="title" style="background-color: white; box-sizing: border-box; color: #474747; display: block; font-family: UniversLT-Oblique; font-size: 1.5em; line-height: 20px;"><img height="478" src="https://lh6.googleusercontent.com/-zCfh3UitOpo/VV0ZX354-iI/AAAAAAAAQDs/mh3TsS0pSP4/w1135-h851-no/20150519_102215.jpg" width="640" /></span><span class="title" style="background-color: white; box-sizing: border-box; color: #474747; display: block; font-family: UniversLT-Oblique; font-size: 1.5em; line-height: 20px;"><br /></span><span class="title" style="background-color: white; box-sizing: border-box; color: #474747; display: block; font-family: UniversLT-Oblique; font-size: 1.5em; line-height: 20px;"><img height="478" src="https://lh6.googleusercontent.com/-6whYswD_IYo/VV0ZbRnGFII/AAAAAAAAQD4/YdaoTa5iMZo/w1135-h851-no/20150519_105828.jpg" width="640" /></span><span class="title" style="background-color: white; box-sizing: border-box; color: #474747; display: block; font-family: UniversLT-Oblique; font-size: 1.5em; line-height: 20px;"><br /></span><span class="title" style="background-color: white; box-sizing: border-box; color: #474747; display: block; font-family: UniversLT-Oblique; font-size: 1.5em; line-height: 20px;"><img height="478" src="https://lh6.googleusercontent.com/-1EdHpWQhMsM/VV0Zco2YGuI/AAAAAAAAQEQ/e9xfm6BbBhg/w1135-h851-no/20150519_105911.jpg" width="640" /></span><span class="title" style="background-color: white; box-sizing: border-box; color: #474747; display: block; font-family: UniversLT-Oblique; font-size: 1.5em; line-height: 20px;"><br /></span><span class="title" style="background-color: white; box-sizing: border-box; color: #474747; display: block; font-family: UniversLT-Oblique; font-size: 1.5em; line-height: 20px;"><img height="478" src="https://lh6.googleusercontent.com/-kuYkTwaTCP8/VV0ZdzNJJ8I/AAAAAAAAQEM/M6Rd6DkpBbg/w1135-h851-no/20150519_110229.jpg" width="640" /></span><span class="title" style="background-color: white; box-sizing: border-box; color: #474747; display: block; font-family: UniversLT-Oblique; font-size: 1.5em; line-height: 20px;"><br /></span><span class="title" style="background-color: white; box-sizing: border-box; color: #474747; display: block; font-family: UniversLT-Oblique; font-size: 1.5em; line-height: 20px;"><img height="478" src="https://lh6.googleusercontent.com/-TAXr_E9am7g/VV0ZfeRROLI/AAAAAAAAQEg/-ErGx7XXZZ4/w1135-h851-no/20150519_110429.jpg" width="640" /></span><span class="title" style="background-color: white; box-sizing: border-box; color: #474747; display: block; font-family: UniversLT-Oblique; font-size: 1.5em; line-height: 20px;"><br /></span><span class="title" style="background-color: white; box-sizing: border-box; color: #474747; display: block; font-family: UniversLT-Oblique; font-size: 1.5em; line-height: 20px;"><img height="478" src="https://lh6.googleusercontent.com/-oJmhGuAnKkc/VV0ZhmJlvyI/AAAAAAAAQEo/xFfi5TVCK9c/w1135-h851-no/20150519_110609.jpg" style="font-size: 1.5em;" width="640" /></span><span class="title" style="background-color: white; box-sizing: border-box; color: #474747; display: block; font-family: UniversLT-Oblique; font-size: 1.5em; line-height: 20px;"><br /></span><span class="title" style="background-color: white; box-sizing: border-box; color: #474747; display: block; font-family: UniversLT-Oblique; font-size: 1.5em; line-height: 20px;"><img height="478" src="https://lh6.googleusercontent.com/-LDF_7DAGP_A/VV0ZoxCZElI/AAAAAAAAQE0/jq5v3MohztU/w1135-h851-no/20150519_110822.jpg" width="640" /></span><span class="title" style="background-color: white; box-sizing: border-box; color: #474747; display: block; font-family: UniversLT-Oblique; font-size: 1.5em; line-height: 20px;"><br /></span><span class="title" style="background-color: white; box-sizing: border-box; color: #474747; display: block; font-family: UniversLT-Oblique; font-size: 1.5em; line-height: 20px;"><img height="478" src="https://lh6.googleusercontent.com/-aSXf8q6pBbE/VV0ZrTvlN5I/AAAAAAAAQFA/vxPFj6NPvUU/w1135-h851-no/20150519_111457.jpg" width="640" /></span><span class="title" style="background-color: white; box-sizing: border-box; color: #474747; display: block; font-family: UniversLT-Oblique; font-size: 1.5em; line-height: 20px;"><br /></span><span class="title" style="background-color: white; box-sizing: border-box; color: #474747; display: block; font-family: UniversLT-Oblique; font-size: 1.5em; line-height: 20px;"><img height="478" src="https://lh6.googleusercontent.com/--d1jfMhDi6k/VV0ZxQQXqHI/AAAAAAAAQFM/fJnul_0FxXE/w1135-h851-no/20150519_111815.jpg" width="640" /></span><span class="title" style="background-color: white; box-sizing: border-box; color: #474747; display: block; font-family: UniversLT-Oblique; font-size: 1.5em; line-height: 20px;"><br /></span><span class="title" style="background-color: white; box-sizing: border-box; color: #474747; display: block; font-family: UniversLT-Oblique; font-size: 1.5em; line-height: 20px;"><img height="478" src="https://lh4.googleusercontent.com/-aXWjVUeFaCU/VV0Zy7TednI/AAAAAAAAQFY/2EWj6bKBGf4/w1135-h851-no/20150519_111855.jpg" width="640" /></span><span class="title" style="background-color: white; box-sizing: border-box; color: #474747; display: block; font-family: UniversLT-Oblique; font-size: 1.5em; line-height: 20px;"><br /></span><span class="title" style="background-color: white; box-sizing: border-box; color: #474747; display: block; font-family: UniversLT-Oblique; font-size: 1.5em; line-height: 20px;"><br /></span><br />
<span class="speakers" style="-webkit-text-stroke-width: 0px; background-color: white; box-sizing: border-box; color: #c92028; display: block; font-family: UniversCE-Bold; font-size: 1.3em; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 30px; orphans: auto; text-align: start; text-indent: 0px; text-transform: uppercase; white-space: normal; widows: 1; word-spacing: 0px;"><a href="http://atmosphere-conference.com/speakers/konrad-malawski" style="background: transparent; box-sizing: border-box; color: #c92028; text-decoration: none;">KONRAD MALAWSKI</a></span><span class="title" style="-webkit-text-stroke-width: 0px; background-color: white; box-sizing: border-box; color: #474747; display: block; font-family: UniversLT-Oblique; font-size: 1.5em; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 20px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 1; word-spacing: 0px;">Need for Async: In pursuit of scalable internet-scale applications</span><br />
Dump:</div>
<div dir="ltr">
Concurrent 《 lock free 《 block free<br />
CAS compare and set Blocked Queue lock free<br />
ConcurrentLinkedQueue wait free</div>
<div dir="ltr">
<br />
C10k 10000 concurrent connection problem of scalability - epool function in linux</div>
<div dir="ltr">
<br /></div>
<div dir="ltr">
Distributed systems:<br />
- latency enhancement by backup requests<br />
- avoided duplicate load by combined requests</div>
<div dir="ltr">
<br /></div>
<div dir="ltr">
<span class="speakers" style="box-sizing: border-box; color: #c92028; display: block; font-family: UniversCE-Bold; font-size: 1.3em; line-height: 30px; text-transform: uppercase;"><a href="http://atmosphere-conference.com/speakers/andrzej-grzesik" style="background: transparent; box-sizing: border-box; color: #c92028; text-decoration: none;">ANDRZEJ GRZESIK</a></span><span class="title" style="box-sizing: border-box; color: #474747; display: block; font-family: UniversLT-Oblique; font-size: 1.5em; line-height: 20px;">The path to repeatable builds</span></div>
<div class="abstract" style="-webkit-text-stroke-width: 0px; background-color: white; box-sizing: border-box; clear: both; color: #333333; font-family: UniversLT-Condensed; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 20px; orphans: auto; padding-top: 10px; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 1; word-spacing: 0px;">
<br class="Apple-interchange-newline" /></div>
<div dir="ltr">
<span class="title" style="-webkit-text-stroke-width: 0px; background-color: white; box-sizing: border-box; color: #474747; display: block; font-family: UniversLT-Oblique; font-size: 1.5em; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 20px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 1; word-spacing: 0px;"></span></div>
<div dir="ltr">
Dump:</div>
<div dir="ltr">
<a href="https://wiki.jenkins-ci.org/display/JENKINS/SCM+Sync+configuration+plugin">Jenkins job config store git plugin</a></div>
<div dir="ltr">
<br /></div>
<div dir="ltr">
<span class="speakers" style="-webkit-text-stroke-width: 0px; background-color: white; box-sizing: border-box; color: #c92028; display: block; font-family: UniversCE-Bold; font-size: 1.3em; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 30px; orphans: auto; text-align: start; text-indent: 0px; text-transform: uppercase; white-space: normal; widows: 1; word-spacing: 0px;"><a href="http://atmosphere-conference.com/speakers/tomasz-nurkiewicz" style="background: transparent; box-sizing: border-box; color: #c92028; text-decoration: none;">TOMASZ NURKIEWICZ</a></span><span class="title" style="-webkit-text-stroke-width: 0px; background-color: white; box-sizing: border-box; color: #474747; display: block; font-family: UniversLT-Oblique; font-size: 1.5em; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 20px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 1; word-spacing: 0px;">Hystrix – managing failures in distributed systems</span> </div>
<div dir="ltr">
<br /></div>
<div dir="ltr">
Demo at <a href="https://github.com/nurkiewicz/hystrix-demo">https://github.com/nurkiewicz/hystrix-demo </a></div>
<div dir="ltr">
<br /></div>
<div dir="ltr">
Dump:</div>
<div dir="ltr">
</div>
<div dir="ltr">
<a href="https://github.com/Netflix/Hystrix/tree/master/hystrix-dashboard">Hystrix dashboard</a><br />
<a href="https://github.com/Netflix/Turbine/wiki">Turbine</a> for multiple instances monitoring and aggregating to single stream</div>
<div dir="ltr">
<br /></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<span class="speakers" style="-webkit-text-stroke-width: 0px; background-color: white; box-sizing: border-box; color: #c92028; display: block; font-family: UniversCE-Bold; font-size: 1.3em; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 30px; orphans: auto; text-align: start; text-indent: 0px; text-transform: uppercase; white-space: normal; widows: 1; word-spacing: 0px;"></span><span class="speakers" style="-webkit-text-stroke-width: 0px; background-color: white; box-sizing: border-box; color: #c92028; display: block; font-family: UniversCE-Bold; font-size: 1.3em; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 30px; orphans: auto; text-align: start; text-indent: 0px; text-transform: uppercase; white-space: normal; widows: 1; word-spacing: 0px;"><a href="http://atmosphere-conference.com/speakers/lukasz-szydlo" style="background: transparent; box-sizing: border-box; color: #c92028; text-decoration: none;">KASZ SZYDLO</a></span><span class="title" style="-webkit-text-stroke-width: 0px; background-color: white; box-sizing: border-box; color: #474747; display: block; font-family: UniversLT-Oblique; font-size: 1.5em; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 20px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 1; word-spacing: 0px;">Enabling Continuous Delivery</span><span class="title" style="-webkit-text-stroke-width: 0px; background-color: white; box-sizing: border-box; color: #474747; display: block; font-family: UniversLT-Oblique; font-size: 1.5em; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 20px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 1; word-spacing: 0px;"> </span><span class="title" style="-webkit-text-stroke-width: 0px; background-color: white; box-sizing: border-box; color: #474747; display: block; font-family: UniversLT-Oblique; font-size: 1.5em; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 20px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 1; word-spacing: 0px;"> </span><span class="title" style="-webkit-text-stroke-width: 0px; background-color: white; box-sizing: border-box; color: #474747; display: block; font-family: UniversLT-Oblique; font-size: 1.5em; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 20px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 1; word-spacing: 0px;"> </span><span class="title" style="-webkit-text-stroke-width: 0px; background-color: white; box-sizing: border-box; color: #474747; display: block; font-family: UniversLT-Oblique; font-size: 1.5em; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 20px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 1; word-spacing: 0px;"></span> Book worth reading: <a href="http://www.growing-object-oriented-software.com/">http://www.growing-object-oriented-software.com/</a></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<span class="speakers" style="-webkit-text-stroke-width: 0px; background-color: white; box-sizing: border-box; color: #c92028; display: block; font-family: UniversCE-Bold; font-size: 1.3em; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 30px; orphans: auto; text-align: start; text-indent: 0px; text-transform: uppercase; white-space: normal; widows: 1; word-spacing: 0px;"><a href="http://atmosphere-conference.com/speakers/marcin-bazydlo" style="background: transparent; box-sizing: border-box; color: #c92028; text-decoration: none;">MARCIN BAZYDLO</a></span><span class="title" style="-webkit-text-stroke-width: 0px; background-color: white; box-sizing: border-box; color: #474747; display: block; font-family: UniversLT-Oblique; font-size: 1.5em; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 20px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 1; word-spacing: 0px;">Strongly Typed Logs - Journeyman's story</span><span class="title" style="-webkit-text-stroke-width: 0px; background-color: white; box-sizing: border-box; color: #474747; display: block; font-family: UniversLT-Oblique; font-size: 1.5em; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 20px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 1; word-spacing: 0px;"> </span> </div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
Blog at: <a href="http://tech.opentable.co.uk/">http://tech.opentable.co.uk/</a></div>
<div style="text-align: left;">
<br />
Dump: </div>
<div style="text-align: left;">
Kafka, Redis + ELS stack<br />
Semantic logs<br />
Elastic search depends on Lucene schema, version is important in the logs
cause db supports many versions of the app throught lifespan
</div>
<div dir="ltr">
Zipco for distributed request tracing<br />
<a href="https://www.emaze.com/">Emaze</a> - presentation editor</div>
<div dir="ltr">
<br /></div>
<div dir="ltr">
<span class="speakers" style="-webkit-text-stroke-width: 0px; background-color: white; box-sizing: border-box; color: #c92028; display: block; font-family: UniversCE-Bold; font-size: 1.3em; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 30px; orphans: auto; text-align: start; text-indent: 0px; text-transform: uppercase; white-space: normal; widows: 1; word-spacing: 0px;"><a href="http://atmosphere-conference.com/speakers/seth-vargo" style="background: transparent; box-sizing: border-box; color: #c92028; text-decoration: none;">SETH VARGO</a></span><span class="title" style="-webkit-text-stroke-width: 0px; background-color: white; box-sizing: border-box; color: #474747; display: block; font-family: UniversLT-Oblique; font-size: 1.5em; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 20px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 1; word-spacing: 0px;">The 10 Myths of DevOps</span><span class="title" style="-webkit-text-stroke-width: 0px; background-color: white; box-sizing: border-box; color: #474747; display: block; font-family: UniversLT-Oblique; font-size: 1.5em; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 20px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 1; word-spacing: 0px;"> </span></div>
<div dir="ltr">
Google's April Fool's Day spot:<a href="https://www.youtube.com/watch?v=Cp10_PygJ4o"> Google Actual Cloud</a></div>
<div dir="ltr">
<br /></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<span class="title" style="-webkit-text-stroke-width: 0px; background-color: white; box-sizing: border-box; color: #474747; display: block; font-family: UniversLT-Oblique; font-size: 1.5em; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 20px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 1; word-spacing: 0px;"> </span><span class="title" style="-webkit-text-stroke-width: 0px; background-color: white; box-sizing: border-box; color: #474747; display: block; font-family: UniversLT-Oblique; font-size: 1.5em; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 20px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 1; word-spacing: 0px;"> </span><span class="title" style="-webkit-text-stroke-width: 0px; background-color: white; box-sizing: border-box; color: #474747; display: block; font-family: UniversLT-Oblique; font-size: 1.5em; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 20px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 1; word-spacing: 0px;"> </span><span class="title" style="-webkit-text-stroke-width: 0px; background-color: white; box-sizing: border-box; color: #474747; display: block; font-family: UniversLT-Oblique; font-size: 1.5em; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 20px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 1; word-spacing: 0px;"> </span><span class="title" style="-webkit-text-stroke-width: 0px; background-color: white; box-sizing: border-box; color: #474747; display: block; font-family: UniversLT-Oblique; font-size: 1.5em; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 20px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 1; word-spacing: 0px;"></span></div>
<div dir="ltr">
</div>
</div>
Marcin Piczkowskihttp://www.blogger.com/profile/05961375583331768059noreply@blogger.com0tag:blogger.com,1999:blog-2528216159805127790.post-21701659460856907522014-07-14T15:37:00.000-07:002014-07-14T15:37:53.362-07:00Copy Android Kindle books to PCIn my <a href="http://piczkowski.blogspot.com/2014/07/backup-android-photos-with-adb.html">previous post</a> I explained how to use ADB utility to copy files from Android phone to PC.<br />
If you happened to use Kindle eBook reader on Android and wondered where it stores books bought in Amazon, then it's here:<br />
<br />
/sdcard/Android/data/com.amazon.kindle/files<br />
<br />
File extension used by Amazon books is .prc<br />
You can copy the file to PC using command like:<br />
<br />
<span style="background-color: #f3f3f3; font-family: Courier New, Courier, monospace; font-size: x-small;">adb pull /sdcard/Android/data/com.amazon.kindle/files/B00FOT936Y_EBOK.prc /tmp/</span><br />
<br />
You can also push .prc books to Android similar way:<br />
<br />
<span style="background-color: #f3f3f3; font-family: 'Courier New', Courier, monospace; font-size: x-small;">adb push</span><span style="background-color: #f3f3f3; font-family: 'Courier New', Courier, monospace; font-size: x-small;"> /tmp/</span><span style="background-color: #f3f3f3; font-family: 'Courier New', Courier, monospace; font-size: x-small;">mybook.prc </span><span style="background-color: #f3f3f3; font-family: 'Courier New', Courier, monospace; font-size: x-small;">/sdcard/Android/data/com.amazon.kindle/files/mybook.prc</span><br />
<span style="background-color: #f3f3f3; font-family: 'Courier New', Courier, monospace; font-size: x-small;"><br /></span>
If you bought the book from Amazon then it will be secured with DRM. This is easy to remove, <a href="https://www.facebook.com/notes/unix/remove-drm-from-amazon-kindles-ebooks-using-linux/293892687293406">some people</a> do it even though illegal.<br />
<br />
<br />
<br />
<div>
<br /></div>
Marcin Piczkowskihttp://www.blogger.com/profile/05961375583331768059noreply@blogger.com0tag:blogger.com,1999:blog-2528216159805127790.post-35129160413910866712014-07-14T15:02:00.000-07:002014-07-14T15:02:04.742-07:00Backup Android photos with ADBDuring my vacation a few days ago my Android phone (Samsung Galaxy S1) crashed unexpectedly.<br />
I can only imagine that the reason was too little free sdcard space, but I'm not sure.<br />
It happened to me already the second time and the first time I fixed it so that I rebooted the phone in recovery mode (reboot with pressing POWER + VOLUME UP + MENU buttons) and did factory reset, obviously loosing all data which was not backed up on the phone.<br />
I think it could work as well this time, but the problem is I had plenty of nice picks done on vacation on my phone and would like to rescue them :)<br />
<br />
This is what I did:<br />
<br />
<ol>
<li>Reboot phone in recovery mode (as described previously)</li>
<li>Connect phone to PC with USB</li>
<li>Run adb tool to restore photos to PC</li>
</ol>
<br />
<br />
I am using Ubuntu on my PC but the following would work similar on other OS. The only thing you will probably need to change is path to the temp folder on PC.<br />
<br />
<br />
<ul>
<li>Run adb as root so that you can mount your sdcard in next steps</li>
</ul>
<br />
<br />
<span style="background-color: #f3f3f3; font-family: Courier New, Courier, monospace; font-size: x-small;"># adb root</span><br />
<br />
<br />
<ul>
<li>Mount sdcard. Maybe you don't' need this step and your sdcard is already mounted. Mine was not.</li>
</ul>
<br />
<br />
<span style="background-color: #f3f3f3; font-family: Courier New, Courier, monospace; font-size: x-small;"># adb shell</span><br />
<br />
then in shell type:<br />
<br />
<span style="background-color: #f3f3f3; font-family: Courier New, Courier, monospace; font-size: x-small;"># mount /sdcard</span><br />
<br />
Now you can list content of sdcard<br />
<br />
<span style="background-color: #f3f3f3; font-family: Courier New, Courier, monospace; font-size: x-small;"># ls /sdcard</span><br />
<br />
Among files on the list I could see folder <b>DCIM</b><br />
This is where camera photos and films are saved so I grab this to my temp folder.<br />
<br />
<br />
<ul>
<li>Copy photos and videos to temp folder on PC</li>
</ul>
<br />
<br />
First exit shell:<br />
<br />
<span style="background-color: #f3f3f3; font-family: Courier New, Courier, monospace; font-size: x-small;"># exit</span><br />
<br />
Then copy:<br />
<br />
<span style="background-color: #f3f3f3; font-family: Courier New, Courier, monospace; font-size: x-small;"># adb pull /sdcard/DCIM /tmp</span><br />
<br />
This can take some of your drive space so be prepared otherwise the command will exit with message:<br />
"No space left on device"<br />
<div>
<br /></div>
<br />
<br />
<br />
<br />Marcin Piczkowskihttp://www.blogger.com/profile/05961375583331768059noreply@blogger.com3tag:blogger.com,1999:blog-2528216159805127790.post-67522177834410422922014-06-05T14:21:00.001-07:002014-06-05T14:21:23.399-07:00RaspBMC Remote DesktopFirst of all, although possible to connect to setup remote desktop on RaspBMC it works awfully slow and probably does not bring a other usability than navigating through UI.<br />
Video simply hangs so it's impossible to watch any.<br />
<br />
These are the steps to set it up:<br />
1. Open your favorite text editor and save the script,<br />
<br />
e.g. command : <span style="background-color: #efefef; color: #333333; font-family: Verdana, Arial, sans-serif; font-size: 13px; line-height: 18px; text-align: center;">nano vncserver</span><br />
and paste this script:<br />
<br />
<span style="background-color: white; font-family: Monaco, Consolas, Courier, monospace; font-size: 13px; line-height: 18px;">!/bin/sh</span><br style="background-color: white; font-family: Monaco, Consolas, Courier, monospace; font-size: 13px; line-height: 18px;" /><br style="background-color: white; font-family: Monaco, Consolas, Courier, monospace; font-size: 13px; line-height: 18px;" /><span style="background-color: white; font-family: Monaco, Consolas, Courier, monospace; font-size: 13px; line-height: 18px;">case $1 in</span><br style="background-color: white; font-family: Monaco, Consolas, Courier, monospace; font-size: 13px; line-height: 18px;" /><span style="background-color: white; font-family: Monaco, Consolas, Courier, monospace; font-size: 13px; line-height: 18px;"> start)</span><br style="background-color: white; font-family: Monaco, Consolas, Courier, monospace; font-size: 13px; line-height: 18px;" /><span style="background-color: white; font-family: Monaco, Consolas, Courier, monospace; font-size: 13px; line-height: 18px;"> if [ -f /var/run/vnc.pid ] ; then</span><br style="background-color: white; font-family: Monaco, Consolas, Courier, monospace; font-size: 13px; line-height: 18px;" /><span style="background-color: white; font-family: Monaco, Consolas, Courier, monospace; font-size: 13px; line-height: 18px;"> echo "VNC server is already running"</span><br style="background-color: white; font-family: Monaco, Consolas, Courier, monospace; font-size: 13px; line-height: 18px;" /><span style="background-color: white; font-family: Monaco, Consolas, Courier, monospace; font-size: 13px; line-height: 18px;"> else</span><br style="background-color: white; font-family: Monaco, Consolas, Courier, monospace; font-size: 13px; line-height: 18px;" /><span style="background-color: white; font-family: Monaco, Consolas, Courier, monospace; font-size: 13px; line-height: 18px;"> initctl stop xbmc</span><br style="background-color: white; font-family: Monaco, Consolas, Courier, monospace; font-size: 13px; line-height: 18px;" /><span style="background-color: white; font-family: Monaco, Consolas, Courier, monospace; font-size: 13px; line-height: 18px;"> sudo vnc_dispmanx 2>/dev/null &</span><br style="background-color: white; font-family: Monaco, Consolas, Courier, monospace; font-size: 13px; line-height: 18px;" /><span style="background-color: white; font-family: Monaco, Consolas, Courier, monospace; font-size: 13px; line-height: 18px;"> echo $! | sudo dd of=/var/run/vnc.pid</span><br style="background-color: white; font-family: Monaco, Consolas, Courier, monospace; font-size: 13px; line-height: 18px;" /><span style="background-color: white; font-family: Monaco, Consolas, Courier, monospace; font-size: 13px; line-height: 18px;"> initctl start xbmc</span><br style="background-color: white; font-family: Monaco, Consolas, Courier, monospace; font-size: 13px; line-height: 18px;" /><span style="background-color: white; font-family: Monaco, Consolas, Courier, monospace; font-size: 13px; line-height: 18px;"> fi</span><br style="background-color: white; font-family: Monaco, Consolas, Courier, monospace; font-size: 13px; line-height: 18px;" /><span style="background-color: white; font-family: Monaco, Consolas, Courier, monospace; font-size: 13px; line-height: 18px;"> ;;</span><br style="background-color: white; font-family: Monaco, Consolas, Courier, monospace; font-size: 13px; line-height: 18px;" /><span style="background-color: white; font-family: Monaco, Consolas, Courier, monospace; font-size: 13px; line-height: 18px;"> stop)</span><br style="background-color: white; font-family: Monaco, Consolas, Courier, monospace; font-size: 13px; line-height: 18px;" /><span style="background-color: white; font-family: Monaco, Consolas, Courier, monospace; font-size: 13px; line-height: 18px;"> if [ -f /var/run/vnc.pid ] ; then</span><br style="background-color: white; font-family: Monaco, Consolas, Courier, monospace; font-size: 13px; line-height: 18px;" /><span style="background-color: white; font-family: Monaco, Consolas, Courier, monospace; font-size: 13px; line-height: 18px;"> sudo kill -TERM $(cat /var/run/vnc.pid)</span><br style="background-color: white; font-family: Monaco, Consolas, Courier, monospace; font-size: 13px; line-height: 18px;" /><span style="background-color: white; font-family: Monaco, Consolas, Courier, monospace; font-size: 13px; line-height: 18px;"> sudo rm /var/run/vnc.pid</span><br style="background-color: white; font-family: Monaco, Consolas, Courier, monospace; font-size: 13px; line-height: 18px;" /><span style="background-color: white; font-family: Monaco, Consolas, Courier, monospace; font-size: 13px; line-height: 18px;"> else</span><br style="background-color: white; font-family: Monaco, Consolas, Courier, monospace; font-size: 13px; line-height: 18px;" /><span style="background-color: white; font-family: Monaco, Consolas, Courier, monospace; font-size: 13px; line-height: 18px;"> echo "VNC server is not running"</span><br style="background-color: white; font-family: Monaco, Consolas, Courier, monospace; font-size: 13px; line-height: 18px;" /><span style="background-color: white; font-family: Monaco, Consolas, Courier, monospace; font-size: 13px; line-height: 18px;"> fi</span><br style="background-color: white; font-family: Monaco, Consolas, Courier, monospace; font-size: 13px; line-height: 18px;" /><span style="background-color: white; font-family: Monaco, Consolas, Courier, monospace; font-size: 13px; line-height: 18px;"> ;;</span><br style="background-color: white; font-family: Monaco, Consolas, Courier, monospace; font-size: 13px; line-height: 18px;" /><span style="background-color: white; font-family: Monaco, Consolas, Courier, monospace; font-size: 13px; line-height: 18px;"> *)</span><br style="background-color: white; font-family: Monaco, Consolas, Courier, monospace; font-size: 13px; line-height: 18px;" /><span style="background-color: white; font-family: Monaco, Consolas, Courier, monospace; font-size: 13px; line-height: 18px;"> echo "Usage $0 start|stop"</span><br style="background-color: white; font-family: Monaco, Consolas, Courier, monospace; font-size: 13px; line-height: 18px;" /><span style="background-color: white; font-family: Monaco, Consolas, Courier, monospace; font-size: 13px; line-height: 18px;"> ;;</span><br style="background-color: white; font-family: Monaco, Consolas, Courier, monospace; font-size: 13px; line-height: 18px;" /><span style="background-color: white; font-family: Monaco, Consolas, Courier, monospace; font-size: 13px; line-height: 18px;">esac</span><br />
<span style="background-color: white; font-family: Monaco, Consolas, Courier, monospace; font-size: 13px; line-height: 18px;"><br /></span>
<span style="background-color: white; font-family: Monaco, Consolas, Courier, monospace; font-size: 13px; line-height: 18px;">2. </span><span style="background-color: #efefef; color: #333333; font-family: Verdana, Arial, sans-serif; font-size: 13px; line-height: 18px; text-align: center;">chmod +x vncserver</span><br />
<span style="background-color: white; font-family: Monaco, Consolas, Courier, monospace; font-size: 13px; line-height: 18px;"><br /></span>
<span style="background-color: white; font-family: Monaco, Consolas, Courier, monospace; font-size: 13px; line-height: 18px;">3. </span><span style="background-color: #efefef; color: #333333; font-family: Verdana, Arial, sans-serif; font-size: 13px; line-height: 18px; text-align: center;">sudo mv vncserver /usr/local/sbin</span><br />
<span style="background-color: white; font-family: Monaco, Consolas, Courier, monospace; font-size: 13px; line-height: 18px;"><br /></span>
<span style="background-color: white; font-family: Monaco, Consolas, Courier, monospace; font-size: 13px; line-height: 18px;">4. </span><span style="background-color: #efefef; color: #333333; font-family: Verdana, Arial, sans-serif; font-size: 13px; line-height: 18px; text-align: center;">vncserver start</span><br />
<span style="background-color: #fefdfa; color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13px; line-height: 18px;">If you want to check if it's running, check if vnc_dispmanx has the default VNC port open (5900)</span><br style="background-color: #fefdfa; color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13px; line-height: 18px;" /><div style="background-color: #13773e; color: #fff0a5; font-family: Courier; font-size: 13px; line-height: 18px;">
<span style="font-size: xx-small;">pi@raspbmc:~$ sudo netstat -lnptu |grep vnc</span></div>
<div style="background-color: #13773e; color: #fff0a5; font-family: Courier; font-size: 13px; line-height: 18px;">
<span style="font-size: xx-small;">tcp 0 0 0.0.0.0:5900 0.0.0.0:* LISTEN 3687/vnc_dispmanx</span></div>
<br style="background-color: #fefdfa; color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13px; line-height: 18px;" /><div style="background-color: #13773e; color: #fff0a5; font-family: Courier; font-size: 13px; line-height: 18px;">
<span style="font-size: xx-small;">tcp6 0 0 :::5900 :::* LISTEN 3687/vnc_dispmanx</span></div>
<div style="background-color: #fefdfa; color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13px; line-height: 18px;">
<span style="font-size: xx-small;"><br /></span></div>
<span style="background-color: #fefdfa; color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13px; line-height: 18px;">5. When you're done, you should turn it off, as it's quite CPU hungry: </span><br />
<div>
<span style="background-color: #efefef; color: #333333; font-family: Verdana, Arial, sans-serif; font-size: 13px; line-height: 18px; text-align: center;"><br /></span></div>
<div>
<span style="background-color: #efefef; color: #333333; font-family: Verdana, Arial, sans-serif; font-size: 13px; line-height: 18px; text-align: center;">vncserver stop</span></div>
<div>
<div style="text-align: center;">
<span style="color: #333333; font-family: Verdana, Arial, sans-serif; font-size: x-small;"><span style="line-height: 18px;"><br /></span></span></div>
<b style="background-color: #fefdfa; color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13px; line-height: 18px;">Connecting with VNC viewer</b>From Ubuntu you can use vncviewer:<br />
<br />
<span style="background-color: #efefef; color: #333333; font-family: Verdana, Arial, sans-serif; font-size: 13px; line-height: 18px; text-align: center;">sudo apt-get install vncviewer</span><br />
<span style="background-color: #efefef; color: #333333; font-family: Verdana, Arial, sans-serif; font-size: 13px; line-height: 18px; text-align: center;"><br /></span>
<span style="background-color: #efefef; color: #333333; font-family: Verdana, Arial, sans-serif; font-size: 13px; line-height: 18px; text-align: center;">vncviewer 192.168.1.101:5900</span><br />
<span style="background-color: #efefef; color: #333333; font-family: Verdana, Arial, sans-serif; font-size: 13px; line-height: 18px; text-align: center;"><br /></span>
<span style="background-color: #efefef; color: #333333; font-family: Verdana, Arial, sans-serif; font-size: 13px; line-height: 18px; text-align: center;"><br /></span></div>
Marcin Piczkowskihttp://www.blogger.com/profile/05961375583331768059noreply@blogger.com1tag:blogger.com,1999:blog-2528216159805127790.post-55950910934565723962014-01-07T06:07:00.000-08:002014-01-07T06:09:45.474-08:00Arduino LM35 termometer<div dir="ltr" style="text-align: left;" trbidi="on">
<div dir="ltr" style="text-align: left;" trbidi="on">
<a href="https://www.blogger.com/blogger.g?blogID=2528216159805127790" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a>In my <a href="http://piczkowski.blogspot.com/2014/01/arduino-ds18b20-termometer.html">previous post</a> I described how to measure temperature with DS18B20 sensor. In this post I will show an alternative with <a href="http://www.robot-italy.net/downloads/lm35.pdf">LM35</a>.<br />
<br />
<br />
The source code with comments looks like this:<br />
<div class="gistLoad" data-id="8299719" id="gist-8299719">
</div>
And the circuit like this (image borrowed from <a href="http://www.ladyada.net/learn/sensors/temp36.html">other interesting blog</a>)<br />
<img height="326" src="http://www.ladyada.net/images/sensors/tmp36fritz.gif" width="640" /><br />
Additional explanation can be found in <a href="http://playground.arduino.cc/Main/LM35HigherResolution">Arduino blog</a>.<br />
</div>
<script src="https://raw.github.com/moski/gist-Blogger/master/public/gistLoader.js" type="text/javascript"></script>
</div>
Marcin Piczkowskihttp://www.blogger.com/profile/05961375583331768059noreply@blogger.com0tag:blogger.com,1999:blog-2528216159805127790.post-13651071518380991612014-01-07T05:57:00.002-08:002014-01-07T05:57:34.043-08:00Arduino ds18b20 termometer<div dir="ltr" style="text-align: left;" trbidi="on">
<br />
<div style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;">
<img alt="Waterproof DS18B20 Digital temperature sensor + extras" src="http://www.adafruit.com/images/medium/381_MED.jpg" id="mainReplaceableImage" title="Waterproof DS18B20 Digital temperature sensor + extras" width="400" /></div>
<br />
Recently I bought DS18B20 senson in waterproof sonda like <a href="http://www.adafruit.com/products/381">that.</a><br />
The purpose of it is to be able to measure water temerature in aquarium.<br />
In broader scope I'd like to build in future a remote aquarium management kit with Arduino and Raspberry Pi, that would measure water parameters, record them and expose online, as well as manage light, feading, etc. remotely.<br />
<br />
How to use DS18B20?<br />
<br />
First you need to install 3rd party library of Dallas Temperature.<br />
Download <a href="https://github.com/milesburton/Arduino-Temperature-Control-Library">the zip from GitHub</a> and extract in Arduino lib folder -<br />
libraries can be installed as described <a href="http://arduino.cc/en/Guide/Libraries">here</a>. <br />
So i got:<br />
<br />
<div style="text-align: left;">
<span style="font-family: "Courier New",Courier,monospace;"><span style="font-size: x-small;">~/sketchbook/libraries/DallasTemperature/DallasTemperature.cpp</span></span></div>
<div style="text-align: left;">
<span style="font-family: "Courier New",Courier,monospace;"><span style="font-size: x-small;">~/sketchbook/libraries/DallasTemperature/DallasTemperature.h</span></span></div>
<br />
I restart Arduino IDE and save program source: <br />
<div class="gistLoad" data-id="8299287" id="gist-8299287">
</div>
Now lets connect circuit<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRi_R9laICAccOD4ew29k4NmEK95MW7ej4ifyCIbtsesf46a4Vy6BFpRzzkmmspZy2ja9UaFvBk79SttokzxCuWXQ1pujL-9xIG5QiPw06LcIaiLl5fZn_G-DZOWx_gyHHmxHJhSsp5Rk/s1600/ds18b20.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRi_R9laICAccOD4ew29k4NmEK95MW7ej4ifyCIbtsesf46a4Vy6BFpRzzkmmspZy2ja9UaFvBk79SttokzxCuWXQ1pujL-9xIG5QiPw06LcIaiLl5fZn_G-DZOWx_gyHHmxHJhSsp5Rk/s1600/ds18b20.png" height="320" width="296" /></a></div>
The pullup resistor in most of tutorials is 4.7 KOhm but any from 2k to 5k should work. I tested my circuit with 4.9kOhm.<br />
<script src="https://raw.github.com/moski/gist-Blogger/master/public/gistLoader.js" type="text/javascript"></script>
</div>
Marcin Piczkowskihttp://www.blogger.com/profile/05961375583331768059noreply@blogger.com0tag:blogger.com,1999:blog-2528216159805127790.post-90840255692089891922013-12-29T11:41:00.003-08:002013-12-29T11:41:44.024-08:00GitLab SSH<div dir="ltr" style="text-align: left;" trbidi="on">
<a href="http://gitlab.org/">GitLab</a> HELP instructions on how to connect GitLab with SSH seems not to be 100% complete.<br />
What it mentions is:<br />
<h3 class="page-title">
SSH Keys</h3>
<div class="slead">
SSH key allows you to establish a secure connection between your computer and GitLab
</div>
<div class="slead">
To generate a new SSH key just open your terminal and use code below. </div>
<div class="slead">
<br /></div>
<pre class="dark">ssh-keygen -t rsa -C "user@example.com"
# Creates a new ssh key using the provided email
# Generating public/private rsa key pair...</pre>
<pre class="dark"> </pre>
<div class="slead">
Next just use code below to dump your public key and add to GitLab SSH Keys </div>
<div class="slead">
<br /></div>
<pre class="dark">cat ~/.ssh/id_rsa.pub
# ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC6eNtGpNGwstc....</pre>
<pre class="dark"> </pre>
<div class="dark" style="text-align: left;">
When I tried this and uploaded public RSA key to my GitLab profile i still got error when trying 'git push':</div>
<div class="dark" style="text-align: left;">
<br /></div>
<div class="dark" style="text-align: left;">
<span style="font-size: x-small;">Agent admitted failure to sign using the key.<br />Permission denied (publickey).<br />fatal: Could not read from remote repository.<br /><br />Please make sure you have the correct access rights<br />and the repository exists.</span></div>
<div class="dark" style="text-align: left;">
<br /></div>
<div class="dark" style="text-align: left;">
So i read somewhere that missing part is to execute:</div>
<div class="dark" style="text-align: left;">
<br /></div>
<div class="dark" style="text-align: left;">
<span style="font-size: x-small;">ssh-add ~/.ssh/id_rsa</span></div>
<div class="dark" style="text-align: left;">
<br /></div>
<div class="dark" style="text-align: left;">
Now SSH connection works fine.</div>
</div>
Marcin Piczkowskihttp://www.blogger.com/profile/05961375583331768059noreply@blogger.com0tag:blogger.com,1999:blog-2528216159805127790.post-83335254947640481332013-12-22T13:30:00.002-08:002013-12-22T14:01:53.429-08:00Raspbmc home media center<div dir="ltr" style="text-align: left;" trbidi="on">
Most of recent TV sets are already packed with bunch of hi-tech stuff that change the way we perceive watching TV. In the past we were bound to a range of channels, even though having satelite at home gave us quite a wide rande of it - counted in hundreds. The Internet added completely new possibilities. Almost every TV available today has internet connectivity. We do not any longer have to stick to what is beeing broadcasted but we choose ourselves what to watch and when.<br />
<br />
What if you have an old TV without RJ45 socket or WiFi? Do you have to buy special subscription or decoders to access a large entertainment centers?<br />
No, you can have it all for free with Raspberry Pi.<br />
<br />
All you need to do is download <a href="http://www.raspbmc.com/">Raspbmc</a> Linux image and put it on SD card, which you then insert to Raspberry Pi.<br />
Then you plug Raspberry Pi to internet - Raspbmc has DHCP configured by default so it will boot and start setup automatically after you tun it on.<br />
Then you also plug it to TV with HDMI cable and watch things happen.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiE13LRMaKRx8ljXpZR186p-cwayGmdkfYGGxnUUt55yuSZChaN3JxOwcsT6z2dHG2Tt0LgaQB9OnVE0cMJc-zBaX8EtkQs_3B3h7URvTt1W2gXy83W5ZXFTMaP76-YrzLGTc5bHDTDb7o/s1600/IMG_20131222_095801.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiE13LRMaKRx8ljXpZR186p-cwayGmdkfYGGxnUUt55yuSZChaN3JxOwcsT6z2dHG2Tt0LgaQB9OnVE0cMJc-zBaX8EtkQs_3B3h7URvTt1W2gXy83W5ZXFTMaP76-YrzLGTc5bHDTDb7o/s320/IMG_20131222_095801.jpg" width="320" /></a></div>
<br />
Now..hm... I don't have a keyboard, how to steer my new media centre?<br />
XBMC offers a few possibilities of <a href="http://wiki.xbmc.org/index.php?title=Remote_controls">remote control.</a><br />
I found <a href="http://yatse.leetzone.org/redmine/projects/androidwidget">Yatse</a> on my Andorid smart phone the easiest way.<br />
<br />
You can then add audio and video plugins that allow you to watch or listen to various media channels, search through Youtube or Vimeo and many, many others...<br />
<br />
Still don't forget you have a small computer on board so you can do other stuff with it, program, setup webserver, etc. If you'd like to connect to it even for such a prosaic thing as uploading some files, you can access it through SSH.<br />
<br />
<a href="http://www.raspbmc.com/wiki/user/using-ssh/">Here's</a> a good tutorial how to do it.<br />
<br />
E.g. to upload file to /tmp folder on Pi:<br />
<blockquote class="tr_bq">
<div style="text-align: left;">
scp file.mp4 pi@192.168.1.105:/tmp </div>
</blockquote>
<br />
The default pi password is <i>raspberry</i><br />
<br />
If you want you can configure WiFi on Raspbmc like <a href="http://www.myraspberrypiexperience.com/raspbmc-wireless/">this</a>.<br />
<br />
You can also play with XBMC and try extending it with new features. Have a look at development tutorials <a href="http://wiki.xbmc.org/index.php?title=Python_development">here</a>.<br />
<br />
If you'd like to have access to media channels in your local language, like me in Polish, you'd probably find some plugins for your language in the web. I found <a href="http://www.qkiz.pl/blog/ubuntu/programy-i-gry/142-instalacja-xbmc-polskie-kana%C5%82y-telewizji-i-vod-w-ubuntu.html">some</a> for mine.<br />
<br />
Have fun !</div>
Marcin Piczkowskihttp://www.blogger.com/profile/05961375583331768059noreply@blogger.com0tag:blogger.com,1999:blog-2528216159805127790.post-33844057438841422152013-11-26T12:52:00.002-08:002013-11-26T12:52:42.463-08:00Functional Programming Principles in Scala - Complete<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifOsnZQBLaBGChgLJ2WnGOL-kc-S2jcun2rJZ8M86Cd_s9UV6YkLU2Q3d6_cDi3CzclJsBfDE1u7fWah55BMB61R0SoWVqDEmuABCXpUdww5stB9rPBgmoQ9RT8SDzve7cKzCAcIeh3B4/s1600/Screenshot+from+2013-11-26+21:49:02.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifOsnZQBLaBGChgLJ2WnGOL-kc-S2jcun2rJZ8M86Cd_s9UV6YkLU2Q3d6_cDi3CzclJsBfDE1u7fWah55BMB61R0SoWVqDEmuABCXpUdww5stB9rPBgmoQ9RT8SDzve7cKzCAcIeh3B4/s640/Screenshot+from+2013-11-26+21:49:02.png" width="595" /></a></div>
<span style="background-color: white; color: #555555; font-family: sofiapro, Arial, sans-serif; font-size: 16px; line-height: 24px;"><br /></span>
<span style="background-color: white; color: #555555; font-family: sofiapro, Arial, sans-serif; font-size: 16px; line-height: 24px;">Earned 82.9%</span>Marcin Piczkowskihttp://www.blogger.com/profile/05961375583331768059noreply@blogger.com0tag:blogger.com,1999:blog-2528216159805127790.post-23479090071367102192013-11-13T10:59:00.000-08:002013-11-15T16:32:37.181-08:00Amazon AWS Change Instance Type<div dir="ltr" style="text-align: left;" trbidi="on">
Changing instance type is quick with Amazon AWS CLI tools.<br />
First download tools from <a href="http://aws.amazon.com/cli/">http://aws.amazon.com/cli/</a><br />
Then setup env. variables for easy use of tools:<br />
<br />
1. Set EC2_HOME as path to your unzipped archive<br />
2. Add EC2_HOME/bin to your PATH variable<br />
3. Set env. variables with your access key and secret key which you can get from <a href="https://console.aws.amazon.com/iam/home?#security_credential">https://console.aws.amazon.com/iam/home?#security_credential</a><br />
<div style="text-align: left;">
e.g.:</div>
<div style="text-align: left;">
<span style="font-family: inherit;">AWS_ACCESS_KEY_ID = AKIAIOSFODNN7EXAMPLE</span>AWS_SECRET_ACCESS_KEY<span style="font-family: inherit;"> = wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY</span></div>
<div style="text-align: left;">
<span style="font-family: inherit;"><br /></span></div>
<div style="text-align: left;">
<span style="font-family: inherit;">Follow the steps <a href="http://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html">here</a> for more guidance.</span></div>
<div style="text-align: left;">
<span style="font-family: inherit;">You can also check how to install it on Ubuntu <a href="http://alestic.com/2012/05/aws-command-line-packages">here</a>.</span><br />
<span style="font-family: inherit;"><br /></span></div>
<div style="text-align: left;">
<span style="font-family: inherit;">3. Test it, t</span><span style="font-family: inherit;">ype from command line:</span></div>
<div style="text-align: left;">
<span style="font-family: inherit;">ec2-desc</span>ribe-instances</div>
<br />
You should get response with info about your AWS instances.<br />
<br />
Then when you already have instance running, let's say of type m1.small and you want upgrade it to m1.medium follow the below steps (supposing you have instance with ID = i-a57e31dc):<br />
<br />
<div style="text-align: left;">
NOTE: After you change type your public DNS of instance will change. You must have <span style="background-color: white; line-height: 19px;"><span style="font-family: inherit;">EBS boot instance (not instance-store or S3-based AMI).</span></span></div>
<div style="text-align: left;">
<span style="background-color: white; line-height: 19px;"><span style="font-family: inherit;"><br /></span></span></div>
<div style="text-align: left;">
<span style="background-color: white; line-height: 19px;"><span style="font-family: inherit;">1. </span></span><span style="line-height: 19px;">c2-stop-instances i-a57e31dc</span></div>
<div style="text-align: left;">
<span style="font-family: inherit;"><br /></span></div>
<span style="font-family: inherit;">2. Optionally, create a snapshot of old instance for future use - see <code style="background-color: white; line-height: 19px; margin: 0px; padding: 0px;">ec2-create-image</code></span><br />
<br />
<span style="font-family: monospace;"><span style="line-height: 19px;"><br /></span></span><span style="font-family: inherit;">3. </span>ec2-modify-instance-attribute --instance-type m1.medium i-a57e31dc<br />
<br />
4. ec2-start-instances i-a57e31dc</div>
Marcin Piczkowskihttp://www.blogger.com/profile/05961375583331768059noreply@blogger.com0tag:blogger.com,1999:blog-2528216159805127790.post-36139048758455574182013-11-01T18:27:00.004-07:002013-11-01T18:29:01.731-07:00Rapspberry Pi WebcamNext trial with RP, this time setting up a webcam over HTTP.<br />
<br />
I followed the steps:<br />
<br />
1. Connect webcam to USB port, check device is recognized<br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><br /></span>
<br />
<pre name="2e44" style="background-color: #f2f2f0; color: #333332; font-family: Monaco, 'Courier New', Courier, monospace; margin-bottom: 20px; padding: 20px; white-space: pre-wrap; word-wrap: break-word;"><span style="font-size: x-small;">lsusb</span></pre>
I got:<br />
<br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;">Bus 001 Device 002: ID 0424:9512 Standard Microsystems Corp. </span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;">Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;">Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. </span><br />
<span style="background-color: yellow; font-family: Courier New, Courier, monospace; font-size: x-small;">Bus 001 Device 004: ID 046d:0802 Logitech, Inc. Webcam C200</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;">Bus 001 Device 005: ID 0bda:8176 Realtek Semiconductor Corp. RTL8188CUS 802.11n WLAN Adapter</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;"><br /></span>
<br />
<span style="font-family: inherit;">2. Install Motion</span><br />
<br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;"><br /></span>
<br />
<pre name="2e44" style="background-color: #f2f2f0; color: #333332; font-family: Monaco, 'Courier New', Courier, monospace; margin-bottom: 20px; padding: 20px; white-space: pre-wrap; word-wrap: break-word;"><span style="font-size: x-small;">sudo apt-get install motion</span></pre>
<span style="font-family: inherit;">3. configure Motion</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;"><br /></span>
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;"><br /></span>
<br />
<pre name="2e44" style="background-color: #f2f2f0; color: #333332; font-family: Monaco, 'Courier New', Courier, monospace; margin-bottom: 20px; padding: 20px; white-space: pre-wrap; word-wrap: break-word;"><span style="font-size: x-small;">sudo nano /etc/motion/motion.conf</span></pre>
<span style="font-family: inherit;">This is my file:</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;"><br /></span>
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;">daemon=on</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;">norm=3</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;">input=8</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;">auto_brightness=on</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;">framerate=2</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;">height=480</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;">width=640</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;">jpeg_filename=motion/%Y%m%d/%v-%H%M%S-%q</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;">noise_tune=on</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;">output_all=off</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;">output_motion=off</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;">output_normal=on</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;">quality=100</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;">snapshot_interval=300</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;">target_dir=/home/pi</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;">text_left=(c) Nestcam</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;">text_right=%d %b %Y\n%k:%M:%S</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;">threshold=500</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;">v4l2_palette=6</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;">videodevice=/dev/video0</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;">webcam_localhost=off</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;">webcam_maxrate=2</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;">webcam_port=8080</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;">wecam_quality=100</span><br />
<div>
<br /></div>
<div>
<pre name="2e44" style="background-color: #f2f2f0; color: #333332; font-family: Monaco, 'Courier New', Courier, monospace; margin-bottom: 20px; padding: 20px; white-space: pre-wrap; word-wrap: break-word;"><span style="font-size: x-small;">sudo nano /etc/default/motion</span></pre>
</div>
<div>
<span style="font-family: inherit;">It should be:</span></div>
<div>
<br /></div>
<div>
start_motion_daemon=yes</div>
<div>
<br /></div>
<div>
<span style="font-family: inherit;">4. Start motion daemon:</span></div>
<div>
<br /></div>
<div>
<pre name="2e44" style="background-color: #f2f2f0; color: #333332; font-family: Monaco, 'Courier New', Courier, monospace; margin-bottom: 20px; padding: 20px; white-space: pre-wrap; word-wrap: break-word;"><span style="font-size: x-small;">sudo /etc/init.d/motion start</span></pre>
</div>
<div>
<br /></div>
<div>
<span style="font-family: inherit;">Check logfile for any errors:</span></div>
<div>
<br /></div>
<div>
<pre name="2e44" style="background-color: #f2f2f0; color: #333332; font-family: Monaco, 'Courier New', Courier, monospace; margin-bottom: 20px; padding: 20px; white-space: pre-wrap; word-wrap: break-word;"><span style="font-size: x-small;">tail -f /var/log/syslog</span></pre>
</div>
<div>
<br /></div>
<div>
<span style="font-family: inherit;">If all is fine open in browser <a href="http://%3Cyour%20raspberry%20pi%20ip%20address%3E:8080/">http://<your Raspberry Pi IP address>:8080</a></span></div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-UmeayNBOLnoSWtugS2FmqUKd7pU-KtuJY7RMo_L682YHYIKHQ7Pjer5oh4VNs3_i65l__VHLe0KIiDSoOPHPS4yp4oUPHbNie4LpNKspmf0zow9y06xNyHQplflk-CUmQzGYuajK7FI/s1600/Screenshot+from+2013-11-02+02:10:49.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="225" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-UmeayNBOLnoSWtugS2FmqUKd7pU-KtuJY7RMo_L682YHYIKHQ7Pjer5oh4VNs3_i65l__VHLe0KIiDSoOPHPS4yp4oUPHbNie4LpNKspmf0zow9y06xNyHQplflk-CUmQzGYuajK7FI/s400/Screenshot+from+2013-11-02+02:10:49.png" width="400" /></a></div>
<div>
<br /></div>
<div>
<br /></div>
Marcin Piczkowskihttp://www.blogger.com/profile/05961375583331768059noreply@blogger.com0tag:blogger.com,1999:blog-2528216159805127790.post-72175367175127028642013-11-01T14:44:00.000-07:002013-11-01T14:44:12.786-07:00Raspberry magicLong time since I've written last time on my English blog page. Time to switch a bit from Polish piczkowskipl.blogspot.com to this one.<br />
<br />
<a href="http://piczkowskipl.blogspot.com/search/label/Raspberry%20Pi">Some time ago</a> I met Raspberry Pi for the first time. I had a chance to play with it and went as far as setting it in headless mode.<br />
<br />
Today I got it back from dust and gave it next chance.<br />
My aim was to set it up as small home server and media center.<br />
<br />
At home I have a dynamic IP which updates more-less every 24 hours. I know solutions like DynDNS. I even used it but it was not perfect. Very often the IP stored in cloud service was not refreshed with new IP of my rooter at home.<br />
<br />
My idea was to create a daemon program that would run in background periodically and check if external IP of the router changed. Then it should send me an email with new IP.<br />
As genial as simple :) I could then easily use this IP to connect with remote desktop to my home server.<br />
Surely it would not be useful if I want to setup web page and release it in the Internet to public because still the IP will change but this is not my purpose. My aim is to connect with home server by IP and use it for many purposes like monitoring what's going on at home (smart house) or working on my home machine (upload/download/program/watch a movie?? whatever comes to my mind).<br />
<br />
Raspberry Pi seems to be interesting in this context.<br />
<br />
Today I will explain how I set up virtual desktop connection with TightVNC.<br />
<br />
1. Install TightVNC Server on Raspberry Pi<br />
<br />
<pre style="background-color: #f4f4f4; border: 0px; color: #373737; font-family: 'Courier 10 Pitch', Courier, monospace; font-size: 13px; line-height: 1.5; margin-bottom: 1.625em; outline: 0px; overflow: auto; padding: 0.75em 1.625em; vertical-align: baseline;">sudo apt-get install xrdp</pre>
<br />
2. Start remote desktop server<br />
<br />
<br />
<pre style="background-color: #f4f4f4; border: 0px; color: #373737; font-family: 'Courier 10 Pitch', Courier, monospace; font-size: 13px; line-height: 1.5; margin-bottom: 1.625em; outline: 0px; overflow: auto; padding: 0.75em 1.625em; vertical-align: baseline;">/usr/bin/tightvncserver</pre>
<div>
you will be asked for password, type password and do not ser view-only password when you will be asked for this.</div>
<br />
3. Check ports on which xtightvncserver is running<br />
<br />
<pre style="background-color: #f4f4f4; border: 0px; color: #373737; font-family: 'Courier 10 Pitch', Courier, monospace; font-size: 13px; line-height: 1.5; margin-bottom: 1.625em; outline: 0px; overflow: auto; padding: 0.75em 1.625em; vertical-align: baseline;">sudo netstat -tulpn</pre>
<div>
Then you will have to setup your router to forward ports, e.g:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjaK8TR5uZu3fT9mpc21-E5xXQP3EgPR6d6WY4NpViTWadfIIWFcDlHWO2uab__53awytGbg_qmvC7htAQdYM4W9_hR2P-0QT6OSrMM4clcDnNeBeu_DP2Xpx9FwsI33rMzpxcjvVmYOPY/s1600/Screenshot+from+2013-11-01+19:36:09.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="56" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjaK8TR5uZu3fT9mpc21-E5xXQP3EgPR6d6WY4NpViTWadfIIWFcDlHWO2uab__53awytGbg_qmvC7htAQdYM4W9_hR2P-0QT6OSrMM4clcDnNeBeu_DP2Xpx9FwsI33rMzpxcjvVmYOPY/s400/Screenshot+from+2013-11-01+19:36:09.png" width="400" /></a></div>
<br />
192.168.1.107 is the IP of Raspberry Pi in home network behind the router.<br />
<br />
On your machine from where you want to connect to Raspberry Pi install TightVNC Viewer, on Ubuntu you can do this with command:<br />
<div style="-webkit-text-stroke-width: 0px; color: black; font-family: 'Times New Roman'; font-size: medium; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;">
</div>
<br />
<pre style="-webkit-text-stroke-width: 0px; background-color: #f4f4f4; border: 0px; color: #373737; font-family: 'Courier 10 Pitch', Courier, monospace; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 1.5; margin: 0px 0px 1.625em; orphans: auto; outline: 0px; overflow: auto; padding: 0.75em 1.625em; text-align: start; text-indent: 0px; text-transform: none; vertical-align: baseline; widows: auto; word-spacing: 0px;"><span style="line-height: 1.5;">sudo apt-get install xtightvncviewer</span></pre>
</div>
<div>
Then connect to Raspberry Pi<br />
<br class="Apple-interchange-newline" /><span style="background-color: #f4f4f4; color: #373737; font-family: 'Courier 10 Pitch', Courier, monospace; font-size: 13px; line-height: 19px; white-space: pre;">xtightvncviewer 83.29.84.77:5901</span><br />
<br />
83.29.84.77 is my router external IP, the one that I would like to email myself from PI whenever it changes.<br />
<br />
How to email anything from Raspberry Pi?<br />
Very easy with Python:<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-collapse: collapse; border-top-left-radius: 0px !important; border-top-right-radius: 0px !important; border: 0px !important; bottom: auto !important; box-sizing: content-box !important; color: black; float: none !important; font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace !important; font-size: 11px; height: auto !important; left: auto !important; line-height: 1.1em !important; margin: 0px !important; min-height: inherit !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; right: auto !important; top: auto !important; vertical-align: baseline !important; width: 600px;"><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.1em !important; margin: 0px !important; min-height: inherit !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.1em !important; margin: 0px !important; min-height: inherit !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="gutter" 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(120, 120, 120) !important; float: none !important; font-size: 1em !important; height: auto !important; left: auto !important; line-height: 1.1em !important; margin: 0px !important; min-height: inherit !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;"><div class="line number1 index0 alt2" style="background-color: white !important; background-image: none !important; border-bottom-left-radius: 0px !important; border-bottom-right-radius: 0px !important; border-right-color: rgb(212, 208, 200) !important; border-right-style: solid !important; border-top-left-radius: 0px !important; border-top-right-radius: 0px !important; border-width: 0px 3px 0px 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.1em !important; margin: 0px !important; min-height: inherit !important; outline: 0px !important; overflow: visible !important; padding: 0px 0.5em 0px 1em !important; position: static !important; right: auto !important; text-align: right !important; top: auto !important; vertical-align: baseline !important; white-space: pre !important; width: auto !important;">
1</div>
<div class="line number2 index1 alt1" style="background-color: white !important; background-image: none !important; border-bottom-left-radius: 0px !important; border-bottom-right-radius: 0px !important; border-right-color: rgb(212, 208, 200) !important; border-right-style: solid !important; border-top-left-radius: 0px !important; border-top-right-radius: 0px !important; border-width: 0px 3px 0px 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.1em !important; margin: 0px !important; min-height: inherit !important; outline: 0px !important; overflow: visible !important; padding: 0px 0.5em 0px 1em !important; position: static !important; right: auto !important; text-align: right !important; top: auto !important; vertical-align: baseline !important; white-space: pre !important; width: auto !important;">
2</div>
<div class="line number3 index2 alt2" style="background-color: white !important; background-image: none !important; border-bottom-left-radius: 0px !important; border-bottom-right-radius: 0px !important; border-right-color: rgb(212, 208, 200) !important; border-right-style: solid !important; border-top-left-radius: 0px !important; border-top-right-radius: 0px !important; border-width: 0px 3px 0px 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.1em !important; margin: 0px !important; min-height: inherit !important; outline: 0px !important; overflow: visible !important; padding: 0px 0.5em 0px 1em !important; position: static !important; right: auto !important; text-align: right !important; top: auto !important; vertical-align: baseline !important; white-space: pre !important; width: auto !important;">
3</div>
<div class="line number4 index3 alt1" style="background-color: white !important; background-image: none !important; border-bottom-left-radius: 0px !important; border-bottom-right-radius: 0px !important; border-right-color: rgb(212, 208, 200) !important; border-right-style: solid !important; border-top-left-radius: 0px !important; border-top-right-radius: 0px !important; border-width: 0px 3px 0px 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.1em !important; margin: 0px !important; min-height: inherit !important; outline: 0px !important; overflow: visible !important; padding: 0px 0.5em 0px 1em !important; position: static !important; right: auto !important; text-align: right !important; top: auto !important; vertical-align: baseline !important; white-space: pre !important; width: auto !important;">
4</div>
<div class="line number5 index4 alt2" style="background-color: white !important; background-image: none !important; border-bottom-left-radius: 0px !important; border-bottom-right-radius: 0px !important; border-right-color: rgb(212, 208, 200) !important; border-right-style: solid !important; border-top-left-radius: 0px !important; border-top-right-radius: 0px !important; border-width: 0px 3px 0px 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.1em !important; margin: 0px !important; min-height: inherit !important; outline: 0px !important; overflow: visible !important; padding: 0px 0.5em 0px 1em !important; position: static !important; right: auto !important; text-align: right !important; top: auto !important; vertical-align: baseline !important; white-space: pre !important; width: auto !important;">
5</div>
<div class="line number6 index5 alt1" style="background-color: white !important; background-image: none !important; border-bottom-left-radius: 0px !important; border-bottom-right-radius: 0px !important; border-right-color: rgb(212, 208, 200) !important; border-right-style: solid !important; border-top-left-radius: 0px !important; border-top-right-radius: 0px !important; border-width: 0px 3px 0px 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.1em !important; margin: 0px !important; min-height: inherit !important; outline: 0px !important; overflow: visible !important; padding: 0px 0.5em 0px 1em !important; position: static !important; right: auto !important; text-align: right !important; top: auto !important; vertical-align: baseline !important; white-space: pre !important; width: auto !important;">
6</div>
<div class="line number7 index6 alt2" style="background-color: white !important; background-image: none !important; border-bottom-left-radius: 0px !important; border-bottom-right-radius: 0px !important; border-right-color: rgb(212, 208, 200) !important; border-right-style: solid !important; border-top-left-radius: 0px !important; border-top-right-radius: 0px !important; border-width: 0px 3px 0px 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.1em !important; margin: 0px !important; min-height: inherit !important; outline: 0px !important; overflow: visible !important; padding: 0px 0.5em 0px 1em !important; position: static !important; right: auto !important; text-align: right !important; top: auto !important; vertical-align: baseline !important; white-space: pre !important; width: auto !important;">
7</div>
<div class="line number8 index7 alt1" style="background-color: white !important; background-image: none !important; border-bottom-left-radius: 0px !important; border-bottom-right-radius: 0px !important; border-right-color: rgb(212, 208, 200) !important; border-right-style: solid !important; border-top-left-radius: 0px !important; border-top-right-radius: 0px !important; border-width: 0px 3px 0px 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.1em !important; margin: 0px !important; min-height: inherit !important; outline: 0px !important; overflow: visible !important; padding: 0px 0.5em 0px 1em !important; position: static !important; right: auto !important; text-align: right !important; top: auto !important; vertical-align: baseline !important; white-space: pre !important; width: auto !important;">
8</div>
<div class="line number9 index8 alt2" style="background-color: white !important; background-image: none !important; border-bottom-left-radius: 0px !important; border-bottom-right-radius: 0px !important; border-right-color: rgb(212, 208, 200) !important; border-right-style: solid !important; border-top-left-radius: 0px !important; border-top-right-radius: 0px !important; border-width: 0px 3px 0px 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.1em !important; margin: 0px !important; min-height: inherit !important; outline: 0px !important; overflow: visible !important; padding: 0px 0.5em 0px 1em !important; position: static !important; right: auto !important; text-align: right !important; top: auto !important; vertical-align: baseline !important; white-space: pre !important; width: auto !important;">
9</div>
<div class="line number10 index9 alt1" style="background-color: white !important; background-image: none !important; border-bottom-left-radius: 0px !important; border-bottom-right-radius: 0px !important; border-right-color: rgb(212, 208, 200) !important; border-right-style: solid !important; border-top-left-radius: 0px !important; border-top-right-radius: 0px !important; border-width: 0px 3px 0px 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.1em !important; margin: 0px !important; min-height: inherit !important; outline: 0px !important; overflow: visible !important; padding: 0px 0.5em 0px 1em !important; position: static !important; right: auto !important; text-align: right !important; top: auto !important; vertical-align: baseline !important; white-space: pre !important; width: auto !important;">
10</div>
<div class="line number11 index10 alt2" style="background-color: white !important; background-image: none !important; border-bottom-left-radius: 0px !important; border-bottom-right-radius: 0px !important; border-right-color: rgb(212, 208, 200) !important; border-right-style: solid !important; border-top-left-radius: 0px !important; border-top-right-radius: 0px !important; border-width: 0px 3px 0px 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.1em !important; margin: 0px !important; min-height: inherit !important; outline: 0px !important; overflow: visible !important; padding: 0px 0.5em 0px 1em !important; position: static !important; right: auto !important; text-align: right !important; top: auto !important; vertical-align: baseline !important; white-space: pre !important; width: auto !important;">
11</div>
<div class="line number12 index11 alt1" style="background-color: white !important; background-image: none !important; border-bottom-left-radius: 0px !important; border-bottom-right-radius: 0px !important; border-right-color: rgb(212, 208, 200) !important; border-right-style: solid !important; border-top-left-radius: 0px !important; border-top-right-radius: 0px !important; border-width: 0px 3px 0px 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.1em !important; margin: 0px !important; min-height: inherit !important; outline: 0px !important; overflow: visible !important; padding: 0px 0.5em 0px 1em !important; position: static !important; right: auto !important; text-align: right !important; top: auto !important; vertical-align: baseline !important; white-space: pre !important; width: auto !important;">
12</div>
<div class="line number13 index12 alt2" style="background-color: white !important; background-image: none !important; border-bottom-left-radius: 0px !important; border-bottom-right-radius: 0px !important; border-right-color: rgb(212, 208, 200) !important; border-right-style: solid !important; border-top-left-radius: 0px !important; border-top-right-radius: 0px !important; border-width: 0px 3px 0px 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.1em !important; margin: 0px !important; min-height: inherit !important; outline: 0px !important; overflow: visible !important; padding: 0px 0.5em 0px 1em !important; position: static !important; right: auto !important; text-align: right !important; top: auto !important; vertical-align: baseline !important; white-space: pre !important; width: auto !important;">
13</div>
<div class="line number14 index13 alt1" style="background-color: white !important; background-image: none !important; border-bottom-left-radius: 0px !important; border-bottom-right-radius: 0px !important; border-right-color: rgb(212, 208, 200) !important; border-right-style: solid !important; border-top-left-radius: 0px !important; border-top-right-radius: 0px !important; border-width: 0px 3px 0px 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.1em !important; margin: 0px !important; min-height: inherit !important; outline: 0px !important; overflow: visible !important; padding: 0px 0.5em 0px 1em !important; position: static !important; right: auto !important; text-align: right !important; top: auto !important; vertical-align: baseline !important; white-space: pre !important; width: auto !important;">
14</div>
<div class="line number15 index14 alt2" style="background-color: white !important; background-image: none !important; border-bottom-left-radius: 0px !important; border-bottom-right-radius: 0px !important; border-right-color: rgb(212, 208, 200) !important; border-right-style: solid !important; border-top-left-radius: 0px !important; border-top-right-radius: 0px !important; border-width: 0px 3px 0px 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.1em !important; margin: 0px !important; min-height: inherit !important; outline: 0px !important; overflow: visible !important; padding: 0px 0.5em 0px 1em !important; position: static !important; right: auto !important; text-align: right !important; top: auto !important; vertical-align: baseline !important; white-space: pre !important; width: auto !important;">
15</div>
<div class="line number16 index15 alt1" style="background-color: white !important; background-image: none !important; border-bottom-left-radius: 0px !important; border-bottom-right-radius: 0px !important; border-right-color: rgb(212, 208, 200) !important; border-right-style: solid !important; border-top-left-radius: 0px !important; border-top-right-radius: 0px !important; border-width: 0px 3px 0px 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.1em !important; margin: 0px !important; min-height: inherit !important; outline: 0px !important; overflow: visible !important; padding: 0px 0.5em 0px 1em !important; position: static !important; right: auto !important; text-align: right !important; top: auto !important; vertical-align: baseline !important; white-space: pre !important; width: auto !important;">
16</div>
<div class="line number17 index16 alt2" style="background-color: white !important; background-image: none !important; border-bottom-left-radius: 0px !important; border-bottom-right-radius: 0px !important; border-right-color: rgb(212, 208, 200) !important; border-right-style: solid !important; border-top-left-radius: 0px !important; border-top-right-radius: 0px !important; border-width: 0px 3px 0px 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.1em !important; margin: 0px !important; min-height: inherit !important; outline: 0px !important; overflow: visible !important; padding: 0px 0.5em 0px 1em !important; position: static !important; right: auto !important; text-align: right !important; top: auto !important; vertical-align: baseline !important; white-space: pre !important; width: auto !important;">
17</div>
<div class="line number18 index17 alt1" style="background-color: white !important; background-image: none !important; border-bottom-left-radius: 0px !important; border-bottom-right-radius: 0px !important; border-right-color: rgb(212, 208, 200) !important; border-right-style: solid !important; border-top-left-radius: 0px !important; border-top-right-radius: 0px !important; border-width: 0px 3px 0px 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.1em !important; margin: 0px !important; min-height: inherit !important; outline: 0px !important; overflow: visible !important; padding: 0px 0.5em 0px 1em !important; position: static !important; right: auto !important; text-align: right !important; top: auto !important; vertical-align: baseline !important; white-space: pre !important; width: auto !important;">
18</div>
<div class="line number19 index18 alt2" style="background-color: white !important; background-image: none !important; border-bottom-left-radius: 0px !important; border-bottom-right-radius: 0px !important; border-right-color: rgb(212, 208, 200) !important; border-right-style: solid !important; border-top-left-radius: 0px !important; border-top-right-radius: 0px !important; border-width: 0px 3px 0px 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.1em !important; margin: 0px !important; min-height: inherit !important; outline: 0px !important; overflow: visible !important; padding: 0px 0.5em 0px 1em !important; position: static !important; right: auto !important; text-align: right !important; top: auto !important; vertical-align: baseline !important; white-space: pre !important; width: auto !important;">
19</div>
<div class="line number20 index19 alt1" style="background-color: white !important; background-image: none !important; border-bottom-left-radius: 0px !important; border-bottom-right-radius: 0px !important; border-right-color: rgb(212, 208, 200) !important; border-right-style: solid !important; border-top-left-radius: 0px !important; border-top-right-radius: 0px !important; border-width: 0px 3px 0px 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.1em !important; margin: 0px !important; min-height: inherit !important; outline: 0px !important; overflow: visible !important; padding: 0px 0.5em 0px 1em !important; position: static !important; right: auto !important; text-align: right !important; top: auto !important; vertical-align: baseline !important; white-space: pre !important; width: auto !important;">
20</div>
<div class="line number21 index20 alt2" style="background-color: white !important; background-image: none !important; border-bottom-left-radius: 0px !important; border-bottom-right-radius: 0px !important; border-right-color: rgb(212, 208, 200) !important; border-right-style: solid !important; border-top-left-radius: 0px !important; border-top-right-radius: 0px !important; border-width: 0px 3px 0px 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.1em !important; margin: 0px !important; min-height: inherit !important; outline: 0px !important; overflow: visible !important; padding: 0px 0.5em 0px 1em !important; position: static !important; right: auto !important; text-align: right !important; top: auto !important; vertical-align: baseline !important; white-space: pre !important; width: auto !important;">
21</div>
<div class="line number22 index21 alt1" style="background-color: white !important; background-image: none !important; border-bottom-left-radius: 0px !important; border-bottom-right-radius: 0px !important; border-right-color: rgb(212, 208, 200) !important; border-right-style: solid !important; border-top-left-radius: 0px !important; border-top-right-radius: 0px !important; border-width: 0px 3px 0px 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.1em !important; margin: 0px !important; min-height: inherit !important; outline: 0px !important; overflow: visible !important; padding: 0px 0.5em 0px 1em !important; position: static !important; right: auto !important; text-align: right !important; top: auto !important; vertical-align: baseline !important; white-space: pre !important; width: auto !important;">
22</div>
<div class="line number23 index22 alt2" style="background-color: white !important; background-image: none !important; border-bottom-left-radius: 0px !important; border-bottom-right-radius: 0px !important; border-right-color: rgb(212, 208, 200) !important; border-right-style: solid !important; border-top-left-radius: 0px !important; border-top-right-radius: 0px !important; border-width: 0px 3px 0px 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.1em !important; margin: 0px !important; min-height: inherit !important; outline: 0px !important; overflow: visible !important; padding: 0px 0.5em 0px 1em !important; position: static !important; right: auto !important; text-align: right !important; top: auto !important; vertical-align: baseline !important; white-space: pre !important; width: auto !important;">
23</div>
</td><td class="code" 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.1em !important; margin: 0px !important; min-height: inherit !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; right: auto !important; top: auto !important; vertical-align: baseline !important; width: 566px;"><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.1em !important; margin: 0px !important; min-height: inherit !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: relative !important; right: auto !important; top: auto !important; vertical-align: baseline !important; width: auto !important;">
<div class="line number1 index0 alt2" style="background-color: white !important; 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.1em !important; margin: 0px !important; min-height: inherit !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em !important; position: static !important; right: auto !important; top: auto !important; vertical-align: baseline !important; white-space: pre !important; width: auto !important;">
<code class="python keyword" 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(127, 0, 85) !important; float: none !important; font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace !important; font-size: 1em !important; font-weight: bold !important; height: auto !important; left: auto !important; line-height: 1.1em !important; margin: 0px !important; min-height: inherit !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;">import</code> <code class="python 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; 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.1em !important; margin: 0px !important; min-height: inherit !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;">smtplib</code></div>
<div class="line number2 index1 alt1" style="background-color: white !important; 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.1em !important; margin: 0px !important; min-height: inherit !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em !important; position: static !important; right: auto !important; top: auto !important; vertical-align: baseline !important; white-space: pre !important; width: auto !important;">
</div>
<div class="line number3 index2 alt2" style="background-color: white !important; 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.1em !important; margin: 0px !important; min-height: inherit !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em !important; position: static !important; right: auto !important; top: auto !important; vertical-align: baseline !important; white-space: pre !important; width: auto !important;">
<code class="python comments" 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(63, 95, 191) !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.1em !important; margin: 0px !important; min-height: inherit !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;"># Specifying the from and to addresses</code></div>
<div class="line number4 index3 alt1" style="background-color: white !important; 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.1em !important; margin: 0px !important; min-height: inherit !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em !important; position: static !important; right: auto !important; top: auto !important; vertical-align: baseline !important; white-space: pre !important; width: auto !important;">
</div>
<div class="line number5 index4 alt2" style="background-color: white !important; 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.1em !important; margin: 0px !important; min-height: inherit !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em !important; position: static !important; right: auto !important; top: auto !important; vertical-align: baseline !important; white-space: pre !important; width: auto !important;">
<code class="python 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; 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.1em !important; margin: 0px !important; min-height: inherit !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;">fromaddr </code><code class="python keyword" 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(127, 0, 85) !important; float: none !important; font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace !important; font-size: 1em !important; font-weight: bold !important; height: auto !important; left: auto !important; line-height: 1.1em !important; margin: 0px !important; min-height: inherit !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;">=</code> <code class="python string" 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(42, 0, 255) !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.1em !important; margin: 0px !important; min-height: inherit !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;">'fromuser@gmail.com'</code></div>
<div class="line number6 index5 alt1" style="background-color: white !important; 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.1em !important; margin: 0px !important; min-height: inherit !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em !important; position: static !important; right: auto !important; top: auto !important; vertical-align: baseline !important; white-space: pre !important; width: auto !important;">
<code class="python 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; 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.1em !important; margin: 0px !important; min-height: inherit !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;">toaddrs </code><code class="python keyword" 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(127, 0, 85) !important; float: none !important; font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace !important; font-size: 1em !important; font-weight: bold !important; height: auto !important; left: auto !important; line-height: 1.1em !important; margin: 0px !important; min-height: inherit !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;">=</code> <code class="python string" 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(42, 0, 255) !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.1em !important; margin: 0px !important; min-height: inherit !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;">'touser@gmail.com'</code></div>
<div class="line number7 index6 alt2" style="background-color: white !important; 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.1em !important; margin: 0px !important; min-height: inherit !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em !important; position: static !important; right: auto !important; top: auto !important; vertical-align: baseline !important; white-space: pre !important; width: auto !important;">
</div>
<div class="line number8 index7 alt1" style="background-color: white !important; 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.1em !important; margin: 0px !important; min-height: inherit !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em !important; position: static !important; right: auto !important; top: auto !important; vertical-align: baseline !important; white-space: pre !important; width: auto !important;">
<code class="python comments" 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(63, 95, 191) !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.1em !important; margin: 0px !important; min-height: inherit !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;"># Writing the message (this message will appear in the email)</code></div>
<div class="line number9 index8 alt2" style="background-color: white !important; 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.1em !important; margin: 0px !important; min-height: inherit !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em !important; position: static !important; right: auto !important; top: auto !important; vertical-align: baseline !important; white-space: pre !important; width: auto !important;">
</div>
<div class="line number10 index9 alt1" style="background-color: white !important; 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.1em !important; margin: 0px !important; min-height: inherit !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em !important; position: static !important; right: auto !important; top: auto !important; vertical-align: baseline !important; white-space: pre !important; width: auto !important;">
<code class="python 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; 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.1em !important; margin: 0px !important; min-height: inherit !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;">msg </code><code class="python keyword" 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(127, 0, 85) !important; float: none !important; font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace !important; font-size: 1em !important; font-weight: bold !important; height: auto !important; left: auto !important; line-height: 1.1em !important; margin: 0px !important; min-height: inherit !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;">=</code> <code class="python string" 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(42, 0, 255) !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.1em !important; margin: 0px !important; min-height: inherit !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;">'Enter you message here'</code></div>
<div class="line number11 index10 alt2" style="background-color: white !important; 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.1em !important; margin: 0px !important; min-height: inherit !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em !important; position: static !important; right: auto !important; top: auto !important; vertical-align: baseline !important; white-space: pre !important; width: auto !important;">
</div>
<div class="line number12 index11 alt1" style="background-color: white !important; 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.1em !important; margin: 0px !important; min-height: inherit !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em !important; position: static !important; right: auto !important; top: auto !important; vertical-align: baseline !important; white-space: pre !important; width: auto !important;">
<code class="python comments" 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(63, 95, 191) !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.1em !important; margin: 0px !important; min-height: inherit !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;"># Gmail Login</code></div>
<div class="line number13 index12 alt2" style="background-color: white !important; 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.1em !important; margin: 0px !important; min-height: inherit !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em !important; position: static !important; right: auto !important; top: auto !important; vertical-align: baseline !important; white-space: pre !important; width: auto !important;">
</div>
<div class="line number14 index13 alt1" style="background-color: white !important; 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.1em !important; margin: 0px !important; min-height: inherit !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em !important; position: static !important; right: auto !important; top: auto !important; vertical-align: baseline !important; white-space: pre !important; width: auto !important;">
<code class="python 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; 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.1em !important; margin: 0px !important; min-height: inherit !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;">username </code><code class="python keyword" 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(127, 0, 85) !important; float: none !important; font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace !important; font-size: 1em !important; font-weight: bold !important; height: auto !important; left: auto !important; line-height: 1.1em !important; margin: 0px !important; min-height: inherit !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;">=</code> <code class="python string" 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(42, 0, 255) !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.1em !important; margin: 0px !important; min-height: inherit !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;">'username'</code></div>
<div class="line number15 index14 alt2" style="background-color: white !important; 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.1em !important; margin: 0px !important; min-height: inherit !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em !important; position: static !important; right: auto !important; top: auto !important; vertical-align: baseline !important; white-space: pre !important; width: auto !important;">
<code class="python 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; 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.1em !important; margin: 0px !important; min-height: inherit !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;">password </code><code class="python keyword" 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(127, 0, 85) !important; float: none !important; font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace !important; font-size: 1em !important; font-weight: bold !important; height: auto !important; left: auto !important; line-height: 1.1em !important; margin: 0px !important; min-height: inherit !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;">=</code> <code class="python string" 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(42, 0, 255) !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.1em !important; margin: 0px !important; min-height: inherit !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;">'password'</code></div>
<div class="line number16 index15 alt1" style="background-color: white !important; 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.1em !important; margin: 0px !important; min-height: inherit !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em !important; position: static !important; right: auto !important; top: auto !important; vertical-align: baseline !important; white-space: pre !important; width: auto !important;">
</div>
<div class="line number17 index16 alt2" style="background-color: white !important; 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.1em !important; margin: 0px !important; min-height: inherit !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em !important; position: static !important; right: auto !important; top: auto !important; vertical-align: baseline !important; white-space: pre !important; width: auto !important;">
<code class="python comments" 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(63, 95, 191) !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.1em !important; margin: 0px !important; min-height: inherit !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;"># Sending the mail </code></div>
<div class="line number18 index17 alt1" style="background-color: white !important; 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.1em !important; margin: 0px !important; min-height: inherit !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em !important; position: static !important; right: auto !important; top: auto !important; vertical-align: baseline !important; white-space: pre !important; width: auto !important;">
</div>
<div class="line number19 index18 alt2" style="background-color: white !important; 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.1em !important; margin: 0px !important; min-height: inherit !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em !important; position: static !important; right: auto !important; top: auto !important; vertical-align: baseline !important; white-space: pre !important; width: auto !important;">
<code class="python 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; 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.1em !important; margin: 0px !important; min-height: inherit !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;">server </code><code class="python keyword" 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(127, 0, 85) !important; float: none !important; font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace !important; font-size: 1em !important; font-weight: bold !important; height: auto !important; left: auto !important; line-height: 1.1em !important; margin: 0px !important; min-height: inherit !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;">=</code> <code class="python 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; 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.1em !important; margin: 0px !important; min-height: inherit !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;">smtplib.SMTP(</code><code class="python string" 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(42, 0, 255) !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.1em !important; margin: 0px !important; min-height: inherit !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;">'smtp.gmail.com:587'</code><code class="python 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; 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.1em !important; margin: 0px !important; min-height: inherit !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;">)</code></div>
<div class="line number20 index19 alt1" style="background-color: white !important; 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.1em !important; margin: 0px !important; min-height: inherit !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em !important; position: static !important; right: auto !important; top: auto !important; vertical-align: baseline !important; white-space: pre !important; width: auto !important;">
<code class="python 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; 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.1em !important; margin: 0px !important; min-height: inherit !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;">server.starttls()</code></div>
<div class="line number21 index20 alt2" style="background-color: white !important; 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.1em !important; margin: 0px !important; min-height: inherit !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em !important; position: static !important; right: auto !important; top: auto !important; vertical-align: baseline !important; white-space: pre !important; width: auto !important;">
<code class="python 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; 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.1em !important; margin: 0px !important; min-height: inherit !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;">server.login(username,password)</code></div>
<div class="line number22 index21 alt1" style="background-color: white !important; 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.1em !important; margin: 0px !important; min-height: inherit !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em !important; position: static !important; right: auto !important; top: auto !important; vertical-align: baseline !important; white-space: pre !important; width: auto !important;">
<code class="python 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; 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.1em !important; margin: 0px !important; min-height: inherit !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;">server.sendmail(fromaddr, toaddrs, msg)</code></div>
<div class="line number23 index22 alt2" style="background-color: white !important; 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.1em !important; margin: 0px !important; min-height: inherit !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em !important; position: static !important; right: auto !important; top: auto !important; vertical-align: baseline !important; white-space: pre !important; width: auto !important;">
<code class="python 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; 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.1em !important; margin: 0px !important; min-height: inherit !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;">server.quit()</code></div>
</div>
</td></tr>
</tbody></table>
<br />
How to check your external IP address?<br />
Very easy with service like <a href="http://ifconfig.me/">http://ifconfig.me/</a><br />
<br />
<div style="-webkit-text-stroke-width: 0px; color: black; font-family: 'Times New Roman'; font-size: medium; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;">
</div>
<br />
<div style="-webkit-text-stroke-width: 0px; color: black; font-family: 'Times New Roman'; font-size: medium; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;">
<pre style="-webkit-text-stroke-width: 0px; background-color: #f4f4f4; border: 0px; color: #373737; font-family: 'Courier 10 Pitch', Courier, monospace; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 1.5; margin: 0px 0px 1.625em; orphans: auto; outline: 0px; overflow: auto; padding: 0.75em 1.625em; text-align: start; text-indent: 0px; text-transform: none; vertical-align: baseline; widows: auto; word-spacing: 0px;"><span style="line-height: 1.5;">curl -s http://ifconfig.me</span></pre>
</div>
<div>
Putting it all together. Python script below gets IP address and compares it with address saved in local file. If for any reason IP is empty or same as the IP in local file then no email is sent. Otherwise an email is sent with new IP and the IP is saved in local file (dyndns.txt)</div>
<div>
<br /></div>
<div>
<pre style="background-color: #f4f4f4; border: 0px; margin-bottom: 1.625em; outline: 0px; overflow: auto; padding: 0.75em 1.625em; vertical-align: baseline;"><span style="color: #373737; font-family: Courier 10 Pitch, Courier, monospace;"><span style="line-height: 19px;">#!/usr/bin/env python
import smtplib
import subprocess
import sys
def send(ip): # send mail
# Specifying the from and to addresses
fromaddr = 'change_me'
toaddrs = 'change_me'
# Writing the message (this message will appear in the email)
msg = "Your IP is "+ip
# Sending the mail
server = smtplib.SMTP('smtp.gmail.com:587')
server.starttls()
server.login('marcin.piczkowski','mypassword')
server.sendmail(fromaddr, toaddrs, msg)
server.quit()
proc = subprocess.Popen(["curl","-s","http://ifconfig.me"], stdout=subprocess.PIPE)
(out,err)=proc.communicate()
ip = out.strip()
print "IP is " + ip
if ip == "":
raise SystemExit
else:
txtf = open("dyndns.txt","rw")
lines = txtf.readlines()
oldip = lines[0].strip()
txtf.close()
if oldip != ip:
print "Sending ip " + ip
txtf = open("dyndns.txt","w")
txtf.write(ip)
send(ip)
txtf.close()
else:
print "IPs are the same"
txtf.close()
raise SystemExit</span></span><span style="color: #373737; font-family: 'Courier 10 Pitch', Courier, monospace; font-size: 13px; line-height: 1.5;">
</span></pre>
</div>
<div>
The script must be given execution rights and dyndns.txt file read/write access</div>
<div>
<br /></div>
<div>
<pre style="background-color: #f4f4f4; border: 0px; margin-bottom: 1.625em; outline: 0px; overflow: auto; padding: 0.75em 1.625em; vertical-align: baseline;"><span style="color: #373737;"><span style="line-height: 19px;">sudo chmod +x myscript.py</span></span></pre>
<pre style="background-color: #f4f4f4; border: 0px; margin-bottom: 1.625em; outline: 0px; overflow: auto; padding: 0.75em 1.625em; vertical-align: baseline;"><span style="color: #373737;"><span style="line-height: 19px;">sudo chmod 666 dyndns.txt</span></span></pre>
</div>
<div>
Then you can schedule with cron to execute this script every 15 minutes:</div>
<div>
<pre style="background-color: #f4f4f4; border: 0px; margin-bottom: 1.625em; outline: 0px; overflow: auto; padding: 0.75em 1.625em; vertical-align: baseline;"><span style="color: #373737;"><span style="line-height: 19px;">sudo crontab -e</span></span></pre>
</div>
<div>
Add this line at the end of the file</div>
<div>
<br /></div>
<div>
<pre style="background-color: #f4f4f4; border: 0px; margin-bottom: 1.625em; outline: 0px; overflow: auto; padding: 0.75em 1.625em; vertical-align: baseline;"><span style="color: #373737;"><span style="line-height: 19px;">*/15 * * * * python /etc/init.d/</span></span><span style="color: #373737; line-height: 19px;">myscript.py >> /var/log/dyndns.log 2>&1 </span><span style="color: #373737; line-height: 19px;">&</span></pre>
</div>
<div>
<span style="color: #373737;"><span style="line-height: 19px;">Above line is correct when you have your script placed in /etc/init.d/</span></span></div>
<div>
<span style="color: #373737;"><span style="line-height: 19px;">It will store logs in /var/logs/dyndns.log but first you need to create such file and give it read/write access:</span></span></div>
<div>
<pre style="background-color: #f4f4f4; border: 0px; margin-bottom: 1.625em; outline: 0px; overflow: auto; padding: 0.75em 1.625em; vertical-align: baseline;"><span style="color: #373737; font-family: 'Times New Roman'; line-height: 19px; white-space: normal;">sudo touch /var/log/dyndns.log</span></pre>
<pre style="background-color: #f4f4f4; border: 0px; margin-bottom: 1.625em; outline: 0px; overflow: auto; padding: 0.75em 1.625em; vertical-align: baseline;"><span style="color: #373737; font-family: 'Times New Roman'; line-height: 19px; white-space: normal;">sudo chmod 666 /var/log/dyndns.log</span></pre>
</div>
<div>
<span style="color: #373737;"><span style="line-height: 19px;"><div>
<br /></div>
</span></span></div>
<div>
<span style="color: #373737;"><span style="line-height: 19px;">You can check your cron logs with</span></span></div>
<div>
<span style="color: #373737;"><span style="line-height: 19px;"><br /></span></span></div>
<div>
<pre style="background-color: #eeeeee; border: 0px; color: #333333; font-family: 'Ubuntu Mono', 'Ubuntu Beta Mono A', Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace; font-size: 14px; line-height: 18px; margin-bottom: 10px; max-height: 600px; overflow: auto; padding: 5px; vertical-align: baseline; width: auto; word-wrap: normal;"><code style="border: 0px; color: #222222; font-family: 'Ubuntu Mono', 'Ubuntu Beta Mono A', Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace; margin: 0px; padding: 0px; vertical-align: baseline;">grep CRON /var/log/syslog</code></pre>
</div>
<div>
<br /></div>
<div>
Now you should get mail with IP in 15 minutes. Let's verify quickly that you really can connect to Raspberry Pi on this IP.</div>
<div>
We will start HTTP server on Pi with python, type this in console:</div>
<div>
<br /></div>
<div>
<pre style="background-color: #eeeeee; border: 0px; color: #333333; font-family: 'Ubuntu Mono', 'Ubuntu Beta Mono A', Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace; font-size: 14px; line-height: 18px; margin-bottom: 10px; max-height: 600px; overflow: auto; padding: 5px; vertical-align: baseline; width: auto; word-wrap: normal;"><code style="border: 0px; color: #222222; font-family: 'Ubuntu Mono', 'Ubuntu Beta Mono A', Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace; margin: 0px; padding: 0px; vertical-align: baseline;">python -m SimpleHTTPServer</code></pre>
</div>
<div>
Server would listen on port 8000 so you need to forward this port in rooter configuration.</div>
<div>
Then type in browser: http://<IP from email>:8000</div>
<div>
Server should response with content of folder in which you started SimpleHTTPServer.</div>
<div>
<br /></div>
<div>
In future post we will have a look at how we can run <a href="http://nodejs.org/">Node.js</a> on Raspberry Pi. Stay tuned!!</div>
<div>
<br /></div>
Used resources:<br />
[1] <a href="http://programmaticponderings.wordpress.com/2012/12/26/installing-tightvnc-on-the-raspberry-pi/">http://programmaticponderings.wordpress.com/2012/12/26/installing-tightvnc-on-the-raspberry-pi/</a><br />
[2] <a href="http://www.pythonforbeginners.com/systems-programming/sending-emails-using-google/">http://www.pythonforbeginners.com/systems-programming/sending-emails-using-google/</a><br />
[3] <a href="http://www.linuxjournal.com/content/tech-tip-really-simple-http-server-python">http://www.linuxjournal.com/content/tech-tip-really-simple-http-server-python</a><br />
<br /></div>
Marcin Piczkowskihttp://www.blogger.com/profile/05961375583331768059noreply@blogger.com0tag:blogger.com,1999:blog-2528216159805127790.post-68952022277947426832013-08-10T14:09:00.001-07:002013-08-10T14:09:23.796-07:00Switching from cloudfoundry V1 to V2<div dir="ltr" style="text-align: left;" trbidi="on">
Beta version of Cloudfoundry is down since long time ago. Now Pivotal gave users V2, brand new commercial version of former service. It's yet 67 days for free. I decided to migrate my V1 app there. Let's see how deployment process differs from the old one.<br />
Previously there was grails plugin that made it as simple as invoking several groovy commands. Now it's a bit different. Quick manual is available at <a href="http://docs.cloudfoundry.com/docs/dotcom/getting-started.html#install-cf">http://docs.cloudfoundry.com/docs/dotcom/getting-started.html#install-cf</a><br />
<br />
<div style="text-align: left;">
I'm not Ruby hacker but was able to install Ruby on my machine, yet starting with first command I encountered an issue. DevKit was missing on my machine, so i donwloaded it from <a href="http://rubyinstaller.org/downloads">here</a> (<a href="https://github.com/downloads/oneclick/rubyinstaller/DevKit-tdm-32-4.5.2-20111229-1559-sfx.exe" style="background-color: white; border: 0px; color: #ad050a; cursor: pointer; font-family: inherit; font-style: inherit; line-height: 2em; margin: 0px; padding: 0px; text-decoration: none; vertical-align: baseline;">DevKit-tdm-32-4.5.2-20111229-1559-sfx.exe</a><span style="color: #333333; font-family: inherit; font-style: inherit; line-height: 2em;">), extracted in my groovy_home/DevKit and installed with commands:</span></div>
<div style="background-color: white; border: 0px; clear: both; font-family: Arial, 'Liberation Sans', 'DejaVu Sans', sans-serif; font-size: 14px; line-height: 18px; margin-bottom: 1em; padding: 0px; vertical-align: baseline; word-wrap: break-word;">
<code style="background-color: #eeeeee; border: 0px; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, serif; margin: 0px; padding: 1px 5px; vertical-align: baseline;">cd C:\Ruby193\DevKit</code></div>
<div style="background-color: white; border: 0px; clear: both; font-family: Arial, 'Liberation Sans', 'DejaVu Sans', sans-serif; font-size: 14px; line-height: 18px; margin-bottom: 1em; padding: 0px; vertical-align: baseline; word-wrap: break-word;">
<span style="background-color: #eeeeee; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, serif;">ruby dk.rb init</span></div>
<div style="background-color: white; border: 0px; clear: both; font-family: Arial, 'Liberation Sans', 'DejaVu Sans', sans-serif; font-size: 14px; line-height: 18px; margin-bottom: 1em; padding: 0px; vertical-align: baseline; word-wrap: break-word;">
<span style="background-color: #eeeeee; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, serif;">ruby dk.rb review</span></div>
<div style="background-color: white; border: 0px; clear: both; font-family: Arial, 'Liberation Sans', 'DejaVu Sans', sans-serif; font-size: 14px; line-height: 18px; margin-bottom: 1em; padding: 0px; vertical-align: baseline; word-wrap: break-word;">
<span style="background-color: #eeeeee; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, serif;">ruby dk.rb install</span></div>
<div style="text-align: left;">
Then lets return to cloudfoundry install cf.<br />
<br />
<span style="background-color: #eeeeee; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, serif; font-size: 14px; line-height: 18px;">gem install cf</span><br />
<br />
<span style="background-color: #eeeeee; font-size: 14px; line-height: 18px;"><span style="font-family: Consolas, Menlo, Monaco, Lucida Console, Liberation Mono, DejaVu Sans Mono, Bitstream Vera Sans Mono, Courier New, monospace, serif;">cf target api.run.pivotal.io</span></span><br />
<br /></div>
<div style="text-align: left;">
When we have done it already we can build war file (grails prod war) and upload it.
<br />
<br />
<span style="background-color: #eeeeee; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, serif; font-size: 14px; line-height: 18px;">cf push --path consulner.war</span><br />
<span style="background-color: #eeeeee; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, serif; font-size: 14px; line-height: 18px;"><br /></span>
<div style="text-align: left;">
When we do this for the first time we will be asked to choose environment (dev, staging, prod) I've chosen production. Then I answered questions as follows:</div>
<br />
<span style="background-color: #eeeeee; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, serif; font-size: 14px; line-height: 18px;"><br /></span>
<br />
<pre class="terminal" style="-webkit-background-clip: padding-box; background-clip: padding-box; background-color: #444444; background-image: none; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 2px solid rgb(222, 222, 222); color: white; filter: none; font-family: Courier; font-size: 13px; margin-bottom: 5px; overflow: auto; padding: 10px; position: relative; text-shadow: none; white-space: pre-wrap; word-break: break-all; word-wrap: break-word;">Name> consulner
Instances> 1
1: 128M
2: 256M
3: 512M
4: 1G
Memory Limit> 3
Creating consulner... OK
1: consulner
2: none
Subdomain> consulner
1: cfapps.io
2: none
Domain> cfapps.io
Binding consulner.cfapps.io to consulner... OK
Create services for application?> n
Save configuration?> y
Saving to manifest.yml... OK
Uploading consulner... OK
Preparing to start consulner... OK
-----> Downloaded app package (28M)
Downloading JDK...
Copying openjdk-1.7.0_25.tar.gz from the buildpack cache ...
Unpacking JDK to .jdk
Downloading Tomcat: apache-tomcat-7.0.41.tar.gz
Copying apache-tomcat-7.0.41.tar.gz from the buildpack cache ...
Unpacking Tomcat to .tomcat
Copying mysql-connector-java-5.1.12.jar from the buildpack cache ...
Copying postgresql-9.0-801.jdbc4.jar from the buildpack cache ...
Downloading auto-reconfiguration-0.7.1.jar from https://s3.amazonaws.com/maven.springframework.org/milestone/org/cloudfoundry/auto-reconfiguration/0.7.1 ...
-----> Uploading droplet (65M)
Checking status of app 'consulner'.....
0 of 1 instances running (1 starting)
0 of 1 instances running (1 starting)
1 of 1 instances running (1 running)
Push successful! App 'consulner' available at http://consulner.cfapps.io</pre>
<pre class="terminal" style="-webkit-background-clip: padding-box; background-clip: padding-box; background-color: #444444; background-image: none; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 2px solid rgb(222, 222, 222); color: white; filter: none; font-family: Courier; font-size: 13px; margin-bottom: 5px; overflow: auto; padding: 10px; position: relative; text-shadow: none; white-space: pre-wrap; word-break: break-all; word-wrap: break-word;"></pre>
<pre class="terminal" style="-webkit-background-clip: padding-box; background-clip: padding-box; background-color: #444444; background-image: none; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 2px solid rgb(222, 222, 222); color: white; filter: none; font-family: Courier; font-size: 13px; margin-bottom: 5px; overflow: auto; padding: 10px; position: relative; text-shadow: none; white-space: pre-wrap; word-break: break-all; word-wrap: break-word;"></pre>
</div>
<div style="text-align: left;">
That's it! Now we have app running on prod.
Unfortunately this was not that simple, I struggled to find out why the app could not start t first time and there was nothing inspiring in logs or crushlogs. Finally I tried increasing default memory from 256M to 512M and it worked :)
</div>
</div>
Marcin Piczkowskihttp://www.blogger.com/profile/05961375583331768059noreply@blogger.com0tag:blogger.com,1999:blog-2528216159805127790.post-56392520900218320152013-06-17T08:25:00.002-07:002013-06-17T08:25:50.352-07:00Startup Weekend Lodz 2013<div dir="ltr" style="text-align: left;" trbidi="on">
First such event in Lodz, but not first in the <a href="http://startupweekend.org/events/">histor</a>y. People from different domais met this weekend in <a href="http://lodz.startupweekend.org/">Lodz</a> to put incredible ideas into life. Some came with their own ideas, others to meet people or hack codes. From all ideas finally 6 were chosen to form team upon:<br />
<br />
<span style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 18px;">Creative Learning ! Creative Learning is creating platform of educative and fun apps for kids. We offer you two options: 1) kid muting and absorbing apps (first to go!) & 2) kid-(grand)parent interaction app ( we'll "KISS" for your kid to st</span><span class="text_exposed_show" style="background-color: white; color: #333333; display: inline; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 18px;">ay focused & a granny be able to help!).<br />Fun, creative, educative and esthetic apps is all what Creative Learning is about - and all this in a set of apps that will become the kids apps legends ;).<br />If you want your kid to learn stuff in a fun way follow our FB page and website, help us test and expect our products on iTunes & GooglePlay soon!<br />- Creative Learning - SHAPES<br />- Creative Learning - LETTERS<br />- Creative Learning - NUMBERS<br />-Creative Learning - ANIMALS<br />and more!<br /><a href="http://www.creative-learning.eu/" rel="nofollow nofollow" style="color: #3b5998; cursor: pointer; text-decoration: none;" target="_blank">http://www.creative-learning.eu/</a></span><br />
<br />
<img alt="Photo: http://www.creative-learning.eu/" src="https://fbcdn-sphotos-g-a.akamaihd.net/hphotos-ak-prn2/p480x480/179786_153500711504734_210687812_n.jpg" /><br />
<br />
<br />
<br />
<span style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 18px;">allSpotted! - The team is about creating a mobile app for the facebook movement called "Spotted". It allows you to find again the person you have meet/seen but have no contact to. The app uses social traffic and GPS information.</span><br />
<span style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 18px;"><br /></span>
<img alt="Photo: allSpotted" src="https://fbcdn-sphotos-a-a.akamaihd.net/hphotos-ak-prn1/p480x480/1017076_153500951504710_1984817372_n.jpg" /><br />
<span style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 18px;"><br /></span>
<span style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 18px;"><br /></span>
<span style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 18px;">Space Lawyer! Best Legal Services on-line in Poland. Everywhere, anytime!</span><br />
<span style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 18px;"><br /></span>
<img alt="Photo: Space Lawyer" src="https://fbcdn-sphotos-f-a.akamaihd.net/hphotos-ak-ash4/p480x480/1004416_153501584837980_58819020_n.jpg" /><br />
<br />
<br />
<span style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 18px;">ADS ON PETS! Ads on Pets - we provide brands with a new advertising channel. By giving pets lovers possibility for their animals to stand out, we give them way to make money so they can spoil them even more. </span><br />
<span style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 18px;"><br /></span>
<img alt="Photo: ADS ON PETS" src="https://fbcdn-sphotos-d-a.akamaihd.net/hphotos-ak-frc3/p480x480/1588_153501664837972_1797940603_n.jpg" /><br />
<br />
<br />
<span style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 18px;">Video Pediatric Advice! Platform which allows pediatricans to give advices to patients via webcam.</span><br />
<br />
<img alt="Photo: Video Pediatric Advice" src="https://fbcdn-sphotos-a-a.akamaihd.net/hphotos-ak-prn2/p480x480/970849_153508678170604_1231980240_n.jpg" /><br />
<br />
<br />
<span style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 18px;">"Gamming for Cats and feed it"</span><br />
<span style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 18px;">Idea is quite simple. Cat plays iPad and gains points. When gained more than 100 points it' s given food. There is also idea for suture to increase food rate if cat burns more than 200 calories. </span><br />
<span style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 18px;"><br /></span>
<img alt="Photo: Dzisiaj skończyliśmy prototyp urządzenia "Gamming for Cats and feed it"
Idea jest całkiem prosta, kot gra na Ipadzie, jeśli zdobędzie 100 punktów dostanie jedzenie.
W planach rozwoju jeśli przećwiczy 200 kkalori dostaje większą porcję !." src="https://fbcdn-sphotos-c-a.akamaihd.net/hphotos-ak-ash3/p480x480/5634_153543671500438_1417266150_n.jpg" /><br />
<br />
<br />
<span style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 18px;">Aplus - learn Math Online. E-Learning system leading you through a path to Math proficiency.</span><br />
<span style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 18px;"><br /></span>
<img alt="Photo: Aplus - to jeden z pomysłów ze startup weekendu. Naucz się matematyki Online. Kamil Kamiński odpowie na wszystkie Wasze pytania z matmy ONLINE." src="https://fbcdn-sphotos-h-a.akamaihd.net/hphotos-ak-frc1/p480x480/999374_153454538176018_1414218665_n.jpg" /><br />
<br />
<span style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 18px;">Finally Dominik is going to California with his Creative Cats and feeding device for them.</span><br />
<span style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 18px;"><br /></span>
<span style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 18px;">2nd prize - our team with prosteumowy.pl</span><br />
<span style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 18px;">3rd prize - </span><span style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 17px;"> </span><span style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 17px;">allSpotted and </span><span style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 18px;">Video Pediatric Advice!</span><br />
<div>
<span style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 18px;"><br /></span></div>
<span style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 18px;"><br /></span>
<span style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 18px;"><br /></span>
<span style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 18px;"><br /></span>
<span style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 18px;"><br /></span></div>
Marcin Piczkowskihttp://www.blogger.com/profile/05961375583331768059noreply@blogger.com0tag:blogger.com,1999:blog-2528216159805127790.post-60988980299400481312013-03-16T05:18:00.000-07:002013-03-16T05:18:06.704-07:0033rd Degree 2013, Warsaw13-15 Mar 2013 in Warsaw - 3 days of great knowledge and motivation boost.<br />
<a href="http://2013.33degree.org/">33rd Degree</a> another time proved it's one of the greatest, if not greatest one conference in Central and Eastern Europe. First time it was held in Warsaw Gromada Hotel and in comparison to previous 2 years it was a good choice. It was held on 3 floors so there was no problem with room and access to toilets or snacks. Although there were about 900 attendees the impression of crowd was not so painful.<br />
Everyday we could choose of 5 different tracks. Here I will summarize talks and workshops I attended.<br />
<br />
<b>Day 1</b><br />
<b><br /></b>
<a href="http://2013.33degree.org/speaker/show/21" style="background-color: #f6f5f2; border: 0px; color: #a30e0b; font-family: 'Trebuchet MS', Arial, Helvetica, sans-serif; font-size: 11px; line-height: 18px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Sven Peters</a><span style="background-color: #f6f5f2; color: #333333; font-family: 'Trebuchet MS', Arial, Helvetica, sans-serif; font-size: 11px; line-height: 18px;"></span><br />
<h4 style="background-color: #f6f5f2; border: medium none; color: #b91e39; font-family: 'Trebuchet MS', Arial, Helvetica, sans-serif; font-size: 12px; line-height: 18px; margin: 4px 0px 0px; outline: 0px; padding: 0px; vertical-align: baseline;">
<a href="http://2013.33degree.org/talk/show/8" style="background-color: transparent; border: 0px; color: #a30e0b; margin: 0px; outline: 0px; padding: 0px; text-decoration: none; vertical-align: baseline;">7 Things: How to make good teams great</a></h4>
<div>
<br /></div>
Sven works at Atlassian and spoke about 7 things that worked in his company to make great (agile) teams. He writes his blog at <a href="http://svenpet.com/">http://svenpet.com/</a><br />
Most companies motivate employees by bonuses and commissions but what do they really motivate to? Usually they motivate to get bonuses and commissions, not to make good work. When companies find good people they put them in cages, they limit their possibilities, e.g. force to working in fixed hours, not buying license for tools. What can we do about it? We can sit and complain, make revolution (which usually finishes bad) or try to do little changes step by step. The last one seems to be better approach. Try to change your environment and let it grow. Here are the tips for you:<br />
1) Flowtime - stay in productivity phase as long as possible, don't allow to interrupt it. In Atlassian they first set up flowtime hours when team locked themselves in a room, turned off phones, mail clients etc. and worked on a task. This habit started to spread over company with time but was not ideal. It happened when contact with team was needed urgently sometimes. To fill this gap the team assigned a first point of contact each time - a person who was not closed with others but served as a help to other teams whenever they needed some help. This was better. Other source of interruption are open working spaces and should be avoided. Surely flowtime has its drawbacks - setting attention on single thing may easily lead you to situation when you loose the focus on right thing and pass to the wrong path loosing plenty of time. It's important not to loose this focus.<br />
2) Feed you brain - conferences, organizing coding sessions after work, trying out new things, learning new languages, all this stimulates brain to work better. You can move a meeting to lunch (<a href="http://www.investopedia.com/terms/b/brown-bag-meeting.asp#axzz2NcTRO8cv">'brown bag'</a> meetings) or meet after work on a beer. That's often much better than official office meetings.<br />
3) Say "well done!" - don't afraid to appreciate small things in your team, e.g. when someone spent 2 extra hours on client's problem appreciate it. Tell him he did a good job (even when mostly he screws things up).<br />
4) Report robots - nothing consumes more time than writing reports which eventually are not read by anyone. Automate things that are repetitive. Collect data and put information radiators all over the office (a TV in kitchen, posters, etc.) This is better than to sit and read reports and you're getting naturally more aware of numbers than studying them. Finally everyone in the office knows the numbers, not only managers. People are more aware of what's the actual outcome of their actions.<br />
5) Eat your worn dog food - when you build a product try it yourself before releasing to users. Give it to your co-workers for alpha testing. It hurts sometimes when your colleague from opposite desk complains about it but it's the fastest feedback ever. Think like a customer, understand customer better.<br />
6) Do a special day - leave your current items for one day, pick up things that stack deep in your backlog and tidy them.<br />
7) Experimentation time - check your cool ideas, build a prototype. In Atlassian they have 20% time for building project of the ideas, that can help company to improve product. It's called "innovation week". This starts usually after a milestone release when there's more time and none will be interrupted by current sprint. It starts with a meeting when team gathers all ideas. They make a plan, maybe a mockup and next day they sit 24h building the product. Day after they present the product to other people in company ("ship it day").<br />
<br />
<a href="http://2013.33degree.org/speaker/show/5" style="background-color: #f6f5f2; border: 0px; color: #a30e0b; font-family: 'Trebuchet MS', Arial, Helvetica, sans-serif; font-size: 11px; line-height: 18px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Dan North</a><span style="background-color: #f6f5f2; color: #333333; font-family: 'Trebuchet MS', Arial, Helvetica, sans-serif; font-size: 11px; line-height: 18px;"></span><br />
<h4 style="background-color: #f6f5f2; border: medium none; color: #b91e39; font-family: 'Trebuchet MS', Arial, Helvetica, sans-serif; font-size: 12px; line-height: 18px; margin: 4px 0px 0px; outline: 0px; padding: 0px; vertical-align: baseline;">
<a href="http://2013.33degree.org/talk/show/13" style="background-color: transparent; border: 0px; color: #a30e0b; margin: 0px; outline: 0px; padding: 0px; text-decoration: none; vertical-align: baseline;">Decisions Decisions</a></h4>
<br />
<a href="http://dannorth.net/about/">Dan </a>spoke about daily-life decisions:<br />
* builds: automated or manual<br />
* testing: automated or manual, or test after, or test whenever<br />
* architecture: synchronous or asynch.<br />
* architecture: monolithic or small components<br />
* programming: object-oriented or functional<br />
* threads or single-event loops, or actors, or CSP (<span style="background-color: white; font-family: arial, sans-serif; font-size: 12px;">Communicating Sequential Processes)</span><br />
Each decision is a trade-of. When we build solution the need should drive the solution, e.g. when hacking to find out proper architecture of many possibilities often writing code first sounds better than TDD when after all we don't know where we're going to, deleting code often but if TDD is quicker for you in such cases then use it. Do with what you're more familiar and leads you toward solution quicker. Premature optimisation is a source of all evil. Try hybrid solutions. Use Spike and Stabilise pattern - create product that works, ship it as quick as possible to get user feedback and then when the solution starts to form try stabilising it, cleanup some code, add more tests.<br />
Decision whether use objects or functions is pointless, why not trying both depending on purpose? Same goes for builds. In some cases manual builds sound better choice - you pay attention to details which can be forgotten during automation. When product evolves so should your methodology. When automatic build took, say 3 minutes and you added new features it will slow down. You should tweak build process to enhance performance rather than allow it to live its own life - automation is misleading sometimes.<br />
Automated testing is OK when e.g. testing repetitive set of data, but manual testing give other view, e.g. when clicking over UI you get understanding of user experience, you spot each change to the application when new features are added, how it impacts end user.<br />
Short Software Half Life pattern - how long will I wait until half of my code will not be anymore there. It's good to divide software to small cohesive components, each of which does one thing (this is how Linux was designed). Each component has soft center and hard shell, means clearly defined interface with other components. It's then easier to throw out such component, rewrite from scratch than if whole system is monolithic - there's term called micro software architecture.<br />
Evaluable architecture is one that's changing over time to adapt to user needs. Evaluable e.g. has nothing to do with DRY (Don't Repeat Yourself) principle of programming - analogically to DNA which takes main part in evolution: DNA does not refactor, it copies. Same for software - it's easier to remove part of a system if it's not coupled with other parts (this breaks DRY rule).<br />
The conclusion of speech is that only when you know what you're trading off you can make informative decisions.<br />
<br />
<a href="http://2013.33degree.org/speaker/show/35" style="background-color: #f6f5f2; border: 0px; color: #a30e0b; font-family: 'Trebuchet MS', Arial, Helvetica, sans-serif; font-size: 11px; line-height: 18px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Ted Neward</a><span style="background-color: #f6f5f2; color: #333333; font-family: 'Trebuchet MS', Arial, Helvetica, sans-serif; font-size: 11px; line-height: 18px;"></span><br />
<h4 style="background-color: #f6f5f2; border: medium none; color: #b91e39; font-family: 'Trebuchet MS', Arial, Helvetica, sans-serif; font-size: 12px; line-height: 18px; margin: 4px 0px 0px; outline: 0px; padding: 0px; vertical-align: baseline;">
<a href="http://2013.33degree.org/talk/show/81" style="background-color: transparent; border: 0px; color: #a30e0b; margin: 0px; outline: 0px; padding: 0px; text-decoration: none; vertical-align: baseline;">Busy Developer's Guide to Iconoclasm</a></h4>
<div>
<br /></div>
More about Ted is on his page <a href="http://www.tedneward.com/">www.tedneward.com</a><br />
India produces 350 000 engineers every year. Along with India more eastern countries like Poland, Romania ships cheap engineers on market. At the same time automation is happening, machines take over jobs which not long ago were done by people. Can we avoid it? How can we protect our job?<br />
We can't. We can evolve. Something that machine can't replace is creativity.<br />
Nothing can replace people like those who invented <a href="http://evernote.com/">Evernote </a>or <a href="https://www.dropbox.com/">Dropbox</a>.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgFX_TZjMW3oh1piuv0dwHa0COzH1aCp1XTygcz3a8t54vtyklLzTbIMi7A2rkcWPpm-NqqtYPcSZMtW2VBYNwGZQb74hbfIINPTwSEV8Rtz5LaVkSzOLxPECtLaj7hv10GJUwNNHfRNrs/s1600/IMG_20130313_123624.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgFX_TZjMW3oh1piuv0dwHa0COzH1aCp1XTygcz3a8t54vtyklLzTbIMi7A2rkcWPpm-NqqtYPcSZMtW2VBYNwGZQb74hbfIINPTwSEV8Rtz5LaVkSzOLxPECtLaj7hv10GJUwNNHfRNrs/s320/IMG_20130313_123624.jpg" width="320" /></a></div>
<br />
These people are <a href="http://www.thefreedictionary.com/iconoclast">iconoclasts</a>. They are people who beat <i>'status quo'</i> for sth better for the World.<br />
They are people who are brave enough to be driven by logical thinking, not group thinking.<br />
Group thinking is dangerous. We are biologically wired to follow the herd. This is sth we should avoid.<br />
Iconoclasts like everyone fear to step out of crowd, but they refuse that fear to influence logical decisions.<br />
<i>"Failure is only the opportunity to more intelligently begin again" </i>- said Henry Ford.<br />
Some iconoclasts finished dead when trying to force their ideas, some where more successful. The difference between them is that ones could convince people while other barely tried.<br />
The social intelligence is sth that forms of how we perceive familiarity and feel reputation. This is how we should convince people to new ideas. We should step by step make them familiar with it and build our reputation. None believes someone unknown who at first glance talks bullshit according to what's commonly thought by group.<br />
<br />
<a href="http://2013.33degree.org/speaker/show/53" style="background-color: #f6f5f2; border: 0px; color: #a30e0b; font-family: 'Trebuchet MS', Arial, Helvetica, sans-serif; font-size: 11px; line-height: 18px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Erik Dörnenburg</a><span style="background-color: #f6f5f2; color: #333333; font-family: 'Trebuchet MS', Arial, Helvetica, sans-serif; font-size: 11px; line-height: 18px;"></span><br />
<h4 style="background-color: #f6f5f2; border: medium none; color: #b91e39; font-family: 'Trebuchet MS', Arial, Helvetica, sans-serif; font-size: 12px; line-height: 18px; margin: 4px 0px 0px; outline: 0px; padding: 0px; vertical-align: baseline;">
<a href="http://2013.33degree.org/talk/show/91" style="background-color: transparent; border: 0px; color: #a30e0b; margin: 0px; outline: 0px; padding: 0px; text-decoration: none; vertical-align: baseline;">Software quality – you know it when you see it</a></h4>
<div>
<br /></div>
Erik spoke about quantifying the quality and presenting on charts.<br />
The clue is to aggregate some information but throw away other, use graphic views and take data at right level. There are different metrics to be used:<br />
- lines of code<br />
- method length<br />
- class size<br />
- cyclomatic complexity (the number of nested loops)<br />
- coupling between classes<br />
- weighted methods per class<br />
Eric shown several diagrams and pointed out tools that we can use to generate them:<br />
<a href="http://philogb.github.com/jit/">InfoVis</a>, <a href="https://gephi.org/">Gephi</a>, <a href="http://www.campwoodsw.com/sourcemonitor.html">SourceMonitor</a>, <a href="http://checkstyle.sourceforge.net/">CheckStyle</a>, <a href="http://loose.upt.ro/reengineering/research/iplasma">iPlasma</a>.<br />
The same talk can be viewed <a href="http://www.infoq.com/presentations/Software-Quality-You-Know-It-when-You-See-It">here</a>.<br />
<br />
<br />
<a href="http://2013.33degree.org/speaker/show/30" style="background-color: #f6f5f2; border: 0px; color: #a30e0b; font-family: 'Trebuchet MS', Arial, Helvetica, sans-serif; font-size: 11px; line-height: 18px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Tugdual Grall</a><span style="background-color: #f6f5f2; color: #333333; font-family: 'Trebuchet MS', Arial, Helvetica, sans-serif; font-size: 11px; line-height: 18px;"></span><br />
<h4 style="background-color: #f6f5f2; border: medium none; color: #b91e39; font-family: 'Trebuchet MS', Arial, Helvetica, sans-serif; font-size: 12px; line-height: 18px; margin: 4px 0px 0px; outline: 0px; padding: 0px; vertical-align: baseline;">
<a href="http://2013.33degree.org/talk/show/30" style="background-color: transparent; border: 0px; color: #a30e0b; margin: 0px; outline: 0px; padding: 0px; text-decoration: none; vertical-align: baseline;">Getting Started with Couchbase Applications Development</a></h4>
<div>
<br /></div>
Tug runs blog at <a href="http://tugdualgrall.blogspot.com/">http://tugdualgrall.blogspot.com/</a>.<br />
Rational databases scale bad and it's expensive (Oracle RAC). NoSQL comes to rescue.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-eTPcSBqBACya9qOhd5T4tkjPV8Y1J-oOGj4Tu-vTSDoeq1L2DuNnYL2mzVBUiU-ya8q-9c3BiakTaHZdV8vLTTI8jAHeXYP7gP0O8oyKxmjvUF1maBC0eIRNJl47LQ0vsBX8nDYOGw4/s1600/IMG_20130314_095549.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-eTPcSBqBACya9qOhd5T4tkjPV8Y1J-oOGj4Tu-vTSDoeq1L2DuNnYL2mzVBUiU-ya8q-9c3BiakTaHZdV8vLTTI8jAHeXYP7gP0O8oyKxmjvUF1maBC0eIRNJl47LQ0vsBX8nDYOGw4/s320/IMG_20130314_095549.jpg" width="320" /></a></div>
<br />
<a href="http://www.couchbase.com/docs/couchbase-manual-2.0">Couchbase </a>is one of document databases. Entries are stored in JSON format. Architecture is as below:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://www.couchbase.com/sites/default/files/data_manager.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="206" src="http://www.couchbase.com/sites/default/files/data_manager.png" width="320" /></a></div>
<br />
<br />
Couchbase server runs on C++ and V8 JavaScript engine. Cluster manager runs on Erlang.<br />
In comparison to MongoDB it has worse query language but better scalability. Usually the project lifecycle starts with Mongo and if it's enough then it stays on Mongo but if it needs more scalability, better performance it moves to Couchbase.<br />
Search mechanism in Couchbase can be enhanced by adding <a href="http://blog.couchbase.com/announcing-release-couchbase-plug-elasticsearch">ElasticSearch </a>component.<br />
Couchbase team is also working currently to release Spring Data package.<br />
<br />
<b>Day 2</b><br />
<br />
<a href="http://2013.33degree.org/speaker/show/30" style="background-color: #f6f5f2; border: 0px; color: #a30e0b; font-family: 'Trebuchet MS', Arial, Helvetica, sans-serif; font-size: 11px; line-height: 18px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Tugdual Grall</a><span style="background-color: #f6f5f2; color: #333333; font-family: 'Trebuchet MS', Arial, Helvetica, sans-serif; font-size: 11px; line-height: 18px;"></span><br />
<h4 style="background-color: #f6f5f2; border: medium none; color: #b91e39; font-family: 'Trebuchet MS', Arial, Helvetica, sans-serif; font-size: 12px; line-height: 18px; margin: 4px 0px 0px; outline: 0px; padding: 0px; vertical-align: baseline;">
<a href="http://2013.33degree.org/talk/show/29" style="background-color: transparent; border: 0px; color: #a30e0b; margin: 0px; outline: 0px; padding: 0px; text-decoration: none; vertical-align: baseline;">Workshop: NoSQL Workshop: Discover NoSQL Development with Couchbase 2.0</a></h4>
<div>
<br /></div>
Good hands-on training of Couchbase. I've put materials at <a href="https://github.com/piczmar/couchbase_33degree">github</a>. Especially useful is example of<a href="https://github.com/piczmar/couchbase_33degree/tree/master/beersample-java-master"> simple web app</a> demonstrating all Couchbase operations.<br />
<br />
<a href="http://2013.33degree.org/speaker/show/53" style="background-color: #f6f5f2; border: 0px; color: #a30e0b; font-family: 'Trebuchet MS', Arial, Helvetica, sans-serif; font-size: 11px; line-height: 18px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Erik Dörnenburg</a><span style="background-color: #f6f5f2; color: #333333; font-family: 'Trebuchet MS', Arial, Helvetica, sans-serif; font-size: 11px; line-height: 18px;"></span><br />
<h4 style="background-color: #f6f5f2; border: medium none; color: #b91e39; font-family: 'Trebuchet MS', Arial, Helvetica, sans-serif; font-size: 12px; line-height: 18px; margin: 4px 0px 0px; outline: 0px; padding: 0px; vertical-align: baseline;">
<a href="http://2013.33degree.org/talk/show/90" style="background-color: transparent; border: 0px; color: #a30e0b; margin: 0px; outline: 0px; padding: 0px; text-decoration: none; vertical-align: baseline;">Architecture without Architects</a></h4>
<div>
<br /></div>
<div>
Eric gave 2 metaphors of software development: </div>
<div>
1. Building houses. House architects need to deal with complex planning of every detail of the building before development has really started. Build phase is short in comparison to usage phase. Good idea at the time of development does not necessarily have to be as good after several years of usage. Refactoring the city is hard and requires good and detailed plan. This metaphor is not that close to software development where build phase and usage phase are mixed. We don't build software once and use it but constantly refactor and adapt to evolving requirements. More close to software development is 2nd methaphore</div>
<div>
2. Gardening. Although more accurate, we prefer to call ourselves developers than gardeners. We wouldn't put gardener on our business card as it appeals to us with less social respect. However gardening is much like software development, it requires from gardener to constantly work on keeping the garden in right shape when time and surrounding conditions change (e.g. different seasons of year, changing climate, ageing of plants).</div>
<div>
Software development has more to do with evolution which consists of:</div>
<div>
- recombination</div>
<div>
- mutation</div>
<div>
- fitness function</div>
<div>
The same happens in IT in Open Source and technical startups. This is not that architects can plan at the beginning and only once how product will look like. Many frameworks emerge but only a few become successful. Fitness function depends on number of people who use the framework.</div>
<div>
<br /></div>
<div>
Abstractions in software development are useful but you need to know the details underneath, e.g.:</div>
<div>
Web application can get from server JSON containing url links to more details which can be navigated on demand. Same concept on mobile application won't work because limited bandwidths. Fetching details from links would be too slow. Other example is messaging abstraction. Let's have a method:</div>
<div>
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;">sendMessage(String topic, Message message)</span> which nicely encapsulates whole stack of invocations from top to the bottom where network packets are sent. This abstraction works as long as you remember of max. size of message to send with MTU token of 15000 bytes. Otherwise the method gracefully fails, because the abstraction hides that detail. Here we come to term of 'mechanical sympathy' this is where software and hardware should work in harmony.</div>
<div>
Reasonable architecture starts with simple concept and evolves when needed. It' said the architecture should be componential, but not necessarily at the beginning. The same as monolithic architecture can evolve to componential, the same a componential can evolve to turn multiple components into one, which is presented on pic below:</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgHV4vVvyPl94h9v4SHDGtSZe54uYOLKeHbKgxt79Ww6wVJECCbNSQn8tgBmD-vdEnhfgGiXEF0afigr4YwOuCEAdmflNHPjmC2WIGJI08ENuKWkZJjVg5wTuXLPi9CpQ4IWp7mwvv4NfY/s1600/IMG_20130314_140600.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgHV4vVvyPl94h9v4SHDGtSZe54uYOLKeHbKgxt79Ww6wVJECCbNSQn8tgBmD-vdEnhfgGiXEF0afigr4YwOuCEAdmflNHPjmC2WIGJI08ENuKWkZJjVg5wTuXLPi9CpQ4IWp7mwvv4NfY/s320/IMG_20130314_140600.jpg" width="320" /></a></div>
<div>
<br /></div>
<div>
The conclusion is that architecture and development cannot be separated (as e.g. in civil engineering). </div>
<div>
We cannot do architecture upfront but it has to be validated by code. Most of the things that traditionally architects did (diagrams, design, documentation) should be done by developers, by tools or not done at all.</div>
<div>
<br /></div>
<div>
<a href="http://2013.33degree.org/speaker/show/14" style="background-color: #f6f5f2; border: 0px; color: #a30e0b; font-family: 'Trebuchet MS', Arial, Helvetica, sans-serif; font-size: 11px; line-height: 18px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Pratik Patel</a><span style="background-color: #f6f5f2; color: #333333; font-family: 'Trebuchet MS', Arial, Helvetica, sans-serif; font-size: 11px; line-height: 18px;"></span><br />
<h4 style="background-color: #f6f5f2; border: medium none; color: #b91e39; font-family: 'Trebuchet MS', Arial, Helvetica, sans-serif; font-size: 12px; line-height: 18px; margin: 4px 0px 0px; outline: 0px; padding: 0px; vertical-align: baseline;">
<a href="http://2013.33degree.org/talk/show/63" style="background-color: transparent; border: 0px; color: #a30e0b; margin: 0px; outline: 0px; padding: 0px; text-decoration: none; vertical-align: baseline;">Mobile Performance Tips n' Tricks</a></h4>
</div>
<div>
<br /></div>
<div>
Pratic works at <a href="http://www.triplingo.com/">Triplingo </a>and writes blog <a href="http://mypatelpace.com/">mypatelpace.com</a></div>
<div>
The tips & tricks given by him are:</div>
<div>
* users expect same performance on mobile as on desktop or even better</div>
<div>
* 10 sec. maximum waiting time on desktop application but 3 sec. on mobile</div>
<div>
* mobile Safari browser has only 25KB JavaScript cache, so do not use same JavaScript frameworks for mobile pages, e.g. instead of jQuery use z<a href="http://zeptojs.com/">epto</a>, <a href="http://xuijs.com/">xui</a>, <a href="http://microjs.com/">microjs</a></div>
<div>
* use little CSS, JavaScript because it takes time to parse it (100ms/1KB), minify it (gzip)</div>
<div>
* reduce DNS lookup on page, e.g. limit redirection (from mypage.com to www.mypage.com)</div>
<div>
* load first necessary content and then the rest (adverts, statistics JS)</div>
<div>
* do not use background image, use CSS gradients instead</div>
<div>
* instead using images use icon fonts (free icon fonts <a href="http://sixrevisions.com/resources/free-icon-fonts/">here</a>), they scale nice and take little size</div>
<div>
* instead of shifting images on page use CSS3 animation.</div>
<div>
* click event takes about 300ms for operating system to recognize, it is delayed depending on screen resistance, dust, etc. so instead on-click event use touch-start events and touch-end events.</div>
<div>
* use websockets for persistence pipe with server instead of http</div>
<div>
<br /></div>
<div>
<a href="http://2013.33degree.org/speaker/show/4" style="background-color: #f6f5f2; border: 0px; color: #a30e0b; font-family: 'Trebuchet MS', Arial, Helvetica, sans-serif; font-size: 11px; line-height: 18px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Simon Ritter</a><span style="background-color: #f6f5f2; color: #333333; font-family: 'Trebuchet MS', Arial, Helvetica, sans-serif; font-size: 11px; line-height: 18px;"></span><br />
<h4 style="background-color: #f6f5f2; border: medium none; color: #b91e39; font-family: 'Trebuchet MS', Arial, Helvetica, sans-serif; font-size: 12px; line-height: 18px; margin: 4px 0px 0px; outline: 0px; padding: 0px; vertical-align: baseline;">
<a href="http://2013.33degree.org/talk/show/39" style="background-color: transparent; border: 0px; color: #a30e0b; margin: 0px; outline: 0px; padding: 0px; text-decoration: none; vertical-align: baseline;">Do you like coffee with your dessert? Java and the Raspberry Pi</a></h4>
</div>
<div>
<br /></div>
<div>
Simon is Tech. Evangelist at Oracle Corp.</div>
<div>
He's done intro on <a href="http://www.raspberrypi.org/">Raspberry Pi</a> platform - an ARM processor based board.</div>
<div>
Project emerged from <a href="http://en.wikipedia.org/wiki/BBC_Micro">BBC Micro</a> project started in 1981, which was to serve British college students with platform for learning computer science. In Feb 2012 first Raspberry Pi was released.</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://upload.wikimedia.org/wikipedia/commons/thumb/9/9c/Raspberry_Pi_Beta_Board.jpg/320px-Raspberry_Pi_Beta_Board.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img alt="Raspberry Pi Beta Board.jpg" border="0" src="http://upload.wikimedia.org/wikipedia/commons/thumb/9/9c/Raspberry_Pi_Beta_Board.jpg/320px-Raspberry_Pi_Beta_Board.jpg" /></a></div>
<div>
</div>
<div>
It contains:</div>
<div>
- ARM 11 core 700Mhz processor overclocked up to 1GHz</div>
<div>
- 256MB (release 1) or 512MB (release 2) RAM</div>
<div>
- HDMI & composite video so can be connected directly to monitor</div>
<div>
- 2x USB</div>
<div>
- audio out</div>
<div>
- Ethernet (release 2)</div>
<div>
- header pins</div>
<div>
<br /></div>
<div>
It's available on market for <a href="http://downloads.element14.com/raspberryPi1.html?isRedirect=true">$25 and $35 (release 2)</a></div>
<div>
Simon demonstrated some real-life applications like:</div>
<div>
- LegoMindstorm motor steered with brain waves</div>
<div>
- mechanic arm steered with joystick</div>
<div>
- voice synthesizer</div>
<div>
Really full of fun presentation.</div>
<div>
<br /></div>
<div>
<a href="http://2013.33degree.org/speaker/show/55" style="background-color: #f6f5f2; border: 0px; color: #a30e0b; font-family: 'Trebuchet MS', Arial, Helvetica, sans-serif; font-size: 11px; line-height: 18px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Katrin Hippler</a><span style="background-color: #f6f5f2; color: #333333; font-family: 'Trebuchet MS', Arial, Helvetica, sans-serif; font-size: 11px; line-height: 18px;"></span><br />
<h4 style="background-color: #f6f5f2; border: medium none; color: #b91e39; font-family: 'Trebuchet MS', Arial, Helvetica, sans-serif; font-size: 12px; line-height: 18px; margin: 4px 0px 0px; outline: 0px; padding: 0px; vertical-align: baseline;">
<a href="http://2013.33degree.org/talk/show/93" style="background-color: transparent; border: 0px; color: #a30e0b; margin: 0px; outline: 0px; padding: 0px; text-decoration: none; vertical-align: baseline;">Start as a Freelance Developer – Become an Entrepreneur</a></h4>
</div>
<div>
<br /></div>
<div>
Katrin presented one of remote-work platforms -<a href="https://www.elance.com/"> https://www.elance.com/</a></div>
<div>
She also gave some tips how to start freelancing there: </div>
<div>
- specialize in what you do, do it very well</div>
<div>
- create outstanding profile, add portfolio</div>
<div>
- search only jobs that fits exactly your skills</div>
<div>
Setting up freelancing business takes time and effort but is becoming more popular. It gives several advantages one of which is flexibility, but this is not a work for everyone.</div>
<div>
After becoming recognized by clients freelancer can move to entrepreneur role, hiring people to accomplish his projects.</div>
<div>
<br /></div>
<div>
<b>Day 3</b></div>
<div>
<br /></div>
<div>
<a href="http://2013.33degree.org/speaker/show/56" style="background-color: #f6f5f2; border: 0px; color: #a30e0b; font-family: 'Trebuchet MS', Arial, Helvetica, sans-serif; font-size: 11px; line-height: 18px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Amazon Web Services Solution Architect</a><span style="background-color: #f6f5f2; color: #333333; font-family: 'Trebuchet MS', Arial, Helvetica, sans-serif; font-size: 11px; line-height: 18px;"></span><br />
<h4 style="background-color: #f6f5f2; border: medium none; color: #b91e39; font-family: 'Trebuchet MS', Arial, Helvetica, sans-serif; font-size: 12px; line-height: 18px; margin: 4px 0px 0px; outline: 0px; padding: 0px; vertical-align: baseline;">
<a href="http://2013.33degree.org/talk/show/94" style="background-color: transparent; border: 0px; color: #a30e0b; margin: 0px; outline: 0px; padding: 0px; text-decoration: none; vertical-align: baseline;">Workshop: Video sharing website on Amazon Web Services</a></h4>
</div>
<div>
<br /></div>
<div>
Workshop led by Hakan Gurel - Amazon Solution Architect (hakan (at) amazon.lu) and Krzysztof Marciniec - Technical Sales Representative (marcinie (at) amazon.lu)</div>
<div>
I have never used <a href="http://aws.amazon.com/">AWS </a>before. This gave me a huge dose of new knowledge in reasonably short time, rather than spending hours on digging through Amazon jungle of documentation.</div>
<div>
We succeeded setting up a Linux node with Python-based web application, configured db storage for it and set up load balancer in front of. The app front is simple - a photoblog, check it out at <a href="http://ec2-23-20-243-172.compute-1.amazonaws.com/">http://ec2-23-20-243-172.compute-1.amazonaws.com/</a>. We got also one more course in pdf showing how to use AWS transcoding. I placed all materials at <a href="https://github.com/piczmar/AmazonS3">github</a>.</div>
<div>
<br /></div>
<div>
<a href="http://2013.33degree.org/speaker/show/2" style="background-color: #f6f5f2; border: 0px; color: #a30e0b; font-family: 'Trebuchet MS', Arial, Helvetica, sans-serif; font-size: 11px; line-height: 18px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Venkat Subramaniam</a><span style="background-color: #f6f5f2; color: #333333; font-family: 'Trebuchet MS', Arial, Helvetica, sans-serif; font-size: 11px; line-height: 18px;"></span><br />
<h4 style="background-color: #f6f5f2; border: medium none; color: #b91e39; font-family: 'Trebuchet MS', Arial, Helvetica, sans-serif; font-size: 12px; line-height: 18px; margin: 4px 0px 0px; outline: 0px; padding: 0px; vertical-align: baseline;">
<a href="http://2013.33degree.org/talk/show/16" style="background-color: transparent; border: 0px; color: #a30e0b; margin: 0px; outline: 0px; padding: 0px; text-decoration: none; vertical-align: baseline;">The rise and fall of empires: Lessons for language designers and programmers</a></h4>
</div>
<div>
<br /></div>
<div>
Venkat on example of world great empires in history gave a few tips for developers:</div>
<div>
* Leverage the power of democracy</div>
<div>
Good leaders are those who create things and give it to people watching what they'll do with it, helping when they need it. In analogy to it Java is a dictator. It's enough to watch at exception handling mechanism which not like in dynamic languages when it's left to developer to decide wheather to catch it or not but forced by checked exceptions. Here Venkat recommends a book:<a href="http://www.amazon.com/Wisdom-Crowds-James-Surowiecki/dp/0385721706"> The Wisdom of Crowds by James Surowiecki</a>.</div>
<div>
* Be adaptive</div>
<div>
To fear of change leads to language stagnation</div>
<div>
* Complecency and arrogance kills</div>
<div>
As an example Venkat gave the time of Inks and Spanish conquistadors. Arrogant tribe emperor underestimated the little amount of Spanish soldiers, well armed in rifles and on horses, in comparison to greatly larger amount of his warriors but armed with spears that led his civilisation to death.</div>
<div>
Same in software, new powerful languages emerge. Arrogance leads to bad decisions. Language wars are pointless.</div>
<div>
Recommended book: <a href="http://www.amazon.com/Guns-Germs-Steel-Fates-Societies/dp/0393317552">Guns Guns and Steal</a></div>
<div>
* Revolutionize, not resist.</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<a href="http://2013.33degree.org/speaker/show/20" style="background-color: #f6f5f2; border: 0px; color: #a30e0b; font-family: 'Trebuchet MS', Arial, Helvetica, sans-serif; font-size: 11px; line-height: 18px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Hadi Hariri</a><span style="background-color: #f6f5f2; color: #333333; font-family: 'Trebuchet MS', Arial, Helvetica, sans-serif; font-size: 11px; line-height: 18px;"></span><br />
<h4 style="background-color: #f6f5f2; border: medium none; color: #b91e39; font-family: 'Trebuchet MS', Arial, Helvetica, sans-serif; font-size: 12px; line-height: 18px; margin: 4px 0px 0px; outline: 0px; padding: 0px; vertical-align: baseline;">
<a href="http://2013.33degree.org/talk/show/3" style="background-color: transparent; border: 0px; color: #a30e0b; margin: 0px; outline: 0px; padding: 0px; text-decoration: none; vertical-align: baseline;">Developers: Prima Donna's of the 21st Century</a></h4>
</div>
<div>
<br /></div>
<div>
Hadi works on JetBrains, is a Developer and Technical Evangelist.</div>
<div>
More about him on his page <a href="http://hadihariri.com/">hadihariri.com </a></div>
<div>
He spoke about different software development methodologies, how they try to be cure for everlasting problems like: scoping requirements, planning sprints, dealing with bugs. </div>
<div>
Numerous methodologies emerged like:<br />
<a href="http://www.scrum.org/">SCRUM</a><br />
<a href="http://en.wikipedia.org/wiki/Lean_software_development">Lean</a><br />
<a href="http://www.pomodorotechnique.com/">Pomodoro</a>, </div>
<div>
<a href="http://www.infoq.com/news/2012/06/scrumodoro">scrumodoro</a></div>
<div>
<a href="http://programming-motherfucker.com/">programmer motherfucker manifesto</a></div>
<div>
<a href="http://wilbloodworth.com/resume-driven-design/">CV driven design</a></div>
<div>
<a href="http://notonlyoo.org/">NOOO</a> (not only object oriented development)<br />
<br /></div>
<div>
Having all that rumour we're often loosing focus on the right thing.</div>
<div>
All about it is that not learning new methodologies and technologies or languages really matter but helping people. Innovation is about helping people, making their life easier. The talk is also on <a href="http://vimeo.com/43672296">vimeo</a></div>
<div>
<br /></div>
<div>
<a href="http://2013.33degree.org/speaker/show/47" style="background-color: #f6f5f2; border: 0px; color: #a30e0b; font-family: 'Trebuchet MS', Arial, Helvetica, sans-serif; font-size: 11px; line-height: 18px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Jakub Marchwicki</a><span style="background-color: #f6f5f2; color: #333333; font-family: 'Trebuchet MS', Arial, Helvetica, sans-serif; font-size: 11px; line-height: 18px;"></span><br />
<h4 style="background-color: #f6f5f2; border: medium none; color: #b91e39; font-family: 'Trebuchet MS', Arial, Helvetica, sans-serif; font-size: 12px; line-height: 18px; margin: 4px 0px 0px; outline: 0px; padding: 0px; vertical-align: baseline;">
<a href="http://2013.33degree.org/talk/show/103" style="background-color: transparent; border: 0px; color: #a30e0b; margin: 0px; outline: 0px; padding: 0px; text-decoration: none; vertical-align: baseline;">Open Data Hackathon</a></h4>
</div>
<div>
The hackaton was held along all 3 days of conference in the evenings. Actually it already started the evening before conference. During that time guys created a nice working thing that we can all watch <a href="http://openassets.info/openassets">here </a>and check code at github:</div>
<div>
<a href="https://github.com/kubamarchwicki/OpenAssets">https://github.com/kubamarchwicki/OpenAssets</a></div>
<div>
<br /></div>
<div>
<br /></div>
Marcin Piczkowskihttp://www.blogger.com/profile/05961375583331768059noreply@blogger.com0tag:blogger.com,1999:blog-2528216159805127790.post-50176386839105229622013-02-28T13:29:00.000-08:002013-02-28T13:29:04.467-08:00OneWebSQL competition<br />
Lately I'm spending most of the time on building my ego :))<br />
First since very long time I've even won sth<br />
<a href="http://onewebsql.com/konkurs-spring">http://onewebsql.com/konkurs-spring</a><br />
<a href="http://e-point.pl/co-nowego?news_id=1500144,rozstrzygniecie-konkursu-na-najlepsza-aplikacje-webowa">http://e-point.pl/co-nowego?news_id=1500144,rozstrzygniecie-konkursu-na-najlepsza-aplikacje-webowa</a><br />
<br />
My solution is available free on <a href="https://github.com/piczmar/onewebsql">github</a>. I must admit I would change a few things though, especially presentation layer - I would rewrite it in AngularJS.<br />
Marcin Piczkowskihttp://www.blogger.com/profile/05961375583331768059noreply@blogger.com2tag:blogger.com,1999:blog-2528216159805127790.post-27092730628996203522013-02-25T17:02:00.000-08:002013-02-25T17:02:14.782-08:00MongoDB for Java Developers - 10gen CourseThe <a href="https://education.10gen.com/courses/10gen/M101J/2013_Spring/about">course</a> has just started today.<br />
So far this week I gone through MongoDB installation, basic queries from mongo shell and Java application. I've also learned <a href="http://www.sparkjava.com/">Spark Micro Web Framework</a> and <a href="http://freemarker.sourceforge.net/">FreeMarket </a>templating engine.<br />
So far so good.. exercises were not to difficult and possible to go through in one night.<br />
<br />
I've setup github project for this course at <a href="https://github.com/piczmar/MongoDB4JavaDev/">https://github.com/piczmar/MongoDB4JavaDev/</a>Marcin Piczkowskihttp://www.blogger.com/profile/05961375583331768059noreply@blogger.com0tag:blogger.com,1999:blog-2528216159805127790.post-58244558839826932912013-01-06T16:08:00.002-08:002013-01-06T16:08:57.284-08:00Grails read-only domain class<br />
Grails does not provide simple mapping to mark domain object read-only, means so that dynamic find methods (find, get, list..) work OK but save/delete is forbidden. This is particularly useful for legacy databases.<br />
We can however provide desired behavior with low effort ourselved.<br />
I could think out at least 2 ways of doing so:<br />
1. listen on beforeXXX methods in domain class e.g.:<br />
<br />
class Demo {<br />
<br />
static constraints = {<br />
}<br />
String name<br />
<br />
transient beforeUpdate = {<br />
throw new RuntimeException('update not allowed')<br />
}<br />
}<br />
<br />
2. send error status from controler REST method that is not allowed, e.g.:<br />
<br />
<br />
def delete(Long id) {<br />
response.sendError(405)<br />
}<br />
<br />
If you just want to disable an attribute of a domain class from being editable in scaffolded view you can use constraint:<br />
<br />
class Demo {<br />
<br />
static constraints = {<br />
name(editable: false)<br />
}<br />
String name<br />
<div>
}</div>
<div>
<br /></div>
Marcin Piczkowskihttp://www.blogger.com/profile/05961375583331768059noreply@blogger.com1tag:blogger.com,1999:blog-2528216159805127790.post-87568158765090248572012-12-24T16:54:00.000-08:002012-12-24T17:39:22.526-08:00Groovy TipsHere are some productivity tips for Groovy development. Provided you have GROOVY_HOME/bin added to your path you can execute following commands:<br />
<br />
<ul>
<li>running Groovy shell</li>
</ul>
<div>
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;">groovish</span></div>
<div>
<br /></div>
<div>
<div>
<span style="background-color: black;"><span style="color: white;">Type 'help' or '\h' for help.</span></span></div>
<div>
<span style="background-color: black;"><span style="color: white;">-----------------------------------------------------------------------------------------------------------</span></span></div>
<div>
<span style="background-color: black;"><span style="color: white;">groovy:000></span></span></div>
</div>
<div>
you can e.g. type: </div>
<div>
</div>
<div>
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;">Sting.methods.each{println it.name }</span></div>
<div>
<br /></div>
<ul>
<li>running graphic console</li>
</ul>
<br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;">groovyConsole</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;"><br /></span>
<br />
<ul>
<li><span style="font-family: inherit;">running uncompiled Grovy on web server</span></li>
</ul>
<div>
<span style="font-family: inherit;">1. Add groovy.jar from </span>$GROOVY_HOME/embedded<span style="font-family: inherit;"> to server classpath (WEB-INF/lib)</span></div>
<br />
<br />
2. Add groovy.servlet.GroovyServlet to WEB-INF/web.xml.<br />
3. Place your Groovy scripts wherever you'd normally place your JSP files.<br />
4. Create hyperlinks to your Groovy scripts<br />
<br />
<br />
<ul>
<li>automatic imports</li>
</ul>
<div>
Groovy automatically imports:import packages:</div>
<div>
j<span style="font-family: Courier New, Courier, monospace; font-size: x-small;">ava.lang.*</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;">java.util.*</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;">java.net.*</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;">java.io.*</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;">java.math.BigInteger</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;">java.math.BigDecimal</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;">groovy.lang.*</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;">groovy.util.*</span><br />
<br />
<br />
<ul>
<li>method pointers</li>
</ul>
<div>
In Groovy you can do the following:</div>
<div>
<div>
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;">def shoppingList = []</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;">def add = shoppingList.&add</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;">def remove = shoppingList.&remove</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;">add "Milk"</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;">add "Bread"</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;">add "Beer"</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;">remove "Beer"</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;">add "Apple Juice"</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;">print shoppingList</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;"><br /></span>
<br />
<ul>
<li><span style="font-family: inherit;">operators</span></li>
</ul>
<div>
<span style="font-family: inherit;">The following are operators and corresponding methods:</span></div>
<div>
<div>
<table>
<tbody>
<tr><td><b>Operator</b></td><td><b>Method</b></td></tr>
<tr><td>a == b<br />
or<br />
a != b</td><td>a.equals(b)</td></tr>
<tr><td>a+b</td><td>a.plus(b)</td></tr>
<tr><td>a-b</td><td>a.minus(b)</td></tr>
<tr><td>a*b </td><td>a.multiply(b)</td></tr>
<tr><td>a/b</td><td> a.div(b)</td></tr>
<tr><td>a%b</td><td>a.mod(b)</td></tr>
<tr><td>a++<br />
or<br />
++a </td><td>a.next()</td></tr>
<tr><td>a--<br />
or<br />
--a </td><td>a.previous()</td></tr>
<tr><td>a&b</td><td>a.and(b)</td></tr>
<tr><td>a|b </td><td>a.or(b)</td></tr>
<tr><td>a[b]</td><td>a.getAt(b)</td></tr>
<tr><td>a[b] = c</td><td>a.putAt(b,c)</td></tr>
<tr><td>a << b </td><td>a.leftShift(b)</td></tr>
<tr><td>a >> b</td><td>a.rightShift(b)</td></tr>
<tr><td>a < b<br />
or<br />
a > b<br />
or<br />
a <= b<br />
or<br />
a >= b</td><td>a.compareTo(b)</td></tr>
</tbody></table>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
</div>
</div>
</div>
</div>
<div>
<br /></div>
<br />
<br />Marcin Piczkowskihttp://www.blogger.com/profile/05961375583331768059noreply@blogger.com0tag:blogger.com,1999:blog-2528216159805127790.post-27219974948486922892012-11-01T16:43:00.000-07:002012-11-01T16:43:38.859-07:00All these new fancy web pages..<br />
As a Java developer with long time experience I always found touching web pages a tiresome task. Messing up with all the HTML and JavaScript code, digging into CSS to make JSP render as expected was not an obvious thing. Still it is not. This is mainly because I never had enough time to understand CSS and JavaScript and I admit it was never priority number 1 knowing each web browser have its own specificity I just thought it' snot worth of trying. Better concentrate at Java word where most of the things is standardized and behaves as expected.<br />
<br />
This was until I started to work closely with SmartClient and Grails.<br />
Working closer with SmartClient library opened my eyes how much JavaScript evolved over the last years, how rapidly it develops and how amazing possibility it gives in comparison to what I met in legacy software in which it was just a little addition to all HTML rendered on server side. Now JavaScript is the place where all moves, flickers and rocks while server side is doing some business calculations not caring at all about front-end. It just takes data and returns data in desired format like JSON for instance.<br />
<br />
Seeing a great potential in JavaScript I decided to learn more about it. By change there was a training organized in Poznan, Poland titled 'JavaScritp for Java Developers'. Wow, I thought this is exactly what I need, so I subscribed and I was not mistaken. The 2-days training gave me a feel of how to write modern JavaScript pages using technologies like BackboneJs, RequireJs, UnderscodeJs. I even learned there are unit tests written for it using libraries analogical to JUnit in Java word. It looks all this new JavaScript is not that far from ideas I know from Java world.<br />
<br />
Still not sure if this is me who found JavaScript or JavaScipt found me, but today I came into another blog post that gave me a kick to learn more in this field.<br />
Article written in Polish can be found at <a href="http://mamstartup.pl/felietony/2882/jak-buduje-sie-strony-internetowe-w-2012-roku">http://mamstartup.pl/felietony/2882/jak-buduje-sie-strony-internetowe-w-2012-roku</a> and author's blog is <a href="http://ferrante.pl/">here</a>, also quite interesting.<br />
The author is pointing out many interesting tools used in modern web development.<br />
I hope to give them a try so I set up a project on <a href="https://github.com/piczmar/cssjs">github </a>where I plan to gather some demo code of my trials with it. For now there are some web scaling example with CSS available.<br />
<br />
I also found good designer's resources at <a href="http://www.smashingmagazine.com/">http://www.smashingmagazine.com/</a><br />
Some free e-books can be downloaded from <a href="https://shop.smashingmagazine.com/ebooks/?pk_campaign=smashing-magazine-ebooks-tab">here</a> but I've downloaded the pdf and copied it to my github.<br />
<br />
<br />
<br />
<div>
<br /></div>
Marcin Piczkowskihttp://www.blogger.com/profile/05961375583331768059noreply@blogger.com0tag:blogger.com,1999:blog-2528216159805127790.post-76827273637827281352012-09-01T04:39:00.001-07:002012-09-01T05:51:34.482-07:00My first meeting with ClosureI got inspired by video of life music hacking jam session <a href="http://www.youtube.com/watch?v=WXovdAEV_mI&hd=1">http://www.youtube.com/watch?v=WXovdAEV_mI&hd=1</a><br />
so that I wanted to try <a href="http://project-overtone.org/">Overtone</a> project myself.<br />
First you need to install Lein which is a kind of depency managet for Clojure.<br />
You can follow with instructions at <a href="https://github.com/technomancy/leiningen/#installation">https://github.com/technomancy/leiningen/#installation</a><br />
What I did on Windows was downloading lein.bat from <a href="https://raw.github.com/technomancy/leiningen/preview/bin/lein.bat">https://raw.github.com/technomancy/leiningen/preview/bin/lein.bat</a> and stand-alone jar from <a href="https://github.com/technomancy/leiningen/downloads">https://github.com/technomancy/leiningen/downloads</a><br />
Then I had to set env. variable LEIN_HOME to my local dir, e.g.: c:/tools/lein and put the stand-alone jar in<br />
c:/tools/lein/self-installs<br />
and add LEIN_HOME to PATH system variable so that lein.bat could be found globally in system.<br />
<br />
Then when I typed<br />
<blockquote class="tr_bq">
lein</blockquote>
in system console it downloaded missing Clojure dependencies and welcomed me with message:<br />
<br />
<br />
<blockquote>
Leiningen is a tool for working with Clojure projects.<br />
Several tasks are available:<br />
check Check syntax and warn on reflection.<br />
classpath Write the classpath of the current project to output-file.<br />
clean Remove all files from project's target-path.<br />
compile Compile Clojure source into .class files.<br />
deploy Build jar and deploy to remote repository.<br />
deps Show details about dependencies.<br />
do Higher-order task to perform other tasks in succession.<br />
help Display a list of tasks or help for a given task.<br />
install Install current project to the local repository.<br />
jar Package up all the project's files into a jar file.<br />
javac Compile Java source files.<br />
new Generate project scaffolding based on a template.<br />
plugin DEPRECATED. Please use the :user profile instead.<br />
pom Write a pom.xml file to disk for Maven interoperability.<br />
repl Start a repl session either with the current project or standalone.<br />
retest Run only the test namespaces which failed last time around.<br />
run Run the project's -main function.<br />
search Search remote maven repositories for matching jars.<br />
show-profiles List all available profiles or display one if given an argument.<br />
test Run the project's tests.<br />
trampoline Run a task without nesting the project's JVM inside Leiningen's.<br />
uberjar Package up the project files and all dependencies into a jar file.<br />
upgrade Upgrade Leiningen to specified version or latest stable.<br />
version Print version for Leiningen and the current JVM.<br />
with-profile Apply the given task with the profile(s) specified.<br />
Run lein help $TASK for details.<br />
See also: readme, faq, tutorial, news, sample, profiles,<br />
deploying and copying.</blockquote>
<br />
Now I can start playing with Overtone...<br />
Then you download sources from github:<br />
<br />
<pre style="background-color: #f8f8f8; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204, 204, 204); color: #333333; font-family: Consolas, 'Liberation Mono', Courier, monospace; font-size: 13px; line-height: 19px; margin-bottom: 15px; margin-top: 15px; overflow: auto; padding: 6px 10px;">git clone git://github.com/overtone/overtone.git</pre>
<br />
and build project with<br />
<br />
<pre style="background-color: #f8f8f8; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204, 204, 204); color: #333333; font-family: Consolas, 'Liberation Mono', Courier, monospace; font-size: 13px; line-height: 19px; margin-bottom: 15px; margin-top: 15px; overflow: auto; padding: 6px 10px;">lein deps</pre>
<br />
Now launch REPL and follow according to steps at <a href="https://github.com/overtone/overtone/wiki/Overtone-on-the-Edge%21">Overtone github:</a><br />
<br />
<br />
<div style="background-color: white; border: 0px; color: #333333; font-family: Helvetica, arial, freesans, clean, sans-serif; font-size: 14px; line-height: 22px; margin-bottom: 15px; padding: 0px;">
The quickest way to get started is to launch a clojure repl using lein. In the overtone project directory....</div>
<div class="highlight" style="background-color: white; border: 0px; color: #333333; font-family: Helvetica, arial, freesans, clean, sans-serif; font-size: 14px; line-height: 22px; margin: 0px; padding: 0px;">
<pre style="background-color: #f8f8f8; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204, 204, 204); font-family: Consolas, 'Liberation Mono', Courier, monospace; font-size: 13px; line-height: 19px; margin-bottom: 15px; margin-top: 15px; overflow: auto; padding: 6px 10px;"><span class="nv" style="border: 0px; color: teal; margin: 0px; padding: 0px;">$ </span>lein repl
</pre>
</div>
<div style="background-color: white; border: 0px; color: #333333; font-family: Helvetica, arial, freesans, clean, sans-serif; font-size: 14px; line-height: 22px; margin-bottom: 15px; margin-top: 15px; padding: 0px;">
Then make some noise :)</div>
<div class="highlight" style="background-color: white; border: 0px; color: #333333; font-family: Helvetica, arial, freesans, clean, sans-serif; font-size: 14px; line-height: 22px; margin: 0px; padding: 0px;">
<pre style="background-color: #f8f8f8; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204, 204, 204); font-family: Consolas, 'Liberation Mono', Courier, monospace; font-size: 13px; line-height: 19px; margin-bottom: 15px; margin-top: 15px; overflow: auto; padding: 6px 10px;"><span class="nv" style="border: 0px; color: teal; margin: 0px; padding: 0px;">user></span> <span class="p" style="border: 0px; margin: 0px; padding: 0px;">(</span><span class="nf" style="border: 0px; color: #990000; font-weight: bold; margin: 0px; padding: 0px;">use</span> <span class="ss" style="border: 0px; color: #990073; margin: 0px; padding: 0px;">'overtone.live</span><span class="p" style="border: 0px; margin: 0px; padding: 0px;">)</span>
<span class="nv" style="border: 0px; color: teal; margin: 0px; padding: 0px;">...wait</span> <span class="nv" style="border: 0px; color: teal; margin: 0px; padding: 0px;">a</span> <span class="nv" style="border: 0px; color: teal; margin: 0px; padding: 0px;">bit...</span>
<span class="nv" style="border: 0px; color: teal; margin: 0px; padding: 0px;">user></span> <span class="p" style="border: 0px; margin: 0px; padding: 0px;">(</span><span class="nf" style="border: 0px; color: #990000; font-weight: bold; margin: 0px; padding: 0px;">demo</span> <span class="p" style="border: 0px; margin: 0px; padding: 0px;">(</span><span class="nf" style="border: 0px; color: #990000; font-weight: bold; margin: 0px; padding: 0px;">sin-osc</span><span class="p" style="border: 0px; margin: 0px; padding: 0px;">))</span>
</pre>
</div>
<div style="background-color: white; border: 0px; color: #333333; font-family: Helvetica, arial, freesans, clean, sans-serif; font-size: 14px; line-height: 22px; margin-top: 15px; padding: 0px;">
For a better experience try <a class="internal present" href="https://github.com/overtone/overtone/wiki/Overtone-in-Emacs" style="border: 0px; color: #4183c4; margin: 0px; padding: 0px; text-decoration: none;">Overtone in emacs</a> or <a class="internal present" href="https://github.com/overtone/overtone/wiki/Overtone-in-vim" style="border: 0px; color: #4183c4; margin: 0px; padding: 0px; text-decoration: none;">Overtone in vim</a>.</div>
<div style="background-color: white; border: 0px; margin-top: 15px; padding: 0px;">
Unfortunately that ain't that easy and first command: <span class="p" style="border: 0px; color: #333333; font-family: Consolas, 'Liberation Mono', Courier, monospace; font-size: 13px; line-height: 19px; margin: 0px; padding: 0px;">(</span><span class="nf" style="border: 0px; color: #990000; font-family: Consolas, 'Liberation Mono', Courier, monospace; font-size: 13px; font-weight: bold; line-height: 19px; margin: 0px; padding: 0px;">use</span><span style="background-color: #f8f8f8; color: #333333; font-family: Consolas, 'Liberation Mono', Courier, monospace; font-size: 13px; line-height: 19px;"> </span><span class="ss" style="border: 0px; color: #990073; font-family: Consolas, 'Liberation Mono', Courier, monospace; font-size: 13px; line-height: 19px; margin: 0px; padding: 0px;">'overtone.live</span><span class="p" style="border: 0px; color: #333333; font-family: Consolas, 'Liberation Mono', Courier, monospace; font-size: 13px; line-height: 19px; margin: 0px; padding: 0px;">) </span>brought me to error message:</div>
<div style="background-color: white; border: 0px; margin-top: 15px; padding: 0px;">
</div>
<div style="border: 0px; margin-top: 15px; padding: 0px;">
--> Loading Overtone...</div>
<div style="border: 0px; margin-top: 15px; padding: 0px;">
UnsatisfiedLinkError Unable to load library 'scsynth': Nie mo┐na odnalečŠ okreťlonego modu│u.</div>
<div style="border: 0px; margin-top: 15px; padding: 0px;">
com.sun.jna.NativeLibrary.loadLibrary (NativeLibrary.java:169)</div>
<div style="border: 0px; margin-top: 15px; padding: 0px;">
I wish you were more lucky, I will come back to resolve it in a while..stay tuned...<br />
<br />
<br />
<br />
Soo.. after a while I'm back with a different approach.<br />
I followed the following steps:<br />
From command line execute:<br />
<blockquote class="tr_bq">
lein new tutorial</blockquote>
<blockquote class="tr_bq">
cd tutorial </blockquote>
<br />
edit project.clj generated in folder tutorial and add dependency:<br />
<br />
<pre style="background-color: #f8f8f8; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204, 204, 204); color: #333333; font-family: Consolas, 'Liberation Mono', Courier, monospace; font-size: 13px; line-height: 19px; margin-bottom: 15px; margin-top: 15px; overflow: auto; padding: 6px 10px;"><span class="p" style="border: 0px; margin: 0px; padding: 0px;">(</span><span class="kd" style="border: 0px; font-weight: bold; margin: 0px; padding: 0px;">defproject </span><span class="nv" style="border: 0px; color: teal; margin: 0px; padding: 0px;">tutorial</span> <span class="s" style="border: 0px; color: #dd1144; margin: 0px; padding: 0px;">"1.0"</span>
<span class="ss" style="border: 0px; color: #990073; margin: 0px; padding: 0px;">:dependencies</span> <span class="p" style="border: 0px; margin: 0px; padding: 0px;">[</span> <span class="p" style="border: 0px; margin: 0px; padding: 0px;">[</span><span class="nv" style="border: 0px; color: teal; margin: 0px; padding: 0px;">org.clojure/clojure</span> <span class="s" style="border: 0px; color: #dd1144; margin: 0px; padding: 0px;">"1.3.0"</span><span class="p" style="border: 0px; margin: 0px; padding: 0px;">]</span>
<span class="p" style="border: 0px; margin: 0px; padding: 0px;">[</span><span class="nv" style="border: 0px; color: teal; margin: 0px; padding: 0px;">overtone</span> <span class="s" style="border: 0px; color: #dd1144; margin: 0px; padding: 0px;">"0.7.1"</span><span class="p" style="border: 0px; margin: 0px; padding: 0px;">]</span> <span class="p" style="border: 0px; margin: 0px; padding: 0px;">])</span></pre>
<br />
Then type:<br />
<blockquote class="tr_bq">
lein deps</blockquote>
Install SuperCollider (<a href="http://sourceforge.net/projects/supercollider/files/Windows/">http://sourceforge.net/projects/supercollider/files/Windows/</a>) - during installation enter installation folder name as SuperCollider, without version number. I'm not sure if otherwise Overtune will locate scsynth.exe correctly.<br />
<br />
Start REPL (<a href="https://github.com/overtone/overtone/wiki/Starting-a-REPL">https://github.com/overtone/overtone/wiki/Starting-a-REPL</a>)<br />
<br />
<blockquote class="tr_bq">
lein repl</blockquote>
Type commands:<br />
<br />
<pre style="background-color: #f8f8f8; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204, 204, 204); color: #333333; font-family: Consolas, 'Liberation Mono', Courier, monospace; font-size: 13px; line-height: 19px; margin-bottom: 15px; margin-top: 15px; overflow: auto; padding: 6px 10px;"><code style="background-color: transparent; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: none; font-family: Consolas, 'Liberation Mono', Courier, monospace; font-size: 12px; margin: 0px; padding: 0px;">(use 'overtone.core)</code></pre>
<pre style="background-color: #f8f8f8; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204, 204, 204); color: #333333; font-family: Consolas, 'Liberation Mono', Courier, monospace; font-size: 13px; line-height: 19px; margin-bottom: 15px; margin-top: 15px; overflow: auto; padding: 6px 10px;"><code style="background-color: transparent; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: none; font-family: Consolas, 'Liberation Mono', Courier, monospace; font-size: 12px; margin: 0px; padding: 0px;"><span style="white-space: nowrap;">(boot-external-server)</span></code></pre>
<span style="background-color: #f8f8f8; color: #333333; font-family: Consolas, 'Liberation Mono', Courier, monospace; font-size: 12px; line-height: 19px; white-space: nowrap;"><br /></span>
<span style="background-color: #f8f8f8;">and start playing...</span><span style="background-color: #f8f8f8; color: #333333; font-family: Consolas, 'Liberation Mono', Courier, monospace; font-size: 12px; line-height: 19px; white-space: nowrap;"> (</span><a href="https://github.com/overtone/overtone/wiki/Getting-Started">https://github.com/overtone/overtone/wiki/Getting-Started</a><span style="background-color: #f8f8f8; color: #333333; font-family: Consolas, 'Liberation Mono', Courier, monospace; font-size: 12px; line-height: 19px; white-space: nowrap;">)</span><br />
<span style="background-color: #f8f8f8; color: #333333; font-family: Consolas, 'Liberation Mono', Courier, monospace; font-size: 12px; line-height: 19px; white-space: nowrap;"><br /></span></div>
Marcin Piczkowskihttp://www.blogger.com/profile/05961375583331768059noreply@blogger.com0tag:blogger.com,1999:blog-2528216159805127790.post-47946997016014164222012-05-05T03:33:00.001-07:002012-05-05T03:33:51.274-07:00JSON editor for EclipseSimple and handful editor from
<a href="http://sourceforge.net/projects/eclipsejsonedit/">http://sourceforge.net/projects/eclipsejsonedit/</a> , however installation was not that obvious. 'Install from zip file' did not work for me. It was sufficient to unzip content and copy 'plugins' and 'features' content to 'plugins' and 'features' folders in eclipse installation. Works for me :) Checked on Eclipse Inigo and Spring Source Tools Suite.<div>
<br /></div>Marcin Piczkowskihttp://www.blogger.com/profile/05961375583331768059noreply@blogger.com1