<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-9120308369666896691</id><updated>2024-09-01T09:51:05.100+03:00</updated><category term="python"/><category term="android"/><category term="coding"/><category term="database"/><category term="django"/><category term="sqlite"/><category term="DRY"/><category term="REST"/><category term="bash"/><category term="code"/><category term="linux"/><category term="ormlite"/><category term="rest protocol"/><category term="restful"/><category term="tastypie"/><category term="webservices"/><category term="ACID"/><category term="IDE"/><category term="apple"/><category term="applications"/><category term="apps"/><category term="development"/><category term="emacs"/><category term="experience"/><category term="factories"/><category term="factory"/><category term="factory boy"/><category term="fixture"/><category term="fixtures"/><category term="flash"/><category term="framework"/><category term="git"/><category term="grep"/><category term="ls"/><category term="mac"/><category term="nap"/><category term="pep8"/><category term="problem"/><category term="pycharm"/><category term="recipe"/><category term="shell"/><category term="test"/><category term="testcase"/><category term="transactions"/><category term="unittest"/><category term="video"/><category term="web"/><title type='text'>The codachi</title><subtitle type='html'>Encounters in Coding and other cool stuff</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://thecodachi.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9120308369666896691/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://thecodachi.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/9120308369666896691/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>30</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-9120308369666896691.post-4635810418070120699</id><published>2023-03-07T15:43:00.002+03:00</published><updated>2023-03-07T15:43:54.935+03:00</updated><title type='text'>How I Used a Buck Converter to Fix a Voltage Mismatch in My Solar Power Project</title><content type='html'>&lt;p&gt;&lt;span style=&quot;background-color: rgba(255, 255, 255, 0.6); color: #111111; font-family: inherit; font-size: 16px;&quot;&gt;I recently bought a DFRobot Solar Power Manager 5V, which is a small and efficient solar power management module designed for 5V solar panels. It can charge a 3.7V Li-ion battery and provide 5V/1A regulated output for various devices such as Arduino, Raspberry Pi, sensors, etc.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;background-color: rgba(255, 255, 255, 0.6); color: #111111; font-size: 16px; font-variation-settings: var(--cib-type-body2-font-variation-settings); line-height: var(--cib-type-body2-line-height); margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 10px !important; padding: 0px; user-select: text; word-break: break-word;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjS22COD0nue6niXgWMm_Lo0U6yS2FinCgODXl5Zmp0DWAoHmoCkCNdqGPgVuUiLsOEKKw0qSoZJaZ6p_tw609Y6ePzzkZ3C5Yi4hk78G03SIQ288jQ4VmkP6eMWUuHOSHCP08FaolIoDhoUHNPBlcyZyJIpj1eon5VUpvxOijxUEn0Uog6VmvdIH8_Yw/s4032/IMG_2328.JPG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;3024&quot; data-original-width=&quot;4032&quot; height=&quot;240&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjS22COD0nue6niXgWMm_Lo0U6yS2FinCgODXl5Zmp0DWAoHmoCkCNdqGPgVuUiLsOEKKw0qSoZJaZ6p_tw609Y6ePzzkZ3C5Yi4hk78G03SIQ288jQ4VmkP6eMWUuHOSHCP08FaolIoDhoUHNPBlcyZyJIpj1eon5VUpvxOijxUEn0Uog6VmvdIH8_Yw/s320/IMG_2328.JPG&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;background-color: rgba(255, 255, 255, 0.6); color: #111111; font-size: 16px; font-variation-settings: var(--cib-type-body2-font-variation-settings); line-height: var(--cib-type-body2-line-height); margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 10px !important; padding: 0px; user-select: text; word-break: break-word;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;However, I ran into a problem when I tried to connect my 9V solar panel to the module. The module has a maximum input voltage of 6V, so it wasn&#39;t compatible and could destroy the Solar Power Manager.I needed a way to step down the voltage from 9V to 5V without losing too much power.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;background-color: rgba(255, 255, 255, 0.6); color: #111111; font-size: 16px; font-variation-settings: var(--cib-type-body2-font-variation-settings); line-height: var(--cib-type-body2-line-height); margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 10px !important; padding: 0px; user-select: text; word-break: break-word;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;That’s when I decided to use a buck converter, which is a type of DC-to-DC converter that can reduce the input voltage while increasing the output current. A buck converter consists of a switch, a diode, an inductor, and a capacitor.&amp;nbsp;By switching the input voltage on and off at a high frequency, the buck converter can control the average voltage across the load.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;background-color: rgba(255, 255, 255, 0.6); color: #111111; font-size: 16px; font-variation-settings: var(--cib-type-body2-font-variation-settings); line-height: var(--cib-type-body2-line-height); margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 10px !important; padding: 0px; user-select: text; word-break: break-word;&quot;&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjHTIXam7oyxNViFTiao1YswjL5U6S6oT5GSRblJ8aqIIkBkOy9GFu5A9s2LpX7KNP3RavUQu4fO-vVrNaedURKHdH81gCTvDhPpwEpknJmi0U1plo5pTn09o2KWImYBtoxLDsWWIeLoRZZMkdpOgYa1Xwq66kfkV9He3CKeJPulwVRsRsu9bh1QiYjmQ/s4032/IMG_2330.JPG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;3024&quot; data-original-width=&quot;4032&quot; height=&quot;240&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjHTIXam7oyxNViFTiao1YswjL5U6S6oT5GSRblJ8aqIIkBkOy9GFu5A9s2LpX7KNP3RavUQu4fO-vVrNaedURKHdH81gCTvDhPpwEpknJmi0U1plo5pTn09o2KWImYBtoxLDsWWIeLoRZZMkdpOgYa1Xwq66kfkV9He3CKeJPulwVRsRsu9bh1QiYjmQ/s320/IMG_2330.JPG&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;background-color: rgba(255, 255, 255, 0.6); color: #111111; font-size: 16px; font-variation-settings: var(--cib-type-body2-font-variation-settings); line-height: var(--cib-type-body2-line-height); margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 10px !important; padding: 0px; user-select: text; word-break: break-word;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;I bought a buck converter module that can handle up to 36V input and output 1.25V to 32V with a maximum current of 3A. I adjusted the potentiometer on the module to get a 5V output and connected it between the solar panel and the solar power manager. I also added a multimeter to measure the input and output voltages and currents.&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiOX_k1hQuW1vqYKRyOIdi3xqhcU-y2KEJIvrcNFXXv30zTBRsBt6EhmAu0xogDVhdnt3i8hi8RLWd1IJVuUN4qrhaTetwJz9kfVyWOUqt08VGGLOGqdM8Ii4sESvNjQX60bcpOuy0RVj5-h0VtNuJNrrPpi6AdCwavNIwviSKdrE0pKripvwPG_Kf5CA/s4032/IMG_2331.JPG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;3024&quot; data-original-width=&quot;4032&quot; height=&quot;240&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiOX_k1hQuW1vqYKRyOIdi3xqhcU-y2KEJIvrcNFXXv30zTBRsBt6EhmAu0xogDVhdnt3i8hi8RLWd1IJVuUN4qrhaTetwJz9kfVyWOUqt08VGGLOGqdM8Ii4sESvNjQX60bcpOuy0RVj5-h0VtNuJNrrPpi6AdCwavNIwviSKdrE0pKripvwPG_Kf5CA/s320/IMG_2331.JPG&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;background-color: rgba(255, 255, 255, 0.6); color: #111111; font-size: 16px; font-variation-settings: var(--cib-type-body2-font-variation-settings); line-height: var(--cib-type-body2-line-height); margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 10px !important; padding: 0px; user-select: text; word-break: break-word;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;The buck converter worked like a charm. It successfully reduced the 9V input to 5V output with a high efficiency of about 90%. The solar power manager was able to charge the battery and power the load without any issues. I was very happy with the result and learned a lot about buck converters and solar power management.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;background-color: rgba(255, 255, 255, 0.6); color: #111111; font-size: 16px; font-variation-settings: var(--cib-type-body2-font-variation-settings); line-height: var(--cib-type-body2-line-height); margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 10px !important; padding: 0px; user-select: text; word-break: break-word;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Here are some pictures of my setup:&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;background-color: rgba(255, 255, 255, 0.6); color: #111111; font-size: 16px; font-variation-settings: var(--cib-type-body2-font-variation-settings); line-height: var(--cib-type-body2-line-height); margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 10px !important; padding: 0px; user-select: text; word-break: break-word;&quot;&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;background-color: rgba(255, 255, 255, 0.6); color: #111111; font-size: 16px; font-variation-settings: var(--cib-type-body2-font-variation-settings); line-height: var(--cib-type-body2-line-height); margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 10px !important; padding: 0px; user-select: text; word-break: break-word;&quot;&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjDzxjJJ7jLpxxWohL2AKfUkFaCx_3prFjVZqBkMhsEM9e_eXwWD_YeMj8Oqzr645f051wmxmQZappuh9q9baFdBXUe-JCo4-5Br0olYuIh161FA-w9M6kUpA4QCev4Gb933ZicFSGaSQ5yDgApi69DMNyXwarMBAMMMbQaBVcqmPWFoUJHoO7l_5iSg/s4032/IMG_2332.JPG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;3024&quot; data-original-width=&quot;4032&quot; height=&quot;240&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjDzxjJJ7jLpxxWohL2AKfUkFaCx_3prFjVZqBkMhsEM9e_eXwWD_YeMj8Oqzr645f051wmxmQZappuh9q9baFdBXUe-JCo4-5Br0olYuIh161FA-w9M6kUpA4QCev4Gb933ZicFSGaSQ5yDgApi69DMNyXwarMBAMMMbQaBVcqmPWFoUJHoO7l_5iSg/s320/IMG_2332.JPG&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9e9yNxu-ErUGj7K4_aWnnEQvCVV9eesEqXL8ZcMd-FDxdeqPTl6jahiqeBQib-MKpvT-Seqr7nLy_XNSBo1u8AMxnNdWrcXqRLxuGXG13O8_FvTQyMuqdxXEBCP1CykRmsjcWQyeso0cQnnmwW5mWYe_baH5Ei6U0NQUJQFxcXlWw84FRh8I4vkkAiw/s4032/IMG_2329.JPG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;3024&quot; data-original-width=&quot;4032&quot; height=&quot;240&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9e9yNxu-ErUGj7K4_aWnnEQvCVV9eesEqXL8ZcMd-FDxdeqPTl6jahiqeBQib-MKpvT-Seqr7nLy_XNSBo1u8AMxnNdWrcXqRLxuGXG13O8_FvTQyMuqdxXEBCP1CykRmsjcWQyeso0cQnnmwW5mWYe_baH5Ei6U0NQUJQFxcXlWw84FRh8I4vkkAiw/s320/IMG_2329.JPG&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSGt8x6f5Nr6gCOjpoYfVCXU8gkqHBOb0iOF5Wf3DRz0Q6tbLc-BU0y6l78AHA_3rB5nCVbyrfJrSox5HdUwg4-NQuoIUnNrr-3pVJV-Wh0LJBPj3TE7lKtlExPJO_ytiagyXYWNEc_zciN2yodlUpwysEluTPNX5IyUW2aKoWx5UqMt4MFdoUFC9jnw/s4032/IMG_2333.JPG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;3024&quot; data-original-width=&quot;4032&quot; height=&quot;240&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSGt8x6f5Nr6gCOjpoYfVCXU8gkqHBOb0iOF5Wf3DRz0Q6tbLc-BU0y6l78AHA_3rB5nCVbyrfJrSox5HdUwg4-NQuoIUnNrr-3pVJV-Wh0LJBPj3TE7lKtlExPJO_ytiagyXYWNEc_zciN2yodlUpwysEluTPNX5IyUW2aKoWx5UqMt4MFdoUFC9jnw/s320/IMG_2333.JPG&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;I hope you enjoyed reading this blog post and found it useful. If you have any questions or comments, please feel free to leave them b&lt;/span&gt;elow. Thanks for reading!&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecodachi.blogspot.com/feeds/4635810418070120699/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://thecodachi.blogspot.com/2023/03/how-i-used-buck-converter-to-fix.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9120308369666896691/posts/default/4635810418070120699'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9120308369666896691/posts/default/4635810418070120699'/><link rel='alternate' type='text/html' href='http://thecodachi.blogspot.com/2023/03/how-i-used-buck-converter-to-fix.html' title='How I Used a Buck Converter to Fix a Voltage Mismatch in My Solar Power Project'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjS22COD0nue6niXgWMm_Lo0U6yS2FinCgODXl5Zmp0DWAoHmoCkCNdqGPgVuUiLsOEKKw0qSoZJaZ6p_tw609Y6ePzzkZ3C5Yi4hk78G03SIQ288jQ4VmkP6eMWUuHOSHCP08FaolIoDhoUHNPBlcyZyJIpj1eon5VUpvxOijxUEn0Uog6VmvdIH8_Yw/s72-c/IMG_2328.JPG" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9120308369666896691.post-479397655496386225</id><published>2023-03-05T15:45:00.000+03:00</published><updated>2023-03-05T15:45:00.910+03:00</updated><title type='text'>Why You Should Ditch Your Trouser Pockets And Get A Waist Pouch</title><content type='html'>&lt;p style=&quot;background-color: rgba(255, 255, 255, 0.6); color: #111111; font-family: -apple-system, Roboto, SegoeUI, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;Meiryo UI&amp;quot;, Meiryo, &amp;quot;Arial Unicode MS&amp;quot;, sans-serif; font-size: 16px; font-variation-settings: var(--cib-type-body2-font-variation-settings); line-height: var(--cib-type-body2-line-height); margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 10px !important; padding: 0px; user-select: text; word-break: break-word;&quot;&gt;I used to put my phone, keys, wallet, and other items in my trouser pockets all the time. I thought it was convenient and easy. But then I realized how bad it was for me and my trousers. Not only did it ruin my trousers by stretching or tearing them, but it also could cause health problems such as back pain, sciatica, or injury. That’s when I decided to ditch my trouser pockets and get a waist pouch instead.&lt;/p&gt;&lt;p style=&quot;background-color: rgba(255, 255, 255, 0.6); color: #111111; font-family: -apple-system, Roboto, SegoeUI, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;Meiryo UI&amp;quot;, Meiryo, &amp;quot;Arial Unicode MS&amp;quot;, sans-serif; font-size: 16px; font-variation-settings: var(--cib-type-body2-font-variation-settings); line-height: var(--cib-type-body2-line-height); margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 10px !important; padding: 0px; user-select: text; word-break: break-word;&quot;&gt;A waist pouch is a small bag that is worn around the waist to carry essentials. It’s useful for running, traveling, or everyday use. Some of the benefits of a waist pouch are:&lt;/p&gt;&lt;ul style=&quot;background-color: rgba(255, 255, 255, 0.6); color: #111111; display: flex; flex-direction: column; font-family: -apple-system, Roboto, SegoeUI, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;Meiryo UI&amp;quot;, Meiryo, &amp;quot;Arial Unicode MS&amp;quot;, sans-serif; font-size: 16px; gap: 10px; margin: 0px; padding-left: 24px;&quot;&gt;&lt;li&gt;It prevents back pain and sciatica caused by sitting on a bulky wallet in back pocket.&amp;nbsp;According to Healthline, this can compress the sciatic nerve and cause pain or numbness in the lower body.&amp;nbsp;&lt;a class=&quot;tooltip-target&quot; data-citationid=&quot;07f2f649-02e5-e065-8b3f-4e1b2e65a8ed-9-group&quot; h=&quot;ID=SERP,5025.1&quot; href=&quot;https://uppercervicalawareness.com/how-sitting-wallet-can-cause-sciatica/&quot; style=&quot;border-bottom: 2px solid transparent; position: relative; text-decoration-color: var(--cib-color-neutral-foreground-hint-light); text-decoration-style: dotted; text-underline-offset: 3px;&quot; target=&quot;_blank&quot;&gt;This condition is also known as “wallet neuritis” or &quot;hip pocket syndrome&quot;&lt;/a&gt;&lt;a aria-label=&quot;How Sitting on Your Wallet Can Cause Sciatica - Upper Cervical Awareness&quot; class=&quot;ac-anchor sup-target&quot; data-citationid=&quot;07f2f649-02e5-e065-8b3f-4e1b2e65a8ed-9&quot; h=&quot;ID=SERP,5025.1&quot; href=&quot;https://uppercervicalawareness.com/how-sitting-wallet-can-cause-sciatica/&quot; style=&quot;position: relative; text-decoration-line: none;&quot; target=&quot;_blank&quot;&gt;&lt;span style=&quot;align-items: center; background: var(--cib-color-brand-tertiary-background); border-radius: 3px; color: var(--cib-color-brand-tertiary-foreground); display: inline-flex; font-size: 10px; font-weight: 600; height: 14px; justify-content: center; margin: 0px 2px; min-width: 14px; outline: transparent solid 1px; position: relative; text-decoration-color: transparent; top: -1px; vertical-align: top;&quot;&gt;2&lt;/span&gt;&lt;/a&gt;.&amp;nbsp;&lt;a class=&quot;tooltip-target&quot; data-citationid=&quot;07f2f649-02e5-e065-8b3f-4e1b2e65a8ed-11-group&quot; h=&quot;ID=SERP,5025.1&quot; href=&quot;https://bing.com/search?q=back+pain+sciatica+wallet&quot; style=&quot;border-bottom: 2px solid transparent; position: relative; text-decoration-color: var(--cib-color-neutral-foreground-hint-light); text-decoration-style: dotted; text-underline-offset: 3px;&quot; target=&quot;_blank&quot;&gt;Sciatica can affect your quality of life and limit your mobility if left untreated&lt;/a&gt;&lt;a aria-label=&quot;&quot; class=&quot;ac-anchor sup-target&quot; data-citationid=&quot;07f2f649-02e5-e065-8b3f-4e1b2e65a8ed-11&quot; h=&quot;ID=SERP,5025.1&quot; href=&quot;https://bing.com/search?q=back+pain+sciatica+wallet&quot; style=&quot;position: relative; text-decoration-line: none;&quot; target=&quot;_blank&quot;&gt;&lt;span style=&quot;align-items: center; background: var(--cib-color-brand-tertiary-background); border-radius: 3px; color: var(--cib-color-brand-tertiary-foreground); display: inline-flex; font-size: 10px; font-weight: 600; height: 14px; justify-content: center; margin: 0px 2px; min-width: 14px; outline: transparent solid 1px; position: relative; text-decoration-color: transparent; top: -1px; vertical-align: top;&quot;&gt;1&lt;/span&gt;&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;It avoids damaging trousers by stretching or tearing them with stuff in the pockets.&amp;nbsp;&lt;a class=&quot;tooltip-target&quot; data-citationid=&quot;07f2f649-02e5-e065-8b3f-4e1b2e65a8ed-14-group&quot; h=&quot;ID=SERP,5025.1&quot; href=&quot;https://bioflex.pk/blog/muskoloskeletal-system/wallet-sciatica-symptoms-causes-and-treatment/&quot; style=&quot;border-bottom: 2px solid transparent; position: relative; text-decoration-color: var(--cib-color-neutral-foreground-hint-light); text-decoration-style: dotted; text-underline-offset: 3px;&quot; target=&quot;_blank&quot;&gt;According to Maximilian Mogg&lt;/a&gt;&lt;a aria-label=&quot;Wallet Sciatica: Symptoms, Causes, and Treatment&quot; class=&quot;ac-anchor sup-target&quot; data-citationid=&quot;07f2f649-02e5-e065-8b3f-4e1b2e65a8ed-14&quot; h=&quot;ID=SERP,5025.1&quot; href=&quot;https://bioflex.pk/blog/muskoloskeletal-system/wallet-sciatica-symptoms-causes-and-treatment/&quot; style=&quot;position: relative; text-decoration-line: none;&quot; target=&quot;_blank&quot;&gt;&lt;span style=&quot;align-items: center; background: var(--cib-color-brand-tertiary-background); border-radius: 3px; color: var(--cib-color-brand-tertiary-foreground); display: inline-flex; font-size: 10px; font-weight: 600; height: 14px; justify-content: center; margin: 0px 2px; min-width: 14px; outline: transparent solid 1px; position: relative; text-decoration-color: transparent; top: -1px; vertical-align: top;&quot;&gt;3&lt;/span&gt;&lt;/a&gt;, a tailor and style expert, one should not use the back pockets on trousers for anything as they will look awful with bulging items in them.&lt;/li&gt;&lt;li&gt;It reduces the risk of losing or forgetting my belongings by keeping them close to my body. Wearing a waist pack keeps my essentials secure while I’m running. I don’t have to worry about dropping them or leaving them behind.&lt;/li&gt;&lt;/ul&gt;&lt;p style=&quot;background-color: rgba(255, 255, 255, 0.6); color: #111111; font-family: -apple-system, Roboto, SegoeUI, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;Meiryo UI&amp;quot;, Meiryo, &amp;quot;Arial Unicode MS&amp;quot;, sans-serif; font-size: 16px; font-variation-settings: var(--cib-type-body2-font-variation-settings); line-height: var(--cib-type-body2-line-height); margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 10px !important; padding: 0px; user-select: text; word-break: break-word;&quot;&gt;A waist pouch is not only practical but also stylish. I can find many designs and colors that suit my taste and outfit. I can also adjust it to fit comfortably around my waist.&lt;/p&gt;&lt;p style=&quot;background-color: rgba(255, 255, 255, 0.6); color: #111111; font-family: -apple-system, Roboto, SegoeUI, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;Meiryo UI&amp;quot;, Meiryo, &amp;quot;Arial Unicode MS&amp;quot;, sans-serif; font-size: 16px; font-variation-settings: var(--cib-type-body2-font-variation-settings); line-height: var(--cib-type-body2-line-height); margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 10px !important; padding: 0px; user-select: text; word-break: break-word;&quot;&gt;So what are you waiting for? Ditch your trouser pockets and get a waist pouch today! You will feel more comfortable, confident, and fashionable.&lt;/p&gt;&lt;p style=&quot;background-color: rgba(255, 255, 255, 0.6); color: #111111; font-family: -apple-system, Roboto, SegoeUI, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;Meiryo UI&amp;quot;, Meiryo, &amp;quot;Arial Unicode MS&amp;quot;, sans-serif; font-size: 16px; font-variation-settings: var(--cib-type-body2-font-variation-settings); line-height: var(--cib-type-body2-line-height); margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 10px !important; padding: 0px; user-select: text; word-break: break-word;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;background-color: rgba(255, 255, 255, 0.6); color: #111111; font-family: -apple-system, Roboto, SegoeUI, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;Meiryo UI&amp;quot;, Meiryo, &amp;quot;Arial Unicode MS&amp;quot;, sans-serif; font-size: 16px; font-variation-settings: var(--cib-type-body2-font-variation-settings); line-height: var(--cib-type-body2-line-height); margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 10px !important; padding: 0px; user-select: text; word-break: break-word;&quot;&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEh8tkws28bhjC68HMePyeveizUdkatTLRjy72iumImMfzY3e3esHXN_mOb4KKRs4TOX10h2NTB3VQrtkNssMfAGuUbOv_xeh9ghQQOk5bPDCBR4Oy7mILYj-6PBm0ADHMWCK8VVYRpuPkpJEPjq5stz0ztLq46cHkB3pAQhjZpJKpZSYPKNUY08qZ1cww&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;308&quot; data-original-width=&quot;440&quot; height=&quot;224&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEh8tkws28bhjC68HMePyeveizUdkatTLRjy72iumImMfzY3e3esHXN_mOb4KKRs4TOX10h2NTB3VQrtkNssMfAGuUbOv_xeh9ghQQOk5bPDCBR4Oy7mILYj-6PBm0ADHMWCK8VVYRpuPkpJEPjq5stz0ztLq46cHkB3pAQhjZpJKpZSYPKNUY08qZ1cww&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecodachi.blogspot.com/feeds/479397655496386225/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://thecodachi.blogspot.com/2023/03/why-you-should-ditch-your-trouser.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9120308369666896691/posts/default/479397655496386225'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9120308369666896691/posts/default/479397655496386225'/><link rel='alternate' type='text/html' href='http://thecodachi.blogspot.com/2023/03/why-you-should-ditch-your-trouser.html' title='Why You Should Ditch Your Trouser Pockets And Get A Waist Pouch'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/a/AVvXsEh8tkws28bhjC68HMePyeveizUdkatTLRjy72iumImMfzY3e3esHXN_mOb4KKRs4TOX10h2NTB3VQrtkNssMfAGuUbOv_xeh9ghQQOk5bPDCBR4Oy7mILYj-6PBm0ADHMWCK8VVYRpuPkpJEPjq5stz0ztLq46cHkB3pAQhjZpJKpZSYPKNUY08qZ1cww=s72-c" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9120308369666896691.post-4530607714680185731</id><published>2023-03-05T12:44:00.003+03:00</published><updated>2023-03-05T15:15:21.634+03:00</updated><title type='text'> How I customized a hub nut spanner for my Land Rover and saved money</title><content type='html'>&lt;p&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;span style=&quot;background-color: rgba(255, 255, 255, 0.6); color: #111111; font-size: 16px;&quot;&gt;I own a Land Rover Defender and I love working on it myself. One of the tasks that I often do is changing the wheel bearings and hub seals.For this, you need a special tool called a hub nut socket, which is used to remove and tighten the lock nut on the hub bearingsA hub nut socket is a deep impact socket that has a specific size and shape to fit the hub nut.&amp;nbsp;For Land Rovers, the size is usually 52mm. However, buying a hub nut socket can be quite expensive.&amp;nbsp;A new one can cost around £18-£35, depending on the brand and quality.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;background-color: rgba(255, 255, 255, 0.6); color: #111111; font-size: 16px; font-variation-settings: var(--cib-type-body2-font-variation-settings); line-height: var(--cib-type-body2-line-height); margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 10px !important; margin: 10px 0px 0px; padding: 0px; user-select: text; word-break: break-word;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgXk3iCGH8wwdBtlBOyQygfd62H-5P2KRjHx5pIBUcJ2gV3hmSVqdns9tgAkIAauqp8Dzt9OFXoItKZnF_GBzX_27ElQQfuVkxeWh86OgDgmODkpaZzZtSDMYF03QyuDtI_6MqS0GOabPGmzILDxMRoEuSoBtkdfubXMaV9MXh3yBa0YFbMH6JTB95oJA&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;370&quot; data-original-width=&quot;442&quot; height=&quot;240&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgXk3iCGH8wwdBtlBOyQygfd62H-5P2KRjHx5pIBUcJ2gV3hmSVqdns9tgAkIAauqp8Dzt9OFXoItKZnF_GBzX_27ElQQfuVkxeWh86OgDgmODkpaZzZtSDMYF03QyuDtI_6MqS0GOabPGmzILDxMRoEuSoBtkdfubXMaV9MXh3yBa0YFbMH6JTB95oJA&quot; width=&quot;287&quot; /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;background-color: rgba(255, 255, 255, 0.6); color: #111111; font-size: 16px; font-variation-settings: var(--cib-type-body2-font-variation-settings); line-height: var(--cib-type-body2-line-height); margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 10px !important; margin: 10px 0px 0px; padding: 0px; user-select: text; word-break: break-word;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;I decided to look for a cheaper alternative and I found one online. It was a hack that involved customizing a hub nut spanner by welding a nut on it. A hub nut spanner is box socket that has two holes that you can fit a metal rod in and the other end goes into the hub nut.&amp;nbsp;It can be used to loosen or tighten the hub nut.It is much cheaper because it&#39;s made from a regular pipe which is pressed to meet the hub nut dimensions.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;background-color: rgba(255, 255, 255, 0.6); color: #111111; font-size: 16px; font-variation-settings: var(--cib-type-body2-font-variation-settings); line-height: var(--cib-type-body2-line-height); margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 10px !important; margin: 10px 0px 0px; padding: 0px; user-select: text; word-break: break-word;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjavIPuB9fA95K0uza4XgATd2PGJQ8ZEhJY7JmmxmRQHPe8KxBuHj1R5WmCirSgve-yOuJio6_GnLS3nzi399M9H_gBqogCjM6yodjIy0R3TaG_hUSRkwHaW0xqEVQeGTcosWatc3-xof5A7Y__LtKnACoCFoB_ZHGUavrCDx5pHTPWrL7ODsyNZjFN1w&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;1600&quot; data-original-width=&quot;1600&quot; height=&quot;240&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjavIPuB9fA95K0uza4XgATd2PGJQ8ZEhJY7JmmxmRQHPe8KxBuHj1R5WmCirSgve-yOuJio6_GnLS3nzi399M9H_gBqogCjM6yodjIy0R3TaG_hUSRkwHaW0xqEVQeGTcosWatc3-xof5A7Y__LtKnACoCFoB_ZHGUavrCDx5pHTPWrL7ODsyNZjFN1w&quot; width=&quot;240&quot; /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;background-color: rgba(255, 255, 255, 0.6); color: #111111; font-size: 16px; font-variation-settings: var(--cib-type-body2-font-variation-settings); line-height: var(--cib-type-body2-line-height); margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 10px !important; margin: 10px 0px 0px; padding: 0px; user-select: text; word-break: break-word;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;The hack was simple: I bought a cheap hub nut spanner (£5) and a 52mm hexagonal nut (£1). Then, I welded the nut onto one end of the spanner, making sure it was aligned with the side that hold the hub nut. The result was a DIY hub nut socket that could be used with any 1/2 inch drive ratchet or breaker bar.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;background-color: rgba(255, 255, 255, 0.6); color: #111111; font-size: 16px; font-variation-settings: var(--cib-type-body2-font-variation-settings); line-height: var(--cib-type-body2-line-height); margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 10px !important; margin: 10px 0px 0px; padding: 0px; user-select: text; word-break: break-word;&quot;&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNWTvmaMxVhNl4MmRqgHyzXYppvFaqFvDnDMRPkBWthmKQLP2BTVYrD_Oxuj6z5hyzpRoClaiP9BQmrzs9tPBP0Vq4p-IpUP6W6Z3_5EXgl2dOQ-rgTfbV5NIiT1QbdpBUaBITWsDWbxHRjtNV9bTEKpzakO6OuZyai8jplGUZA4XKLhJbkJUYXXuG1w/s3840/AHYQ5757.JPG&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;3840&quot; data-original-width=&quot;2160&quot; height=&quot;920&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNWTvmaMxVhNl4MmRqgHyzXYppvFaqFvDnDMRPkBWthmKQLP2BTVYrD_Oxuj6z5hyzpRoClaiP9BQmrzs9tPBP0Vq4p-IpUP6W6Z3_5EXgl2dOQ-rgTfbV5NIiT1QbdpBUaBITWsDWbxHRjtNV9bTEKpzakO6OuZyai8jplGUZA4XKLhJbkJUYXXuG1w/w518-h920/AHYQ5757.JPG&quot; width=&quot;518&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhAk6wxMR2CfjahLaBPJXripqehcGbvhXU9OB7ETnNfPIZnWjs7vfOxvW3ztWKD_jWPWDBUR60Br6rb_fexA5ziLTd12fRIhFCXc8Ew-fzVCJUptdwsIehTD6b1l1bNRc7scytAQOVs_AWBXBDMVNz5xz2TMK9syZpCAu0mE15AUvYYsfWX7Oe9DYj8xw/s3840/KFZV0418.JPG&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;3840&quot; data-original-width=&quot;2160&quot; height=&quot;931&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhAk6wxMR2CfjahLaBPJXripqehcGbvhXU9OB7ETnNfPIZnWjs7vfOxvW3ztWKD_jWPWDBUR60Br6rb_fexA5ziLTd12fRIhFCXc8Ew-fzVCJUptdwsIehTD6b1l1bNRc7scytAQOVs_AWBXBDMVNz5xz2TMK9syZpCAu0mE15AUvYYsfWX7Oe9DYj8xw/w524-h931/KFZV0418.JPG&quot; width=&quot;524&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;background-color: rgba(255, 255, 255, 0.6); color: #111111; font-size: 16px; font-variation-settings: var(--cib-type-body2-font-variation-settings); line-height: var(--cib-type-body2-line-height); margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 10px !important; margin: 10px 0px 0px; padding: 0px; user-select: text; word-break: break-word;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;I tried using my customized tool for changing my wheel bearings and hub seals and it worked perfectly. It fitted snugly onto the hub nut and allowed me to remove and tighten it with ease. It also did not damage or strip the threads of the hub nut or spindle.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;background-color: rgba(255, 255, 255, 0.6); color: #111111; font-size: 16px; font-variation-settings: var(--cib-type-body2-font-variation-settings); line-height: var(--cib-type-body2-line-height); margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 10px !important; margin: 10px 0px 0px; padding: 0px; user-select: text; word-break: break-word;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;I was very pleased with my hack and how it saved me money. I would recommend this hack to anyone who owns a Land Rover and needs to change their wheel bearings and hub seals regularly. It is easy, cheap, and effective.&lt;/span&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecodachi.blogspot.com/feeds/4530607714680185731/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://thecodachi.blogspot.com/2023/03/how-i-customized-hub-nut-spanner-for-my.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9120308369666896691/posts/default/4530607714680185731'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9120308369666896691/posts/default/4530607714680185731'/><link rel='alternate' type='text/html' href='http://thecodachi.blogspot.com/2023/03/how-i-customized-hub-nut-spanner-for-my.html' title=' How I customized a hub nut spanner for my Land Rover and saved money'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/a/AVvXsEgXk3iCGH8wwdBtlBOyQygfd62H-5P2KRjHx5pIBUcJ2gV3hmSVqdns9tgAkIAauqp8Dzt9OFXoItKZnF_GBzX_27ElQQfuVkxeWh86OgDgmODkpaZzZtSDMYF03QyuDtI_6MqS0GOabPGmzILDxMRoEuSoBtkdfubXMaV9MXh3yBa0YFbMH6JTB95oJA=s72-c" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9120308369666896691.post-8288922520704195394</id><published>2023-03-05T12:11:00.000+03:00</published><updated>2023-03-05T12:11:11.379+03:00</updated><title type='text'>New favorite tool: the adjustable strap wrench</title><content type='html'>&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;background-color: rgba(255, 255, 255, 0.6); color: #111111; font-family: -apple-system, Roboto, SegoeUI, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;Meiryo UI&amp;quot;, Meiryo, &amp;quot;Arial Unicode MS&amp;quot;, sans-serif; font-size: 16px; font-variation-settings: var(--cib-type-body2-font-variation-settings); line-height: var(--cib-type-body2-line-height); margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 10px !important; padding: 0px; user-select: text; word-break: break-word;&quot;&gt;I have always been interested in DIY projects and handy tools that can make my life easier. Recently, I was browsing AliExpress and I came across the adjustable strap wrench. It looked like a simple tool that could be used for removing oil filters when doing engine service. I decided to order one and see if it was useful.&lt;/p&gt;&lt;p style=&quot;background-color: rgba(255, 255, 255, 0.6); color: #111111; font-family: -apple-system, Roboto, SegoeUI, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;Meiryo UI&amp;quot;, Meiryo, &amp;quot;Arial Unicode MS&amp;quot;, sans-serif; font-size: 16px; font-variation-settings: var(--cib-type-body2-font-variation-settings); line-height: var(--cib-type-body2-line-height); margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 10px !important; padding: 0px; user-select: text; word-break: break-word;&quot;&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEg0HxmkmJ2sPkpCetm8vi93OS9sg1lsiZucgqXuaAZwHAvKbwVAPzHqQU6ZlgwdcAKAGWldWHu231Eku5Xp_vaCkOMSS2O3Dc_AY7MBv3_0xSA72u1l4p-P9xBPNpoHw06GIrhAPTsUPMMKM-Tkv_5B2_3A_rxOCI6MWT-Va9sDWaN6p35vpzTLP4dKrw&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;640&quot; data-original-width=&quot;640&quot; height=&quot;240&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEg0HxmkmJ2sPkpCetm8vi93OS9sg1lsiZucgqXuaAZwHAvKbwVAPzHqQU6ZlgwdcAKAGWldWHu231Eku5Xp_vaCkOMSS2O3Dc_AY7MBv3_0xSA72u1l4p-P9xBPNpoHw06GIrhAPTsUPMMKM-Tkv_5B2_3A_rxOCI6MWT-Va9sDWaN6p35vpzTLP4dKrw&quot; width=&quot;240&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;background-color: rgba(255, 255, 255, 0.6); color: #111111; font-family: -apple-system, Roboto, SegoeUI, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;Meiryo UI&amp;quot;, Meiryo, &amp;quot;Arial Unicode MS&amp;quot;, sans-serif; font-size: 16px; font-variation-settings: var(--cib-type-body2-font-variation-settings); line-height: var(--cib-type-body2-line-height); margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 10px !important; padding: 0px; user-select: text; word-break: break-word;&quot;&gt;When I received it, I was impressed by its build quality and design. The adjustable strap wrench is a tool that has a long metal handle and a rubber strap that can be tightened or loosened around different objects.&amp;nbsp;It can grip objects of various shapes and sizes without damaging them.&amp;nbsp;It is also easy to use, you just wrap the strap around the object, adjust the tension with the thumb screw, and turn the handle in the desired direction.&lt;/p&gt;&lt;p style=&quot;background-color: rgba(255, 255, 255, 0.6); color: #111111; font-family: -apple-system, Roboto, SegoeUI, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;Meiryo UI&amp;quot;, Meiryo, &amp;quot;Arial Unicode MS&amp;quot;, sans-serif; font-size: 16px; font-variation-settings: var(--cib-type-body2-font-variation-settings); line-height: var(--cib-type-body2-line-height); margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 10px !important; padding: 0px; user-select: text; word-break: break-word;&quot;&gt;I tried using it for removing oil filters from my car engine and it worked like a charm. The strap wrench gripped the filter firmly and allowed me to unscrew it with minimal effort.&amp;nbsp;It also prevented any oil spills or leaks from the filter. I was very happy with this tool and how it made my engine service easier.&lt;/p&gt;&lt;p style=&quot;background-color: rgba(255, 255, 255, 0.6); color: #111111; font-family: -apple-system, Roboto, SegoeUI, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;Meiryo UI&amp;quot;, Meiryo, &amp;quot;Arial Unicode MS&amp;quot;, sans-serif; font-size: 16px; font-variation-settings: var(--cib-type-body2-font-variation-settings); line-height: var(--cib-type-body2-line-height); margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 10px !important; padding: 0px; user-select: text; word-break: break-word;&quot;&gt;But that was not all. I discovered that the adjustable strap wrench was multipurpose and practical in many situations.&amp;nbsp;For example, I used it for holding shock absorbers when removing them from my Land Rover Defender as they tend to spin. The strap wrench held them securely and prevented them from rotating while I loosened the bottom nut.&lt;/p&gt;&lt;p style=&quot;background-color: rgba(255, 255, 255, 0.6); color: #111111; font-family: -apple-system, Roboto, SegoeUI, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;Meiryo UI&amp;quot;, Meiryo, &amp;quot;Arial Unicode MS&amp;quot;, sans-serif; font-size: 16px; font-variation-settings: var(--cib-type-body2-font-variation-settings); line-height: var(--cib-type-body2-line-height); margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 10px !important; padding: 0px; user-select: text; word-break: break-word;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;background-color: rgba(255, 255, 255, 0.6); color: #111111; font-family: -apple-system, Roboto, SegoeUI, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;Meiryo UI&amp;quot;, Meiryo, &amp;quot;Arial Unicode MS&amp;quot;, sans-serif; font-size: 16px; font-variation-settings: var(--cib-type-body2-font-variation-settings); line-height: var(--cib-type-body2-line-height); margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 10px !important; padding: 0px; user-select: text; word-break: break-word;&quot;&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgBJOwwkCSIaFYkEvbECn7couiD3qI_f6h--GesRdIyjld6x2flwecmkpRBqLfSJRPaCOY-yKeZCRDE8aFRxHM64ewFp6WCy9_9Nx4TNvaYVs-y7Q8GPe0MTUDNdWF58TxSnODNqRf0HSpW91Hri6_aJ_Zm0mf93NhHRzSUzKOdLl4fRpKer1iRwzHrRQ&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;800&quot; data-original-width=&quot;800&quot; height=&quot;240&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgBJOwwkCSIaFYkEvbECn7couiD3qI_f6h--GesRdIyjld6x2flwecmkpRBqLfSJRPaCOY-yKeZCRDE8aFRxHM64ewFp6WCy9_9Nx4TNvaYVs-y7Q8GPe0MTUDNdWF58TxSnODNqRf0HSpW91Hri6_aJ_Zm0mf93NhHRzSUzKOdLl4fRpKer1iRwzHrRQ&quot; width=&quot;240&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;background-color: rgba(255, 255, 255, 0.6); color: #111111; font-family: -apple-system, Roboto, SegoeUI, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;Meiryo UI&amp;quot;, Meiryo, &amp;quot;Arial Unicode MS&amp;quot;, sans-serif; font-size: 16px; font-variation-settings: var(--cib-type-body2-font-variation-settings); line-height: var(--cib-type-body2-line-height); margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 10px !important; padding: 0px; user-select: text; word-break: break-word;&quot;&gt;I also used it for removing and tightening pipe fittings for plumbing jobs.&amp;nbsp;The strap wrench could fit around pipes of different diameters and materials without scratching or denting them. It also gave me more leverage and control than a regular pipe wrench.&lt;/p&gt;&lt;p style=&quot;background-color: rgba(255, 255, 255, 0.6); color: #111111; font-family: -apple-system, Roboto, SegoeUI, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;Meiryo UI&amp;quot;, Meiryo, &amp;quot;Arial Unicode MS&amp;quot;, sans-serif; font-size: 16px; font-variation-settings: var(--cib-type-body2-font-variation-settings); line-height: var(--cib-type-body2-line-height); margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 10px !important; padding: 0px; user-select: text; word-break: break-word;&quot;&gt;And finally, I used it for removing the caps off jars that were too tight or stuck.&amp;nbsp;The strap wrench could open any jar lid with ease without hurting my hands or breaking the glass. It was a great tool for kitchen tasks as well.&lt;/p&gt;&lt;p style=&quot;background-color: rgba(255, 255, 255, 0.6); color: #111111; font-family: -apple-system, Roboto, SegoeUI, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;Meiryo UI&amp;quot;, Meiryo, &amp;quot;Arial Unicode MS&amp;quot;, sans-serif; font-size: 16px; font-variation-settings: var(--cib-type-body2-font-variation-settings); line-height: var(--cib-type-body2-line-height); margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 10px !important; padding: 0px; user-select: text; word-break: break-word;&quot;&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEiqXJ8SZKRVF4ridJVd5qjXFPwUUWDNM4qewMtxRioR4ai_1kygwadIcRVAH7-zowJUjss54GdP-6PudQZftBPF_5Os6RIAJ9bAvGgUsxVxFabXOJAq8QmBIiFNzuGlvnyL-5l_GR3p-HwLaUILifGVYWnS-bH8YZSTYakFS6Bv36_j2R_o6ZBS4yOolA&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;1000&quot; data-original-width=&quot;1000&quot; height=&quot;240&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEiqXJ8SZKRVF4ridJVd5qjXFPwUUWDNM4qewMtxRioR4ai_1kygwadIcRVAH7-zowJUjss54GdP-6PudQZftBPF_5Os6RIAJ9bAvGgUsxVxFabXOJAq8QmBIiFNzuGlvnyL-5l_GR3p-HwLaUILifGVYWnS-bH8YZSTYakFS6Bv36_j2R_o6ZBS4yOolA&quot; width=&quot;240&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;background-color: rgba(255, 255, 255, 0.6); color: #111111; font-family: -apple-system, Roboto, SegoeUI, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;Meiryo UI&amp;quot;, Meiryo, &amp;quot;Arial Unicode MS&amp;quot;, sans-serif; font-size: 16px; font-variation-settings: var(--cib-type-body2-font-variation-settings); line-height: var(--cib-type-body2-line-height); margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 10px !important; padding: 0px; user-select: text; word-break: break-word;&quot;&gt;The adjustable strap wrench is now my new favorite tool and for the price on AliExpress, I’d say it’s worth its weight in gold. It is a versatile and handy tool that can be used for many purposes and projects. It saves me time, energy, and frustration while working on different tasks. If you are looking for a useful tool that can do many things, you should try an adjustable strap wrench too.&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecodachi.blogspot.com/feeds/8288922520704195394/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://thecodachi.blogspot.com/2023/03/new-favorite-tool-adjustable-strap.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9120308369666896691/posts/default/8288922520704195394'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9120308369666896691/posts/default/8288922520704195394'/><link rel='alternate' type='text/html' href='http://thecodachi.blogspot.com/2023/03/new-favorite-tool-adjustable-strap.html' title='New favorite tool: the adjustable strap wrench'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/a/AVvXsEg0HxmkmJ2sPkpCetm8vi93OS9sg1lsiZucgqXuaAZwHAvKbwVAPzHqQU6ZlgwdcAKAGWldWHu231Eku5Xp_vaCkOMSS2O3Dc_AY7MBv3_0xSA72u1l4p-P9xBPNpoHw06GIrhAPTsUPMMKM-Tkv_5B2_3A_rxOCI6MWT-Va9sDWaN6p35vpzTLP4dKrw=s72-c" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9120308369666896691.post-7230996724806943853</id><published>2023-03-05T06:08:00.004+03:00</published><updated>2023-03-05T06:08:49.537+03:00</updated><title type='text'>Choice of suspension parts and quality of ride on a land rover defender 110</title><content type='html'>&lt;p&gt;&amp;nbsp;&lt;span style=&quot;background-color: rgba(255, 255, 255, 0.6); color: #111111; font-family: -apple-system, Roboto, SegoeUI, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;Meiryo UI&amp;quot;, Meiryo, &amp;quot;Arial Unicode MS&amp;quot;, sans-serif; font-size: 16px;&quot;&gt;I have always loved driving my Land Rover Defender 300tdi 110, a classic off-road vehicle that can handle any terrain. However, I noticed that the ride was very stiff and uncomfortable when not loaded with cargo or passengers. I wondered if there was something wrong with the suspension parts of my Defender. Here is a video of the action from underneath.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;iframe allowfullscreen=&quot;&quot; class=&quot;BLOG_video_class&quot; height=&quot;329&quot; src=&quot;https://www.youtube.com/embed/-Qs0zoJTR3w&quot; width=&quot;402&quot; youtube-src-id=&quot;-Qs0zoJTR3w&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style=&quot;background-color: rgba(255, 255, 255, 0.6); color: #111111; font-family: -apple-system, Roboto, SegoeUI, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;Meiryo UI&amp;quot;, Meiryo, &amp;quot;Arial Unicode MS&amp;quot;, sans-serif; font-size: 16px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;background-color: rgba(255, 255, 255, 0.6); color: #111111; font-family: -apple-system, Roboto, SegoeUI, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;Meiryo UI&amp;quot;, Meiryo, &amp;quot;Arial Unicode MS&amp;quot;, sans-serif; font-size: 16px;&quot;&gt;I did some research online and found out that my Defender had double shocks at the rear wheels&lt;/span&gt;&lt;span style=&quot;background-color: rgba(255, 255, 255, 0.6); color: #111111; font-family: -apple-system, Roboto, SegoeUI, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;Meiryo UI&amp;quot;, Meiryo, &amp;quot;Arial Unicode MS&amp;quot;, sans-serif; font-size: 16px;&quot;&gt;, which were meant to provide extra stability and support when carrying heavy loads.&lt;/span&gt;&lt;span style=&quot;background-color: rgba(255, 255, 255, 0.6); color: #111111; font-family: -apple-system, Roboto, SegoeUI, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;Meiryo UI&amp;quot;, Meiryo, &amp;quot;Arial Unicode MS&amp;quot;, sans-serif; font-size: 16px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: rgba(255, 255, 255, 0.6); color: #111111; font-family: -apple-system, Roboto, SegoeUI, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;Meiryo UI&amp;quot;, Meiryo, &amp;quot;Arial Unicode MS&amp;quot;, sans-serif; font-size: 16px;&quot;&gt;However, when not loaded, they make the ride harsher and less smooth&lt;/span&gt;&lt;span style=&quot;background-color: rgba(255, 255, 255, 0.6); color: #111111; font-family: -apple-system, Roboto, SegoeUI, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;Meiryo UI&amp;quot;, Meiryo, &amp;quot;Arial Unicode MS&amp;quot;, sans-serif; font-size: 16px;&quot;&gt;. I decided to remove one pair of shocks and see if it made any difference.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;background-color: rgba(255, 255, 255, 0.6); color: #111111; font-family: -apple-system, Roboto, SegoeUI, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;Meiryo UI&amp;quot;, Meiryo, &amp;quot;Arial Unicode MS&amp;quot;, sans-serif; font-size: 16px; font-variation-settings: var(--cib-type-body2-font-variation-settings); line-height: var(--cib-type-body2-line-height); margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 10px !important; padding: 0px; user-select: text; word-break: break-word;&quot;&gt;To my surprise, it did! The ride became much softer and more comfortable without compromising the handling or performance of my Defender. I was happy with this improvement, but I wanted to see if I could make it even better.&lt;/p&gt;&lt;p style=&quot;background-color: rgba(255, 255, 255, 0.6); color: #111111; font-family: -apple-system, Roboto, SegoeUI, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;Meiryo UI&amp;quot;, Meiryo, &amp;quot;Arial Unicode MS&amp;quot;, sans-serif; font-size: 16px; font-variation-settings: var(--cib-type-body2-font-variation-settings); line-height: var(--cib-type-body2-line-height); margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 10px !important; padding: 0px; user-select: text; word-break: break-word;&quot;&gt;I looked for some aftermarket suspension parts that could enhance the ride quality of my Defender.&amp;nbsp;I came across Monroe oil shocks, which are known for their durability and reliability.&amp;nbsp;&amp;nbsp;I swapped the remaining pair of rear shocks with Monroe shocks and tried driving it while loaded with some heavy stuff.&lt;/p&gt;&lt;p style=&quot;background-color: rgba(255, 255, 255, 0.6); color: #111111; font-family: -apple-system, Roboto, SegoeUI, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;Meiryo UI&amp;quot;, Meiryo, &amp;quot;Arial Unicode MS&amp;quot;, sans-serif; font-size: 16px; font-variation-settings: var(--cib-type-body2-font-variation-settings); line-height: var(--cib-type-body2-line-height); margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 10px !important; padding: 0px; user-select: text; word-break: break-word;&quot;&gt;The ride was surprisingly smooth!&amp;nbsp;The new shocks absorbed the bumps and vibrations effectively and gave me a pleasant driving experience. They also improved the stability and control of my Defender when cornering or braking. I was very impressed by these shocks and how they transformed my Defender. You never know what you&#39;re missing, one takeaway from this is that it&#39;s difficult to tell when shocks go bad, i had no idea the old ones were that bad.&lt;/p&gt;&lt;p style=&quot;background-color: rgba(255, 255, 255, 0.6); color: #111111; font-family: -apple-system, Roboto, SegoeUI, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;Meiryo UI&amp;quot;, Meiryo, &amp;quot;Arial Unicode MS&amp;quot;, sans-serif; font-size: 16px; font-variation-settings: var(--cib-type-body2-font-variation-settings); line-height: var(--cib-type-body2-line-height); margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 10px !important; padding: 0px; user-select: text; word-break: break-word;&quot;&gt;The next thing I want to try is to remove the heavy duty springs and put on the stock springs which should be softer.&amp;nbsp;Heavy duty springs are meant for off-road use or towing purposes, but they can also make the ride stiffer than necessary.&amp;nbsp;Stock springs are more suitable for normal driving conditions and when you&#39;re not carrying a lot of load on your landy.&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecodachi.blogspot.com/feeds/7230996724806943853/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://thecodachi.blogspot.com/2023/03/choice-of-suspension-parts-and-quality.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9120308369666896691/posts/default/7230996724806943853'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9120308369666896691/posts/default/7230996724806943853'/><link rel='alternate' type='text/html' href='http://thecodachi.blogspot.com/2023/03/choice-of-suspension-parts-and-quality.html' title='Choice of suspension parts and quality of ride on a land rover defender 110'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img.youtube.com/vi/-Qs0zoJTR3w/default.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9120308369666896691.post-3556718118272098573</id><published>2023-03-05T05:52:00.002+03:00</published><updated>2023-03-05T05:52:35.962+03:00</updated><title type='text'>How I discovered the ESP32 LOLIN C3 Pico and used it to make HTTP requests</title><content type='html'>&lt;p&gt;&amp;nbsp;&lt;span style=&quot;background-color: rgba(255, 255, 255, 0.6); color: #111111; font-family: -apple-system, Roboto, SegoeUI, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;Meiryo UI&amp;quot;, Meiryo, &amp;quot;Arial Unicode MS&amp;quot;, sans-serif; font-size: 16px;&quot;&gt;I have always been interested in IoT devices and how they can connect to the internet and communicate with each other. One day, I stumbled upon &lt;a href=&quot;https://eitherway.io/posts/esp32-buyers-guide/&quot;&gt;a website&lt;/a&gt; that introduced me to the ESP32 LOLIN C3 Pico, a mini wifi &amp;amp; Bluetooth5 (LE) board based on ESP32-C3FH4, a RISC-V single-core CPU.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;background-color: rgba(255, 255, 255, 0.6); color: #111111; font-family: -apple-system, Roboto, SegoeUI, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;Meiryo UI&amp;quot;, Meiryo, &amp;quot;Arial Unicode MS&amp;quot;, sans-serif; font-size: 16px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;background-color: rgba(255, 255, 255, 0.6); color: #111111; font-family: -apple-system, Roboto, SegoeUI, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;Meiryo UI&amp;quot;, Meiryo, &amp;quot;Arial Unicode MS&amp;quot;, sans-serif; font-size: 16px;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEj83TbWS6b2LY5KXdeWelsNuy1LQq7P7X7wAeF0GlJMzEPej90C6unDlC9ff5zRh-J-vf-rQEx7EOHIipSNeaUufj-wgyjX3zIAp_8Fh-3SKNG6te94Y52rK5TWVCvx6rNJS9Cs8oByxbfzhI4jhvEwF4LszLiuoZfxixBJr7xbzjSY9R4vuVgOIOdkNA&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;1600&quot; data-original-width=&quot;1600&quot; height=&quot;240&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEj83TbWS6b2LY5KXdeWelsNuy1LQq7P7X7wAeF0GlJMzEPej90C6unDlC9ff5zRh-J-vf-rQEx7EOHIipSNeaUufj-wgyjX3zIAp_8Fh-3SKNG6te94Y52rK5TWVCvx6rNJS9Cs8oByxbfzhI4jhvEwF4LszLiuoZfxixBJr7xbzjSY9R4vuVgOIOdkNA&quot; width=&quot;240&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;background-color: rgba(255, 255, 255, 0.6); color: #111111; font-family: -apple-system, Roboto, SegoeUI, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;Meiryo UI&amp;quot;, Meiryo, &amp;quot;Arial Unicode MS&amp;quot;, sans-serif; font-size: 16px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;background-color: rgba(255, 255, 255, 0.6); color: #111111; font-family: -apple-system, Roboto, SegoeUI, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;Meiryo UI&amp;quot;, Meiryo, &amp;quot;Arial Unicode MS&amp;quot;, sans-serif; font-size: 16px; font-variation-settings: var(--cib-type-body2-font-variation-settings); line-height: var(--cib-type-body2-line-height); margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 10px !important; padding: 0px; user-select: text; word-break: break-word;&quot;&gt;I was amazed by its small form factor, which is only 25.4 x 17.8 mm, and its ability to use a lipo battery with 500mA charging. It also has 12 IO pins, 1 WS2812 RGB LED, 1 LOLIN I2C port, and supports ADC, I2C, SPI, UART protocols. It is compatible with MicroPython, Arduino, CircuitPython and ESP-IDF, which means I can program it using different languages and frameworks.&lt;/p&gt;&lt;p style=&quot;background-color: rgba(255, 255, 255, 0.6); color: #111111; font-family: -apple-system, Roboto, SegoeUI, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;Meiryo UI&amp;quot;, Meiryo, &amp;quot;Arial Unicode MS&amp;quot;, sans-serif; font-size: 16px; font-variation-settings: var(--cib-type-body2-font-variation-settings); line-height: var(--cib-type-body2-line-height); margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 10px !important; padding: 0px; user-select: text; word-break: break-word;&quot;&gt;I decided to buy one online and try it out for myself. After receiving it, I followed the instructions on how to install Arduino IDE on my computer and add the ESP32-C3 board support package. Then I wrote some code to connect it to my wifi network and make HTTP requests to a remote server. The code was simple and easy to understand.&lt;/p&gt;&lt;p style=&quot;background-color: rgba(255, 255, 255, 0.6); color: #111111; font-family: -apple-system, Roboto, SegoeUI, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;Meiryo UI&amp;quot;, Meiryo, &amp;quot;Arial Unicode MS&amp;quot;, sans-serif; font-size: 16px; font-variation-settings: var(--cib-type-body2-font-variation-settings); line-height: var(--cib-type-body2-line-height); margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 10px !important; padding: 0px; user-select: text; word-break: break-word;&quot;&gt;I uploaded the code to the board using Arduino IDE and watched the output on the serial monitor. It worked! The board successfully made an HTTP request and printed the response from the server.&lt;/p&gt;&lt;p style=&quot;background-color: rgba(255, 255, 255, 0.6); color: #111111; font-family: -apple-system, Roboto, SegoeUI, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;Meiryo UI&amp;quot;, Meiryo, &amp;quot;Arial Unicode MS&amp;quot;, sans-serif; font-size: 16px; font-variation-settings: var(--cib-type-body2-font-variation-settings); line-height: var(--cib-type-body2-line-height); margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 10px !important; padding: 0px; user-select: text; word-break: break-word;&quot;&gt;I was very happy with my discovery of the ESP32 LOLIN C3 Pico. It is a powerful and versatile board that can be used for many IoT projects. I plan to use it for more applications in the future, such as making an MQTT device or a smart home button.&lt;/p&gt;&lt;p style=&quot;background-color: rgba(255, 255, 255, 0.6); color: #111111; font-family: -apple-system, Roboto, SegoeUI, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;Meiryo UI&amp;quot;, Meiryo, &amp;quot;Arial Unicode MS&amp;quot;, sans-serif; font-size: 16px; font-variation-settings: var(--cib-type-body2-font-variation-settings); line-height: var(--cib-type-body2-line-height); margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 10px !important; padding: 0px; user-select: text; word-break: break-word;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;background-color: rgba(255, 255, 255, 0.6); color: #111111; font-family: -apple-system, Roboto, SegoeUI, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;Meiryo UI&amp;quot;, Meiryo, &amp;quot;Arial Unicode MS&amp;quot;, sans-serif; font-size: 16px; font-variation-settings: var(--cib-type-body2-font-variation-settings); line-height: var(--cib-type-body2-line-height); margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 10px !important; padding: 0px; user-select: text; word-break: break-word;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;pre style=&quot;background: rgba(0, 0, 0, 0.02); border-radius: 8px; border: 1px solid rgba(0, 0, 0, 0.2); box-sizing: border-box; color: #111111; font-size: 16px; margin-bottom: 4px; margin-top: 0px; padding: 6px 10px;&quot;&gt;&lt;code class=&quot;language-c&quot; style=&quot;font-size: 14px; white-space: pre-wrap;&quot;&gt;&lt;span class=&quot;hljs-meta&quot; style=&quot;color: #2b91af; font-variation-settings: var(--cib-type-subtitle1-font-variation-settings);&quot;&gt;#&lt;span class=&quot;hljs-keyword&quot; style=&quot;color: blue; font-variation-settings: var(--cib-type-subtitle1-font-variation-settings);&quot;&gt;include&lt;/span&gt; &lt;span class=&quot;hljs-string&quot; style=&quot;color: #a31515; font-variation-settings: var(--cib-type-subtitle1-font-variation-settings);&quot;&gt;&amp;lt;WiFi.h&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;hljs-meta&quot; style=&quot;color: #2b91af; font-variation-settings: var(--cib-type-subtitle1-font-variation-settings);&quot;&gt;#&lt;span class=&quot;hljs-keyword&quot; style=&quot;color: blue; font-variation-settings: var(--cib-type-subtitle1-font-variation-settings);&quot;&gt;include&lt;/span&gt; &lt;span class=&quot;hljs-string&quot; style=&quot;color: #a31515; font-variation-settings: var(--cib-type-subtitle1-font-variation-settings);&quot;&gt;&amp;lt;HTTPClient.h&amp;gt;&lt;/span&gt;&lt;/span&gt;

&lt;span class=&quot;hljs-comment&quot; style=&quot;color: green; font-variation-settings: var(--cib-type-subtitle1-font-variation-settings);&quot;&gt;// Wifi credentials&lt;/span&gt;
&lt;span class=&quot;hljs-type&quot; style=&quot;color: #a31515; font-variation-settings: var(--cib-type-subtitle1-font-variation-settings);&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;hljs-type&quot; style=&quot;color: #a31515; font-variation-settings: var(--cib-type-subtitle1-font-variation-settings);&quot;&gt;char&lt;/span&gt;* ssid = &lt;span class=&quot;hljs-string&quot; style=&quot;color: #a31515; font-variation-settings: var(--cib-type-subtitle1-font-variation-settings);&quot;&gt;&quot;SSID&quot;&lt;/span&gt;;
&lt;span class=&quot;hljs-type&quot; style=&quot;color: #a31515; font-variation-settings: var(--cib-type-subtitle1-font-variation-settings);&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;hljs-type&quot; style=&quot;color: #a31515; font-variation-settings: var(--cib-type-subtitle1-font-variation-settings);&quot;&gt;char&lt;/span&gt;* password = &lt;span class=&quot;hljs-string&quot; style=&quot;color: #a31515; font-variation-settings: var(--cib-type-subtitle1-font-variation-settings);&quot;&gt;&quot;PASSWORD&quot;&lt;/span&gt;;

&lt;span class=&quot;hljs-type&quot; style=&quot;color: #a31515; font-variation-settings: var(--cib-type-subtitle1-font-variation-settings);&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;hljs-title function_&quot; style=&quot;color: #a31515; font-variation-settings: var(--cib-type-subtitle1-font-variation-settings);&quot;&gt;setup&lt;/span&gt;&lt;span class=&quot;hljs-params&quot; style=&quot;font-variation-settings: var(--cib-type-subtitle1-font-variation-settings);&quot;&gt;()&lt;/span&gt; {
  &lt;span class=&quot;hljs-comment&quot; style=&quot;color: green; font-variation-settings: var(--cib-type-subtitle1-font-variation-settings);&quot;&gt;// Initialize serial monitor&lt;/span&gt;
  Serial.begin(&lt;span class=&quot;hljs-number&quot; style=&quot;font-variation-settings: var(--cib-type-subtitle1-font-variation-settings);&quot;&gt;115200&lt;/span&gt;);

  &lt;span class=&quot;hljs-comment&quot; style=&quot;color: green; font-variation-settings: var(--cib-type-subtitle1-font-variation-settings);&quot;&gt;// Connect to wifi&lt;/span&gt;
  WiFi.begin(ssid, password);
  &lt;span class=&quot;hljs-keyword&quot; style=&quot;color: blue; font-variation-settings: var(--cib-type-subtitle1-font-variation-settings);&quot;&gt;while&lt;/span&gt; (WiFi.status() != WL_CONNECTED) {
    delay(&lt;span class=&quot;hljs-number&quot; style=&quot;font-variation-settings: var(--cib-type-subtitle1-font-variation-settings);&quot;&gt;500&lt;/span&gt;);
    Serial.print(&lt;span class=&quot;hljs-string&quot; style=&quot;color: #a31515; font-variation-settings: var(--cib-type-subtitle1-font-variation-settings);&quot;&gt;&quot;.&quot;&lt;/span&gt;);
  }
  
  &lt;span class=&quot;hljs-comment&quot; style=&quot;color: green; font-variation-settings: var(--cib-type-subtitle1-font-variation-settings);&quot;&gt;// Make HTTP request&lt;/span&gt;
  HTTPClient http;
  http.begin(&lt;span class=&quot;hljs-string&quot; style=&quot;color: #a31515; font-variation-settings: var(--cib-type-subtitle1-font-variation-settings);&quot;&gt;&quot;http://example.com&quot;&lt;/span&gt;);
  &lt;span class=&quot;hljs-type&quot; style=&quot;color: #a31515; font-variation-settings: var(--cib-type-subtitle1-font-variation-settings);&quot;&gt;int&lt;/span&gt; httpCode = http.GET();
  
  &lt;span class=&quot;hljs-comment&quot; style=&quot;color: green; font-variation-settings: var(--cib-type-subtitle1-font-variation-settings);&quot;&gt;// Print response&lt;/span&gt;
  &lt;span class=&quot;hljs-keyword&quot; style=&quot;color: blue; font-variation-settings: var(--cib-type-subtitle1-font-variation-settings);&quot;&gt;if&lt;/span&gt; (httpCode &amp;gt; &lt;span class=&quot;hljs-number&quot; style=&quot;font-variation-settings: var(--cib-type-subtitle1-font-variation-settings);&quot;&gt;0&lt;/span&gt;) {
    String payload = http.getString();
    Serial.println(payload);
  }
  
  &lt;span class=&quot;hljs-comment&quot; style=&quot;color: green; font-variation-settings: var(--cib-type-subtitle1-font-variation-settings);&quot;&gt;// End connection&lt;/span&gt;
  http.end();
}

&lt;span class=&quot;hljs-type&quot; style=&quot;color: #a31515; font-variation-settings: var(--cib-type-subtitle1-font-variation-settings);&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;hljs-title function_&quot; style=&quot;color: #a31515; font-variation-settings: var(--cib-type-subtitle1-font-variation-settings);&quot;&gt;loop&lt;/span&gt;&lt;span class=&quot;hljs-params&quot; style=&quot;font-variation-settings: var(--cib-type-subtitle1-font-variation-settings);&quot;&gt;()&lt;/span&gt; {
}&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/code&gt;&amp;nbsp; &amp;nbsp;&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecodachi.blogspot.com/feeds/3556718118272098573/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://thecodachi.blogspot.com/2023/03/how-i-discovered-esp32-lolin-c3-pico.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9120308369666896691/posts/default/3556718118272098573'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9120308369666896691/posts/default/3556718118272098573'/><link rel='alternate' type='text/html' href='http://thecodachi.blogspot.com/2023/03/how-i-discovered-esp32-lolin-c3-pico.html' title='How I discovered the ESP32 LOLIN C3 Pico and used it to make HTTP requests'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/a/AVvXsEj83TbWS6b2LY5KXdeWelsNuy1LQq7P7X7wAeF0GlJMzEPej90C6unDlC9ff5zRh-J-vf-rQEx7EOHIipSNeaUufj-wgyjX3zIAp_8Fh-3SKNG6te94Y52rK5TWVCvx6rNJS9Cs8oByxbfzhI4jhvEwF4LszLiuoZfxixBJr7xbzjSY9R4vuVgOIOdkNA=s72-c" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9120308369666896691.post-2907959720624443998</id><published>2013-07-22T10:27:00.002+03:00</published><updated>2013-07-22T10:27:34.545+03:00</updated><title type='text'>software tools for your raspberry pi</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
The raspberry pi is a really amazing piece of hardware, any computing enthusiast would really love to have.Just reading the specs makes one think about the many things they can do with it, ideally its a small linux box.&lt;br /&gt;
&lt;br /&gt;
I&#39;ve compiled a series of tools which i&#39;ve found useful and which you might want to setup on a raspberry pi&lt;br /&gt;
&lt;br /&gt;
&lt;ol style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;Emacs - well, we also have the vim guys but i won&#39;t dive deep into this.Its nice to have your favourite editor handy in the terminal.Remember to place an alias for terminal mode.&lt;/li&gt;
&lt;li&gt;Apache - Unless you&#39;re serving over 200 concurrent requests, then apache will do.In anycase if you had such a high number of requests then you could afford the heavier guns.&lt;/li&gt;
&lt;li&gt;Sqlite3 and/or mysql - sqlite is just brilliant for such devices, i&#39;m surprised it doesn&#39;t come out of the box with wheezy.&lt;/li&gt;
&lt;li&gt;pip,virtualenv,virtualenvwrapper - the pi means python and these tools go hand in hand with any python development.&lt;/li&gt;
&lt;li&gt;Git - Version control in case you want to do some coding on the pi.&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;
Now you are ready to go.Feel free suggest some tools which you found useful and should be added to this list through the comments.&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://thecodachi.blogspot.com/feeds/2907959720624443998/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://thecodachi.blogspot.com/2013/07/software-tools-for-your-raspberry-pi.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9120308369666896691/posts/default/2907959720624443998'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9120308369666896691/posts/default/2907959720624443998'/><link rel='alternate' type='text/html' href='http://thecodachi.blogspot.com/2013/07/software-tools-for-your-raspberry-pi.html' title='software tools for your raspberry pi'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9120308369666896691.post-4620824163641983148</id><published>2013-03-21T13:01:00.001+03:00</published><updated>2013-03-21T13:01:58.115+03:00</updated><title type='text'>a good track for learning javascript</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
As i had mentioned earlier in my previous post, javascript is quite important and as a web developer you should know javascript well.The problem however is with the appropriate technique to learn it.I found a technique which claims to be good.&lt;br /&gt;
&lt;a href=&quot;http://javascriptissexy.com/how-to-learn-javascript-properly/&quot; rel=&quot;nofollow&quot;&gt;how-to-learn-javascript-properly&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
I have started this course and i can say i&#39;m seeing some progress, i&#39;m through with the first two weeks.About the resources, i would recommend professional Js for web developers.&lt;br /&gt;
&lt;br /&gt;
I&#39;ve not finished the week 3 and 4 sections but i really look forward to evaluating whether my skills have increased.&lt;br /&gt;
&lt;br /&gt;
The codeacademy course can be very boring especially if you&#39;ve chosen to start with the web fundamentals.I chose to skip some sections, but took others which looked like good refreshers.Don&#39;t skip this track entirely, you can be surprised to learn things you didn&#39;t know.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://thecodachi.blogspot.com/feeds/4620824163641983148/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://thecodachi.blogspot.com/2013/03/a-good-track-for-learning-javascript.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9120308369666896691/posts/default/4620824163641983148'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9120308369666896691/posts/default/4620824163641983148'/><link rel='alternate' type='text/html' href='http://thecodachi.blogspot.com/2013/03/a-good-track-for-learning-javascript.html' title='a good track for learning javascript'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9120308369666896691.post-5008665842933667343</id><published>2012-10-02T19:54:00.000+03:00</published><updated>2012-10-02T19:54:04.093+03:00</updated><title type='text'>tinkering around but never mastering javascript</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
I normally hack javascript when i need to, but i have noticed that many people also do this.The reason for this i attribute to the internet and especially google.&lt;br /&gt;
&lt;br /&gt;
There are plenty of resources on the internet offering solutions on how to deal with a specific problem, so one ends up googling how to do something in javascript without going through the basics of the language.&lt;br /&gt;
&lt;br /&gt;
What we end up with is skills at googling and fixing problems but no mastership of the language.This can be said to be the double edge of having plenty of resources available at your finger tips.&lt;br /&gt;
&lt;br /&gt;
For instance, stack overflow is an excellent resource.But i think one should turn to stack as the last resort.The habit of rushing to stack overflow and copying code does not offer any self improvement.A better alternative would be to hit the docs and read a good portion.Still this should come after attempting to solve the problem.&lt;br /&gt;
&lt;br /&gt;
Nevertheless programming is a craft thats all about experience, if you continue hacking at javascript each day for 10 years, you&#39;ll eventually master it, but the point is it would be easier if you took time to go through the docs and learn the basics of a language.&lt;br /&gt;
&lt;br /&gt;
This goes for jquery too, its possible to use jquery without knowing a good portion of javascript.This is a bad idea and sooner or later, if you&#39;re writing serious code, problems are going to arise that need more than just the basic knowledge of jquery.&lt;br /&gt;
&lt;br /&gt;
So what will be the right time to master javascript?&lt;br /&gt;
Why not try a daily schedule.Taking on a chapter a day, there are plenty of good books on javascript out there.&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://thecodachi.blogspot.com/feeds/5008665842933667343/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://thecodachi.blogspot.com/2012/10/tinkering-around-but-never-mastering.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9120308369666896691/posts/default/5008665842933667343'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9120308369666896691/posts/default/5008665842933667343'/><link rel='alternate' type='text/html' href='http://thecodachi.blogspot.com/2012/10/tinkering-around-but-never-mastering.html' title='tinkering around but never mastering javascript'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9120308369666896691.post-4985553751721553912</id><published>2012-10-02T19:17:00.002+03:00</published><updated>2012-10-02T19:18:24.528+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="apple"/><category scheme="http://www.blogger.com/atom/ns#" term="development"/><category scheme="http://www.blogger.com/atom/ns#" term="mac"/><title type='text'>Mac as a development environment</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
Apple pcs and notebooks are very elegant and offer a high level of aesthetics compared to standard hardware, but what about using a mac for development.&lt;br /&gt;
&lt;br /&gt;
&lt;div&gt;
Experience with a macbook pro has proved that mac&#39;s are excellent for development.Want a vague proof of this, just take a look at conference videos, most serious developers use macs.And its just not for the aesthetics but there are heavier reasons for this.&lt;br /&gt;
&lt;br /&gt;
Historically linux was the choice environment for many.The popularity of linux is waning due to recurrent issues involving GUI systems and the classic old drivers problem.Its just a pain that should be abstracted, and this is what mac osx does best.The UI is clean and elegant and you still get the power of the unix shell.&lt;br /&gt;
&lt;br /&gt;
The write once run everywhere nature of web apps has also promoted the use of osx.Due to the fact that you can create a web app from any on any operating system that will be available to any system with a browser, this has removed the constraint of having to develop on a particular environment.Thus developers are free to choose which system provides the best user experience, and apple is well known for this.&lt;br /&gt;
&lt;br /&gt;
A general trend I have noted is that most development software and library creators tend to cater for mac users since its a fact that many debs are on that platform.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://thecodachi.blogspot.com/feeds/4985553751721553912/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://thecodachi.blogspot.com/2012/10/mac-as-development-environment.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9120308369666896691/posts/default/4985553751721553912'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9120308369666896691/posts/default/4985553751721553912'/><link rel='alternate' type='text/html' href='http://thecodachi.blogspot.com/2012/10/mac-as-development-environment.html' title='Mac as a development environment'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9120308369666896691.post-6341143031766453959</id><published>2012-08-22T07:31:00.003+03:00</published><updated>2012-08-22T07:31:27.064+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="IDE"/><category scheme="http://www.blogger.com/atom/ns#" term="pep8"/><category scheme="http://www.blogger.com/atom/ns#" term="pycharm"/><category scheme="http://www.blogger.com/atom/ns#" term="python"/><title type='text'>pep 8 on pycharm</title><content type='html'>Pep 8 standard is a good convention to use when coding especially when working as a team.Standards and conventions make reading other peoples code easier.Getting yourself to start adhere to these &amp;nbsp;standards takes some time and effort, but by using the right tools it can take a shorter time.By the way, taking your time to learn these standards is quite worth the effort.&lt;br /&gt;
&lt;br /&gt;
Pycharm is a wonderful python IDE which i would recommend to anybody doing development in python.Using pycharm you can set pep8 as an external tool, which you can invoke on any file you are currently working on to &amp;nbsp;check whether it violates any standards.This can be done this way.&lt;br /&gt;
&lt;br /&gt;
Install pep8 package from the python package index&lt;br /&gt;
&lt;br /&gt;
pip install pep8&lt;br /&gt;
&lt;br /&gt;
go to: File &amp;gt; Settings &amp;gt; External Tools &amp;gt; Add new&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhN0G4b2PURoyJLeWYmWJI-eOJtwkrGVHSQQrENGxTwwUMKVuU5jTukiIZsZrls5A0Q_0xshPL24DjO6kbFwBC1XiqcX6AM3G_bUa2rbfEw5scHggNXfo2Zrlsr9YoQxaDGR670Zg2bkz79/s1600/Screenshot+-+08222012+-+07:07:46+AM.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;401&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhN0G4b2PURoyJLeWYmWJI-eOJtwkrGVHSQQrENGxTwwUMKVuU5jTukiIZsZrls5A0Q_0xshPL24DjO6kbFwBC1XiqcX6AM3G_bUa2rbfEw5scHggNXfo2Zrlsr9YoQxaDGR670Zg2bkz79/s640/Screenshot+-+08222012+-+07:07:46+AM.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
if your using virtual env, use the path to pep8 installed in the virtualenv&#39;s bin directory.Otherwise point it to the location where pep8 is installed, use the whereis command to find it.&lt;br /&gt;
Now add an output filter as follows.&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaM3Vr9rvvnKBMHiBbCWjzDzehdpwH_ZNIwHXflXqcMbt2p0kNrpOx_Yaw1eEd77E8kLeLcT6wEftGSA5rt4JQNePBJ61UYwBkr-Wa3FY8VvWke9j9fil0_gdlHC1PdgK4bPVH9iPrBRNJ/s1600/filter.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;150&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaM3Vr9rvvnKBMHiBbCWjzDzehdpwH_ZNIwHXflXqcMbt2p0kNrpOx_Yaw1eEd77E8kLeLcT6wEftGSA5rt4JQNePBJ61UYwBkr-Wa3FY8VvWke9j9fil0_gdlHC1PdgK4bPVH9iPrBRNJ/s400/filter.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
You can now access the command from the tools menu or conveniently right click anywhere within the file currently being edited and select the command.&lt;br /&gt;
The output should be quite helpful in&amp;nbsp;identifying&amp;nbsp;changes which need to be made.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecodachi.blogspot.com/feeds/6341143031766453959/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://thecodachi.blogspot.com/2012/08/pep-8-on-pycharm_22.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9120308369666896691/posts/default/6341143031766453959'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9120308369666896691/posts/default/6341143031766453959'/><link rel='alternate' type='text/html' href='http://thecodachi.blogspot.com/2012/08/pep-8-on-pycharm_22.html' title='pep 8 on pycharm'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhN0G4b2PURoyJLeWYmWJI-eOJtwkrGVHSQQrENGxTwwUMKVuU5jTukiIZsZrls5A0Q_0xshPL24DjO6kbFwBC1XiqcX6AM3G_bUa2rbfEw5scHggNXfo2Zrlsr9YoQxaDGR670Zg2bkz79/s72-c/Screenshot+-+08222012+-+07:07:46+AM.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9120308369666896691.post-2340362861819087495</id><published>2012-08-06T21:46:00.000+03:00</published><updated>2012-08-06T21:52:21.390+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="django"/><category scheme="http://www.blogger.com/atom/ns#" term="DRY"/><category scheme="http://www.blogger.com/atom/ns#" term="factories"/><category scheme="http://www.blogger.com/atom/ns#" term="factory"/><category scheme="http://www.blogger.com/atom/ns#" term="factory boy"/><category scheme="http://www.blogger.com/atom/ns#" term="fixture"/><category scheme="http://www.blogger.com/atom/ns#" term="fixtures"/><category scheme="http://www.blogger.com/atom/ns#" term="python"/><category scheme="http://www.blogger.com/atom/ns#" term="test"/><category scheme="http://www.blogger.com/atom/ns#" term="testcase"/><category scheme="http://www.blogger.com/atom/ns#" term="unittest"/><title type='text'>django factory boy - better test management</title><content type='html'>Django factory boy is an excellent replacement for fixtures, most of the time you will encounter problems with maintenance of fixtures.For instance if you do migrations often, the set of fixtures will become invalid and has to be edited to fit the new schema, this can be extremely painful if you have a complex schema and lots of data.&lt;br /&gt;
Factory boy makes it easy to create objects when you need them for tests.For example..&lt;br /&gt;
&lt;br /&gt;
lets say you have this set of models,&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;from django.db import models

class Owner(models.Model):
    name = models.CharField(max_length=200)
    phone = models.CharField(max_length=50)

    def __unicode__(self):
        return self.name

class Car(models.Model):
    name = models.CharField(max_length=200)
    owner = models.ForeignKey(Owner)

    def __unicode__(self):
        return self.name
&lt;/pre&gt;
&lt;br /&gt;
Then your factories.py for these two will correspond to something like this
&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;import factory
from models import Owner, Car

class OwnerFactory(factory.Factory):
    FACTORY_FOR = Owner
    name = &#39;bruce&#39;
    phone = &#39;+254728037573&#39;

class CarFactory(factory.Factory):
    FACTORY_FOR = Car
    name = &#39;jeep&#39;
    owner = factory.lazy_attribute(lambda a: OwnerFactory())
&lt;/pre&gt;
&lt;br /&gt;
The tests for the factories themselves go something like this
&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;from models import Car,Owner
from django.test.testcases import TestCase

class FactoryTestCase(TestCase):

    def test_car_factory(self):
        car = CarFactory()
        self.assertTrue(isinstance(car, Car))

    def test_owner_factory(self):
        owner = OwnerFactory()
        self.assertTrue(isinstance(owner, Owner))
&lt;/pre&gt;
Many to many fields are a bit tricky to emulate but this does the trick.
For instance lets say you have this set of models.
&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;
from django.db import models

class Pizza(models.Model):
    name = models.CharField(max_length=120)
    toppings = models.ManyToManyField(Topping)

    def __unicode__(self):
        return self.name

class Topping(models.Model):
    name = models.CharField(max_length=200)

    def __unicode__(self):
        return self.name
&lt;/pre&gt;
&lt;br /&gt;
Then your factories will go something like this.
&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;
from models import Pizza, Topping
import factory

class ToppingFactory(factory.Factory):
    FACTORY_FOR = Topping

    name = &#39;mushrooms&#39;

class PizzaFactory(factory.Factory):
    FACTORY_FOR = Pizza

    name = &#39;mushroom delight&#39;

    @classmethod
    def _prepare(cls, create, **kwargs):
        topping = ToppingFactory()
        pizza = super(PizzaFactory, cls)._prepare(create, **kwargs)
        pizza.toppings.add(topping)
        return pizza

&lt;/pre&gt;
So the key here is to override the _prepare method and assign the manytomanyfield objects here, since you have and instance of the object.

In conclusion factories are a good alternative to fixtures when used in the right way.</content><link rel='replies' type='application/atom+xml' href='http://thecodachi.blogspot.com/feeds/2340362861819087495/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://thecodachi.blogspot.com/2012/08/django-factory-boy-better-test.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9120308369666896691/posts/default/2340362861819087495'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9120308369666896691/posts/default/2340362861819087495'/><link rel='alternate' type='text/html' href='http://thecodachi.blogspot.com/2012/08/django-factory-boy-better-test.html' title='django factory boy - better test management'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9120308369666896691.post-5715216127296499718</id><published>2012-04-12T17:50:00.000+03:00</published><updated>2012-04-12T17:50:06.126+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="applications"/><category scheme="http://www.blogger.com/atom/ns#" term="apps"/><category scheme="http://www.blogger.com/atom/ns#" term="coding"/><category scheme="http://www.blogger.com/atom/ns#" term="DRY"/><category scheme="http://www.blogger.com/atom/ns#" term="framework"/><category scheme="http://www.blogger.com/atom/ns#" term="web"/><title type='text'>building web applications</title><content type='html'>The best method to use when building web applications is to use frameworks.
Frameworks save on time and adhere to the principle of not repeating code
all the time (DRY).

So if you decide to use a framework, what should your choice be.There are many frameworks out there and therefore it would not be okay just to point you to one.To gain a deeper understanding of building web applications using frameworks it is advisable to go down the path of discovery.&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;Pick a framework based on any language you know of and learn it, this should be the beginning.&lt;/li&gt;
&lt;li&gt;After taking a week or two to learn the new framework, do a side project with it, not a serious one but something far from the basics.Try to implement some idea you&#39;ve always had.&lt;/li&gt;
&lt;li&gt;Add the side project to your&amp;nbsp;portfolio&amp;nbsp;and start over again from step 1 this time with another framework which is related.&lt;/li&gt;
&lt;/ol&gt;
After going through the first iteration, try implement the idea you had done using the new framework you have just learned.This aids you in discovering&amp;nbsp;weaknesses&amp;nbsp;and strengths in a framework.&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;Be patient&lt;/u&gt;&lt;br /&gt;
Nothing comes easy, everything requires time and effort, so don&#39;t expect to&amp;nbsp;excel&amp;nbsp;at it immediately.With continuous&amp;nbsp;practice&amp;nbsp;and diligent effort you will notice your skills and knowledge increasing.&lt;br /&gt;
I wish to stress the importance of persistence here.It&#39;s what will bear the results.</content><link rel='replies' type='application/atom+xml' href='http://thecodachi.blogspot.com/feeds/5715216127296499718/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://thecodachi.blogspot.com/2012/04/building-web-applications.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9120308369666896691/posts/default/5715216127296499718'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9120308369666896691/posts/default/5715216127296499718'/><link rel='alternate' type='text/html' href='http://thecodachi.blogspot.com/2012/04/building-web-applications.html' title='building web applications'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9120308369666896691.post-5664045951161912628</id><published>2012-04-09T22:18:00.001+03:00</published><updated>2012-08-04T08:46:42.760+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="android"/><category scheme="http://www.blogger.com/atom/ns#" term="database"/><category scheme="http://www.blogger.com/atom/ns#" term="ormlite"/><category scheme="http://www.blogger.com/atom/ns#" term="recipe"/><category scheme="http://www.blogger.com/atom/ns#" term="REST"/><category scheme="http://www.blogger.com/atom/ns#" term="rest protocol"/><category scheme="http://www.blogger.com/atom/ns#" term="restful"/><category scheme="http://www.blogger.com/atom/ns#" term="sqlite"/><category scheme="http://www.blogger.com/atom/ns#" term="tastypie"/><category scheme="http://www.blogger.com/atom/ns#" term="webservices"/><title type='text'>Django Tastypie with android client part 2</title><content type='html'>This post picks up from part 1 where we had defined the api using tastypie.The purpose of this second part is to create an android client to consume the api.

here are the files that make up the android application.

RecipesActivity.java
&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;package com.thecodachi.recipe;

import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.sql.SQLException;
import java.util.Iterator;
import java.util.List;

import org.apache.http.HeaderElement;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.ParseException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.protocol.HTTP;

import com.google.gson.Gson;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import com.j256.ormlite.android.apptools.OpenHelperManager;
import com.j256.ormlite.dao.Dao;

import android.app.Activity;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.util.Log;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class RecipesActivity extends Activity {
 
 public static String api_url = &quot;http://10.0.2.2:8000/api/&quot;;
 
 private List&lt;recipe&gt; recipesList = null;
 private ProgressDialog progDialog;
 private ProgressThread progThread;
 private ListView recipes;

 private DatabaseHelper databaseHelper = null;

 private ArrayAdapter&lt;recipe&gt; adapter;
 
 @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        recipes = (ListView)findViewById(R.id.lvRecipes);
        
        showDialog(0);
  
        try{
   //get our Dao and query for all customers in db
   Dao&lt;recipe integer=&quot;&quot;&gt; recipes = getHelper().getRecipeDataDao();
   recipesList = recipes.queryForAll();
  
  }catch(SQLException e){
   Log.e(&quot;LOG&quot;, &quot;error getting products&quot;);
  }
  
  
        adapter = new ArrayAdapter&lt;recipe&gt;(this,
                      R.layout.recipe_row,
                      R.id.recipeLabel,
                      recipesList);
        recipes.setAdapter(adapter);
    }

 @Override
 protected Dialog onCreateDialog(int id) {
  switch(id){
  case 0:
   progDialog = new ProgressDialog(this);
   progDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
   progDialog.setMessage(&quot;Loading data...&quot;);
   progThread = new ProgressThread();
            progThread.start();
   return progDialog;
  default:
   return null;
  }
 }
 
 private class ProgressThread extends Thread{
  
  private static final String LOG_TAG = &quot;PROGRESS_THREAD&quot;;

  @Override
  public void run() {
   HttpClient httpClient = new DefaultHttpClient();
   HttpGet httpGet = new HttpGet(api_url+&quot;recipes/?format=json&amp;amp;limit=0&quot;);
   HttpResponse response = null;
   try{
    
    response = httpClient.execute(httpGet);
    
   }catch(Exception e){
    System.out.println(e.toString());
   }
   if(response!=null){
    HttpEntity entity = response.getEntity();
    String apiResponse = null;
    try {
     apiResponse = _getResponseBody(entity);
    } catch (ParseException e) {
     e.printStackTrace();
    } catch (IOException e) {
     e.printStackTrace();
    }
    if(apiResponse!=null){
     try{
      Dao&lt;recipe integer=&quot;&quot;&gt; recipesDao = getHelper().getRecipeDataDao();
      
      JsonElement json = new JsonParser().parse(apiResponse);
      JsonObject rootObject = json.getAsJsonObject();
      JsonArray array= rootObject.getAsJsonArray(&quot;objects&quot;);
      Iterator&lt;jsonelement&gt; iterator = array.iterator();
      
      while(iterator.hasNext()){
       JsonElement json2 = (JsonElement)iterator.next();
       Gson gson = new Gson();
       Recipe recipe = gson.fromJson(json2, Recipe.class);
       recipesDao.createIfNotExists(recipe);
       Log.d(LOG_TAG, &quot;--------------------------------created recipe&quot;);
      }
      
     }catch(Exception e){
      Log.e(LOG_TAG, &quot;error creating recipe from json&quot;);
     }


    }
    
   }  
   dismissDialog(0);
   adapter.notifyDataSetChanged();
  }
 }
 public static String _getResponseBody(final HttpEntity entity) throws IOException, ParseException {

  if (entity == null) { throw new IllegalArgumentException(&quot;HTTP entity may not be null&quot;); }

  InputStream instream = entity.getContent();

  if (instream == null) { return &quot;&quot;; }

  if (entity.getContentLength() &amp;gt; Integer.MAX_VALUE) { throw new IllegalArgumentException(

  &quot;HTTP entity too large to be buffered in memory&quot;); }

  String charset = getContentCharSet(entity);

  if (charset == null) {

  charset = HTTP.DEFAULT_CONTENT_CHARSET;

  }

  Reader reader = new InputStreamReader(instream, charset);

  StringBuilder buffer = new StringBuilder();

  try {

  char[] tmp = new char[1024];

  int l;

  while ((l = reader.read(tmp)) != -1) {

  buffer.append(tmp, 0, l);

  }

  } finally {

  reader.close();

  }

  return buffer.toString();

  }
 public static String getContentCharSet(final HttpEntity entity) throws ParseException {

  if (entity == null) { throw new IllegalArgumentException(&quot;HTTP entity may not be null&quot;); }

  String charset = null;

  if (entity.getContentType() != null) {

  HeaderElement values[] = entity.getContentType().getElements();

  if (values.length &amp;gt; 0) {

  NameValuePair param = values[0].getParameterByName(&quot;charset&quot;);

  if (param != null) {

  charset = param.getValue();

  }

  }

  }

  return charset;

  }
 private DatabaseHelper getHelper(){
  if(databaseHelper  == null){
   databaseHelper = OpenHelperManager.getHelper(this, DatabaseHelper.class);
  }
  return databaseHelper;
 }
}
&lt;/jsonelement&gt;&lt;/recipe&gt;&lt;/recipe&gt;&lt;/recipe&gt;&lt;/recipe&gt;&lt;/recipe&gt;&lt;/pre&gt;
Recipe.java class which defines a recipe object which can be persisted in the sqlite database using ormlite.
&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;package com.thecodachi.recipe;

import com.j256.ormlite.field.DatabaseField;

public class Recipe {
 
 @DatabaseField(id=true)
 private int id;
 
 @DatabaseField
 private String name;
 
 @DatabaseField
 private String content;
 
 Recipe(){
  //used by ormlite
 }
 
 
 public int getId() {
  return id;
 }


 public void setId(int id) {
  this.id = id;
 }


 public String getName() {
  return name;
 }

 public void setName(String name) {
  this.name = name;
 }

 public String getContent() {
  return content;
 }

 public void setContent(String content) {
  this.content = content;
 }


 @Override
 public String toString() {
  // TODO Auto-generated method stub
  return name;
 }
 
}
&lt;/pre&gt;
DatabaseHelper.java responsible for persisting and retreiving objects from sqlite database using ormlite.

&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;package com.thecodachi.recipe;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.util.Log;

import com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper;
import com.j256.ormlite.dao.Dao;
import com.j256.ormlite.support.ConnectionSource;
import com.j256.ormlite.table.TableUtils;

public class DatabaseHelper extends OrmLiteSqliteOpenHelper {

 //name of the database file for the application
 private static final String DATABASE_NAME = &quot;Recipe.db&quot;;
 private static final int DATABASE_VERSION = 1;
 /*
  * the DAO objects we use to access the recipes* 
  */
 
 private Dao&lt;recipe integer=&quot;&quot;&gt; recipesDao = null;
 
 public DatabaseHelper(Context context){
  super(context, DATABASE_NAME, null, DATABASE_VERSION);
 }
 
 @Override
 public void onCreate(SQLiteDatabase db, ConnectionSource connectionSource) {
  try{
   Log.i(DatabaseHelper.class.getName(), &quot;onCreate&quot;);
   
   TableUtils.createTable(connectionSource, Recipe.class);
 
   
  }catch(java.sql.SQLException e){
   Log.e(DatabaseHelper.class.getName(),&quot;can&#39;t create db&quot;);
   throw new RuntimeException();
  }
 }

 //called when your application is upgraded
 
 @Override
 public void onUpgrade(SQLiteDatabase db, ConnectionSource connectionSource, int oldVersion,
   int newVersion) {
  try{
   Log.i(DatabaseHelper.class.getName(), &quot;onUpgrade&quot;);
   TableUtils.dropTable(connectionSource, Recipe.class, true);
   
   //after dropping old databases, we create the new ones
   onCreate(db, connectionSource);
   
  }catch(java.sql.SQLException e){
   Log.e(DatabaseHelper.class.getName(), &quot;can&#39;t drop databases&quot;);
   throw new RuntimeException(e);
  }
 }
 

 /* methods that returns the Database access object(Dao) for our product class
  * will create it or just give the cached value
  */
 
 public Dao&lt;recipe integer=&quot;&quot;&gt; getRecipeDataDao() throws java.sql.SQLException{
  if(recipesDao == null){
   recipesDao = getDao(Recipe.class);
  }
  return recipesDao;
 }


 /*
  * close all database connections and clear any cached DAOs
  */
 @Override
 public void close(){
  super.close();
  recipesDao = null;
 }
}
&lt;/recipe&gt;&lt;/recipe&gt;&lt;/pre&gt;
You can take a look at the rest of the resources belonging to this app from the repo which
i will share.

The implementation of the REST architecture i took in this example is not the best and it is
highly recommended not to use this approach when building an android application.The reason for
this is that the app does network requests within an activity.This should be done within a service

For a more detailed and recommended architecture for creating RESTful android application look &lt;a href=&quot;http://www.youtube.com/watch?v=xHXn3Kg2IQE&amp;amp;feature=player_embedded&quot;&gt;here&lt;/a&gt;.
Otherwise this is just a demo.</content><link rel='replies' type='application/atom+xml' href='http://thecodachi.blogspot.com/feeds/5664045951161912628/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://thecodachi.blogspot.com/2012/04/django-tastypie-with-android-client.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9120308369666896691/posts/default/5664045951161912628'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9120308369666896691/posts/default/5664045951161912628'/><link rel='alternate' type='text/html' href='http://thecodachi.blogspot.com/2012/04/django-tastypie-with-android-client.html' title='Django Tastypie with android client part 2'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9120308369666896691.post-2914995840877977383</id><published>2012-03-25T23:45:00.001+03:00</published><updated>2012-04-10T13:51:17.900+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="android"/><category scheme="http://www.blogger.com/atom/ns#" term="django"/><category scheme="http://www.blogger.com/atom/ns#" term="git"/><category scheme="http://www.blogger.com/atom/ns#" term="python"/><category scheme="http://www.blogger.com/atom/ns#" term="REST"/><category scheme="http://www.blogger.com/atom/ns#" term="rest protocol"/><category scheme="http://www.blogger.com/atom/ns#" term="restful"/><category scheme="http://www.blogger.com/atom/ns#" term="tastypie"/><category scheme="http://www.blogger.com/atom/ns#" term="webservices"/><title type='text'>Django Tastypie with android client</title><content type='html'>I&#39;ve been using django-tastypie recently to create restful apis and i wanted to use it especially with an android client.

I&#39;ve put together a sample application, &lt;a href=&quot;https://github.com/Mbosco/tastypie-api-example&quot;&gt;django rest backend&lt;/a&gt; and an android client to demonstrate this.

So here is a quick walk through of the code.

Here is the models.py which describes a recipe.

&lt;pre class=&quot;prettyprint&quot;&gt;
from django.db import models

class Recipe(models.Model):
    name = models.CharField(max_length=50)
    content = models.TextField()

    def __unicode__(self):
        return self.name
&lt;/pre&gt;
We set up a Resource for our API using tastypie.
&lt;pre class=&quot;prettyprint&quot;&gt;
from tastypie.resources import ModelResource
from recipes.models import Recipe

class RecipeResource(ModelResource):
    class Meta:
 queryset = Recipe.objects.all()
        resource_name = &#39;recipes&#39;
 allowed_methods = [&#39;get&#39;]
        include_resource_uri = False

    def alter_list_data_to_serialize(self, request, data_dict):
        if isinstance(data_dict, dict):
            if &#39;meta&#39; in data_dict:
                #Get rid of the meta object                                                                               
                del(data_dict[&#39;meta&#39;])

        return data_dict
&lt;/pre&gt;
Now we set up the urlpattern to access the data
&lt;pre class=&quot;prettyprint&quot;&gt;
from django.conf.urls.defaults import patterns, include, url
from recipes.api.api import RecipeResource
from django.contrib import admin
admin.autodiscover()

recipe_resource = RecipeResource()

urlpatterns = patterns(&#39;&#39;,
    url(r&#39;^api/&#39;, include(recipe_resource.urls)),
    url(r&#39;^admin/&#39;, include(admin.site.urls)),
)

&lt;/pre&gt;
Test the api using curl.
&lt;pre class=&quot;prettyprint&quot;&gt;
$ curl -H &#39;Accept: application/json&#39; http://localhost:8000/api/recipes/
&lt;/pre&gt;
Now that the api works as expected the next part is to create an android app client to consume the api.

This will be a simple app for viewing recipes.Later we will add the ability to add recipes to our recipe
database from the android client.

This will be covered in part 2 of this tutorial.</content><link rel='replies' type='application/atom+xml' href='http://thecodachi.blogspot.com/feeds/2914995840877977383/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://thecodachi.blogspot.com/2012/03/django-tastypie-with-android-client.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9120308369666896691/posts/default/2914995840877977383'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9120308369666896691/posts/default/2914995840877977383'/><link rel='alternate' type='text/html' href='http://thecodachi.blogspot.com/2012/03/django-tastypie-with-android-client.html' title='Django Tastypie with android client'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9120308369666896691.post-8329617579133361118</id><published>2012-03-15T13:46:00.001+03:00</published><updated>2012-03-15T13:48:29.002+03:00</updated><title type='text'>It&#39;s okay to leave if things are not as expected</title><content type='html'>Lately i have been reading a series of articles about individuals who are leaving or have left their former places of &amp;nbsp;employment and giving their reasons for leaving.It is very interesting to note that most express dislike about the way things were being steered by their former companies.What is being brought out is that these big companies had turned evil and deviated from their original well meaning motives, if they ever existed.&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
For one, i tend to think that this is natural.In the world there exists no organisation with an altruistic motive.To think of it, the golden rule is always &quot;whats in it for me&quot;.What is actually happening is that eager graduates are drawn in to companies thinking that they are contributing to a greater good, only to realize this years later.Of course there&#39;s the usual bouts of philanthropy that usually exist, but deep down to the core, profit is the main motivation.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Startup founders are encouraged to formulate brilliant ideas by looking for problems to solve, or scratching common itches.Ones success is achieved, it all becomes about maximizing profits.Soon the users needs are swept aside.The outlook currently is that the future is in startups, but remember too that the big corporations which have turned evil were once startups.Inevitably as a startup grows into a large &amp;nbsp;company, moral decay starts occuring.This comes with size and does not occur within a close tightly knit community around a startup because everybody knows everybody and there is close interaction.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
There exists a theory in the field of Organization management that brings out this aspect, that as an organization grows it becomes more and more unstable.so it&#39;s expected.&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecodachi.blogspot.com/feeds/8329617579133361118/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://thecodachi.blogspot.com/2012/03/its-okay-to-leave.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9120308369666896691/posts/default/8329617579133361118'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9120308369666896691/posts/default/8329617579133361118'/><link rel='alternate' type='text/html' href='http://thecodachi.blogspot.com/2012/03/its-okay-to-leave.html' title='It&#39;s okay to leave if things are not as expected'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9120308369666896691.post-5332316592754976586</id><published>2012-03-10T15:45:00.002+03:00</published><updated>2012-03-10T15:51:33.809+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="android"/><category scheme="http://www.blogger.com/atom/ns#" term="database"/><category scheme="http://www.blogger.com/atom/ns#" term="ormlite"/><category scheme="http://www.blogger.com/atom/ns#" term="sqlite"/><title type='text'>Data access on android made easy with OrmLite</title><content type='html'>OrmLite is a wonderful Object Relational Mapper available for the android operating system.&lt;br /&gt;
&lt;br /&gt;
If your using the normal methods to access the sqlite database, then you are bound to find the&lt;br /&gt;
process very tedious.I realized i needed an orm when i found myself writing redundant code and it came to my attention that i was actually writing my own orm.&lt;br /&gt;
&lt;br /&gt;
OrmLite is suited for android because it is lightweight and therefore easy to import to an android project.&lt;br /&gt;
Furthermore it uses java annotations to mark classes to be persisted which make your code look clean and easier to understand.&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: monospace; white-space: pre;&quot;&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;
import com.j256.ormlite.field.DatabaseField;&lt;/span&gt;&lt;br /&gt;
public class Customer {

&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;@DatabaseField
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;int id;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;

&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;@DatabaseField
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;String name;

&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;@DatabaseField
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;String country;

&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;@DatabaseField
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;String phone;

&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;@DatabaseField
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;String address;

&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;@DatabaseField
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;String businessName;


&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;Customer(){
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;  &lt;/span&gt;//used by ormlite
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;}

&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;@Override
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;public String toString(){
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;  &lt;/span&gt;return this.name;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;}

}

&lt;/pre&gt;
&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: 14px; white-space: pre;&quot;&gt;To create a table we use TableUtils&#39; createTable method&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: 14px;&quot;&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;
TableUtils.createTable(connectionSource, Customer.class);
&lt;/pre&gt;
&lt;/span&gt;&lt;/div&gt;

&lt;div&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: 14px;&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: 14px; white-space: pre;&quot;&gt;Data access is done using Daos(Data access Object),these offer convenient&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: 14px; white-space: pre;&quot;&gt;methods for querying, creating, deleting... objects on the sqlite database&lt;/span&gt;&lt;/span&gt;

&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: 14px; white-space: pre;&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: 14px; white-space: pre;&quot;&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;
private Dao&amp;lt;Customer, Integer&amp;gt; customersDao = getDao(Customer.class);&lt;/span&gt;&lt;/span&gt;

&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: 14px; white-space: pre;&quot;&gt;customersDao.create(customer);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: 14px; white-space: pre;&quot;&gt;
&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: 14px; white-space: pre;&quot;&gt;customersDao.delete(customer);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: 14px; white-space: pre;&quot;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: 14px; white-space: pre;&quot;&gt;customersDao.queryForAll();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: 14px; white-space: pre;&quot;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: 14px; white-space: pre;&quot;&gt;
&lt;/span&gt;&lt;/span&gt;
&lt;/pre&gt;

&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: 14px; white-space: pre;&quot;&gt;In conclusion, using ormlite saves more time and is more convenient.&lt;/span&gt;&lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecodachi.blogspot.com/feeds/5332316592754976586/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://thecodachi.blogspot.com/2012/03/data-access-on-android-made-easy-with.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9120308369666896691/posts/default/5332316592754976586'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9120308369666896691/posts/default/5332316592754976586'/><link rel='alternate' type='text/html' href='http://thecodachi.blogspot.com/2012/03/data-access-on-android-made-easy-with.html' title='Data access on android made easy with OrmLite'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9120308369666896691.post-3996691693041908963</id><published>2012-03-10T14:56:00.001+03:00</published><updated>2012-08-22T05:21:15.733+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ACID"/><category scheme="http://www.blogger.com/atom/ns#" term="database"/><category scheme="http://www.blogger.com/atom/ns#" term="django"/><category scheme="http://www.blogger.com/atom/ns#" term="python"/><category scheme="http://www.blogger.com/atom/ns#" term="sqlite"/><category scheme="http://www.blogger.com/atom/ns#" term="transactions"/><title type='text'>Transaction management in django</title><content type='html'>ACID refers to an acronym in the database transactions.Which in full means.Atomic, Consistent, Independent, Durable(or atomicity, consistency, independency and durability).&lt;br /&gt;
&lt;br /&gt;
Atomicity here refers to the idea that a transaction commits(goes through) as a whole or does not commit at all(all or nothing).Various scenarios necessitate the need to maintain atomicity in a transaction.&lt;br /&gt;
&lt;br /&gt;
For instance if you are creating objects which require foreign key relationships with other objects.&lt;br /&gt;
It may be necessary to create the object it is related to on the fly and save it just to make sure the foreign key attribute is satisfied.&lt;br /&gt;
&lt;br /&gt;
when controlling transaction management in views the best approach is to use decorators&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: 12px; line-height: 17px;&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;pre style=&quot;background-attachment: initial; background-clip: initial; background-color: #e0ffb8; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-color: rgb(148, 218, 58); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(148, 218, 58); border-left-style: solid; border-left-width: 0px; border-right-color: rgb(148, 218, 58); border-right-style: solid; border-right-width: 0px; border-top-color: rgb(148, 218, 58); border-top-style: solid; border-top-width: 1px; font-size: medium; margin-bottom: 1em; margin-left: 0px; margin-right: 0px; margin-top: 1em; overflow-x: auto; overflow-y: auto; padding-bottom: 0.3em; padding-left: 0.4em; padding-right: 0.4em; padding-top: 0.3em;&quot;&gt;from django.db import transaction

@transaction.commit_on_success
def viewfunc(request):
    # ...
    # this code executes inside a transaction
    # ...&lt;/pre&gt;
&lt;br /&gt;
There are three types of decorators, autocommit, commit_on_success and commit_manually.&lt;br /&gt;
autocommit does django&#39;s default commit behaviour&lt;br /&gt;
commit_on_success does a single transaction for all the work done in a function, this can be the view function.&lt;br /&gt;
commit_manually lets you control transactions manually by calling commit() and rollback().&lt;br /&gt;
&lt;br /&gt;
Care should be taken when using commit manually() because some transactions may occur in unexpected places which require a commit.This raises an exception in django.&lt;br /&gt;
&lt;br /&gt;
A point to note is that some databases do not support transaction management.It is&amp;nbsp;surprising&amp;nbsp;to note that SQLite db supports transactions while MySQL db does not.</content><link rel='replies' type='application/atom+xml' href='http://thecodachi.blogspot.com/feeds/3996691693041908963/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://thecodachi.blogspot.com/2012/03/transaction-management-in-django.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9120308369666896691/posts/default/3996691693041908963'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9120308369666896691/posts/default/3996691693041908963'/><link rel='alternate' type='text/html' href='http://thecodachi.blogspot.com/2012/03/transaction-management-in-django.html' title='Transaction management in django'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9120308369666896691.post-1311379354791121463</id><published>2012-03-09T03:29:00.000+03:00</published><updated>2012-03-09T03:30:39.867+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="code"/><category scheme="http://www.blogger.com/atom/ns#" term="coding"/><category scheme="http://www.blogger.com/atom/ns#" term="experience"/><title type='text'>programming is all about experience</title><content type='html'>Having spent a couple of years coding and exploring this industry i tend to think the
major factor that influences ones proficiency in coding is experience.&lt;br /&gt;
&lt;br /&gt;
Having experience guarantees that you have made certain mistakes that everybody must 
make in order to become a professional.It also guarantees that you have tried out 
solutions to some common problems encountered every day,have encountered the common
design patterns that exist for creating software and have tried out the major flavors
of programming.&lt;br /&gt;
&lt;br /&gt;
There is the common rule that to master any craft you have to spend 10,000 hours at it,
which also tends to stress the importance of experience.</content><link rel='replies' type='application/atom+xml' href='http://thecodachi.blogspot.com/feeds/1311379354791121463/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://thecodachi.blogspot.com/2012/03/programming-is-all-about-experience.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9120308369666896691/posts/default/1311379354791121463'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9120308369666896691/posts/default/1311379354791121463'/><link rel='alternate' type='text/html' href='http://thecodachi.blogspot.com/2012/03/programming-is-all-about-experience.html' title='programming is all about experience'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9120308369666896691.post-7225499549778451236</id><published>2012-01-29T16:04:00.000+03:00</published><updated>2012-01-29T16:11:49.014+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="code"/><category scheme="http://www.blogger.com/atom/ns#" term="coding"/><category scheme="http://www.blogger.com/atom/ns#" term="nap"/><category scheme="http://www.blogger.com/atom/ns#" term="problem"/><title type='text'>General Problem solving workflow</title><content type='html'>Here is a neat problem solving workflow i borrowed &lt;a href=&quot;https://plus.google.com/114373064968292928213/posts/52UL2K2DSQK&quot;&gt;here&lt;/a&gt;.&lt;br /&gt;It is really helpful when you&#39;re in the middle of a sprint and you&#39;ve hit a &lt;br /&gt;blocker.&lt;br /&gt;Another strategy which i would advocate for and which normally works is &lt;br /&gt;describing the problem to a colleague, most of the time you will answer yourself&lt;br /&gt;while in the process of explaining the problem.&lt;br /&gt;Heavy reliance on google isn&#39;t good as many have pointed that out.Try to solve it yourself if you really want to sharpen your skills.&lt;br /&gt;&lt;br /&gt;Also i would also recommend taking a nap.Research shows that it leads to higher levels of productivity especially during the late hours of the day, you can find a good guide on taking a nap &lt;a href=&quot;http://www.boston.com/bostonglobe/ideas/naps/&quot;&gt;here&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;1) Try it.&lt;br /&gt;2) Get up and walk away.&lt;br /&gt;3) Try again.&lt;br /&gt;4) Go for a walk / do some pushups (gets the blood flowing)&lt;br /&gt;4) Try again.&lt;br /&gt;5) Read the documentation.&lt;br /&gt;6) Try again.&lt;br /&gt;7) Go to the whiteboard and draw it out.&lt;br /&gt;8) Keep trying.&lt;br /&gt;9) Go back to the docs.&lt;br /&gt;10) Try again&lt;br /&gt;11) Look through some sample source code.&lt;br /&gt;12) Try again.&lt;br /&gt;13) Meditate.&lt;br /&gt;14) Try again&lt;br /&gt;15) Keep trying&lt;br /&gt;16) Google it&lt;br /&gt;17) Find a good answer on stack overflow.</content><link rel='replies' type='application/atom+xml' href='http://thecodachi.blogspot.com/feeds/7225499549778451236/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://thecodachi.blogspot.com/2012/01/general-problem-solving-workflow.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9120308369666896691/posts/default/7225499549778451236'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9120308369666896691/posts/default/7225499549778451236'/><link rel='alternate' type='text/html' href='http://thecodachi.blogspot.com/2012/01/general-problem-solving-workflow.html' title='General Problem solving workflow'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9120308369666896691.post-907609993309746633</id><published>2012-01-26T16:31:00.001+03:00</published><updated>2012-01-26T16:40:14.088+03:00</updated><title type='text'>Linux: How to download flash videos part 2</title><content type='html'>As a follow up to part 1 entitled Linux: How to download flash videos from any site i went ahead and created a shell script for automating the entire process.So instead of typing the whole series of commands, just create this script and execute it whenever you wish to download a video.Remember, make sure the video has loaded fully before running the script.The video will be downloaded to the desktop.&lt;br /&gt;&lt;pre class=&quot;prettyprint&quot;&gt;&lt;br /&gt;#!/bin/bash                                                                     &lt;br /&gt;# shell script for downloading flash video files from the active browser        &lt;br /&gt;&lt;br /&gt;proc_number=`pgrep -f flashplayer | wc -l`&lt;br /&gt;&lt;br /&gt;if [ $proc_number = &quot;1&quot; ]&lt;br /&gt;then&lt;br /&gt;    proc_id=`pgrep -f flashplayer`&lt;br /&gt;    cd /proc/$proc_id/fd&lt;br /&gt;    file_number=`ls -l | grep &#39;deleted&#39; | awk &#39;{ print $8 }&#39;`&lt;br /&gt;    cp $file_number ~/Desktop&lt;br /&gt;    echo &quot;One file copied to desktop, name is $file_number&quot;&lt;br /&gt;else&lt;br /&gt;    echo &quot;No files copied&quot;&lt;br /&gt;fi&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Save the file and run chmod 755 to make it executable.Now run it by typing ./[filename]</content><link rel='replies' type='application/atom+xml' href='http://thecodachi.blogspot.com/feeds/907609993309746633/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://thecodachi.blogspot.com/2012/01/linux-how-to-download-flash-videos-part.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9120308369666896691/posts/default/907609993309746633'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9120308369666896691/posts/default/907609993309746633'/><link rel='alternate' type='text/html' href='http://thecodachi.blogspot.com/2012/01/linux-how-to-download-flash-videos-part.html' title='Linux: How to download flash videos part 2'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9120308369666896691.post-3232577148573629046</id><published>2012-01-16T17:40:00.000+03:00</published><updated>2012-01-16T17:47:46.670+03:00</updated><title type='text'>Secure Login to your Google Account</title><content type='html'>If you find yourself in a situation where you need to log into your google account using a public computer, the following steps will let you login without having to type your password on the computer.&lt;br /&gt;
&lt;br /&gt;
This is a useful protective feature by Google to that can help keep your password safe from keyloggers (tools that monitor key presses to determine what the user was typing). Unfortunately, it only works if you have a phone with a QR code scanner.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Steps:&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Go to&amp;nbsp;&lt;a href=&quot;https://accounts.google.com/sesame&quot;&gt;https://accounts.google.com/sesame&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Scan the QR code that is presented to you.&lt;/li&gt;
&lt;li&gt;Open the provided link on your phone browser and login to your Google Account.&lt;/li&gt;
&lt;li&gt;Confirm that your really want to give the computer access to you account&lt;/li&gt;
&lt;li&gt;Once you confirm, the page with the QR code on the computer&#39;s browser will automatically reload into your account.&lt;/li&gt;
&lt;/ol&gt;&lt;b&gt;NB: &lt;/b&gt;Always remember to &lt;b&gt;logout&lt;/b&gt; from your Google Account once you are done if using a public computer.</content><link rel='replies' type='application/atom+xml' href='http://thecodachi.blogspot.com/feeds/3232577148573629046/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://thecodachi.blogspot.com/2012/01/secure-login-to-your-google-account.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9120308369666896691/posts/default/3232577148573629046'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9120308369666896691/posts/default/3232577148573629046'/><link rel='alternate' type='text/html' href='http://thecodachi.blogspot.com/2012/01/secure-login-to-your-google-account.html' title='Secure Login to your Google Account'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/00769492729293631002</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9120308369666896691.post-3589715943641182372</id><published>2012-01-13T16:02:00.001+03:00</published><updated>2012-01-13T16:46:32.575+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="bash"/><category scheme="http://www.blogger.com/atom/ns#" term="flash"/><category scheme="http://www.blogger.com/atom/ns#" term="grep"/><category scheme="http://www.blogger.com/atom/ns#" term="linux"/><category scheme="http://www.blogger.com/atom/ns#" term="ls"/><category scheme="http://www.blogger.com/atom/ns#" term="video"/><title type='text'>Linux: How to download flash videos from any site</title><content type='html'>Navigate to the site on your browser and allow the video to load fully.&lt;br /&gt;&lt;br /&gt;Open up the shell and type the following.&lt;br /&gt;&lt;pre class=&quot;prettyprint&quot;&gt;&lt;br /&gt;~$ pgrep -f flashplayer&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;This will give you some process id(s) of currently active flash player, note this id.&lt;br /&gt;Change directory to the processes folder, and into the fd folder.&lt;br /&gt;&lt;pre class=&quot;prettyprint&quot;&gt;&lt;br /&gt;~$ cd /proc/(pid)/fd&lt;br /&gt;~$ ls -l&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;From the list, find an entry which is located in the tmp directory and has the name deleted in brackets.Note the number just before the path.In this case below it&#39;s 25, this represents the file name of the video.&lt;br /&gt;&lt;pre class=&quot;prettyprint&quot;&gt;&lt;br /&gt;lr-x------ 1 name name 64 2010-01-13 14:41 25 -&gt; /tmp/FlashXXLMneo8 (deleted) &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;copy the video to somewhere convenient like your desktop.&lt;br /&gt;&lt;pre class=&quot;prettyprint&quot;&gt;&lt;br /&gt;~$ cp 25 /home/user/Desktop&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Check your desktop, the file should be present, rename it appropriately.</content><link rel='replies' type='application/atom+xml' href='http://thecodachi.blogspot.com/feeds/3589715943641182372/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://thecodachi.blogspot.com/2012/01/linux-how-to-download-flash-videos-from.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9120308369666896691/posts/default/3589715943641182372'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9120308369666896691/posts/default/3589715943641182372'/><link rel='alternate' type='text/html' href='http://thecodachi.blogspot.com/2012/01/linux-how-to-download-flash-videos-from.html' title='Linux: How to download flash videos from any site'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9120308369666896691.post-819083372816775349</id><published>2012-01-13T14:47:00.000+03:00</published><updated>2012-01-13T16:50:14.728+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="bash"/><category scheme="http://www.blogger.com/atom/ns#" term="emacs"/><category scheme="http://www.blogger.com/atom/ns#" term="linux"/><category scheme="http://www.blogger.com/atom/ns#" term="shell"/><title type='text'>How to create an emacs alias for shell mode</title><content type='html'>Most of the time, i launch emacs from the shell.I usually prefer to use it inside the shell, that is why using the command brings up emacs in windowed mode which is rather annoying.&lt;br /&gt;&lt;pre class=&quot;prettyprint&quot;&gt;&lt;br /&gt;~$ emacs&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;to use emacs in shell mode you have to give it the no window flag, this way.&lt;br /&gt;&lt;pre class=&quot;prettyprint&quot;&gt;&lt;br /&gt;~$ emacs -nw&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;so, this works fine but the problem is that you have to type this every time with the no window flag.To overcome this, you can create a shell alias.This is done by editing the .bashrc file which is usually present in your home directory.At the bottom add the following line, also from examples you can easily learn how to create aliases.&lt;br /&gt;&lt;pre class=&quot;prettyprint&quot;&gt;&lt;br /&gt;alias emacs=&#39;emacs -nw&#39;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Save the changes and restart the shell, you can now try it out.</content><link rel='replies' type='application/atom+xml' href='http://thecodachi.blogspot.com/feeds/819083372816775349/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://thecodachi.blogspot.com/2012/01/how-to-create-emacs-alias-for-shell.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9120308369666896691/posts/default/819083372816775349'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9120308369666896691/posts/default/819083372816775349'/><link rel='alternate' type='text/html' href='http://thecodachi.blogspot.com/2012/01/how-to-create-emacs-alias-for-shell.html' title='How to create an emacs alias for shell mode'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9120308369666896691.post-7818441365947347582</id><published>2012-01-02T13:35:00.000+03:00</published><updated>2012-01-02T14:00:38.983+03:00</updated><title type='text'>how to send mail with django</title><content type='html'>import the following.&lt;br /&gt;&lt;br /&gt;&lt;pre class=&quot;prettyprint&quot;&gt;&lt;br /&gt;from django.core.mail impore EmailMessage&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;in your settings.py put the following:&lt;br /&gt;&lt;br /&gt;EMAIL_HOST  defines the host for sending email&lt;br /&gt;EMAIL_PORT  defines the port for sending email&lt;br /&gt;&lt;br /&gt;EMAIL_HOST_USER  (optional)used to authenticate to the smtp server&lt;br /&gt;EMAIL_HOST_PASSWORD (optional) also used to authenticate to the smtp server&lt;br /&gt;&lt;br /&gt;EMAIL_USE_TLS (True/False) controls whether a secure connection is used&lt;br /&gt;&lt;br /&gt;create an EmailMessage object&lt;br /&gt;&lt;br /&gt;&lt;pre class=&quot;prettyprint&quot;&gt;&lt;br /&gt;email = EmailMessage(&#39;Title&#39;, &#39;Body&#39;, &#39;from@email.com&#39;,&lt;br /&gt;           [&#39;to@email.com&#39;], [&#39;bcc@email.com&#39;],&lt;br /&gt;           headers = {&#39;Reply-To&#39;: &#39;someone@anonymous.com&#39;})&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;send email&lt;br /&gt;&lt;pre class=&quot;prettyprint&quot;&gt;&lt;br /&gt;email.send(fail_silently=True)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;or&lt;br /&gt;&lt;pre class=&quot;prettyprint&quot;&gt;&lt;br /&gt;email.send(fail_silently=False)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;or&lt;br /&gt;&lt;pre class=&quot;prettyprint&quot;&gt;&lt;br /&gt;email.send()&lt;br /&gt;&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecodachi.blogspot.com/feeds/7818441365947347582/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://thecodachi.blogspot.com/2012/01/how-to-send-mail-with-django.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9120308369666896691/posts/default/7818441365947347582'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9120308369666896691/posts/default/7818441365947347582'/><link rel='alternate' type='text/html' href='http://thecodachi.blogspot.com/2012/01/how-to-send-mail-with-django.html' title='how to send mail with django'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>