&lt;?xml version="1.0" encoding="utf-8"?>
        <sphinx:docset>
            <sphinx:schema>
              <sphinx:field name="title"/>
              <sphinx:attr name="title" type="string"/>
              <sphinx:attr name="link" type="string"/>
              <sphinx:field name="content"/>
              <sphinx:attr name="content" type="string"/>
              <sphinx:attr name="pubDate" type="timestamp"/>
              
            </sphinx:schema>
            
            <sphinx:document id="1080 ">
              <title>&lt;![CDATA[Blog Updates]]></title>
              <link>&lt;![CDATA[/2020/07/19/blog-updates/]]></link>
              <pubDate>1595124749</pubDate>
              <content>&lt;![CDATA[Quick update on the blog. I have made some pretty good changes and now this blog should be loading pretty fast. Hope you have a much better experience now :)
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1081 ">
              <title>&lt;![CDATA[Artificial ?]]></title>
              <link>&lt;![CDATA[/2020/06/08/artificial-%F0%9F%92%90/]]></link>
              <pubDate>1591582349</pubDate>
              <content>&lt;![CDATA[ from Instagram: https://instagr.am/p/CBKAsAyjFys/ ]]></content>
             </sphinx:document>
            
            <sphinx:document id="1082 ">
              <title>&lt;![CDATA[ssh trick – with bastion host]]></title>
              <link>&lt;![CDATA[/2019/09/30/ssh-trick-with-bastion-host/]]></link>
              <pubDate>1569804282</pubDate>
              <content>&lt;![CDATA[Lot of times, you have to ssh to a server with bastion host. If you dont know what is bastion host then see this:
Now, in such cases, either you add an entry in “~/.ssh/config
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1083 ">
              <title>&lt;![CDATA[terminal.sexy – make your teminal sexy]]></title>
              <link>&lt;![CDATA[/2019/07/22/terminal-sexy-make-your-teminal-sexy/]]></link>
              <pubDate>1563756911</pubDate>
              <content>&lt;![CDATA[terminal.sexy is a nice webpage that allows you to select the colors for your terminal and then you can export it in various formats.
Main site : http://terminal.sexy
and for the source code: Github URL
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1084 ">
              <title>&lt;![CDATA[IT Trends That Will Boost Global Economic Growth]]></title>
              <link>&lt;![CDATA[/2019/05/06/it-trends-that-will-boost-global-economic-growth/]]></link>
              <pubDate>1557104632</pubDate>
              <content>&lt;![CDATA[ IT has been known to have a great impact on the global economy and has been linked to marketplace transformation, better standards of living, and international trade, among other things. &amp;lt;p dir=&amp;quot;ltr&amp;quot;&amp;gt; Here are some &amp;lt;a href=&amp;quot;https://techjury.net/blog/information-technology-trends/&amp;quot;&amp;gt;IT trends&amp;lt;/a&amp;gt; that are expected to further boost the economy in the near future. &amp;lt;/p&amp;gt; &amp;lt;p dir=&amp;quot;ltr&amp;quot;&amp;gt; IT Trends That Will Boost Economic Growth &amp;lt;/p&amp;gt; &amp;lt;p dir=&amp;quot;ltr&amp;quot;&amp;gt; Artificial Intelligence &amp;lt;/p&amp;gt; &amp;lt;p dir=&amp;quot;ltr&amp;quot;&amp;gt; This is the use of robots and artificial intelligence to carry out task previously done by humans. AI tech and its related technologies will help boost economic growth by creating many new jobs, increase production efficiency, reduce costs, and improve the quality of products. &amp;lt;/p&amp;gt; &amp;lt;p dir=&amp;quot;ltr&amp;quot;&amp;gt; 5G &amp;lt;/p&amp;gt; &amp;lt;p dir=&amp;quot;ltr&amp;quot;&amp;gt; &amp;lt;a href=&amp;quot;https://www.techradar.com/news/what-is-5g-everything-you-need-to-know&amp;quot;&amp;gt;5G&amp;lt;/a&amp;gt; is the next generation of mobile wireless network technology. It is believed that 5G will improve customer experiences and business utility via effective connectivity and faster data transmission. &amp;lt;/p&amp;gt; &amp;lt;p dir=&amp;quot;ltr&amp;quot;&amp;gt; 5G stands as a change from previous generations of mobile technology. It enables lower latency, thereby reducing the time signals need to travel through the network. This makes it possible for it to support a wider range of applications, robotics, and the Internet-of-Things (IoT). &amp;lt;/p&amp;gt; &amp;lt;p dir=&amp;quot;ltr&amp;quot;&amp;gt; Blockchain Technology &amp;lt;/p&amp;gt; &amp;lt;p dir=&amp;quot;ltr&amp;quot;&amp;gt; The use of blockchain technology has grown steadily over the years. The healthcare sector is the major user, closely followed by financial institutions. Blockchain technology has a lot of untapped potentials, as it helps to improve transparency, reduce transaction costs, reduce frauds, increase overall operating efficiency, etc. &amp;lt;/p&amp;gt; &amp;lt;p dir=&amp;quot;ltr&amp;quot;&amp;gt; Three-Dimensional (3D) Printing &amp;lt;/p&amp;gt; &amp;lt;p dir=&amp;quot;ltr&amp;quot;&amp;gt; &amp;lt;a href=&amp;quot;https://3dprinting.com/what-is-3d-printing/&amp;quot;&amp;gt;3D printing&amp;lt;/a&amp;gt; is rapidly changing the way we live and conduct businesses. 3D technology is already being used in several industries for a wide range of purposes. It will also be of great use in the healthcare sector, manufacturing industries, and so on. &amp;lt;/p&amp;gt; &amp;lt;p dir=&amp;quot;ltr&amp;quot;&amp;gt; To learn more about these and other IT trends, check out the infographic &amp;lt;a href=&amp;quot;http://blog.amit-agarwal.co.in/2019/04/15/how-much-money-flows-through-it/&amp;quot;&amp;gt;here&amp;lt;/a&amp;gt;. &amp;lt;/p&amp;gt; ]]></content>
             </sphinx:document>
            
            <sphinx:document id="1085 ">
              <title>&lt;![CDATA[How much money flows through IT]]></title>
              <link>&lt;![CDATA[/2019/04/15/how-much-money-flows-through-it/]]></link>
              <pubDate>1555290016</pubDate>
              <content>&lt;![CDATA[Check out this amazing infographic
Global IT Economics [Infographic] ]]></content>
             </sphinx:document>
            
            <sphinx:document id="1086 ">
              <title>&lt;![CDATA[Use Linux on your Android mobile/tablet (without root)]]></title>
              <link>&lt;![CDATA[/2018/11/26/use-linux-on-your-android-mobile-tablet-without-root/]]></link>
              <pubDate>1543194023</pubDate>
              <content>&lt;![CDATA[Been looking for this for a long time, finally there is some app which allows me to run a linux distro without rooting my gadget.
Here is link to userland.tech website. Check this out, its easy to setup and does not require rooting your device.
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1087 ">
              <title>&lt;![CDATA[Get to your ebooks quickly]]></title>
              <link>&lt;![CDATA[/2018/11/12/get-to-your-ebooks-quickly/]]></link>
              <pubDate>1541984703</pubDate>
              <content>&lt;![CDATA[ So this is going to be a little longer post than usual.
To begin with, here is screenshot of how it would look like finally: We are using “rofi” here to show the menu. So, lets first install that
cat &amp;lt;&amp;lt;EOF &amp;gt;/etc/yum.repos.d/_copr_yaroslav-i3desktop.repo [yaroslav-i3desktop]name=Copr repo for i3desktop owned by yaroslavbaseurl=https://copr-be.cloud.fedoraproject.org/results/yaroslav/i3desktop/fedora-$releasever-$basearch/type=rpm-mdskip_if_unavailable=Truegpgcheck=1gpgkey=https://copr-be.cloud.fedoraproject.org/results/yaroslav/i3desktop/pubkey.gpgrepo_gpgcheck=0enabled=1EOFyum install rofi Once that is done, we will create a small script to look for all our pdf files and display that in the menu, like above. Save this as ~/bin/books-search.sh : #!/usr/bin/env bash## wget &#39;https://raw.githubusercontent.com/miroslavvidovic/rofi-scripts/master/books-search/books-search.sh&#39;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;ndash; Info: author: Miroslav Vidovic file: books-search.sh created: 13.08.2017.-08:06:54 revision: &amp;mdash; version: 1.0 &amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;ndash; Requirements: rofi Description: Use rofi to search my books. Usage: books-search.sh &amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;ndash; Script: Modified by Amit Agarwal Books directory BOOKS_DIR=/usr/share/texlive/texmf-dist/doc/
Save find result to F_ARRAY readarray -t F_ARRAY &amp;lt;&amp;lt;&amp;lt; &amp;ldquo;$(find &amp;ldquo;$BOOKS_DIR&amp;rdquo; -type f -name &amp;lsquo;*.pdf&amp;rsquo;)&amp;rdquo;
Associative array for storing books key =&amp;gt; book name value =&amp;gt; absolute path to the file BOOKS[&amp;lsquo;filename&amp;rsquo;]=&amp;lsquo;path&amp;rsquo; declare -A BOOKS
Add elements to BOOKS array get_books() { for i in &amp;ldquo;${!F_ARRAY[@]}&amp;rdquo; do path=${F_ARRAY[$i]} file=$(basename &amp;ldquo;${F_ARRAY[$i]}&amp;rdquo;) BOOKS&#43;=([&amp;quot;$file&amp;quot;]=&amp;quot;$path&amp;quot;) done }
List for rofi gen_list(){ for i in &amp;ldquo;${!BOOKS[@]}&amp;rdquo; do echo &amp;ldquo;$i&amp;rdquo; done }
main() { get_books
book=$( (gen_list) | rofi -dmenu -lines 10 -width 100 -i -matching fuzzy -only-match -location 0 -fake-transparency -p &amp;ldquo;Book &amp;gt; &amp;quot; ) book=$( (gen_list) | rofi -dmenu -i -matching fuzzy -only-match -p &amp;ldquo;Book &amp;gt; &amp;quot; ) xdg-open &amp;ldquo;${BOOKS[$book]}&amp;rdquo; }
main exit 0
In the above script, change the BOOKS_DIR to the one that you would like to see. And finally make some cosmetic changes: cat &amp;lt;&amp;lt;EOF &amp;gt;~/.Xresources rofi.color-enabled: truerofi.opacity: 50rofi.width: 100rofi.lines: 10rofi.columns: 4rofi.font: System San Francisco Display 8rofi.color-normal: #fdf6e3,#002b36,#eee8d5,#586e75,#eee8d5rofi.color-urgent: #fdf6e3,#dc322f,#eee8d5,#dc322f,#fdf6e3rofi.color-active: #fdf6e3,#268bd2,#eee8d5,#268bd2,#fdf6e3rofi.color-window: #fdf6e3,#002b36rofi.yoffset: 0rofi.xoffset: 0rofi.fixed-num-lines: falserofi.terminal: rofi-sensible-terminalrofi.ssh-client: sshrofi.ssh-command: {terminal} -e {ssh-client} {host}rofi.run-command: {cmd}rofi.run-list-command: rofi.run-shell-command: {terminal} -e {cmd}rofi.window-command: xkill -id {window}rofi.disable-history: falserofi.levenshtein-sort: falserofi.case-sensitive: falserofi.cycle: truerofi.sidebar-mode: falserofi.auto-select: falserofi.parse-hosts: truerofi.parse-known-hosts: truerofi.combi-modi: window,runrofi.fuzzy: truerofi.glob: falserofi.regex: falserofi.tokenize: truerofi.m: -1rofi.line-margin: 2rofi.filter: rofi.separator-style: dashrofi.hide-scrollbar: falserofi.fullscreen: falserofi.fake-transparency: truerofi.dpi: -1rofi.threads: 1rofi.scrollbar-width: 8rofi.scroll-method: 0rofi.fake-background: screenshotrofi.display-ssh: rofi.display-run: rofi.display-drun: rofi.display-combi:EOFxrdb -merge ~/.Xresources
Finally for easy access, you might want to bind a key to lauch the script that we created and voila. ]]></content>
             </sphinx:document>
            
            <sphinx:document id="1088 ">
              <title>&lt;![CDATA[Styled-Components: CSS-in-JS Library for the Modern Web]]></title>
              <link>&lt;![CDATA[/2018/06/25/styled-components-css-in-js-library-modern-web/]]></link>
              <pubDate>1529889106</pubDate>
              <content>&lt;![CDATA[ This post was written by Jeremy Davis, JavaScript Developer for Toptal. CSS was designed for documents, what the “old web” was expected to contain. The emergence of preprocessors like Sass or Less shows that the community needs more than what CSS offers. With web apps getting more and more complex over time, CSS’ limitations have become increasingly visible and difficult to mitigate.
Styled-components leverages the power of a complete programming language—JavaScript—and its scoping capabilities to help structure the code into components. This helps to avoid the common pitfalls of writing and maintaining CSS for large projects. A developer can describe a component’s style with no risk of side effects.
What’s the Problem? One advantage of using CSS is that the style is completely decoupled from the code. This means that developers and designers can work in parallel without interfering with each other.
On the other hand, styled-components makes it easier to fall in the trap of strongly coupling style and logic. Max Stoiber explains how to avoid this. While the idea of separating logic and presentation is definitely not new, one might be tempted to take shortcuts when developing React components. For example, it’s easy to create a component for a validation button that handles the click action as well as the button’s style. It takes a bit more effort to split it in two components.
The Container/Presentational Architecture This is a pretty simple principle. Components either define how things look, or they manage data and logic. A very important aspect of presentation components is that they should never have any dependencies. They receive props and render DOM (or children) accordingly. Containers, on the other hand, know about the data architecture (state, redux, flux, etc.) but should never be responsible for display. Dan Abramov’s article is a very good and detailed explanation of this architecture.
Remembering SMACSS Although the Scalable and Modular Architecture for CSS is a style guide for organizing CSS, the basic concept is one that is followed, for the most part automatically, by styled-components. The idea is to separate CSS into five categories:
Base contains all the general rules. Layout’s purpose it to define the structural properties as well as various sections of content (header, footer, sidebar, content, for instance). Module contains subcategories for the various logical blocks of the UI. State defines modifier classes to indicate elements’ states, e.g. field in error, disabled button. Theme contains color, font, and other cosmetic aspects that may be modifiable or dependent on user preference. Keeping this separation while using styled-components is easy. Projects usually include some kind of CSS normalization or reset. This typically falls in the Base category. You may also define general font sizing, line sizing, etc. This can be done through normal CSS (or Sass/Less), or through the 1
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; injectGlobal &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; function provided by styled-components.
For Layout rules, if you use a UI framework, then it will probably define container classes, or a grid system. You can easily use those classes in conjunction with your own rules in the layout components you write.
Module is automatically followed by the architecture of styled-components, since the styles are attached to components directly, rather than described in external files. Basically, each styled component that you write will be its own module. You can write your styling code without worrying about side effects.
State will be rules you define within your components as variable rules. You simply define a function to interpolate values of your CSS attributes. If using a UI framework, you might have useful classes to add to your components as well. You will probably also have CSS pseudo-selector rules (hover, focus, etc.)
The Theme can simply be interpolated within your components. It is a good idea to define your theme as a set of variables to be used throughout your application. You can even derive colors programmatically (using a library, or manually), for instance to handle contrasts and highlights. Remember that you have the full power of a programming language at your disposal!
Bring Them Together for a Solution It is important to keep them together, for an easier navigation experience; We don’t want to organize them by type (presentation vs. logic) but rather by functionality.
Thus, we will have a folder for all the generic components (buttons and such). The others should be organized depending on the project and its functionalities. For instance, if we have user management features, we should group all the components specific to that feature.
To apply styled-components’ container/presentation architecture to a SMACSS approach, we need an extra type of component: structural. We end up with three kinds of components; styled, structural, and container. Since styled-components decorates a tag (or component), we need this third type of component to structure the DOM. In some cases, it might be possible to allow a container component to handle the structure of sub-components, but when the DOM structure becomes complex and is required for visual purposes, it’s best to separate them. A good example is a table, where the DOM typically gets quite verbose.
Example Project Let’s build a small app that displays recipes to illustrate these principles. We can start building a Recipes component. The parent component will be a controller. It will handle the state—in this case, the list of recipes. It will also call an API function to fetch the data.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
&amp;lt;span class=&#34;hljs-class&#34;&amp;gt;&amp;lt;span class=&#34;hljs-keyword&#34;&amp;gt;class&amp;lt;/span&amp;gt; &amp;lt;span class=&#34;hljs-title&#34;&amp;gt;Recipes&amp;lt;/span&amp;gt; &amp;lt;span class=&#34;hljs-keyword&#34;&amp;gt;extends&amp;lt;/span&amp;gt; &amp;lt;span class=&#34;hljs-title&#34;&amp;gt;Component&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;{
&amp;nbsp; &amp;lt;span class=&#34;hljs-keyword&#34;&amp;gt;constructor&amp;lt;/span&amp;gt; (props) {
&amp;nbsp; &amp;nbsp; &amp;lt;span class=&#34;hljs-keyword&#34;&amp;gt;super&amp;lt;/span&amp;gt;(props);
&amp;nbsp; &amp;nbsp; &amp;lt;span class=&#34;hljs-keyword&#34;&amp;gt;this&amp;lt;/span&amp;gt;.state = {
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;span class=&#34;hljs-attr&#34;&amp;gt;recipes&amp;lt;/span&amp;gt;: []
&amp;nbsp; &amp;nbsp; };
&amp;nbsp; }
&amp;nbsp; componentDidMount () {
&amp;nbsp; &amp;nbsp; &amp;lt;span class=&#34;hljs-keyword&#34;&amp;gt;this&amp;lt;/span&amp;gt;.loadData()
&amp;nbsp; }
&amp;nbsp; loadData () {
&amp;nbsp; &amp;nbsp; getRecipes().then(&amp;lt;span class=&#34;hljs-function&#34;&amp;gt;&amp;lt;span class=&#34;hljs-params&#34;&amp;gt;recipes&amp;lt;/span&amp;gt; =&amp;gt;&amp;lt;/span&amp;gt; {
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;span class=&#34;hljs-keyword&#34;&amp;gt;this&amp;lt;/span&amp;gt;.setState({recipes})
&amp;nbsp; &amp;nbsp; })
&amp;nbsp; }
&amp;nbsp; render() {
&amp;nbsp; &amp;nbsp; &amp;lt;span class=&#34;hljs-keyword&#34;&amp;gt;let&amp;lt;/span&amp;gt; {recipes} = &amp;lt;span class=&#34;hljs-keyword&#34;&amp;gt;this&amp;lt;/span&amp;gt;.state
&amp;nbsp; &amp;nbsp; &amp;lt;span class=&#34;hljs-keyword&#34;&amp;gt;return&amp;lt;/span&amp;gt; (
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;span class=&#34;xml&#34;&amp;gt;&amp;lt;span class=&#34;hljs-tag&#34;&amp;gt;&amp;lt;&amp;lt;span class=&#34;hljs-name&#34;&amp;gt;RecipesContainer&amp;lt;/span&amp;gt; &amp;lt;span class=&#34;hljs-attr&#34;&amp;gt;recipes&amp;lt;/span&amp;gt;=&amp;lt;span class=&#34;hljs-string&#34;&amp;gt;{recipes}&amp;lt;/span&amp;gt; /&amp;gt;&amp;lt;/span&amp;gt;
&amp;nbsp; &amp;nbsp; )
&amp;nbsp; }
}
&amp;lt;/span&amp;gt; It will render the list of recipes, but it does not (and should not) need to know how. So we render another component that gets the list of recipes and outputs DOM:
1
2
3
4
5
6
7
8
9
10
11
12
&amp;lt;span class=&#34;hljs-class&#34;&amp;gt;&amp;lt;span class=&#34;hljs-keyword&#34;&amp;gt;class&amp;lt;/span&amp;gt; &amp;lt;span class=&#34;hljs-title&#34;&amp;gt;RecipesContainer&amp;lt;/span&amp;gt; &amp;lt;span class=&#34;hljs-keyword&#34;&amp;gt;extends&amp;lt;/span&amp;gt; &amp;lt;span class=&#34;hljs-title&#34;&amp;gt;Component&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;{
&amp;nbsp; render() {
&amp;nbsp; &amp;nbsp; &amp;lt;span class=&#34;hljs-keyword&#34;&amp;gt;let&amp;lt;/span&amp;gt; {recipes} = &amp;lt;span class=&#34;hljs-keyword&#34;&amp;gt;this&amp;lt;/span&amp;gt;.props
&amp;nbsp; &amp;nbsp; &amp;lt;span class=&#34;hljs-keyword&#34;&amp;gt;return&amp;lt;/span&amp;gt; (
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;span class=&#34;xml&#34;&amp;gt;&amp;lt;span class=&#34;hljs-tag&#34;&amp;gt;&amp;lt;&amp;lt;span class=&#34;hljs-name&#34;&amp;gt;TilesContainer&amp;lt;/span&amp;gt;&amp;gt;&amp;lt;/span&amp;gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {recipes.map(recipe =&amp;gt; (&amp;lt;span class=&#34;hljs-tag&#34;&amp;gt;&amp;lt;&amp;lt;span class=&#34;hljs-name&#34;&amp;gt;Recipe&amp;lt;/span&amp;gt; &amp;lt;span class=&#34;hljs-attr&#34;&amp;gt;key&amp;lt;/span&amp;gt;=&amp;lt;span class=&#34;hljs-string&#34;&amp;gt;{recipe.id}&amp;lt;/span&amp;gt; {&amp;lt;span class=&#34;hljs-attr&#34;&amp;gt;...recipe&amp;lt;/span&amp;gt;}/&amp;gt;&amp;lt;/span&amp;gt;))}
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;span class=&#34;hljs-tag&#34;&amp;gt;&amp;lt;/&amp;lt;span class=&#34;hljs-name&#34;&amp;gt;TilesContainer&amp;lt;/span&amp;gt;&amp;gt;&amp;lt;/span&amp;gt;
&amp;nbsp; &amp;nbsp; )
&amp;nbsp; }
}
&amp;lt;/span&amp;gt; Here, actually, we want to make a tile grid. It may be a good idea to make the actual tile layout a generic component. So if we extract that, we get a new component that looks like this:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
&amp;lt;span class=&#34;hljs-class&#34;&amp;gt;&amp;lt;span class=&#34;hljs-keyword&#34;&amp;gt;class&amp;lt;/span&amp;gt; &amp;lt;span class=&#34;hljs-title&#34;&amp;gt;TilesContainer&amp;lt;/span&amp;gt; &amp;lt;span class=&#34;hljs-keyword&#34;&amp;gt;extends&amp;lt;/span&amp;gt; &amp;lt;span class=&#34;hljs-title&#34;&amp;gt;Component&amp;lt;/span&amp;gt; &amp;lt;/span&amp;gt;{
&amp;nbsp; render () {
&amp;nbsp; &amp;nbsp; &amp;lt;span class=&#34;hljs-keyword&#34;&amp;gt;let&amp;lt;/span&amp;gt; {children} = &amp;lt;span class=&#34;hljs-keyword&#34;&amp;gt;this&amp;lt;/span&amp;gt;.props
&amp;nbsp; &amp;nbsp; &amp;lt;span class=&#34;hljs-keyword&#34;&amp;gt;return&amp;lt;/span&amp;gt; (
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;span class=&#34;xml&#34;&amp;gt;&amp;lt;span class=&#34;hljs-tag&#34;&amp;gt;&amp;lt;&amp;lt;span class=&#34;hljs-name&#34;&amp;gt;Tiles&amp;lt;/span&amp;gt;&amp;gt;&amp;lt;/span&amp;gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; React.Children.map(children, (child, i) =&amp;gt; (
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;span class=&#34;hljs-tag&#34;&amp;gt;&amp;lt;&amp;lt;span class=&#34;hljs-name&#34;&amp;gt;Tile&amp;lt;/span&amp;gt; &amp;lt;span class=&#34;hljs-attr&#34;&amp;gt;key&amp;lt;/span&amp;gt;=&amp;lt;span class=&#34;hljs-string&#34;&amp;gt;{i}&amp;lt;/span&amp;gt;&amp;gt;&amp;lt;/span&amp;gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {child}
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;span class=&#34;hljs-tag&#34;&amp;gt;&amp;lt;/&amp;lt;span class=&#34;hljs-name&#34;&amp;gt;Tile&amp;lt;/span&amp;gt;&amp;gt;&amp;lt;/span&amp;gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ))
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;span class=&#34;hljs-tag&#34;&amp;gt;&amp;lt;/&amp;lt;span class=&#34;hljs-name&#34;&amp;gt;Tiles&amp;lt;/span&amp;gt;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;
&amp;nbsp; &amp;nbsp; )
&amp;nbsp; }
} TilesStyles.js:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
&amp;lt;span class=&#34;hljs-keyword&#34;&amp;gt;export&amp;lt;/span&amp;gt; &amp;lt;span class=&#34;hljs-keyword&#34;&amp;gt;const&amp;lt;/span&amp;gt; Tiles = styled.div&amp;lt;span class=&#34;hljs-string&#34;&amp;gt;`
&amp;nbsp; padding: 20px 10px;
&amp;nbsp; display: flex;
&amp;nbsp; flex-direction: row;
&amp;nbsp; flex-wrap: wrap;
`&amp;lt;/span&amp;gt;
&amp;lt;span class=&#34;hljs-keyword&#34;&amp;gt;export&amp;lt;/span&amp;gt; &amp;lt;span class=&#34;hljs-keyword&#34;&amp;gt;const&amp;lt;/span&amp;gt; Tile = styled.div&amp;lt;span class=&#34;hljs-string&#34;&amp;gt;`
&amp;nbsp; flex: 1 1 auto;
&amp;nbsp; ...
&amp;nbsp; display: flex;
&amp;nbsp; &amp;amp; &amp;gt; div {
&amp;nbsp; &amp;nbsp; flex: 1 0 auto;
&amp;nbsp; }
`&amp;lt;/span&amp;gt; Notice that this component is purely presentational. It defines its style and wraps whatever children it receives inside another styled DOM element that defines what tiles look like. It’s a good example of what your generic presentational components will look like architecturally.
Then, we need to define what a recipe looks like. We need a container component to describe the relatively complex DOM as well as define the style when necessary. We end up with this:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
&amp;lt;span class=&#34;hljs-class&#34;&amp;gt;&amp;lt;span class=&#34;hljs-keyword&#34;&amp;gt;class&amp;lt;/span&amp;gt; &amp;lt;span class=&#34;hljs-title&#34;&amp;gt;RecipeContainer&amp;lt;/span&amp;gt; &amp;lt;span class=&#34;hljs-keyword&#34;&amp;gt;extends&amp;lt;/span&amp;gt; &amp;lt;span class=&#34;hljs-title&#34;&amp;gt;Component&amp;lt;/span&amp;gt; &amp;lt;/span&amp;gt;{
&amp;nbsp; onChangeServings (e) {
&amp;nbsp; &amp;nbsp; &amp;lt;span class=&#34;hljs-keyword&#34;&amp;gt;let&amp;lt;/span&amp;gt; {changeServings} = &amp;lt;span class=&#34;hljs-keyword&#34;&amp;gt;this&amp;lt;/span&amp;gt;.props
&amp;nbsp; &amp;nbsp; changeServings(e.target.value)
&amp;nbsp; }
&amp;nbsp; render () {
&amp;nbsp; &amp;nbsp; &amp;lt;span class=&#34;hljs-keyword&#34;&amp;gt;let&amp;lt;/span&amp;gt; {title, ingredients, instructions, time, servings} = &amp;lt;span class=&#34;hljs-keyword&#34;&amp;gt;this&amp;lt;/span&amp;gt;.props
&amp;nbsp; &amp;nbsp; &amp;lt;span class=&#34;hljs-keyword&#34;&amp;gt;return&amp;lt;/span&amp;gt; (
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;span class=&#34;xml&#34;&amp;gt;&amp;lt;span class=&#34;hljs-tag&#34;&amp;gt;&amp;lt;&amp;lt;span class=&#34;hljs-name&#34;&amp;gt;Recipe&amp;lt;/span&amp;gt;&amp;gt;&amp;lt;/span&amp;gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;span class=&#34;hljs-tag&#34;&amp;gt;&amp;lt;&amp;lt;span class=&#34;hljs-name&#34;&amp;gt;Title&amp;lt;/span&amp;gt;&amp;gt;&amp;lt;/span&amp;gt;{title}&amp;lt;span class=&#34;hljs-tag&#34;&amp;gt;&amp;lt;/&amp;lt;span class=&#34;hljs-name&#34;&amp;gt;Title&amp;lt;/span&amp;gt;&amp;gt;&amp;lt;/span&amp;gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;span class=&#34;hljs-tag&#34;&amp;gt;&amp;lt;&amp;lt;span class=&#34;hljs-name&#34;&amp;gt;div&amp;lt;/span&amp;gt;&amp;gt;&amp;lt;/span&amp;gt;{time}&amp;lt;span class=&#34;hljs-tag&#34;&amp;gt;&amp;lt;/&amp;lt;span class=&#34;hljs-name&#34;&amp;gt;div&amp;lt;/span&amp;gt;&amp;gt;&amp;lt;/span&amp;gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;span class=&#34;hljs-tag&#34;&amp;gt;&amp;lt;&amp;lt;span class=&#34;hljs-name&#34;&amp;gt;div&amp;lt;/span&amp;gt;&amp;gt;&amp;lt;/span&amp;gt;Serving
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;span class=&#34;hljs-tag&#34;&amp;gt;&amp;lt;&amp;lt;span class=&#34;hljs-name&#34;&amp;gt;input&amp;lt;/span&amp;gt; &amp;lt;span class=&#34;hljs-attr&#34;&amp;gt;type&amp;lt;/span&amp;gt;=&amp;lt;span class=&#34;hljs-string&#34;&amp;gt;&#34;number&#34;&amp;lt;/span&amp;gt; &amp;lt;span class=&#34;hljs-attr&#34;&amp;gt;min&amp;lt;/span&amp;gt;=&amp;lt;span class=&#34;hljs-string&#34;&amp;gt;&#34;1&#34;&amp;lt;/span&amp;gt; &amp;lt;span class=&#34;hljs-attr&#34;&amp;gt;max&amp;lt;/span&amp;gt;=&amp;lt;span class=&#34;hljs-string&#34;&amp;gt;&#34;1000&#34;&amp;lt;/span&amp;gt; &amp;lt;span class=&#34;hljs-attr&#34;&amp;gt;value&amp;lt;/span&amp;gt;=&amp;lt;span class=&#34;hljs-string&#34;&amp;gt;{servings}&amp;lt;/span&amp;gt; &amp;lt;span class=&#34;hljs-attr&#34;&amp;gt;onChange&amp;lt;/span&amp;gt;=&amp;lt;span class=&#34;hljs-string&#34;&amp;gt;{this.onChangeServings.bind(this)}/&amp;lt;/span&amp;gt;&amp;gt;&amp;lt;/span&amp;gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;span class=&#34;hljs-tag&#34;&amp;gt;&amp;lt;/&amp;lt;span class=&#34;hljs-name&#34;&amp;gt;div&amp;lt;/span&amp;gt;&amp;gt;&amp;lt;/span&amp;gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;span class=&#34;hljs-tag&#34;&amp;gt;&amp;lt;&amp;lt;span class=&#34;hljs-name&#34;&amp;gt;Ingredients&amp;lt;/span&amp;gt;&amp;gt;&amp;lt;/span&amp;gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {ingredients.map((ingredient, i) =&amp;gt; (
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;span class=&#34;hljs-tag&#34;&amp;gt;&amp;lt;&amp;lt;span class=&#34;hljs-name&#34;&amp;gt;Ingredient&amp;lt;/span&amp;gt; &amp;lt;span class=&#34;hljs-attr&#34;&amp;gt;key&amp;lt;/span&amp;gt;=&amp;lt;span class=&#34;hljs-string&#34;&amp;gt;{i}&amp;lt;/span&amp;gt; &amp;lt;span class=&#34;hljs-attr&#34;&amp;gt;servings&amp;lt;/span&amp;gt;=&amp;lt;span class=&#34;hljs-string&#34;&amp;gt;{servings}&amp;lt;/span&amp;gt;&amp;gt;&amp;lt;/span&amp;gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;span class=&#34;hljs-tag&#34;&amp;gt;&amp;lt;&amp;lt;span class=&#34;hljs-name&#34;&amp;gt;span&amp;lt;/span&amp;gt; &amp;lt;span class=&#34;hljs-attr&#34;&amp;gt;className&amp;lt;/span&amp;gt;=&amp;lt;span class=&#34;hljs-string&#34;&amp;gt;&#34;name&#34;&amp;lt;/span&amp;gt;&amp;gt;&amp;lt;/span&amp;gt;{ingredient.name}&amp;lt;span class=&#34;hljs-tag&#34;&amp;gt;&amp;lt;/&amp;lt;span class=&#34;hljs-name&#34;&amp;gt;span&amp;lt;/span&amp;gt;&amp;gt;&amp;lt;/span&amp;gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;span class=&#34;hljs-tag&#34;&amp;gt;&amp;lt;&amp;lt;span class=&#34;hljs-name&#34;&amp;gt;span&amp;lt;/span&amp;gt; &amp;lt;span class=&#34;hljs-attr&#34;&amp;gt;className&amp;lt;/span&amp;gt;=&amp;lt;span class=&#34;hljs-string&#34;&amp;gt;&#34;quantity&#34;&amp;lt;/span&amp;gt;&amp;gt;&amp;lt;/span&amp;gt;{ingredient.quantity * servings} {ingredient.unit}&amp;lt;span class=&#34;hljs-tag&#34;&amp;gt;&amp;lt;/&amp;lt;span class=&#34;hljs-name&#34;&amp;gt;span&amp;lt;/span&amp;gt;&amp;gt;&amp;lt;/span&amp;gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;span class=&#34;hljs-tag&#34;&amp;gt;&amp;lt;/&amp;lt;span class=&#34;hljs-name&#34;&amp;gt;Ingredient&amp;lt;/span&amp;gt;&amp;gt;&amp;lt;/span&amp;gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ))}
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;span class=&#34;hljs-tag&#34;&amp;gt;&amp;lt;/&amp;lt;span class=&#34;hljs-name&#34;&amp;gt;Ingredients&amp;lt;/span&amp;gt;&amp;gt;&amp;lt;/span&amp;gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;span class=&#34;hljs-tag&#34;&amp;gt;&amp;lt;&amp;lt;span class=&#34;hljs-name&#34;&amp;gt;div&amp;lt;/span&amp;gt;&amp;gt;&amp;lt;/span&amp;gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {instructions.map((instruction, i) =&amp;gt; (&amp;lt;span class=&#34;hljs-tag&#34;&amp;gt;&amp;lt;&amp;lt;span class=&#34;hljs-name&#34;&amp;gt;p&amp;lt;/span&amp;gt; &amp;lt;span class=&#34;hljs-attr&#34;&amp;gt;key&amp;lt;/span&amp;gt;=&amp;lt;span class=&#34;hljs-string&#34;&amp;gt;{i}&amp;lt;/span&amp;gt;&amp;gt;&amp;lt;/span&amp;gt;{instruction}&amp;lt;span class=&#34;hljs-tag&#34;&amp;gt;&amp;lt;/&amp;lt;span class=&#34;hljs-name&#34;&amp;gt;p&amp;lt;/span&amp;gt;&amp;gt;&amp;lt;/span&amp;gt;))}
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;span class=&#34;hljs-tag&#34;&amp;gt;&amp;lt;/&amp;lt;span class=&#34;hljs-name&#34;&amp;gt;div&amp;lt;/span&amp;gt;&amp;gt;&amp;lt;/span&amp;gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;span class=&#34;hljs-tag&#34;&amp;gt;&amp;lt;/&amp;lt;span class=&#34;hljs-name&#34;&amp;gt;Recipe&amp;lt;/span&amp;gt;&amp;gt;&amp;lt;/span&amp;gt;
&amp;nbsp; &amp;nbsp; )
&amp;nbsp; }
}
&amp;lt;/span&amp;gt; Notice here that the container does some DOM generation, but it’s the only logic it contains. Remember that you can define nested styles, so you don’t need to make a styled element for each tag that requires styling. It’s what we do here for the name and quantity of the ingredient item. Of course, we could split it further and create a new component for an ingredient. That is up to you—depending on the project complexity—to determine the granularity. In this case, it is just a styled component defined along with the rest in the RecipeStyles file:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
&amp;lt;span class=&#34;hljs-keyword&#34;&amp;gt;export&amp;lt;/span&amp;gt; &amp;lt;span class=&#34;hljs-keyword&#34;&amp;gt;const&amp;lt;/span&amp;gt; Recipe = styled.div&amp;lt;span class=&#34;hljs-string&#34;&amp;gt;`
&amp;nbsp; background-color: &amp;lt;span class=&#34;hljs-subst&#34;&amp;gt;${theme(&#39;colors.background-highlight&#39;)}&amp;lt;/span&amp;gt;;
`&amp;lt;/span&amp;gt;;
&amp;lt;span class=&#34;hljs-keyword&#34;&amp;gt;export&amp;lt;/span&amp;gt; &amp;lt;span class=&#34;hljs-keyword&#34;&amp;gt;const&amp;lt;/span&amp;gt; Title = styled.div&amp;lt;span class=&#34;hljs-string&#34;&amp;gt;`
&amp;nbsp; font-weight: bold;
`&amp;lt;/span&amp;gt;
&amp;lt;span class=&#34;hljs-keyword&#34;&amp;gt;export&amp;lt;/span&amp;gt; &amp;lt;span class=&#34;hljs-keyword&#34;&amp;gt;const&amp;lt;/span&amp;gt; Ingredients = styled.ul&amp;lt;span class=&#34;hljs-string&#34;&amp;gt;`
&amp;nbsp; margin: 5px 0;
`&amp;lt;/span&amp;gt;
&amp;lt;span class=&#34;hljs-keyword&#34;&amp;gt;export&amp;lt;/span&amp;gt; &amp;lt;span class=&#34;hljs-keyword&#34;&amp;gt;const&amp;lt;/span&amp;gt; Ingredient = styled.li&amp;lt;span class=&#34;hljs-string&#34;&amp;gt;`
&amp;nbsp; &amp;amp; .name {
&amp;nbsp; &amp;nbsp; ...
&amp;nbsp; }
&amp;nbsp; &amp;amp; .quantity {
&amp;nbsp; &amp;nbsp; ...
&amp;nbsp; }
`&amp;lt;/span&amp;gt; For the purpose of this exercise, I have used the ThemeProvider. It injects the theme in the props of styled components. You can simply use it as 1
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; color: ${props =&amp;gt; props.theme.core_color} &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; , I am just using a small wrapper to protect from missing attributes in the theme:
1
&amp;lt;span class=&#34;hljs-keyword&#34;&amp;gt;const&amp;lt;/span&amp;gt; theme = &amp;lt;span class=&#34;hljs-function&#34;&amp;gt;(&amp;lt;span class=&#34;hljs-params&#34;&amp;gt;key&amp;lt;/span&amp;gt;) =&amp;gt;&amp;lt;/span&amp;gt; (prop) =&amp;gt; _.get(prop.theme, key) || &amp;lt;span class=&#34;hljs-built_in&#34;&amp;gt;console&amp;lt;/span&amp;gt;.warn(&amp;lt;span class=&#34;hljs-string&#34;&amp;gt;&#39;missing key&#39;&amp;lt;/span&amp;gt;, key) You can also define your own constants in a module and use those instead. For example: 1
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; color: ${styleConstants.core_color} &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; Pros A perk of using styled-components is that you can use it as little as you want. You can use your favorite UI framework and add styled-components on top of it. This also means that you can easily migrate an existing project component by component. You can choose to style most of the layout with standard CSS and only use styled-components for reusable components.
Cons Designers/style integrators will need to learn very basic JavaScript to handle variables and use them in place of Sass/Less.
They will also have to learn to navigate the project structure, although I would argue that finding the styles for a component in that component’s folder is easier than having to find the right CSS/Sass/Less file that contains the rule you need to modify.
They will also need to change their tools a bit if they want syntax highlighting, linting, etc. A good place to start is with this Atom plugin and this babel plugin.
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1089 ">
              <title>&lt;![CDATA[Python Class Attributes: An Overly Thorough Guide]]></title>
              <link>&lt;![CDATA[/2018/05/21/python-class-attributes-overly-guide/]]></link>
              <pubDate>1526864911</pubDate>
              <content>&lt;![CDATA[ This article is originally published at Toptal. I had a programming interview recently, a phone-screen in which we used a collaborative text editor.
I was asked to implement a certain API, and chose to do so in Python. Abstracting away the problem statement, let’s say I needed a class whose instances stored some 1
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; data &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; and some 1
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; other_data &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; .
I took a deep breath and started typing. After a few lines, I had something like this:
1
2
3
4
5
6
class Service(object):
&amp;nbsp; &amp;nbsp; data = []
&amp;nbsp; &amp;nbsp; def __init__(self, other_data):
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; self.other_data = other_data
&amp;nbsp; &amp;nbsp; ... My interviewer stopped me:
Interviewer: “That line: 1
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; data = [] &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; . I don’t think that’s valid Python?”
Me: “I’m pretty sure it is. It’s just setting a default value for the instance attribute.” Interviewer: “When does that code get executed?” Me: “I’m not really sure. I’ll just fix it up to avoid confusion.” For reference, and to give you an idea of what I was going for, here’s how I amended the code:
1
2
3
4
5
6
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; class Service(object):&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; def __init__(self, other_data):&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; self.data = []&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; self.other_data = other_data&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; ... &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; As it turns out, we were both wrong. The real answer lay in understanding the distinction between Python class attributes and Python instance attributes. &amp;lt;p class=&amp;quot;is-centered&amp;quot;&amp;gt; &amp;lt;img src=&amp;quot;https://i2.wp.com/uploads.toptal.io/blog/image/302/toptal-blog-image-1392824783170.png?w=688&amp;amp;#038;ssl=1&amp;quot; alt=&amp;quot;Python class attributes vs. Python instance attributes&amp;quot; data-recalc-dims=&amp;quot;1&amp;quot; /&amp;gt; &amp;lt;/p&amp;gt; _Note: if you have an expert handle on class attributes, you can skip ahead to [use cases][4]._ ## Python Class Attributes {#python-class-attributes} My interviewer was wrong in that the above code _is_ syntactically valid. I too was wrong in that it isn’t setting a “default value” for the instance attribute. Instead, it’s defining &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; data &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; as a _class_ attribute with value &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; [] &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; . In my experience, Python class attributes are a topic that _many_ people know _something_ about, but few understand completely. ### Python Class Variable vs. Instance Variable: What’s the Difference? {#python-class-variable-vs-instance-variable-whats-the-difference} A Python class attribute is an attribute of the class (circular, I know), rather than an attribute of an _instance_ of a class. Let’s use a Python class example to illustrate the difference. Here, &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; class_var &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; is a class attribute, and &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; i_var &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; is an instance attribute: &amp;lt;pre&amp;gt;&amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; 1
2
3
4
5
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; class MyClass(object):&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; class_var = 1&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; def __init__(self, i_var):&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; self.i_var = i_var &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; Note that all instances of the class have access to &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; class_var &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; , and that it can also be accessed as a property of the _class itself_: &amp;lt;pre&amp;gt;&amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; 1
2
3
4
5
6
7
8
9
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; foo = MyClass(2)&amp;lt;br /&amp;gt; bar = MyClass(3)&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt; foo.class_var, foo.i_var&amp;lt;br /&amp;gt; ## 1, 2&amp;lt;br /&amp;gt; bar.class_var, bar.i_var&amp;lt;br /&amp;gt; ## 1, 3&amp;lt;br /&amp;gt; MyClass.class_var ## &amp;amp;lt;— This is key&amp;lt;br /&amp;gt; ## 1 &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; For Java or C&#43;&#43; programmers, the class attribute is similar—but not identical—to the static member. We’ll see how they differ later. ### Class vs. Instance Namespaces {#class-vs-instance-namespaces} To understand what’s happening here, let’s talk briefly about **Python namespaces**. A &amp;lt;a href=&amp;quot;http://docs.python.org/2/tutorial/classes.html&amp;quot; target=&amp;quot;_blank&amp;quot; rel=&amp;quot;noopener noreferrer&amp;quot;&amp;gt;namespace&amp;lt;/a&amp;gt; is a mapping from names to objects, with the property that there is zero relation between names in different namespaces. They’re usually implemented as Python dictionaries, although this is abstracted away. Depending on the context, you may need to access a namespace using dot syntax (e.g., &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; object.name_from_objects_namespace &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; ) or as a local variable (e.g., &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; object_from_namespace &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; ). As a concrete example: &amp;lt;pre&amp;gt;&amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; 1
2
3
4
5
6
7
8
9
10
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; class MyClass(object):&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; ## No need for dot syntax&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; class_var = 1&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; def __init__(self, i_var):&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; self.i_var = i_var&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt; ## Need dot syntax as we&#39;ve left scope of class namespace&amp;lt;br /&amp;gt; MyClass.class_var&amp;lt;br /&amp;gt; ## 1 &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; Python classes _and_ instances of classes each have their own distinct namespaces represented by &amp;lt;a href=&amp;quot;http://www2.lib.uchicago.edu/keith/courses/python/class/5/##classinst&amp;quot; target=&amp;quot;_blank&amp;quot; rel=&amp;quot;noopener noreferrer&amp;quot;&amp;gt;pre-defined attributes&amp;lt;/a&amp;gt; &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; MyClass.__dict__ &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; and &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; &amp;amp;nbsp; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; , respectively. When you try to access an attribute from an instance of a class, it first looks at its _instance_ namespace. If it finds the attribute, it returns the associated value. If not, it _then_ looks in the _class_ namespace and returns the attribute (if it’s present, throwing an error otherwise). For example: &amp;lt;pre&amp;gt;&amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; 1
2
3
4
5
6
7
8
9
10
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; foo = MyClass(2)&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt; ## Finds i_var in foo&#39;s instance namespace&amp;lt;br /&amp;gt; foo.i_var&amp;lt;br /&amp;gt; ## 2&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt; ## Doesn&#39;t find class_var in instance namespace…&amp;lt;br /&amp;gt; ## So look&#39;s in class namespace (MyClass.__dict__)&amp;lt;br /&amp;gt; foo.class_var&amp;lt;br /&amp;gt; ## 1 &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; The instance namespace takes supremacy over the class namespace: if there is an attribute with the same name in both, the instance namespace will be checked first and its value returned. Here’s a simplified version of the code (&amp;lt;a href=&amp;quot;http://www2.lib.uchicago.edu/keith/courses/python/class/5/##classinst&amp;quot; target=&amp;quot;_blank&amp;quot; rel=&amp;quot;noopener noreferrer&amp;quot;&amp;gt;source&amp;lt;/a&amp;gt;) for attribute lookup: &amp;lt;pre&amp;gt;&amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; 1
2
3
4
5
6
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; def instlookup(inst, name):&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; ## simplified algorithm...&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; if inst.__dict__.has_key(name):&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; return inst.__dict__[name]&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; else:&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; return inst.__class__.__dict__[name] &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; And, in visual form: &amp;lt;p class=&amp;quot;is-centered&amp;quot;&amp;gt; &amp;lt;img src=&amp;quot;https://i0.wp.com/uploads.toptal.io/blog/image/301/toptal-blog-image-1392824596580.png?w=688&amp;amp;#038;ssl=1&amp;quot; alt=&amp;quot;attribute lookup in visual form&amp;quot; data-recalc-dims=&amp;quot;1&amp;quot; /&amp;gt; &amp;lt;/p&amp;gt; ### How Class Attributes Handle Assignment {#how-class-attributes-handle-assignment} With this in mind, we can make sense of how Python class attributes handle assignment: * If a class attribute is set by accessing the class, it will override the value for _all_ instances. For example: &amp;lt;pre&amp;gt;&amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; 1
2
3
4
5
6
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; foo = MyClass(2)&amp;lt;br /&amp;gt; foo.class_var&amp;lt;br /&amp;gt; ## 1&amp;lt;br /&amp;gt; MyClass.class_var = 2&amp;lt;br /&amp;gt; foo.class_var&amp;lt;br /&amp;gt; ## 2 &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; _At the namespace level…_ we’re setting &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; MyClass.__dict__[&#39;class_var&#39;] = 2 &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; . (Note: this &amp;lt;a href=&amp;quot;http://stackoverflow.com/questions/432786/how-can-i-assign-a-new-class-attribute-via-dict-in-python&amp;quot; target=&amp;quot;_blank&amp;quot; rel=&amp;quot;noopener noreferrer&amp;quot;&amp;gt;isn’t the exact code&amp;lt;/a&amp;gt;(which would be &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; setattr(MyClass, &#39;class_var&#39;, 2) &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; ) as &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; __dict__ &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; returns a &amp;lt;a href=&amp;quot;http://me.veekun.com/blog/2013/08/05/dictproxyhack-or-activestate-code-considered-harmful/##dictproxy&amp;quot; target=&amp;quot;_blank&amp;quot; rel=&amp;quot;noopener noreferrer&amp;quot;&amp;gt;dictproxy&amp;lt;/a&amp;gt;, an immutable wrapper that prevents direct assignment, but it helps for demonstration’s sake). Then, when we access &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; foo.class_var &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; , &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; class_var &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; has a new value in the class namespace and thus 2 is returned.&amp;lt;/li&amp;gt; * If a Paython class variable is set by accessing an instance, it will override the value _only for that instance_. This essentially overrides the class variable and turns it into an instance variable available, intuitively, _only for that instance_. For example: &amp;lt;pre&amp;gt;&amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; 1
2
3
4
5
6
7
8
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; foo = MyClass(2)&amp;lt;br /&amp;gt; foo.class_var&amp;lt;br /&amp;gt; ## 1&amp;lt;br /&amp;gt; foo.class_var = 2&amp;lt;br /&amp;gt; foo.class_var&amp;lt;br /&amp;gt; ## 2&amp;lt;br /&amp;gt; MyClass.class_var&amp;lt;br /&amp;gt; ## 1 &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; _At the namespace level…_ we’re adding the &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; class_var &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; attribute to &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; foo.__dict__ &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; , so when we lookup &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; foo.class_var &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; , we return 2. Meanwhile, other instances of &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; MyClass &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; will _not_ have &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; class_var &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; in their instance namespaces, so they continue to find &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; class_var &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; in &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; MyClass.__dict__ &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; and thus return 1.&amp;lt;/li&amp;gt; &amp;lt;/ul&amp;gt; ### Mutability {#mutability} Quiz question: What if your class attribute has a **mutable type**? You can manipulate (mutilate?) the class attribute by accessing it through a particular instance and, in turn, end up _manipulating the referenced object that all instances are accessing_ (as pointed out by &amp;lt;a href=&amp;quot;http://timothyawiseman.wordpress.com/2012/10/06/class-and-instance-variables-in-python-2-7/&amp;quot; target=&amp;quot;_blank&amp;quot; rel=&amp;quot;noopener noreferrer&amp;quot;&amp;gt;Timothy Wiseman&amp;lt;/a&amp;gt;). This is best demonstrated by example. Let’s go back to the &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; Service &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; I defined earlier and see how my use of a class variable could have led to problems down the road. &amp;lt;pre&amp;gt;&amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; 1
2
3
4
5
6
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; class Service(object):&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; data = []&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; def __init__(self, other_data):&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; self.other_data = other_data&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; ... &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; My goal was to have the empty list ( &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; [] &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; ) as the default value for &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; data &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; , and for each instance of &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; Service &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; to have _its own data_ that would be altered over time on an instance-by-instance basis. But in this case, we get the following behavior (recall that &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; Service &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; takes some argument &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; other_data &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; , which is arbitrary in this example): &amp;lt;pre&amp;gt;&amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; s1 = Service([&#39;a&#39;, &#39;b&#39;])&amp;lt;br /&amp;gt; s2 = Service([&#39;c&#39;, &#39;d&#39;])&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt; s1.data.append(1)&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt; s1.data&amp;lt;br /&amp;gt; ## [1]&amp;lt;br /&amp;gt; s2.data&amp;lt;br /&amp;gt; ## [1]&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt; s2.data.append(2)&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt; s1.data&amp;lt;br /&amp;gt; ## [1, 2]&amp;lt;br /&amp;gt; s2.data&amp;lt;br /&amp;gt; ## [1, 2] &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; This is no good—altering the class variable via one instance alters it for all the others! _At the namespace level…_ all instances of &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; Service &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; are accessing and modifying the same list in &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; Service.__dict__ &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; without making their own &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; data &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; attributes in their instance namespaces. We could get around this using assignment; that is, instead of exploiting the list’s mutability, we could assign our &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; Service &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; objects to have their own lists, as follows: &amp;lt;pre&amp;gt;&amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; 1
2
3
4
5
6
7
8
9
10
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; s1 = Service([&#39;a&#39;, &#39;b&#39;])&amp;lt;br /&amp;gt; s2 = Service([&#39;c&#39;, &#39;d&#39;])&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt; s1.data = [1]&amp;lt;br /&amp;gt; s2.data = [2]&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt; s1.data&amp;lt;br /&amp;gt; ## [1]&amp;lt;br /&amp;gt; s2.data&amp;lt;br /&amp;gt; ## [2] &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; In this case, we’re adding &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; s1.__dict__[&#39;data&#39;] = [1] &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; , so the original &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; Service.__dict__[&#39;data&#39;] &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; remains unchanged. Unfortunately, this requires that &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; Service &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; users have intimate knowledge of its variables, and is certainly prone to mistakes. In a sense, we’d be addressing the symptoms rather than the cause. We’d prefer something that was correct by construction. My personal solution: if you’re just using a class variable to assign a default value to a would-be Python instance variable, **_don’t use mutable values_**. In this case, every instance of &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; Service &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; was going to override &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; Service.data &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; with its own instance attribute eventually, so using an empty list as the default led to a tiny bug that was easily overlooked. Instead of the above, we could’ve either: 1. Stuck to instance attributes entirely, as demonstrated in the introduction. 2. Avoided using the empty list (a mutable value) as our “default”: &amp;lt;pre&amp;gt;&amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; 1
2
3
4
5
6
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; class Service(object):&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; data = None&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; def __init__(self, other_data):&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; self.other_data = other_data&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; ... &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; Of course, we’d have to handle the &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; None &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; case appropriately, but that’s a small price to pay.&amp;lt;/li&amp;gt; &amp;lt;/ol&amp;gt; ## So When Should you Use Python Class Attributes? {#so-when-should-you-use-python-class-attributes} Class attributes are tricky, but let’s look at a few cases when they would come in handy: 1. _Storing constants_. As class attributes can be accessed as attributes of the class itself, it’s often nice to use them for storing Class-wide, Class-specific constants. For example: &amp;lt;pre&amp;gt;&amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; class Circle(object):&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; pi = 3.14159&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; def __init__(self, radius):&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; self.radius = radius&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; def area(self):&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; return Circle.pi * self.radius * self.radius&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt; Circle.pi&amp;lt;br /&amp;gt; ## 3.14159&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt; c = Circle(10)&amp;lt;br /&amp;gt; c.pi&amp;lt;br /&amp;gt; ## 3.14159&amp;lt;br /&amp;gt; c.area()&amp;lt;br /&amp;gt; ## 314.159 &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; 2. _Defining &amp;lt;a href=&amp;quot;http://www.python.org/doc/essays/ppt/acm-ws/sld052.htm&amp;quot; target=&amp;quot;_blank&amp;quot; rel=&amp;quot;noopener noreferrer&amp;quot;&amp;gt;default values&amp;lt;/a&amp;gt;_. As a trivial example, we might create a bounded list (i.e., a list that can only hold a certain number of elements or fewer) and choose to have a default cap of 10 items: &amp;lt;pre&amp;gt;&amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; class MyClass(object):&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; limit = 10&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; def __init__(self):&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; self.data = []&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; def item(self, i):&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; return self.data[i]&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; def add(self, e):&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; if len(self.data) &amp;amp;gt;= self.limit:&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; raise Exception(&amp;quot;Too many elements&amp;quot;)&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; self.data.append(e)&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt; MyClass.limit&amp;lt;br /&amp;gt; ## 10 &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; We could then create instances with their own specific limits, too, by assigning to the instance’s &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; limit &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; attribute. &amp;lt;pre&amp;gt;&amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; 1
2
3
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; foo = MyClass()&amp;lt;br /&amp;gt; foo.limit = 50&amp;lt;br /&amp;gt; ## foo can now hold 50 elements—other instances can hold 10 &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; This only makes sense if you will want your typical instance of &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; MyClass &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; to hold just 10 elements or fewer—if you’re giving all of your instances different limits, then &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; limit &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; should be an instance variable. (Remember, though: take care when using mutable values as your defaults.)&amp;lt;/li&amp;gt; * _Tracking all data across all instances of a given class_. This is sort of specific, but I could see a scenario in which you might want to access a piece of data related to every existing instance of a given class.To make the scenario more concrete, let’s say we have a &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; Person &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; class, and every person has a &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; name &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; . We want to keep track of all the names that have been used. One approach might be to &amp;lt;a href=&amp;quot;http://stackoverflow.com/questions/328851/printing-all-instances-of-a-class&amp;quot; target=&amp;quot;_blank&amp;quot; rel=&amp;quot;noopener noreferrer&amp;quot;&amp;gt;iterate over the garbage collector’s list of objects&amp;lt;/a&amp;gt;, but it’s simpler to use class variables. _Note that, in this case, &amp;lt;/p&amp;gt; &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; names &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; will only be accessed as a class variable, so the mutable default is acceptable.&amp;lt;/em&amp;gt; &amp;lt;pre&amp;gt;&amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; 1
2
3
4
5
6
7
8
9
10
11
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; class Person(object):&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; all_names = []&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; def __init__(self, name):&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; self.name = name&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; Person.all_names.append(name)&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt; joe = Person(&#39;Joe&#39;)&amp;lt;br /&amp;gt; bob = Person(&#39;Bob&#39;)&amp;lt;br /&amp;gt; print Person.all_names&amp;lt;br /&amp;gt; ## [&#39;Joe&#39;, &#39;Bob&#39;] &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; We could even use this design pattern to track all existing instances of a given class, rather than just some associated data. &amp;lt;pre&amp;gt;&amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; 1
2
3
4
5
6
7
8
9
10
11
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; class Person(object):&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; all_people = []&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; def __init__(self, name):&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; self.name = name&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; Person.all_people.append(self)&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt; joe = Person(&#39;Joe&#39;)&amp;lt;br /&amp;gt; bob = Person(&#39;Bob&#39;)&amp;lt;br /&amp;gt; print Person.all_people&amp;lt;br /&amp;gt; ## [&amp;amp;lt;__main__.Person object at 0x10e428c50&amp;amp;gt;, &amp;amp;lt;__main__.Person object at 0x10e428c90&amp;amp;gt;] &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; * _Performance_ (sort of… see below).&amp;lt;/ol&amp;gt; &amp;lt;div class=&amp;quot;pop_out_box is-full_width is-big&amp;quot;&amp;gt; &amp;lt;strong&amp;gt;Related: &amp;lt;/strong&amp;gt;&amp;lt;a href=&amp;quot;https://www.toptal.com/python/tips-and-practices&amp;quot;&amp;gt;Python Best Practices and Tips by Toptal Developers&amp;lt;/a&amp;gt; &amp;lt;/div&amp;gt; ## Under-the-hood {#under-the-hood} **Note:** _If you’re worrying about performance at this level, you might not want to be use Python in the first place, as the differences will be on the order of tenths of a millisecond—but it’s still fun to poke around a bit, and helps for illustration’s sake._ Recall that a class’s namespace is created and filled in at the time of the class’s definition. That means that we do just one assignment—_ever_—for a given class variable, while instance variables must be assigned every time a new instance is created. Let’s take an example. &amp;lt;pre&amp;gt;&amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; def called_class():&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; print &amp;quot;Class assignment&amp;quot;&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; return 2&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt; class Bar(object):&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; y = called_class()&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; def __init__(self, x):&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; self.x = x&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt; ## &amp;quot;Class assignment&amp;quot;&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt; def called_instance():&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; print &amp;quot;Instance assignment&amp;quot;&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; return 2&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt; class Foo(object):&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; def __init__(self, x):&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; self.y = called_instance()&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; self.x = x&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt; Bar(1)&amp;lt;br /&amp;gt; Bar(2)&amp;lt;br /&amp;gt; Foo(1)&amp;lt;br /&amp;gt; ## &amp;quot;Instance assignment&amp;quot;&amp;lt;br /&amp;gt; Foo(2)&amp;lt;br /&amp;gt; ## &amp;quot;Instance assignment&amp;quot; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; We assign to &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; Bar.y &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; just once, but &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; instance_of_Foo.y &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; on every call to &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; __init__ &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; . As further evidence, let’s use the &amp;lt;a href=&amp;quot;http://docs.python.org/library/dis.html&amp;quot; target=&amp;quot;_blank&amp;quot; rel=&amp;quot;noopener noreferrer&amp;quot;&amp;gt;Python disassembler&amp;lt;/a&amp;gt;: &amp;lt;pre&amp;gt;&amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; import dis&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt; class Bar(object):&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; y = 2&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; def __init__(self, x):&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; self.x = x&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt; class Foo(object):&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; def __init__(self, x):&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; self.y = 2&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; self.x = x&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt; dis.dis(Bar)&amp;lt;br /&amp;gt; ## &amp;amp;nbsp;Disassembly of __init__:&amp;lt;br /&amp;gt; ## &amp;amp;nbsp;7 &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; 0 LOAD_FAST &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp;1 (x)&amp;lt;br /&amp;gt; ## &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp;3 LOAD_FAST &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp;0 (self)&amp;lt;br /&amp;gt; ## &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp;6 STORE_ATTR &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; 0 (x)&amp;lt;br /&amp;gt; ## &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp;9 LOAD_CONST &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; 0 (None)&amp;lt;br /&amp;gt; ## &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; 12 RETURN_VALUE&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt; dis.dis(Foo)&amp;lt;br /&amp;gt; ## Disassembly of __init__:&amp;lt;br /&amp;gt; ## 11 &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; 0 LOAD_CONST &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; 1 (2)&amp;lt;br /&amp;gt; ## &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp;3 LOAD_FAST &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp;0 (self)&amp;lt;br /&amp;gt; ## &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp;6 STORE_ATTR &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; 0 (y)&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt; ## 12 &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; 9 LOAD_FAST &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp;1 (x)&amp;lt;br /&amp;gt; ## &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; 12 LOAD_FAST &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp;0 (self)&amp;lt;br /&amp;gt; ## &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; 15 STORE_ATTR &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; 1 (x)&amp;lt;br /&amp;gt; ## &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; 18 LOAD_CONST &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; 0 (None)&amp;lt;br /&amp;gt; ## &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; 21 RETURN_VALUE &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; When we look at the byte code, it’s again obvious that &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; Foo.__init__ &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; has to do two assignments, while &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; Bar.__init__ &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; does just one. In practice, what does this gain really look like? I’ll be the first to admit that timing tests are highly dependent on often uncontrollable factors and the differences between them are often hard to explain accurately. However, I think these small snippets (run with the Python &amp;lt;a href=&amp;quot;http://docs.python.org/library/timeit.html&amp;quot; target=&amp;quot;_blank&amp;quot; rel=&amp;quot;noopener noreferrer&amp;quot;&amp;gt;timeit&amp;lt;/a&amp;gt; module) help to illustrate the differences between class and instance variables, so I’ve included them anyway. _Note: I’m on a MacBook Pro with OS X 10.8.5 and Python 2.7.2._ &amp;lt;div class=&amp;quot;embeddable_form-wrapper for-post&amp;quot;&amp;gt; &amp;lt;/div&amp;gt; ### Initialization {#initialization} &amp;lt;pre&amp;gt;&amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; 1
2
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; 10000000 calls to `Bar(2)`: 4.940s&amp;lt;br /&amp;gt; 10000000 calls to `Foo(2)`: 6.043s &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; The initializations of &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; Bar &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; are faster by over a second, so the difference here does appear to be statistically significant. So why is this the case? One _speculative_ explanation: we do two assignments in &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; Foo.__init__ &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; , but just one in &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; Bar.__init__ &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; . ### Assignment {#assignment} &amp;lt;pre&amp;gt;&amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; 1
2
3
4
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; 10000000 calls to `Bar(2).y = 15`: 6.232s&amp;lt;br /&amp;gt; 10000000 calls to `Foo(2).y = 15`: 6.855s&amp;lt;br /&amp;gt; 10000000 `Bar` assignments: 6.232s - 4.940s = 1.292s&amp;lt;br /&amp;gt; 10000000 `Foo` assignments: 6.855s - 6.043s = 0.812s &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; _Note: There’s no way to re-run your setup code on each trial with &amp;lt;a href=&amp;quot;http://docs.python.org/library/timeit.html&amp;quot; target=&amp;quot;_blank&amp;quot; rel=&amp;quot;noopener noreferrer&amp;quot;&amp;gt;timeit&amp;lt;/a&amp;gt;, so we have to reinitialize our variable on our trial. The second line of times represents the above times with the previously calculated initialization times deducted._ From the above, it looks like &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; Foo &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; only takes about 60% as long as &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; Bar &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; to handle assignments. Why is this the case? One _speculative_ explanation: when we assign to &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; Bar(2).y &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; , we first look in the instance namespace ( &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; Bar(2).__dict__[y] &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; ), fail to find &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; y &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; , and then look in the class namespace ( &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; Bar.__dict__[y] &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; ), then making the proper assignment. When we assign to &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; Foo(2).y &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; , we do half as many lookups, as we immediately assign to the instance namespace ( &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; Foo(2).__dict__[y] &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; ). In summary, though these performance gains won’t matter in reality, these tests are interesting at the conceptual level. If anything, I hope these differences help illustrate the mechanical distinctions between class and instance variables. ## In Conclusion {#in-conclusion} Class attributes seem to be underused in Python; a lot of programmers have different impressions of how they work and why they might be helpful. My take: Python class variables have their place within the school of good code. When used with care, they can simplify things and improve readability. But when carelessly thrown into a given class, they’re sure to trip you up. ## _Appendix_: Private Instance Variables {#appendix-private-instance-variables} One thing I wanted to include but didn’t have a natural entrance point… Python doesn’t have _private_ variables so-to-speak, but another interesting relationship between class and instance naming comes with name mangling. In the Python style guide, it’s said that pseudo-private variables should be prefixed with a double underscore: ‘__’. This is not only a sign to others that your variable is meant to be treated privately, but also a way to prevent access to it, of sorts. Here’s what I mean: &amp;lt;pre&amp;gt;&amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; class Bar(object):&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; def __init__(self):&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; self.__zap = 1&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt; a = Bar()&amp;lt;br /&amp;gt; a.__zap&amp;lt;br /&amp;gt; ## Traceback (most recent call last):&amp;lt;br /&amp;gt; ## &amp;amp;nbsp; File &amp;quot;&amp;amp;lt;stdin&amp;amp;gt;&amp;quot;, line 1, in &amp;amp;lt;module&amp;amp;gt;&amp;lt;br /&amp;gt; ## AttributeError: &#39;Bar&#39; object has no attribute &#39;__baz&#39;&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt; ## Hmm. So what&#39;s in the namespace?&amp;lt;br /&amp;gt; a.__dict__&amp;lt;br /&amp;gt; {&#39;_Bar__zap&#39;: 1}&amp;lt;br /&amp;gt; a._Bar__zap&amp;lt;br /&amp;gt; ## 1 &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; Look at that: the instance attribute &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; __zap &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; is automatically prefixed with the class name to yield &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; _Bar__zap &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; . While still settable and gettable using &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; a._Bar__zap &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; , this name mangling is a means of creating a ‘private’ variable as it prevents you _and_ others from accessing it by accident or through ignorance. _Edit: as Pedro Werneck kindly pointed out, this behavior is largely intended to help out with subclassing. In the &amp;lt;a href=&amp;quot;http://legacy.python.org/dev/peps/pep-0008/#designing-for-inheritance&amp;quot; target=&amp;quot;_blank&amp;quot; rel=&amp;quot;noopener noreferrer&amp;quot;&amp;gt;PEP 8 style guide&amp;lt;/a&amp;gt;, they see it as serving two purposes: (1) preventing subclasses from accessing certain attributes, and (2) preventing namespace clashes in these subclasses. While useful, variable mangling shouldn’t be seen as an invitation to write code with an assumed public-private distinction, such as is present in Java._ &amp;lt;div class=&amp;quot;pop_out_box is-full_width is-big&amp;quot;&amp;gt; &amp;lt;strong&amp;gt;Related: &amp;lt;/strong&amp;gt;&amp;lt;a href=&amp;quot;https://www.toptal.com/python/top-10-mistakes-that-python-programmers-make&amp;quot;&amp;gt;Become More Advanced: Avoid the 10 Most Common Mistakes That Python Programmers Make&amp;lt;/a&amp;gt; &amp;lt;/div&amp;gt; &amp;amp;nbsp; ]]></content>
             </sphinx:document>
            
            <sphinx:document id="1090 ">
              <title>&lt;![CDATA[Rails Service Objects: A Comprehensive Guide]]></title>
              <link>&lt;![CDATA[/2018/05/07/rails-service-objects-comprehensive-guide/]]></link>
              <pubDate>1525654815</pubDate>
              <content>&lt;![CDATA[ This post was written by Amin Shah Gilani, Ruby Developer for Toptal. Ruby on Rails ships with everything you need to prototype your application quickly, but when your codebase starts growing, you’ll run into scenarios where the conventional Fat Model, Skinny Controller mantra breaks. When your business logic can’t fit into either a model or a controller, that’s when service objects come in and let us separate every business action into its own Ruby object.
In this article, I’ll explain when a service object is required; how to go about writing clean service objects and grouping them together for contributor sanity; the strict rules I impose on my service objects to tie them directly to my business logic; and how not to turn your service objects into a dumping ground for all the code you don’t know what to do with.
Why Do I Need Service Objects? Try this: What do you do when your application needs to tweet the text from 1
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; params[:message] &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; ?
If you’ve been using vanilla Rails so far, then you’ve probably done something like this:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
&amp;lt;span class=&#34;hljs-class&#34;&amp;gt;&amp;lt;span class=&#34;hljs-keyword&#34;&amp;gt;class&amp;lt;/span&amp;gt; &amp;lt;span class=&#34;hljs-title&#34;&amp;gt;TweetController&amp;lt;/span&amp;gt; &amp;lt; ApplicationController&amp;lt;/span&amp;gt;
&amp;nbsp; &amp;lt;span class=&#34;hljs-function&#34;&amp;gt;&amp;lt;span class=&#34;hljs-keyword&#34;&amp;gt;def&amp;lt;/span&amp;gt; &amp;lt;span class=&#34;hljs-title&#34;&amp;gt;create&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;
&amp;nbsp; &amp;nbsp; send_tweet(params[&amp;lt;span class=&#34;hljs-symbol&#34;&amp;gt;:message&amp;lt;/span&amp;gt;])
&amp;nbsp; &amp;lt;span class=&#34;hljs-keyword&#34;&amp;gt;end&amp;lt;/span&amp;gt;
&amp;nbsp; private
&amp;nbsp; &amp;lt;span class=&#34;hljs-function&#34;&amp;gt;&amp;lt;span class=&#34;hljs-keyword&#34;&amp;gt;def&amp;lt;/span&amp;gt; &amp;lt;span class=&#34;hljs-title&#34;&amp;gt;send_tweet&amp;lt;/span&amp;gt;&amp;lt;span class=&#34;hljs-params&#34;&amp;gt;(tweet)&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;
&amp;nbsp; &amp;nbsp; client = Twitter::REST::Client.new &amp;lt;span class=&#34;hljs-keyword&#34;&amp;gt;do&amp;lt;/span&amp;gt; &amp;lt;span class=&#34;hljs-params&#34;&amp;gt;|config|&amp;lt;/span&amp;gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; config.consumer_key &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;= ENV[&amp;lt;span class=&#34;hljs-string&#34;&amp;gt;&#39;TWITTER_CONSUMER_KEY&#39;&amp;lt;/span&amp;gt;]
&amp;nbsp; &amp;nbsp; &amp;nbsp; config.consumer_secret &amp;nbsp; &amp;nbsp; = ENV[&amp;lt;span class=&#34;hljs-string&#34;&amp;gt;&#39;TWITTER_CONSUMER_SECRET&#39;&amp;lt;/span&amp;gt;]
&amp;nbsp; &amp;nbsp; &amp;nbsp; config.access_token &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;= ENV[&amp;lt;span class=&#34;hljs-string&#34;&amp;gt;&#39;TWITTER_ACCESS_TOKEN&#39;&amp;lt;/span&amp;gt;]
&amp;nbsp; &amp;nbsp; &amp;nbsp; config.access_token_secret = ENV[&amp;lt;span class=&#34;hljs-string&#34;&amp;gt;&#39;TWITTER_ACCESS_SECRET&#39;&amp;lt;/span&amp;gt;]
&amp;nbsp; &amp;nbsp; &amp;lt;span class=&#34;hljs-keyword&#34;&amp;gt;end&amp;lt;/span&amp;gt;
&amp;nbsp; &amp;nbsp; client.update(tweet)
&amp;nbsp; &amp;lt;span class=&#34;hljs-keyword&#34;&amp;gt;end&amp;lt;/span&amp;gt;
&amp;lt;span class=&#34;hljs-keyword&#34;&amp;gt;end&amp;lt;/span&amp;gt; The problem here is that you’ve added at least ten lines to your controller, but they don’t really belong there. Also, what if you wanted to use the same functionality in another controller? Do you move this to a concern? Wait, but this code doesn’t really belong in controllers at all. Why can’t the Twitter API just come with a single prepared object for me to call?
The first time I did this, I felt like I’d done something dirty. My, previously, beautifully lean Rails controllers had started getting fat and I didn’t know what to do. Eventually, I fixed my controller with a service object.
Before you start reading this article, let’s pretend:
This application handles a Twitter account. The Rails Way means “the conventional Ruby on Rails way of doing things” and the book doesn’t exist. I’m a Rails expert… which I’m told every day that I am, but I have trouble believing it, so let’s just pretend that I really am one. What Are Service Objects? Service objects are Plain Old Ruby Objects (PORO) that are designed to execute one single action in your domain logic and do it well. Consider the example above: Our method already has the logic to do one single thing, and that is to create a tweet. What if this logic was encapsulated within a single Ruby class that we can instantiate and call a method to? Something like:
1
2
3
4
5
6
7
tweet_creator = TweetCreator.new(params[&amp;lt;span class=&#34;hljs-symbol&#34;&amp;gt;:message&amp;lt;/span&amp;gt;])
tweet_creator.send_tweet
&amp;lt;span class=&#34;hljs-comment&#34;&amp;gt;# Later on in the article, we&#39;ll add syntactic sugar and shorten the above to:&amp;lt;/span&amp;gt;
TweetCreator.call(params[&amp;lt;span class=&#34;hljs-symbol&#34;&amp;gt;:message&amp;lt;/span&amp;gt;]) This is pretty much it; our 1
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; TweetCreator &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; service object, once created, can be called from anywhere, and it would do this one thing very well.
Creating a Service Object First let’s create a new 1
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; TweetCreator &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; in a new folder called 1
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; app/services &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; :
1
$ mkdir app/services &amp;amp;&amp;amp; touch app/services/tweet_creator.rb And let’s just dump all our logic inside a new Ruby class:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
&amp;lt;span class=&#34;hljs-comment&#34;&amp;gt;# app/services/tweet_creator.rb&amp;lt;/span&amp;gt;
&amp;lt;span class=&#34;hljs-class&#34;&amp;gt;&amp;lt;span class=&#34;hljs-keyword&#34;&amp;gt;class&amp;lt;/span&amp;gt; &amp;lt;span class=&#34;hljs-title&#34;&amp;gt;TweetCreator&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;
&amp;nbsp; &amp;lt;span class=&#34;hljs-function&#34;&amp;gt;&amp;lt;span class=&#34;hljs-keyword&#34;&amp;gt;def&amp;lt;/span&amp;gt; &amp;lt;span class=&#34;hljs-title&#34;&amp;gt;initialize&amp;lt;/span&amp;gt;&amp;lt;span class=&#34;hljs-params&#34;&amp;gt;(message)&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;
&amp;nbsp; &amp;nbsp; @message = message
&amp;nbsp; &amp;lt;span class=&#34;hljs-keyword&#34;&amp;gt;end&amp;lt;/span&amp;gt;
&amp;nbsp; &amp;lt;span class=&#34;hljs-function&#34;&amp;gt;&amp;lt;span class=&#34;hljs-keyword&#34;&amp;gt;def&amp;lt;/span&amp;gt; &amp;lt;span class=&#34;hljs-title&#34;&amp;gt;send_tweet&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;
&amp;nbsp; &amp;nbsp; client = Twitter::REST::Client.new &amp;lt;span class=&#34;hljs-keyword&#34;&amp;gt;do&amp;lt;/span&amp;gt; &amp;lt;span class=&#34;hljs-params&#34;&amp;gt;|config|&amp;lt;/span&amp;gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; config.consumer_key &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;= ENV[&amp;lt;span class=&#34;hljs-string&#34;&amp;gt;&#39;TWITTER_CONSUMER_KEY&#39;&amp;lt;/span&amp;gt;]
&amp;nbsp; &amp;nbsp; &amp;nbsp; config.consumer_secret &amp;nbsp; &amp;nbsp; = ENV[&amp;lt;span class=&#34;hljs-string&#34;&amp;gt;&#39;TWITTER_CONSUMER_SECRET&#39;&amp;lt;/span&amp;gt;]
&amp;nbsp; &amp;nbsp; &amp;nbsp; config.access_token &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;= ENV[&amp;lt;span class=&#34;hljs-string&#34;&amp;gt;&#39;TWITTER_ACCESS_TOKEN&#39;&amp;lt;/span&amp;gt;]
&amp;nbsp; &amp;nbsp; &amp;nbsp; config.access_token_secret = ENV[&amp;lt;span class=&#34;hljs-string&#34;&amp;gt;&#39;TWITTER_ACCESS_SECRET&#39;&amp;lt;/span&amp;gt;]
&amp;nbsp; &amp;nbsp; &amp;lt;span class=&#34;hljs-keyword&#34;&amp;gt;end&amp;lt;/span&amp;gt;
&amp;nbsp; &amp;nbsp; client.update(@message)
&amp;nbsp; &amp;lt;span class=&#34;hljs-keyword&#34;&amp;gt;end&amp;lt;/span&amp;gt;
&amp;lt;span class=&#34;hljs-keyword&#34;&amp;gt;end&amp;lt;/span&amp;gt; Then you can call 1
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; TweetCreator.new(params[:message]).send_tweet &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; anywhere in your app, and it will work. Rails will load this object magically because it autoloads everything under 1
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; app/ &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; . Verify this by running:
1
2
3
4
5
6
$ rails c
Running via Spring preloader &amp;lt;span class=&#34;hljs-keyword&#34;&amp;gt;in&amp;lt;/span&amp;gt; process &amp;lt;span class=&#34;hljs-number&#34;&amp;gt;12417&amp;lt;/span&amp;gt;
Loading development environment (Rails &amp;lt;span class=&#34;hljs-number&#34;&amp;gt;5.1&amp;lt;/span&amp;gt;.&amp;lt;span class=&#34;hljs-number&#34;&amp;gt;5&amp;lt;/span&amp;gt;)
&amp;nbsp;&amp;gt; puts ActiveSupport::Dependencies.autoload_paths
...
/Users/gilani/Sandbox/nazdeeq/app/services Want to know more about how 1
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; autoload &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; works? Read the Autoloading and Reloading Constants Guide.
Adding Syntactic Sugar to Make Rails Service Objects Suck Less Look, this feels great in theory, but 1
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; TweetCreator.new(params[:message]).send_tweet &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; is just a mouthful. It’s far too verbose with redundant words… much like HTML (ba-dum tiss!). In all seriousness, though, why do people use HTML when HAML is around? Or even Slim. I guess that’s another article for another time. Back to the task at hand:
1
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; TweetCreator &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; is a nice short class name, but the extra cruft around instantiating the object and calling the method is just too long! If only there were precedence in Ruby for calling something and having it execute itself immediately with the given parameters… oh wait, there is! It’s 1
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; Proc#call &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; .
**
1
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; Proc*call &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; invokes the block, setting the block’s parameters to the values in params using something close to method calling semantics. It returns the value of the last expression evaluated in the block.
1
2
3
4
5
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; a_proc = Proc.new {&amp;amp;lt;span class=&amp;quot;hljs-params&amp;quot;&amp;amp;gt;|scalar, *values|&amp;amp;lt;/span&amp;amp;gt; values.map {&amp;amp;lt;span class=&amp;quot;hljs-params&amp;quot;&amp;amp;gt;|value|&amp;amp;lt;/span&amp;amp;gt; value*scalar } }&amp;lt;br /&amp;gt; a_proc.call(&amp;amp;lt;span class=&amp;quot;hljs-number&amp;quot;&amp;amp;gt;9&amp;amp;lt;/span&amp;amp;gt;, &amp;amp;lt;span class=&amp;quot;hljs-number&amp;quot;&amp;amp;gt;1&amp;amp;lt;/span&amp;amp;gt;, &amp;amp;lt;span class=&amp;quot;hljs-number&amp;quot;&amp;amp;gt;2&amp;amp;lt;/span&amp;amp;gt;, &amp;amp;lt;span class=&amp;quot;hljs-number&amp;quot;&amp;amp;gt;3&amp;amp;lt;/span&amp;amp;gt;) &amp;amp;nbsp; &amp;amp;nbsp;&amp;amp;lt;span class=&amp;quot;hljs-comment&amp;quot;&amp;amp;gt;#=&amp;amp;gt; [9, 18, 27]&amp;amp;lt;/span&amp;amp;gt;&amp;lt;br /&amp;gt; a_proc[&amp;amp;lt;span class=&amp;quot;hljs-number&amp;quot;&amp;amp;gt;9&amp;amp;lt;/span&amp;amp;gt;, &amp;amp;lt;span class=&amp;quot;hljs-number&amp;quot;&amp;amp;gt;1&amp;amp;lt;/span&amp;amp;gt;, &amp;amp;lt;span class=&amp;quot;hljs-number&amp;quot;&amp;amp;gt;2&amp;amp;lt;/span&amp;amp;gt;, &amp;amp;lt;span class=&amp;quot;hljs-number&amp;quot;&amp;amp;gt;3&amp;amp;lt;/span&amp;amp;gt;] &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;lt;span class=&amp;quot;hljs-comment&amp;quot;&amp;amp;gt;#=&amp;amp;gt; [9, 18, 27]&amp;amp;lt;/span&amp;amp;gt;&amp;lt;br /&amp;gt; a_proc.(&amp;amp;lt;span class=&amp;quot;hljs-number&amp;quot;&amp;amp;gt;9&amp;amp;lt;/span&amp;amp;gt;, &amp;amp;lt;span class=&amp;quot;hljs-number&amp;quot;&amp;amp;gt;1&amp;amp;lt;/span&amp;amp;gt;, &amp;amp;lt;span class=&amp;quot;hljs-number&amp;quot;&amp;amp;gt;2&amp;amp;lt;/span&amp;amp;gt;, &amp;amp;lt;span class=&amp;quot;hljs-number&amp;quot;&amp;amp;gt;3&amp;amp;lt;/span&amp;amp;gt;) &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp;&amp;amp;lt;span class=&amp;quot;hljs-comment&amp;quot;&amp;amp;gt;#=&amp;amp;gt; [9, 18, 27]&amp;amp;lt;/span&amp;amp;gt;&amp;lt;br /&amp;gt; a_proc.&amp;amp;lt;span class=&amp;quot;hljs-keyword&amp;quot;&amp;amp;gt;yield&amp;amp;lt;/span&amp;amp;gt;(&amp;amp;lt;span class=&amp;quot;hljs-number&amp;quot;&amp;amp;gt;9&amp;amp;lt;/span&amp;amp;gt;, &amp;amp;lt;span class=&amp;quot;hljs-number&amp;quot;&amp;amp;gt;1&amp;amp;lt;/span&amp;amp;gt;, &amp;amp;lt;span class=&amp;quot;hljs-number&amp;quot;&amp;amp;gt;2&amp;amp;lt;/span&amp;amp;gt;, &amp;amp;lt;span class=&amp;quot;hljs-number&amp;quot;&amp;amp;gt;3&amp;amp;lt;/span&amp;amp;gt;) &amp;amp;nbsp; &amp;amp;lt;span class=&amp;quot;hljs-comment&amp;quot;&amp;amp;gt;#=&amp;amp;gt; [9, 18, 27]&amp;amp;lt;/span&amp;amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; Documentation
If this confuses you, let me explain. A 1
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; proc &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; can be 1
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; call &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; -ed to execute itself with the given parameters. Which means, that if 1
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; TweetCreator &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; were a 1
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; proc &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; , we could call it with 1
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; TweetCreator.call(message) &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; and the result would be equivalent to 1
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; TweetCreator.new(params[:message]).call &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; , which looks quite similar to our unwieldy old 1
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; TweetCreator.new(params[:message]).send_tweet &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; .
So let’s make our service object behave more like a 1
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; proc &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; !
First, because we probably want to reuse this behavior across all our service objects, let’s borrow from the Rails Way and create a class called 1
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; ApplicationService &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; :
1
2
3
4
5
6
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; &amp;amp;lt;span class=&amp;quot;hljs-comment&amp;quot;&amp;amp;gt;# app/services/application_service.rb&amp;amp;lt;/span&amp;amp;gt;&amp;lt;br /&amp;gt; &amp;amp;lt;span class=&amp;quot;hljs-class&amp;quot;&amp;amp;gt;&amp;amp;lt;span class=&amp;quot;hljs-keyword&amp;quot;&amp;amp;gt;class&amp;amp;lt;/span&amp;amp;gt; &amp;amp;lt;span class=&amp;quot;hljs-title&amp;quot;&amp;amp;gt;ApplicationService&amp;amp;lt;/span&amp;amp;gt;&amp;amp;lt;/span&amp;amp;gt;&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;lt;span class=&amp;quot;hljs-function&amp;quot;&amp;amp;gt;&amp;amp;lt;span class=&amp;quot;hljs-keyword&amp;quot;&amp;amp;gt;def&amp;amp;lt;/span&amp;amp;gt; &amp;amp;lt;span class=&amp;quot;hljs-title&amp;quot;&amp;amp;gt;self&amp;amp;lt;/span&amp;amp;gt;.&amp;amp;lt;span class=&amp;quot;hljs-title&amp;quot;&amp;amp;gt;call&amp;amp;lt;/span&amp;amp;gt;&amp;amp;lt;span class=&amp;quot;hljs-params&amp;quot;&amp;amp;gt;(*args, &amp;amp;amp;block)&amp;amp;lt;/span&amp;amp;gt;&amp;amp;lt;/span&amp;amp;gt;&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; new(*args, &amp;amp;amp;block).call&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;lt;span class=&amp;quot;hljs-keyword&amp;quot;&amp;amp;gt;end&amp;amp;lt;/span&amp;amp;gt;&amp;lt;br /&amp;gt; &amp;amp;lt;span class=&amp;quot;hljs-keyword&amp;quot;&amp;amp;gt;end&amp;amp;lt;/span&amp;amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; Did you see what I did there? I added a class method called 1
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; call &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; that creates a new instance of the class with the arguments or block you pass to it, and calls 1
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; call &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; on the instance. Exactly what we we wanted! The last thing to do is to rename the method from our 1
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; TweetCreator &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; class to 1
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; call &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; , and have the class inherit from 1
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; ApplicationService &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; &amp;amp;lt;span class=&amp;quot;hljs-comment&amp;quot;&amp;amp;gt;# app/services/tweet_creator.rb&amp;amp;lt;/span&amp;amp;gt;&amp;lt;br /&amp;gt; &amp;amp;lt;span class=&amp;quot;hljs-class&amp;quot;&amp;amp;gt;&amp;amp;lt;span class=&amp;quot;hljs-keyword&amp;quot;&amp;amp;gt;class&amp;amp;lt;/span&amp;amp;gt; &amp;amp;lt;span class=&amp;quot;hljs-title&amp;quot;&amp;amp;gt;TweetCreator&amp;amp;lt;/span&amp;amp;gt; &amp;amp;lt; ApplicationService&amp;amp;lt;/span&amp;amp;gt;&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;lt;span class=&amp;quot;hljs-keyword&amp;quot;&amp;amp;gt;attr_reader&amp;amp;lt;/span&amp;amp;gt; &amp;amp;lt;span class=&amp;quot;hljs-symbol&amp;quot;&amp;amp;gt;:message&amp;amp;lt;/span&amp;amp;gt;&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;lt;span class=&amp;quot;hljs-function&amp;quot;&amp;amp;gt;&amp;amp;lt;span class=&amp;quot;hljs-keyword&amp;quot;&amp;amp;gt;def&amp;amp;lt;/span&amp;amp;gt; &amp;amp;lt;span class=&amp;quot;hljs-title&amp;quot;&amp;amp;gt;initialize&amp;amp;lt;/span&amp;amp;gt;&amp;amp;lt;span class=&amp;quot;hljs-params&amp;quot;&amp;amp;gt;(message)&amp;amp;lt;/span&amp;amp;gt;&amp;amp;lt;/span&amp;amp;gt;&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; @message = message&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;lt;span class=&amp;quot;hljs-keyword&amp;quot;&amp;amp;gt;end&amp;amp;lt;/span&amp;amp;gt;&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;lt;span class=&amp;quot;hljs-function&amp;quot;&amp;amp;gt;&amp;amp;lt;span class=&amp;quot;hljs-keyword&amp;quot;&amp;amp;gt;def&amp;amp;lt;/span&amp;amp;gt; &amp;amp;lt;span class=&amp;quot;hljs-title&amp;quot;&amp;amp;gt;call&amp;amp;lt;/span&amp;amp;gt;&amp;amp;lt;/span&amp;amp;gt;&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; client = Twitter::REST::Client.new &amp;amp;lt;span class=&amp;quot;hljs-keyword&amp;quot;&amp;amp;gt;do&amp;amp;lt;/span&amp;amp;gt; &amp;amp;lt;span class=&amp;quot;hljs-params&amp;quot;&amp;amp;gt;|config|&amp;amp;lt;/span&amp;amp;gt;&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; config.consumer_key &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp;= ENV[&amp;amp;lt;span class=&amp;quot;hljs-string&amp;quot;&amp;amp;gt;&#39;TWITTER_CONSUMER_KEY&#39;&amp;amp;lt;/span&amp;amp;gt;]&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; config.consumer_secret &amp;amp;nbsp; &amp;amp;nbsp; = ENV[&amp;amp;lt;span class=&amp;quot;hljs-string&amp;quot;&amp;amp;gt;&#39;TWITTER_CONSUMER_SECRET&#39;&amp;amp;lt;/span&amp;amp;gt;]&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; config.access_token &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp;= ENV[&amp;amp;lt;span class=&amp;quot;hljs-string&amp;quot;&amp;amp;gt;&#39;TWITTER_ACCESS_TOKEN&#39;&amp;amp;lt;/span&amp;amp;gt;]&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; config.access_token_secret = ENV[&amp;amp;lt;span class=&amp;quot;hljs-string&amp;quot;&amp;amp;gt;&#39;TWITTER_ACCESS_SECRET&#39;&amp;amp;lt;/span&amp;amp;gt;]&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;lt;span class=&amp;quot;hljs-keyword&amp;quot;&amp;amp;gt;end&amp;amp;lt;/span&amp;amp;gt;&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; client.update(@message)&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;lt;span class=&amp;quot;hljs-keyword&amp;quot;&amp;amp;gt;end&amp;amp;lt;/span&amp;amp;gt;&amp;lt;br /&amp;gt; &amp;amp;lt;span class=&amp;quot;hljs-keyword&amp;quot;&amp;amp;gt;end&amp;amp;lt;/span&amp;amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; And finally, let’s wrap this up by calling our service object in the controller:
1
2
3
4
5
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; &amp;amp;lt;span class=&amp;quot;hljs-class&amp;quot;&amp;amp;gt;&amp;amp;lt;span class=&amp;quot;hljs-keyword&amp;quot;&amp;amp;gt;class&amp;amp;lt;/span&amp;amp;gt; &amp;amp;lt;span class=&amp;quot;hljs-title&amp;quot;&amp;amp;gt;TweetController&amp;amp;lt;/span&amp;amp;gt; &amp;amp;lt; ApplicationController&amp;amp;lt;/span&amp;amp;gt;&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;lt;span class=&amp;quot;hljs-function&amp;quot;&amp;amp;gt;&amp;amp;lt;span class=&amp;quot;hljs-keyword&amp;quot;&amp;amp;gt;def&amp;amp;lt;/span&amp;amp;gt; &amp;amp;lt;span class=&amp;quot;hljs-title&amp;quot;&amp;amp;gt;create&amp;amp;lt;/span&amp;amp;gt;&amp;amp;lt;/span&amp;amp;gt;&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; TweetCreator.call(params[&amp;amp;lt;span class=&amp;quot;hljs-symbol&amp;quot;&amp;amp;gt;:message&amp;amp;lt;/span&amp;amp;gt;])&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;lt;span class=&amp;quot;hljs-keyword&amp;quot;&amp;amp;gt;end&amp;amp;lt;/span&amp;amp;gt;&amp;lt;br /&amp;gt; &amp;amp;lt;span class=&amp;quot;hljs-keyword&amp;quot;&amp;amp;gt;end&amp;amp;lt;/span&amp;amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; Grouping Similar Service Objects for Sanity The example above has only one service object, but in the real world, things can get more complicated. For example, what if you had hundreds of services, and half of them were related business actions, e.g., having a 1
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; Follower &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; service that followed another Twitter account? Honestly, I’d go insane if a folder contained 200 unique-looking files, so good thing there’s another pattern from the Rails Way that we can copy—I mean, use as inspiration: namespacing.
Let’s pretend we’ve been tasked to create a service object that follows other Twitter profiles.
Let’s look at the name of our previous service object: 1
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; TweetCreator &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; . It sounds like a person, or at the very least, a role in an organization. Someone that creates Tweets. I like to name my service objects as if they were just that: roles in an organization. Following this convention, I’ll call my new object: 1
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; ProfileFollower &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; .
Now, since I’m the supreme overlord of this app, I’m going to create a managerial position in my service hierarchy and delegate responsibility for both these services to that position. I’ll call this new managerial position 1
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; TwitterManager &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; .
Since this manager does nothing but manage, let’s make it a module and nest our service objects under this module. Our folder structure will now look like:
1
2
3
4
5
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; services&amp;lt;br /&amp;gt; ??? application_service.rb&amp;lt;br /&amp;gt; ??? twitter_manager&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; ??? profile_follower.rb&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; ??? tweet_creator.rb &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; And our service objects:
1
2
3
4
5
6
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; &amp;amp;lt;span class=&amp;quot;hljs-comment&amp;quot;&amp;amp;gt;# services/twitter_manager/tweet_creator.rb&amp;amp;lt;/span&amp;amp;gt;&amp;lt;br /&amp;gt; &amp;amp;lt;span class=&amp;quot;hljs-class&amp;quot;&amp;amp;gt;&amp;amp;lt;span class=&amp;quot;hljs-keyword&amp;quot;&amp;amp;gt;module&amp;amp;lt;/span&amp;amp;gt; &amp;amp;lt;span class=&amp;quot;hljs-title&amp;quot;&amp;amp;gt;TwitterManager&amp;amp;lt;/span&amp;amp;gt;&amp;amp;lt;/span&amp;amp;gt;&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;lt;span class=&amp;quot;hljs-class&amp;quot;&amp;amp;gt;&amp;amp;lt;span class=&amp;quot;hljs-keyword&amp;quot;&amp;amp;gt;class&amp;amp;lt;/span&amp;amp;gt; &amp;amp;lt;span class=&amp;quot;hljs-title&amp;quot;&amp;amp;gt;TweetCreator&amp;amp;lt;/span&amp;amp;gt; &amp;amp;lt; ApplicationService&amp;amp;lt;/span&amp;amp;gt;&amp;lt;br /&amp;gt; &amp;amp;nbsp; ...&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;lt;span class=&amp;quot;hljs-keyword&amp;quot;&amp;amp;gt;end&amp;amp;lt;/span&amp;amp;gt;&amp;lt;br /&amp;gt; &amp;amp;lt;span class=&amp;quot;hljs-keyword&amp;quot;&amp;amp;gt;end&amp;amp;lt;/span&amp;amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; 1
2
3
4
5
6
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; &amp;amp;lt;span class=&amp;quot;hljs-comment&amp;quot;&amp;amp;gt;# services/twitter_manager/profile_follower.rb&amp;amp;lt;/span&amp;amp;gt;&amp;lt;br /&amp;gt; &amp;amp;lt;span class=&amp;quot;hljs-class&amp;quot;&amp;amp;gt;&amp;amp;lt;span class=&amp;quot;hljs-keyword&amp;quot;&amp;amp;gt;module&amp;amp;lt;/span&amp;amp;gt; &amp;amp;lt;span class=&amp;quot;hljs-title&amp;quot;&amp;amp;gt;TwitterManager&amp;amp;lt;/span&amp;amp;gt;&amp;amp;lt;/span&amp;amp;gt;&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;lt;span class=&amp;quot;hljs-class&amp;quot;&amp;amp;gt;&amp;amp;lt;span class=&amp;quot;hljs-keyword&amp;quot;&amp;amp;gt;class&amp;amp;lt;/span&amp;amp;gt; &amp;amp;lt;span class=&amp;quot;hljs-title&amp;quot;&amp;amp;gt;ProfileFollower&amp;amp;lt;/span&amp;amp;gt; &amp;amp;lt; ApplicationService&amp;amp;lt;/span&amp;amp;gt;&amp;lt;br /&amp;gt; &amp;amp;nbsp; ...&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;lt;span class=&amp;quot;hljs-keyword&amp;quot;&amp;amp;gt;end&amp;amp;lt;/span&amp;amp;gt;&amp;lt;br /&amp;gt; &amp;amp;lt;span class=&amp;quot;hljs-keyword&amp;quot;&amp;amp;gt;end&amp;amp;lt;/span&amp;amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; And our calls will now become 1
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; TwitterManager::TweetCreator.call(arg) &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; , and 1
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; TwitterManager::ProfileManager.call(arg) &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; .
Service Objects to Handle Database Operations The example above made API calls, but service objects can also be used when all the calls are to your database instead of an API. This is especially helpful if some business actions require multiple database updates wrapped in a transaction. For example, this sample code would use services to record a currency exchange taking place.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; &amp;amp;lt;span class=&amp;quot;hljs-class&amp;quot;&amp;amp;gt;&amp;amp;lt;span class=&amp;quot;hljs-keyword&amp;quot;&amp;amp;gt;module&amp;amp;lt;/span&amp;amp;gt; &amp;amp;lt;span class=&amp;quot;hljs-title&amp;quot;&amp;amp;gt;MoneyManager&amp;amp;lt;/span&amp;amp;gt;&amp;amp;lt;/span&amp;amp;gt;&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;lt;span class=&amp;quot;hljs-comment&amp;quot;&amp;amp;gt;# exchange currency from one amount to another&amp;amp;lt;/span&amp;amp;gt;&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;lt;span class=&amp;quot;hljs-class&amp;quot;&amp;amp;gt;&amp;amp;lt;span class=&amp;quot;hljs-keyword&amp;quot;&amp;amp;gt;class&amp;amp;lt;/span&amp;amp;gt; &amp;amp;lt;span class=&amp;quot;hljs-title&amp;quot;&amp;amp;gt;CurrencyExchanger&amp;amp;lt;/span&amp;amp;gt; &amp;amp;lt; ApplicationService&amp;amp;lt;/span&amp;amp;gt;&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; ...&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;lt;span class=&amp;quot;hljs-function&amp;quot;&amp;amp;gt;&amp;amp;lt;span class=&amp;quot;hljs-keyword&amp;quot;&amp;amp;gt;def&amp;amp;lt;/span&amp;amp;gt; &amp;amp;lt;span class=&amp;quot;hljs-title&amp;quot;&amp;amp;gt;call&amp;amp;lt;/span&amp;amp;gt;&amp;amp;lt;/span&amp;amp;gt;&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; ActiveRecord::Base.transaction &amp;amp;lt;span class=&amp;quot;hljs-keyword&amp;quot;&amp;amp;gt;do&amp;amp;lt;/span&amp;amp;gt;&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;lt;span class=&amp;quot;hljs-comment&amp;quot;&amp;amp;gt;# transfer the original currency to the exchange&#39;s account&amp;amp;lt;/span&amp;amp;gt;&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; outgoing_tx = CurrencyTransferrer.call(&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;lt;span class=&amp;quot;hljs-symbol&amp;quot;&amp;amp;gt;from:&amp;amp;lt;/span&amp;amp;gt; the_user_account,&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;lt;span class=&amp;quot;hljs-symbol&amp;quot;&amp;amp;gt;to:&amp;amp;lt;/span&amp;amp;gt; the_exchange_account,&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;lt;span class=&amp;quot;hljs-symbol&amp;quot;&amp;amp;gt;amount:&amp;amp;lt;/span&amp;amp;gt; the_amount,&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;lt;span class=&amp;quot;hljs-symbol&amp;quot;&amp;amp;gt;currency:&amp;amp;lt;/span&amp;amp;gt; original_currency&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; )&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;lt;span class=&amp;quot;hljs-comment&amp;quot;&amp;amp;gt;# get the exchange rate&amp;amp;lt;/span&amp;amp;gt;&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; rate = ExchangeRateGetter.call(&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;lt;span class=&amp;quot;hljs-symbol&amp;quot;&amp;amp;gt;from:&amp;amp;lt;/span&amp;amp;gt; original_currency,&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;lt;span class=&amp;quot;hljs-symbol&amp;quot;&amp;amp;gt;to:&amp;amp;lt;/span&amp;amp;gt; new_currency&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; )&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;lt;span class=&amp;quot;hljs-comment&amp;quot;&amp;amp;gt;# transfer the new currency back to the user&#39;s account&amp;amp;lt;/span&amp;amp;gt;&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; incoming_tx = CurrencyTransferrer.call(&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;lt;span class=&amp;quot;hljs-symbol&amp;quot;&amp;amp;gt;from:&amp;amp;lt;/span&amp;amp;gt; the_exchange_account,&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;lt;span class=&amp;quot;hljs-symbol&amp;quot;&amp;amp;gt;to:&amp;amp;lt;/span&amp;amp;gt; the_user_account,&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;lt;span class=&amp;quot;hljs-symbol&amp;quot;&amp;amp;gt;amount:&amp;amp;lt;/span&amp;amp;gt; the_amount * rate,&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;lt;span class=&amp;quot;hljs-symbol&amp;quot;&amp;amp;gt;currency:&amp;amp;lt;/span&amp;amp;gt; new_currency&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; )&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;lt;span class=&amp;quot;hljs-comment&amp;quot;&amp;amp;gt;# record the exchange happening&amp;amp;lt;/span&amp;amp;gt;&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; ExchangeRecorder.call(&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;lt;span class=&amp;quot;hljs-symbol&amp;quot;&amp;amp;gt;outgoing_tx:&amp;amp;lt;/span&amp;amp;gt; outgoing_tx,&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;lt;span class=&amp;quot;hljs-symbol&amp;quot;&amp;amp;gt;incoming_tx:&amp;amp;lt;/span&amp;amp;gt; incoming_tx&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; )&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;lt;span class=&amp;quot;hljs-keyword&amp;quot;&amp;amp;gt;end&amp;amp;lt;/span&amp;amp;gt;&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;lt;span class=&amp;quot;hljs-keyword&amp;quot;&amp;amp;gt;end&amp;amp;lt;/span&amp;amp;gt;&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;lt;span class=&amp;quot;hljs-keyword&amp;quot;&amp;amp;gt;end&amp;amp;lt;/span&amp;amp;gt;&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;lt;span class=&amp;quot;hljs-comment&amp;quot;&amp;amp;gt;# record the transfer of money from one account to another in money_accounts&amp;amp;lt;/span&amp;amp;gt;&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;lt;span class=&amp;quot;hljs-class&amp;quot;&amp;amp;gt;&amp;amp;lt;span class=&amp;quot;hljs-keyword&amp;quot;&amp;amp;gt;class&amp;amp;lt;/span&amp;amp;gt; &amp;amp;lt;span class=&amp;quot;hljs-title&amp;quot;&amp;amp;gt;CurrencyTransferrer&amp;amp;lt;/span&amp;amp;gt; &amp;amp;lt; ApplicationService&amp;amp;lt;/span&amp;amp;gt;&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; ...&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;lt;span class=&amp;quot;hljs-keyword&amp;quot;&amp;amp;gt;end&amp;amp;lt;/span&amp;amp;gt;&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;lt;span class=&amp;quot;hljs-comment&amp;quot;&amp;amp;gt;# record an exchange event in the money_exchanges table&amp;amp;lt;/span&amp;amp;gt;&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;lt;span class=&amp;quot;hljs-class&amp;quot;&amp;amp;gt;&amp;amp;lt;span class=&amp;quot;hljs-keyword&amp;quot;&amp;amp;gt;class&amp;amp;lt;/span&amp;amp;gt; &amp;amp;lt;span class=&amp;quot;hljs-title&amp;quot;&amp;amp;gt;ExchangeRecorder&amp;amp;lt;/span&amp;amp;gt; &amp;amp;lt; ApplicationService&amp;amp;lt;/span&amp;amp;gt;&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; ...&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;lt;span class=&amp;quot;hljs-keyword&amp;quot;&amp;amp;gt;end&amp;amp;lt;/span&amp;amp;gt;&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;lt;span class=&amp;quot;hljs-comment&amp;quot;&amp;amp;gt;# get the exchange rate from an API&amp;amp;lt;/span&amp;amp;gt;&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;lt;span class=&amp;quot;hljs-class&amp;quot;&amp;amp;gt;&amp;amp;lt;span class=&amp;quot;hljs-keyword&amp;quot;&amp;amp;gt;class&amp;amp;lt;/span&amp;amp;gt; &amp;amp;lt;span class=&amp;quot;hljs-title&amp;quot;&amp;amp;gt;ExchangeRateGetter&amp;amp;lt;/span&amp;amp;gt; &amp;amp;lt; ApplicationService&amp;amp;lt;/span&amp;amp;gt;&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; ...&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;lt;span class=&amp;quot;hljs-keyword&amp;quot;&amp;amp;gt;end&amp;amp;lt;/span&amp;amp;gt;&amp;lt;br /&amp;gt; &amp;amp;lt;span class=&amp;quot;hljs-keyword&amp;quot;&amp;amp;gt;end&amp;amp;lt;/span&amp;amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; What Do I Return from My Service Object? We’ve discussed how to 1
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; call &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; our service object, but what should the object return? There are three ways to approach this:
Return 1
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; true &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; or 1
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; false &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; Return a value
Return an Enum
Return 1
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; true &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; or 1
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; false &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; {#return-true-or-false} This one is simple: If an action works as intended, return 1
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; true &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; ; otherwise, return 1
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; false &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; :
1
2
3
4
5
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; &amp;amp;nbsp; &amp;amp;lt;span class=&amp;quot;hljs-function&amp;quot;&amp;amp;gt;&amp;amp;lt;span class=&amp;quot;hljs-keyword&amp;quot;&amp;amp;gt;def&amp;amp;lt;/span&amp;amp;gt; &amp;amp;lt;span class=&amp;quot;hljs-title&amp;quot;&amp;amp;gt;call&amp;amp;lt;/span&amp;amp;gt;&amp;amp;lt;/span&amp;amp;gt;&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; ...&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;lt;span class=&amp;quot;hljs-keyword&amp;quot;&amp;amp;gt;return&amp;amp;lt;/span&amp;amp;gt; &amp;amp;lt;span class=&amp;quot;hljs-literal&amp;quot;&amp;amp;gt;true&amp;amp;lt;/span&amp;amp;gt; &amp;amp;lt;span class=&amp;quot;hljs-keyword&amp;quot;&amp;amp;gt;if&amp;amp;lt;/span&amp;amp;gt; client.update(@message)&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;lt;span class=&amp;quot;hljs-literal&amp;quot;&amp;amp;gt;false&amp;amp;lt;/span&amp;amp;gt;&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;lt;span class=&amp;quot;hljs-keyword&amp;quot;&amp;amp;gt;end&amp;amp;lt;/span&amp;amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; Return a Value If your service object fetches data from somewhere, you probably want to return that value:
1
2
3
4
5
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; &amp;amp;nbsp; &amp;amp;lt;span class=&amp;quot;hljs-function&amp;quot;&amp;amp;gt;&amp;amp;lt;span class=&amp;quot;hljs-keyword&amp;quot;&amp;amp;gt;def&amp;amp;lt;/span&amp;amp;gt; &amp;amp;lt;span class=&amp;quot;hljs-title&amp;quot;&amp;amp;gt;call&amp;amp;lt;/span&amp;amp;gt;&amp;amp;lt;/span&amp;amp;gt;&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; ...&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;lt;span class=&amp;quot;hljs-keyword&amp;quot;&amp;amp;gt;return&amp;amp;lt;/span&amp;amp;gt; &amp;amp;lt;span class=&amp;quot;hljs-literal&amp;quot;&amp;amp;gt;false&amp;amp;lt;/span&amp;amp;gt; &amp;amp;lt;span class=&amp;quot;hljs-keyword&amp;quot;&amp;amp;gt;unless&amp;amp;lt;/span&amp;amp;gt; exchange_rate&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; exchange_rate&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;lt;span class=&amp;quot;hljs-keyword&amp;quot;&amp;amp;gt;end&amp;amp;lt;/span&amp;amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; Respond with an Enum If your service object is a bit more complex, and you want to handle different scenarios, you could just add enums to control the flow of your services:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; &amp;amp;lt;span class=&amp;quot;hljs-class&amp;quot;&amp;amp;gt;&amp;amp;lt;span class=&amp;quot;hljs-keyword&amp;quot;&amp;amp;gt;class&amp;amp;lt;/span&amp;amp;gt; &amp;amp;lt;span class=&amp;quot;hljs-title&amp;quot;&amp;amp;gt;ExchangeRecorder&amp;amp;lt;/span&amp;amp;gt; &amp;amp;lt; ApplicationService&amp;amp;lt;/span&amp;amp;gt;&amp;lt;br /&amp;gt; &amp;amp;nbsp; RETURNS = [&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; SUCCESS = &amp;amp;lt;span class=&amp;quot;hljs-symbol&amp;quot;&amp;amp;gt;:success&amp;amp;lt;/span&amp;amp;gt;,&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; FAILURE = &amp;amp;lt;span class=&amp;quot;hljs-symbol&amp;quot;&amp;amp;gt;:failure&amp;amp;lt;/span&amp;amp;gt;,&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; PARTIAL_SUCCESS = &amp;amp;lt;span class=&amp;quot;hljs-symbol&amp;quot;&amp;amp;gt;:partial_success&amp;amp;lt;/span&amp;amp;gt;&amp;lt;br /&amp;gt; &amp;amp;nbsp; ]&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;lt;span class=&amp;quot;hljs-function&amp;quot;&amp;amp;gt;&amp;amp;lt;span class=&amp;quot;hljs-keyword&amp;quot;&amp;amp;gt;def&amp;amp;lt;/span&amp;amp;gt; &amp;amp;lt;span class=&amp;quot;hljs-title&amp;quot;&amp;amp;gt;call&amp;amp;lt;/span&amp;amp;gt;&amp;amp;lt;/span&amp;amp;gt;&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; foo = do_something&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;lt;span class=&amp;quot;hljs-keyword&amp;quot;&amp;amp;gt;return&amp;amp;lt;/span&amp;amp;gt; SUCCESS &amp;amp;lt;span class=&amp;quot;hljs-keyword&amp;quot;&amp;amp;gt;if&amp;amp;lt;/span&amp;amp;gt; foo.success?&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;lt;span class=&amp;quot;hljs-keyword&amp;quot;&amp;amp;gt;return&amp;amp;lt;/span&amp;amp;gt; FAILURE &amp;amp;lt;span class=&amp;quot;hljs-keyword&amp;quot;&amp;amp;gt;if&amp;amp;lt;/span&amp;amp;gt; foo.failure?&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; PARTIAL_SUCCESS&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;lt;span class=&amp;quot;hljs-keyword&amp;quot;&amp;amp;gt;end&amp;amp;lt;/span&amp;amp;gt;&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt; &amp;amp;nbsp; private&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;lt;span class=&amp;quot;hljs-function&amp;quot;&amp;amp;gt;&amp;amp;lt;span class=&amp;quot;hljs-keyword&amp;quot;&amp;amp;gt;def&amp;amp;lt;/span&amp;amp;gt; &amp;amp;lt;span class=&amp;quot;hljs-title&amp;quot;&amp;amp;gt;do_something&amp;amp;lt;/span&amp;amp;gt;&amp;amp;lt;/span&amp;amp;gt;&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;lt;span class=&amp;quot;hljs-keyword&amp;quot;&amp;amp;gt;end&amp;amp;lt;/span&amp;amp;gt;&amp;lt;br /&amp;gt; &amp;amp;lt;span class=&amp;quot;hljs-keyword&amp;quot;&amp;amp;gt;end&amp;amp;lt;/span&amp;amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; And then in your app, you can use:
1
2
3
4
5
6
7
8
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;lt;span class=&amp;quot;hljs-keyword&amp;quot;&amp;amp;gt;case&amp;amp;lt;/span&amp;amp;gt; ExchangeRecorder.call&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;lt;span class=&amp;quot;hljs-keyword&amp;quot;&amp;amp;gt;when&amp;amp;lt;/span&amp;amp;gt; ExchangeRecorder::SUCCESS&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; foo&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;lt;span class=&amp;quot;hljs-keyword&amp;quot;&amp;amp;gt;when&amp;amp;lt;/span&amp;amp;gt; ExchangeRecorder::FAILURE&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; bar&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;lt;span class=&amp;quot;hljs-keyword&amp;quot;&amp;amp;gt;when&amp;amp;lt;/span&amp;amp;gt; ExchangeRecorder::PARTIAL_SUCCESS&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; baz&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;lt;span class=&amp;quot;hljs-keyword&amp;quot;&amp;amp;gt;end&amp;amp;lt;/span&amp;amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; Shouldn’t I Put Service Objects in 1
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; lib/services &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; Instead of 1
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; app/services &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; ?
This is subjective. People’s opinions differ on where to put their service objects. Some people put them in 1
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; lib/services &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; , while some create 1
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; app/services &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; . I fall in the latter camp. Rails’ Getting Started Guide describes the 1
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; lib/ &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; folder as the place to put “extended modules for your application.”
In my humble opinion, “extended modules” means modules that don’t encapsulate core domain logic and can generally be used across projects. In the wise words of a random Stack Overflow answer, put code in there that “can potentially become its own gem.”
Are Service Objects a Good Idea? It depends on your use case. Look—the fact that you’re reading this article right now suggests you’re trying to write code that doesn’t exactly belong in a model or controller. I recently read this article about how service objects are an anti-pattern. The author has his opinions, but I respectfully disagree.
Just because some other person overused service objects doesn’t mean they’re inherently bad. At my startup, Nazdeeq, we use service objects as well as non-ActiveRecord models. But the difference between what goes where has always been apparent to me: I keep all business actions in service objects while keeping resources that don’t really need persistence in non-ActiveRecord models. At the end of the day, it’s for you to decide what pattern is good for you.
However, do I think service objects in general are a good idea? Absolutely! They keep my code neatly organized, and what makes me confident in my use of POROs is that Ruby loves objects. No, seriously, Ruby loves objects. It’s insane, totally bonkers, but I love it! Case in point:
1
2
3
4
5
6
7
8
9
10
11
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; &amp;amp;nbsp;&amp;amp;gt; &amp;amp;lt;span class=&amp;quot;hljs-number&amp;quot;&amp;amp;gt;5&amp;amp;lt;/span&amp;amp;gt;.is_a? Object &amp;amp;lt;span class=&amp;quot;hljs-comment&amp;quot;&amp;amp;gt;# =&amp;amp;gt; true&amp;amp;lt;/span&amp;amp;gt;&amp;lt;br /&amp;gt; &amp;amp;nbsp;&amp;amp;gt; &amp;amp;lt;span class=&amp;quot;hljs-number&amp;quot;&amp;amp;gt;5&amp;amp;lt;/span&amp;amp;gt;.&amp;amp;lt;span class=&amp;quot;hljs-keyword&amp;quot;&amp;amp;gt;class&amp;amp;lt;/span&amp;amp;gt; &amp;amp;lt;span class=&amp;quot;hljs-comment&amp;quot;&amp;amp;gt;# =&amp;amp;gt; Integer&amp;amp;lt;/span&amp;amp;gt;&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt; &amp;amp;nbsp;&amp;amp;gt; &amp;amp;lt;span class=&amp;quot;hljs-class&amp;quot;&amp;amp;gt;&amp;amp;lt;span class=&amp;quot;hljs-keyword&amp;quot;&amp;amp;gt;class&amp;amp;lt;/span&amp;amp;gt; &amp;amp;lt;span class=&amp;quot;hljs-title&amp;quot;&amp;amp;gt;Integer&amp;amp;lt;/span&amp;amp;gt;&amp;amp;lt;/span&amp;amp;gt;&amp;lt;br /&amp;gt; &amp;amp;lt;span class=&amp;quot;hljs-meta&amp;quot;&amp;amp;gt;?&amp;amp;gt;&amp;amp;lt;/span&amp;amp;gt; &amp;amp;nbsp; &amp;amp;lt;span class=&amp;quot;hljs-function&amp;quot;&amp;amp;gt;&amp;amp;lt;span class=&amp;quot;hljs-keyword&amp;quot;&amp;amp;gt;def&amp;amp;lt;/span&amp;amp;gt; &amp;amp;lt;span class=&amp;quot;hljs-title&amp;quot;&amp;amp;gt;woot&amp;amp;lt;/span&amp;amp;gt;&amp;amp;lt;/span&amp;amp;gt;&amp;lt;br /&amp;gt; &amp;amp;lt;span class=&amp;quot;hljs-meta&amp;quot;&amp;amp;gt;?&amp;amp;gt;&amp;amp;lt;/span&amp;amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;lt;span class=&amp;quot;hljs-string&amp;quot;&amp;amp;gt;&#39;woot woot&#39;&amp;amp;lt;/span&amp;amp;gt;&amp;lt;br /&amp;gt; &amp;amp;lt;span class=&amp;quot;hljs-meta&amp;quot;&amp;amp;gt;?&amp;amp;gt;&amp;amp;lt;/span&amp;amp;gt; &amp;amp;nbsp; end&amp;lt;br /&amp;gt; &amp;amp;lt;span class=&amp;quot;hljs-meta&amp;quot;&amp;amp;gt;?&amp;amp;gt;&amp;amp;lt;/span&amp;amp;gt; end &amp;amp;lt;span class=&amp;quot;hljs-comment&amp;quot;&amp;amp;gt;# =&amp;amp;gt; :woot&amp;amp;lt;/span&amp;amp;gt;&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt; &amp;amp;nbsp;&amp;amp;gt; &amp;amp;lt;span class=&amp;quot;hljs-number&amp;quot;&amp;amp;gt;5&amp;amp;lt;/span&amp;amp;gt;.woot &amp;amp;lt;span class=&amp;quot;hljs-comment&amp;quot;&amp;amp;gt;# =&amp;amp;gt; &amp;quot;woot woot&amp;quot;&amp;amp;lt;/span&amp;amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; See? 1
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; 5 &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; is literally an object.
In many languages, numbers and other primitive types are not objects. Ruby follows the influence of the Smalltalk language by giving methods and instance variables to all of its types. This eases one’s use of Ruby, since rules applying to objects apply to all of Ruby.
Ruby-lang.org
When Should I Not Use a Service Object? This one’s easy. I have these rules:
Does your code handle routing, params or do other controller-y things?
If so, don’t use a service object—your code belongs in the controller. Are you trying to share your code in different controllers?
In this case, don’t use a service object—use a concern. Is your code like a model that doesn’t need persistence?
If so, don’t use a service object. Use a non-ActiveRecord model instead. Is your code a specific business action? (e.g., “Take out the trash,” “Generate a PDF using this text,” or “Calculate the customs duty using these complicated rules”)
In this case, use a service object. That code probably doesn’t logically fit in either your controller or your model. Of course, these are my rules, so you’re welcome to adapt them to your own use cases. These have worked very well for me, but your mileage may vary.
Rules for Writing Good Service Objects I have a four rules for creating service objects. These aren’t written in stone, and if you _really_want to break them, you can, but I will probably ask you to change it in code reviews unless your reasoning is sound.
Rule 1: Only One Public Method per Service Object Service objects are single business actions. You can change the name of your public method if you like. I prefer using 1
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; call &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; , but Gitlab CE’s codebase calls it 1
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; execute &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; and other people may use 1
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; perform &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; . Use whatever you want—you could call it 1
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; nermin &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; for all I care. Just don’t create two public methods for a single service object. Break it into two objects if you need to.
Rule 2: Name Service Objects Like Dumb Roles at a Company Service objects are single business actions. Imagine if you hired one person at the company to do that one job, what would you call them? If their job is to create tweets, call them 1
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; TweetCreator &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; . If their job is to read specific tweets, call them 1
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; TweetReader &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; .
Rule 3: Don’t Create Generic Objects to Perform Multiple Actions Service objects are single business actions. I broke the functionality into two pieces: 1
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; TweetReader &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; , and 1
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; ProfileFollower &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; . What I didn’t do is create a single generic object called 1
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; TwitterHandler &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; and dump all of the API functionality in there. Please don’t do this. This goes against the “business action” mindset and makes the service object look like the Twitter Fairy. If you want to share code among the business objects, just create a 1
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; BaseTwitterManager &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; object or module and mix that into your service objects.
Rule 4: Handle Exceptions Inside the Service Object For the umpteenth time: Service objects are single business actions. I can’t say this enough. If you’ve got a person that reads tweets, they’ll either give you the tweet, or say, “This tweet doesn’t exist.” Similarly, don’t let your service object panic, jump on your controller’s desk, and tell it to halt all work because “Error!” Just return 1
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; false &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; and let the controller move on from there.
Credits and Next Steps This article wouldn’t have been possible without the amazing community of Ruby developers at Toptal. If I ever run into a problem, the community is the most helpful group of talented engineers I’ve ever met.
If you’re using service objects, you may find yourself wondering how to force certain answers while testing. I recommend reading this article on how to create mock service objects in Rspec that will always return the result you want, without actually hitting the service object!
If you want to learn more about Ruby tricks, I recommend Creating a Ruby DSL: A Guide to Advanced Metaprogramming by fellow Toptaler Máté Solymosi. He breaks down how the 1
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; routes.rb &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; file doesn’t feel like Ruby and helps you build your own DSL.
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1091 ">
              <title>&lt;![CDATA[Quick screen sharing and meeting without any software]]></title>
              <link>&lt;![CDATA[/2018/02/19/quick-screen-sharing-meeting-software/]]></link>
              <pubDate>1519002040</pubDate>
              <content>&lt;![CDATA[Wanted to share this as this seems to be good option:
https://meet.jit.si/
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1092 ">
              <title>&lt;![CDATA[Battery life on laptops]]></title>
              <link>&lt;![CDATA[/2018/02/05/battery-life-laptops/]]></link>
              <pubDate>1517792406</pubDate>
              <content>&lt;![CDATA[To improve your laptop battery life, just do the following:
sudo dnf install tlp tlp-rdw systemctl start tlp systemctl enable tlp ]]></content>
             </sphinx:document>
            
            <sphinx:document id="1093 ">
              <title>&lt;![CDATA[asciinema – video for your terminal session]]></title>
              <link>&lt;![CDATA[/2017/10/16/asciinema-video-terminal-session/]]></link>
              <pubDate>1508115879</pubDate>
              <content>&lt;![CDATA[Info about asciinema:
Name : asciinema Version : 1.4.0 Release : 1.fc26 Arch : noarch Size : 144 k Source : asciinema-1.4.0-1.fc26.src.rpm Repo : @System From repo : fedora Summary : Command line client (terminal recorder) for asciinema.org service URL : http://asciinema.org License : GPLv3 Description : Asciinema is a free and open source solution for recording the terminal sessions and sharing them on the web. To install, you can do:
dnf install asciinema and here is and example:
Asciinema test video
Hope you find it useful if you have to show someone how to do something. Best part is – For just sharing a video link, you do not need to register as well 🙂
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1094 ">
              <title>&lt;![CDATA[Seven Common Pitfalls to Avoid When Hiring a Freelance AngularJS Specialist]]></title>
              <link>&lt;![CDATA[/2017/09/25/common-pitfalls-avoid-hiring-freelance-angularjs-specialist/]]></link>
              <pubDate>1506301634</pubDate>
              <content>&lt;![CDATA[ Hiring a freelancer for Angular jobs can be a scary undertaking, especially when filling a hole in your team’s existing skill set. Whether you’re hiring a freelancer to take ownership of an existing AngularJS web development project, to pave the way with a new greenfield project, or to augment an existing team, you’ll need to know what to look for and what to avoid. &amp;lt;h2 id=&amp;quot;pitfall-no-1-angularjs-vs-angular&amp;quot;&amp;gt; Pitfall No. 1: AngularJS vs. Angular &amp;lt;/h2&amp;gt; &amp;lt;p&amp;gt; &amp;lt;img src=&amp;quot;https://i0.wp.com/blog.amit-agarwal.co.in/wp-content/uploads/2017/09/toptal-blog-image-1499848793911-f97ea4924e4c159296fc683948155c09.png?w=688&amp;quot; alt=&amp;quot;It&#39;s important to know the difference between Angular and AngularJS.&amp;quot; data-recalc-dims=&amp;quot;1&amp;quot; /&amp;gt; &amp;lt;/p&amp;gt; &amp;lt;p&amp;gt; &amp;lt;strong&amp;gt;It’s just “Angular.”&amp;lt;/strong&amp;gt; &amp;lt;/p&amp;gt; &amp;lt;p&amp;gt; Even though it sounds straightforward, not all “Angulars” are created equal. &amp;lt;/p&amp;gt; &amp;lt;p&amp;gt; The team that built Angular has specified in its &amp;lt;a href=&amp;quot;http://angularjs.blogspot.com/2017/01/branding-guidelines-for-angular-and.html&amp;quot; target=&amp;quot;_blank&amp;quot; rel=&amp;quot;noopener noreferrer&amp;quot;&amp;gt;Branding Guidelines for Angular and AngularJS&amp;lt;/a&amp;gt; that “AngularJS” should be used when referring to versions 1.x, and “Angular”—without the “JS”—should be used when referring to versions 2&#43;. That means even Angular 4 is just referred to as “Angular.” &amp;lt;/p&amp;gt; &amp;lt;p&amp;gt; &amp;lt;strong&amp;gt;Why does this matter?&amp;lt;/strong&amp;gt; &amp;lt;/p&amp;gt; &amp;lt;p&amp;gt; It’s important for you and your freelancer to be on the same page and use the right name. While AngularJS and Angular may sound similar, they are in fact distinct frameworks. And just as you wouldn’t expect a &amp;lt;a href=&amp;quot;https://www.toptal.com/react&amp;quot;&amp;gt;React specialist&amp;lt;/a&amp;gt; or a &amp;lt;a href=&amp;quot;https://www.toptal.com/vue-js&amp;quot;&amp;gt;Vue.js specialist&amp;lt;/a&amp;gt; to hit the ground running with your Angular app, you shouldn’t expect an AngularJS specialist to be an expert in Angular, or vice versa. This isn’t to say they can’t take it on—they’ll just require more ramp-up time. &amp;lt;/p&amp;gt; &amp;lt;p&amp;gt; When hiring for an existing project, be sure to know if you need an AngularJS or Angular specialist. If you’re planning a new project, use Angular! &amp;lt;/p&amp;gt; &amp;lt;h2 id=&amp;quot;pitfall-no-2-hiring-a-developer-who-isnt-fluent-in-typescript&amp;quot;&amp;gt; Pitfall No. 2: Hiring a Developer Who Isn’t Fluent in TypeScript &amp;lt;/h2&amp;gt; &amp;lt;p&amp;gt; Angular was written in TypeScript, and it is by far the preferred language for Angular apps. This means that the ecosystem (e.g., libraries and documentation) around Angular is predominantly written in TypeScript. &amp;lt;/p&amp;gt; &amp;lt;p&amp;gt; When hiring an Angular expert, you’ll want to make sure that you’re hiring someone who knows TypeScript and can take full advantage of its amazing features. They should be familiar with tools like &amp;lt;a href=&amp;quot;https://atom.io/&amp;quot; target=&amp;quot;_blank&amp;quot; rel=&amp;quot;noopener noreferrer&amp;quot;&amp;gt;Atom&amp;lt;/a&amp;gt; and &amp;lt;a href=&amp;quot;https://code.visualstudio.com/&amp;quot; target=&amp;quot;_blank&amp;quot; rel=&amp;quot;noopener noreferrer&amp;quot;&amp;gt;VSCode&amp;lt;/a&amp;gt;, which support TypeScript and will highlight errors and provide autocompletion. &amp;lt;/p&amp;gt; &amp;lt;p&amp;gt; Hiring an Angular specialist means hiring a TypeScript specialist, so test their chops! &amp;lt;/p&amp;gt; &amp;lt;h2 id=&amp;quot;pitfall-no-3-lead-or-follow&amp;quot;&amp;gt; Pitfall No. 3: Lead or Follow? &amp;lt;/h2&amp;gt; &amp;lt;p&amp;gt; Are you looking for someone to augment your existing Angular team? Maintain an existing application? Lead or bootstrap a new project? &amp;lt;/p&amp;gt; &amp;lt;blockquote&amp;gt; &amp;lt;p&amp;gt; An Angular lead should know how to set up a new project. This is an &amp;lt;strong&amp;gt;incredibly important&amp;lt;/strong&amp;gt; part of your project lifecycle. &amp;lt;/p&amp;gt; &amp;lt;/blockquote&amp;gt; &amp;lt;p&amp;gt; The answers to these questions will help you determine how much Angular experience your specialist will need to have. As with other frameworks, the skill and experience required to be productive in an established codebase is much lower than what is required to bootstrap a new project. If you don’t need an Angular lead, then hiring someone with React, AngularJS, or great JavaScript experience may suffice, although they will require some learning. If you need an Angular lead, or someone to bootstrap a new project, you’ll want to make sure that your specialist is up to the task. &amp;lt;/p&amp;gt; &amp;lt;p&amp;gt; A professional Angular lead should know how to set up a new project. This is an &amp;lt;strong&amp;gt;incredibly important&amp;lt;/strong&amp;gt; part of your project lifecycle! Think of it like a building—you wouldn’t want to build a skyscraper on top of a shaky foundation. Likewise, your Angular lead will be setting up the foundation for themselves and all future developers working on your project, so it needs to be rock-solid. &amp;lt;/p&amp;gt; &amp;lt;p&amp;gt; &amp;lt;strong&amp;gt;A good setup will:&amp;lt;/strong&amp;gt; &amp;lt;/p&amp;gt; &amp;lt;ul&amp;gt; &amp;lt;li&amp;gt; Follow best practices (for &amp;lt;a href=&amp;quot;https://angular.io/guide/styleguide&amp;quot; target=&amp;quot;_blank&amp;quot; rel=&amp;quot;noopener noreferrer&amp;quot;&amp;gt;Angular&amp;lt;/a&amp;gt; or &amp;lt;a href=&amp;quot;https://github.com/johnpapa/angular-styleguide/blob/master/a1/README.md&amp;quot; target=&amp;quot;_blank&amp;quot; rel=&amp;quot;noopener noreferrer&amp;quot;&amp;gt;AngularJS&amp;lt;/a&amp;gt;). &amp;lt;/li&amp;gt; &amp;lt;li&amp;gt; Reduce bugs. &amp;lt;/li&amp;gt; &amp;lt;li&amp;gt; Make it obvious how to add new features and extend your application. &amp;lt;/li&amp;gt; &amp;lt;/ul&amp;gt; &amp;lt;p&amp;gt; When hiring a lead, make sure to ask them about best practices, directory structure, and how to set up a single page application (since it requires special routing). &amp;lt;/p&amp;gt; &amp;lt;h2 id=&amp;quot;pitfall-no-4-your-angular-specialist-doesnt-really-know-angular&amp;quot;&amp;gt; Pitfall No. 4: Your Angular Specialist Doesn’t Really Know Angular &amp;lt;/h2&amp;gt; &amp;lt;p&amp;gt; You wouldn’t hire a chef without tasting their food, and you shouldn’t hire someone for Angular or AngularJS development without testing their Angular knowledge. (A great starting point for this is &amp;lt;a href=&amp;quot;https://www.toptal.com/angular-js/interview-questions&amp;quot;&amp;gt;our list of AngularJS interview questions&amp;lt;/a&amp;gt;.) Both Angular and AngularJS code come with their own set of peculiarities that you’ll want to talk about. &amp;lt;/p&amp;gt; &amp;lt;p&amp;gt; &amp;lt;strong&amp;gt;Data Binding and Component Communication&amp;lt;/strong&amp;gt; &amp;lt;/p&amp;gt; &amp;lt;p&amp;gt; An Angular specialist should know their way around data binding and component communication. &amp;lt;/p&amp;gt; &amp;lt;p&amp;gt; An AngularJS expert in particular should know the different ways to pass data to a component: &amp;lt;/p&amp;gt; &amp;lt;ul&amp;gt; &amp;lt;li&amp;gt; &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; @ &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;p&amp;gt; for raw text&amp;lt;/li&amp;gt; &amp;lt;li&amp;gt; &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; &amp;amp; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;p&amp;gt; for a function&amp;lt;/li&amp;gt; &amp;lt;li&amp;gt; &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; = &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;p&amp;gt; for two-way data binding&amp;lt;/li&amp;gt; &amp;lt;li&amp;gt; &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; =? &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;p&amp;gt; for optional two-way parameters&amp;lt;/li&amp;gt; &amp;lt;/ul&amp;gt; &amp;lt;p&amp;gt; Conversely, an Angular specialist should know when to use: &amp;lt;/p&amp;gt; &amp;lt;ul&amp;gt; &amp;lt;li&amp;gt; &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; [property] &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;p&amp;gt; binding&amp;lt;/li&amp;gt; &amp;lt;li&amp;gt; &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; (event) &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;p&amp;gt; binding&amp;lt;/li&amp;gt; &amp;lt;li&amp;gt; &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; [(two-way)] &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;p&amp;gt; binding&amp;lt;/li&amp;gt; &amp;lt;/ul&amp;gt; &amp;lt;p&amp;gt; Your specialist should also be able to tell you how to do parent-child or child-parent component communication, for &amp;lt;a href=&amp;quot;https://angular.io/guide/component-interaction&amp;quot; target=&amp;quot;_blank&amp;quot; rel=&amp;quot;noopener noreferrer&amp;quot;&amp;gt;Angular&amp;lt;/a&amp;gt; or &amp;lt;a href=&amp;quot;https://docs.angularjs.org/guide/component#intercomponent-communication&amp;quot; target=&amp;quot;_blank&amp;quot; rel=&amp;quot;noopener noreferrer&amp;quot;&amp;gt;AngularJS&amp;lt;/a&amp;gt;. &amp;lt;/p&amp;gt; &amp;lt;p&amp;gt; &amp;lt;strong&amp;gt;Services, Directives, and Pipes&amp;lt;/strong&amp;gt; &amp;lt;/p&amp;gt; &amp;lt;p&amp;gt; Your Angular specialist should be able to explain to you what services are (hint: they’re singletons!), and when to use them. Services are a great way to provide common utilities to many components, simplify components by pulling out complex logic, and share state throughout your app. Angular makes it easy to control the scope of this shared state through the use of providers (e.g., app-, module-, or component-level state). &amp;lt;/p&amp;gt; &amp;lt;p&amp;gt; An Angular specialist should also know when to use directives and how to set them up. Directives are an amazing way to extend HTML by attaching custom behavior to elements in the DOM. For example, you could set up a directive to add on-hover tooltips to an element, set up hotkey event handling, or register when a user clicks outside of your element (to close a dropdown, for example). &amp;lt;/p&amp;gt; &amp;lt;p&amp;gt; Any non-trivial application will most likely have its own custom pipes, so your specialist will need to be versed in these, too. Pipes (or &amp;lt;em&amp;gt;filters&amp;lt;/em&amp;gt; for AngularJS) are specifically used to transform your displayed data. Angular comes with many &amp;lt;a href=&amp;quot;https://angular.io/api?type=pipe&amp;quot; target=&amp;quot;_blank&amp;quot; rel=&amp;quot;noopener noreferrer&amp;quot;&amp;gt;built-in pipes&amp;lt;/a&amp;gt;, and AngularJS comes with many &amp;lt;a href=&amp;quot;https://docs.angularjs.org/api/ng/filter&amp;quot; target=&amp;quot;_blank&amp;quot; rel=&amp;quot;noopener noreferrer&amp;quot;&amp;gt;built-in filters&amp;lt;/a&amp;gt;. Ask your specialist about these handy tools, and make sure they won’t repeat the same transformations across the app when they could use pipes or filters! &amp;lt;/p&amp;gt; &amp;lt;p&amp;gt; &amp;lt;strong&amp;gt;Promises and Observables&amp;lt;/strong&amp;gt; &amp;lt;/p&amp;gt; &amp;lt;p&amp;gt; While not strictly Angular-specific, promises and observables are paradigms that are common in the Angular world, and your specialist should be familiar with these as well. &amp;lt;/p&amp;gt; &amp;lt;p&amp;gt; Thanks to promises, we no longer have to live in fear of &amp;lt;a href=&amp;quot;http://callbackhell.com/&amp;quot; target=&amp;quot;_blank&amp;quot; rel=&amp;quot;noopener noreferrer&amp;quot;&amp;gt;callback hell&amp;lt;/a&amp;gt;, and your specialist should know when and how to use them (such as wrapping REST API requests). Additionally, Angular introduces the use of ReactiveX’s &amp;lt;a href=&amp;quot;http://reactivex.io/documentation/observable.html&amp;quot; target=&amp;quot;_blank&amp;quot; rel=&amp;quot;noopener noreferrer&amp;quot;&amp;gt;Observables&amp;lt;/a&amp;gt;, which provide an awesome way to stream data. &amp;lt;/p&amp;gt; &amp;lt;h2 id=&amp;quot;pitfall-no-5-not-doing-a-code-review&amp;quot;&amp;gt; Pitfall No. 5: Not Doing a Code Review &amp;lt;/h2&amp;gt; &amp;lt;p&amp;gt; &amp;lt;strong&amp;gt;You can talk the talk, but can you walk the walk?&amp;lt;/strong&amp;gt; &amp;lt;/p&amp;gt; &amp;lt;p&amp;gt; So, your prospective specialist sounds like they know what they’re talking about, but can they actually break down a problem and write quality code? &amp;lt;/p&amp;gt; &amp;lt;p&amp;gt; Do a code walkthrough of some of their existing code that they can share with you. It doesn’t need to be perfect (but if it isn’t, they should be able to explain to you how they’d improve it). Additionally—or if they don’t have any open source code to share—have them code an example component within your problem domain (e.g., a checkout shopping cart, a web form for teachers to add lesson plans, or a to-do list). Alternatively, you can set up some example code and have them explain it and identify bugs and cleanups. &amp;lt;/p&amp;gt; &amp;lt;p&amp;gt; Checking their code can really give you an insight into not only their competency, but also their style. Good style goes a long way in keeping code maintainable and bug-free, and is just a good general indication of their seniority. &amp;lt;/p&amp;gt; &amp;lt;p&amp;gt; &amp;lt;strong&amp;gt;Things to look for:&amp;lt;/strong&amp;gt; &amp;lt;/p&amp;gt; &amp;lt;ul&amp;gt; &amp;lt;li&amp;gt; They follow best practices (for &amp;lt;a href=&amp;quot;https://angular.io/guide/styleguide&amp;quot; target=&amp;quot;_blank&amp;quot; rel=&amp;quot;noopener noreferrer&amp;quot;&amp;gt;Angular&amp;lt;/a&amp;gt; or &amp;lt;a href=&amp;quot;https://github.com/johnpapa/angular-styleguide/blob/master/a1/README.md&amp;quot; target=&amp;quot;_blank&amp;quot; rel=&amp;quot;noopener noreferrer&amp;quot;&amp;gt;AngularJS&amp;lt;/a&amp;gt;). &amp;lt;/li&amp;gt; &amp;lt;li&amp;gt; Consistency in their style (casing, format, etc.). &amp;lt;/li&amp;gt; &amp;lt;li&amp;gt; They use TypeScript for Angular. &amp;lt;/li&amp;gt; &amp;lt;li&amp;gt; They can explain how their code works and defend their decisions. &amp;lt;/li&amp;gt; &amp;lt;/ul&amp;gt; &amp;lt;p&amp;gt; Read up on &amp;lt;a href=&amp;quot;https://www.toptal.com/software/six-commandments-of-good-code&amp;quot;&amp;gt;good code&amp;lt;/a&amp;gt;, &amp;lt;a href=&amp;quot;https://www.toptal.com/javascript/10-most-common-javascript-mistakes&amp;quot;&amp;gt;common JavaScript mistakes&amp;lt;/a&amp;gt;, and &amp;lt;a href=&amp;quot;https://www.toptal.com/angular-js/top-18-most-common-angularjs-developer-mistakes&amp;quot;&amp;gt;common AngularJS mistakes&amp;lt;/a&amp;gt;. And if you’re hiring someone who has yet to be vetted, you should also test their general programming skills (there’s a reason &amp;lt;a href=&amp;quot;https://blog.codinghorror.com/why-cant-programmers-program/&amp;quot; target=&amp;quot;_blank&amp;quot; rel=&amp;quot;noopener noreferrer&amp;quot;&amp;gt;FizzBuzz&amp;lt;/a&amp;gt; weeds out so many freelancers). &amp;lt;/p&amp;gt; &amp;lt;h2 id=&amp;quot;pitfall-no-6-proceeding-without-a-testing-strategy&amp;quot;&amp;gt; Pitfall No. 6: Proceeding without a Testing Strategy &amp;lt;/h2&amp;gt; &amp;lt;p&amp;gt; Tests are an essential part of every code base. They’re like a warm, snuggly security blanket for your engineers, giving them confidence that they aren’t breaking anything and costing the company money. Good tests and a good testing strategy will boost your &amp;lt;a href=&amp;quot;http://firstround.com/review/forget-technical-debt-heres-how-to-build-technical-wealth/&amp;quot; target=&amp;quot;_blank&amp;quot; rel=&amp;quot;noopener noreferrer&amp;quot;&amp;gt;technical wealth&amp;lt;/a&amp;gt;, while bad tests, or lack of strategy, will be a constant source of frustration and major code debt. &amp;lt;/p&amp;gt; &amp;lt;p&amp;gt; A good freelancer will advocate for tests and understand their benefits: &amp;lt;/p&amp;gt; &amp;lt;ul&amp;gt; &amp;lt;li&amp;gt; Guarding against regressions (preventing &amp;lt;em&amp;gt;“What do you mean users can’t sign up anymore!?”&amp;lt;/em&amp;gt;). &amp;lt;/li&amp;gt; &amp;lt;li&amp;gt; Acting as codified documentation of your codebase, making it easier for other developers to understand, maintain, and extend it. &amp;lt;/li&amp;gt; &amp;lt;li&amp;gt; Validating functionality and preventing bugs in pesky edge cases. &amp;lt;/li&amp;gt; &amp;lt;/ul&amp;gt; &amp;lt;p&amp;gt; If you don’t understand testing, you’ll likely fall into the &amp;lt;em&amp;gt;“We need tests!”&amp;lt;/em&amp;gt; trap. This can lead you to hire someone who doesn’t truly understand tests, but will happily write tons of less-than-useful or incredibly fragile tests. &amp;lt;/p&amp;gt; &amp;lt;p&amp;gt; When considering Angular consulting, you’ll want to explore your potential hire’s understanding of tests and determine how they’d go about testing your app. &amp;lt;/p&amp;gt; &amp;lt;p&amp;gt; &amp;lt;strong&amp;gt;Things to look for:&amp;lt;/strong&amp;gt; &amp;lt;/p&amp;gt; &amp;lt;ul&amp;gt; &amp;lt;li&amp;gt; They understand the &amp;lt;strong&amp;gt;fragile&amp;lt;/strong&amp;gt; nature of front-end testing and how to use constructs like &amp;lt;a href=&amp;quot;https://angular.io/guide/testing#use-a-page-object-to-simplify-setup&amp;quot; target=&amp;quot;_blank&amp;quot; rel=&amp;quot;noopener noreferrer&amp;quot;&amp;gt;page objects&amp;lt;/a&amp;gt; to &amp;lt;a href=&amp;quot;http://programmer.97things.oreilly.com/wiki/index.php/Don%27t_Repeat_Yourself&amp;quot; target=&amp;quot;_blank&amp;quot; rel=&amp;quot;noopener noreferrer&amp;quot;&amp;gt;DRY&amp;lt;/a&amp;gt; up test upkeep in the face of template changes and refactorings. &amp;lt;/li&amp;gt; &amp;lt;li&amp;gt; They can explain how AngularJS’s digest cycle works, or how Angular’s asynchronous change detection works, and how that impacts testing. (Hint: You need to &amp;lt;a href=&amp;quot;https://angular.io/guide/testing#the-tick-function&amp;quot; target=&amp;quot;_blank&amp;quot; rel=&amp;quot;noopener noreferrer&amp;quot;&amp;gt;explicitly resolve asyncs&amp;lt;/a&amp;gt; or use &amp;lt;a href=&amp;quot;https://angular.io/guide/testing#whenstable&amp;quot; target=&amp;quot;_blank&amp;quot; rel=&amp;quot;noopener noreferrer&amp;quot;&amp;gt;wrapping functions&amp;lt;/a&amp;gt;to wait for them.) &amp;lt;/li&amp;gt; &amp;lt;li&amp;gt; Mocking! They should know how to use &amp;lt;a href=&amp;quot;https://jasmine.github.io/api/edge/global.html#spyOn&amp;quot; target=&amp;quot;_blank&amp;quot; rel=&amp;quot;noopener noreferrer&amp;quot;&amp;gt;spys&amp;lt;/a&amp;gt; and &amp;lt;a href=&amp;quot;https://angular.io/guide/testing#provide-service-test-doubles&amp;quot; target=&amp;quot;_blank&amp;quot; rel=&amp;quot;noopener noreferrer&amp;quot;&amp;gt;stubs/test-doubles&amp;lt;/a&amp;gt; in order to isolate tests and remove their dependence on any network calls. &amp;lt;/li&amp;gt; &amp;lt;li&amp;gt; An Angular specialist will know that services and pipes are ripe for unit testing. Components are also unit-testable, but with a &amp;lt;a href=&amp;quot;https://angular.io/guide/testing#test-a-component&amp;quot; target=&amp;quot;_blank&amp;quot; rel=&amp;quot;noopener noreferrer&amp;quot;&amp;gt;bit more boilerplate&amp;lt;/a&amp;gt;. This is why it is recommended to &amp;lt;a href=&amp;quot;https://angular.io/guide/styleguide#delegate-complex-component-logic-to-services&amp;quot; target=&amp;quot;_blank&amp;quot; rel=&amp;quot;noopener noreferrer&amp;quot;&amp;gt;move complex logic into a service&amp;lt;/a&amp;gt;. &amp;lt;/li&amp;gt; &amp;lt;li&amp;gt; End to end (E2E) tests will depend on your back-end framework, but an Angular specialist should know about &amp;lt;a href=&amp;quot;http://www.protractortest.org/&amp;quot; target=&amp;quot;_blank&amp;quot; rel=&amp;quot;noopener noreferrer&amp;quot;&amp;gt;Protractor&amp;lt;/a&amp;gt; (although other tools like &amp;lt;a href=&amp;quot;http://nightwatchjs.org/&amp;quot; target=&amp;quot;_blank&amp;quot; rel=&amp;quot;noopener noreferrer&amp;quot;&amp;gt;Nightwatch.js&amp;lt;/a&amp;gt; will also work). &amp;lt;/li&amp;gt; &amp;lt;/ul&amp;gt; &amp;lt;p&amp;gt; To aid in your probing of their abilities, you could provide an example component, service, or directive and ask them what they’d test—maybe even have them write up the “it should (blank)” descriptions of all of the tests they’d write for it, and also write one of them up. &amp;lt;/p&amp;gt; &amp;lt;p&amp;gt; When hiring a professional Angular specialist, don’t superficially ask about tests. Instead, explore their understanding of what to test and how to test it. &amp;lt;/p&amp;gt; &amp;lt;h2 id=&amp;quot;pitfall-no-7-having-only-non-developers-interview-your-freelancer&amp;quot;&amp;gt; Pitfall No. 7: Having Only Non-Developers Interview Your Freelancer &amp;lt;/h2&amp;gt; &amp;lt;p&amp;gt; When hiring a freelance developer for Angular(JS) web development, you’ll want to make sure that a developer interviews them. Just because a freelancer is confident, it doesn’t mean they are competent, and a non-developer has a higher risk of making a costly mis-hire. A good developer will be able to recognize someone who knows what they are talking about. Your developer should also validate that the freelancer can walk the walk, through interview questions and challenges. &amp;lt;/p&amp;gt; &amp;lt;p&amp;gt; If you don’t have a senior developer, you can ask a friend or stick with vetted developers. &amp;lt;/p&amp;gt; &amp;lt;h2 id=&amp;quot;this-up-front-effort-will-save-you-time-and-money-in-the-long-run&amp;quot;&amp;gt; This Up-Front Effort Will Save You Time and Money in the Long Run &amp;lt;/h2&amp;gt; &amp;lt;p&amp;gt; Exploring AngularJS development services can seem like a difficult, opaque, and potentially costly process. After all, if you’re looking for a freelancer to contribute to your existing project or team, it’s incredibly important to find someone who is a good fit and whose chops are up to par. And if you’re building a new project from scratch, in many ways, your project’s future success will depend upon the early-stage decisions made by your specialist. &amp;lt;/p&amp;gt; &amp;lt;p&amp;gt; But don’t panic. By taking the precautions discussed above, you can ensure not only that you’ll be hiring a skilled developer, but also that your project will be on the right track to succeed and to take advantage of all the powerful features that Angular has to offer. &amp;lt;/p&amp;gt; &amp;lt;p&amp;gt; This &amp;lt;a href=&amp;quot;https://www.toptal.com/angular-js-development#hiring-guide&amp;quot;&amp;gt;article &amp;lt;/a&amp;gt;is originally publisheed at Toptal. &amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/section&amp;gt; &amp;lt;footer class=&amp;quot;hide_in_webview&amp;quot;&amp;gt; &amp;lt;section class=&amp;quot;page_footer_legal-wrapper&amp;quot;&amp;gt; &amp;lt;div class=&amp;quot;page_footer_legal is-wide&amp;quot;&amp;gt; &amp;lt;/div&amp;gt;&amp;lt;/section&amp;gt; &amp;lt;/footer&amp;gt; &amp;lt;div&amp;gt; &amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;notification-container&amp;quot;&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;layout-counters&amp;quot;&amp;gt; &amp;lt;/div&amp;gt;&amp;lt;nav class=&amp;quot;page_header_menu-wrapper is-grid_row is-fixed is-visible&amp;quot;&amp;gt; &amp;lt;div class=&amp;quot;page_header_menu is-grid_row_inner&amp;quot;&amp;gt; &amp;lt;/div&amp;gt;&amp;lt;/nav&amp;gt; &amp;lt;p&amp;gt; &amp;lt;/p&amp;gt; ]]></content>
             </sphinx:document>
            
            <sphinx:document id="1095 ">
              <title>&lt;![CDATA[On the way]]></title>
              <link>&lt;![CDATA[/2017/07/17/on-the-way/]]></link>
              <pubDate>1500255729</pubDate>
              <content>&lt;![CDATA[ from Instagram: http://ift.tt/2t63OTP ]]></content>
             </sphinx:document>
            
            <sphinx:document id="1096 ">
              <title>&lt;![CDATA[Getting Started with Elixir Programming Language]]></title>
              <link>&lt;![CDATA[/2017/05/15/started-elixir-programming-language/]]></link>
              <pubDate>1494810611</pubDate>
              <content>&lt;![CDATA[If you have been reading blog posts, hacker news threads, your favorite developers tweets or listening to podcasts, at this point you’ve probably heard about the Elixir programming language. The language was created by José Valim, a well known developer in the open-source world. You may know him from the Ruby on Rails MVC framework or from devise and simple_form ruby gems him and his co-workers from the Plataformatec have been working on in the last few years.
According the José Valim, Elixir was born in 2011. He had the idea to build the new language due the lack of good tools to solve the concurrency problems in the ruby world. At that time, after spending time studying concurrency and distributed focused languages, he found two languages that he liked, Erlang and Clojure which run in the JVM. He liked everything he saw in the Erlang language (Erlang VM) and he hated the things he didn’t see, like polymorphism, metaprogramming and language extendability attributes which Clojure was good at. So, Elixir was born with that in mind, to have an alternative for Clojure and a dynamic language which runs in the Erlang Virtual Machine with good extendability support.
Elixir describes itself as a dynamic, functional language with immutable state and an actor based approach to concurrency designed for building scalable and maintainable applications with a simple, modern and tidy syntax. The language runs in the Erlang Virtual Machine, a battle proof, high-performance and distributed virtual machine known for its low latency and fault tolerance characteristics.
Before we see some code, it’s worth saying that Elixir has been accepted by the community which is growing. If you want to learn Elixir today you will easily find books, libraries, conferences, meetups, podcasts, blog posts, newsletters and all sorts of learning sources out there as well as it was accepted by the Erlang creators.
Let’s see some code!
Install Elixir: Installing Elixir is super easy in all major platforms and is an one-liner in most of them.
Arch Linux Elixir is available on Arch Linux through the official repositories:
1
pacman -S elixir Ubuntu Installing Elixir in Ubuntu is a bit tidious. But it is easy enough nonetheless.
1
2
3
4
wget https://packages.erlang-solutions.com/erlang-solutions_1.0_all.deb &amp;amp;&amp;amp; sudo dpkg -i erlang-solutions_1.0_all.deb
apt-get update
apt-get install esl-erlang
apt-get install elixir OS X Install Elixir in OS X using Homebrew.
1
brew install elixir Meet IEx After the installation is completed, it’s time to open your shell. You will spend a lot of time in your shell if you want to develop in Elixir.
Elixir’s interactive shell or IEx is a REPL – (Read Evaluate Print Loop) where you can explore Elixir. You can input expressions there and they will be evaluated giving you immediate feedback. Keep in mind that your code is truly evaluated and not compiled, so make sure not to run profiling nor benchmarks in the shell.
The Break Command There’s an important thing you need to know before you start the IEx RELP – how to exit it.
You’re probably used to hitting
1
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; CTRL&#43;C &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; to close the programs running in the terminal. If you hit
1
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; CTRL&#43;C &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; in the IEx RELP, you will open up the Break Menu. Once in the break menu, you can hit
1
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; CTRL&#43;C &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; again to quit the shell as well as pressing
1
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; a &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; .
I’m not going to dive into the break menu functions. But, let’s see a few IEx helpers!
Helpers IEx provides a bunch of helpers, in order to list all of them type:
1
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; h() &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; .
And this is what you should see:
Those are some of my favorites, I think they will be yours as well.
1
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; h &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; as we just saw, this function will print the helper message.
1
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; h/1 &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; which is the same function, but now it expects one argument. For instance, whenever you want to see the documentation of the
1
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; String &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; 1
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; strip/2 &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; method you can easily do:
Probably the second most useful IEx helper you’re going to use while programming in Elixir is the &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; c/2 &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; , which compiles a given elixir file (or a list) and expects as a second parameter a path to write the compiled files to. Let’s say you are working in one of the http://exercism.io/ Elixir exersices, the Anagram exercise. So you have implemented the &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; Anagram &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; module, which has the method &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; match/2 &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; in the anagram.exs file. As the good [developer][1] you are, you have written a few specs to make sure everything works as expected as well. This is how your current directory looks: Now, in order to run your tests against the Anagram module you need to run/compile the tests. As you just saw, in order to compile a file, simply invoke the &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; elixir &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; executable passing as argument path to the file you want to compile. Now let’s say you want to run the IEx REPL with the Anagram module accessible in the session context. There are two commonly used options. The first is you can require the file by using the options &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; -r &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; , something like &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; iex -r anagram.exs &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; . The second one, you can compile right from the IEx session. Simple, just like that! Ok, what about if you want to recompile a module? Should you exit the IEx, run it again and compile the file again? Nope! If you have a good memory, you will remember that when we listed all the helpers available in the IEx RELP, we saw something about a recompile command. Let’s see how it works. Notice that this time, you passed as an argument the module itself and not the file path. As we saw, IEx has a bunch of other useful helpers that will help you learn and understand better how an Elixir program works. ## Basics of Elixir Types {#basics-of-elixir-types} ### Numbers {#numbers} There are two types of numbers. Arbitrary sized integers and floating points numbers. #### Integers {#integers} Integers can be written in the decimal base, hexadecimal, octal and binary. As in [Ruby][2], you can use underscore to separate groups of three digits when writing large numbers. For instance you could right a hundred million like this: &amp;lt;pre&amp;gt;&amp;lt;div class=&amp;quot;codecolorer-container text solarized-light language-elixir&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; 1
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; 100_000_000 &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; Octal: &amp;lt;pre&amp;gt;&amp;lt;div class=&amp;quot;codecolorer-container text solarized-light language-elixir&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; 1
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; 0o444 &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; Hexdecimal: &amp;lt;pre&amp;gt;&amp;lt;div class=&amp;quot;codecolorer-container text solarized-light language-elixir&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; 1
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; 0xabc &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; Binary: &amp;lt;pre&amp;gt;&amp;lt;div class=&amp;quot;codecolorer-container text solarized-light language-elixir&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; 1
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; 0b1011 &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; #### Floats {#floats} Floare are IEEE 754 double precision. They have 16 digits of accuracy and a maximum exponent of around 10308. Floats are written using a decimal point. There must be at least one digit before and after the point. You can also append a trailing exponent. For instance 1.0, 0.3141589e1, and 314159.0-e. ### Atoms {#atoms} Atoms are constants that represent names. They are immutable values. You write an atom with a leading colon &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; : &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; and a sequence of letters, digits, underscores, and at signs &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; @ &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; . You can also write them with a leading colon &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; : &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; and an arbitrary sequence of characters enclosed by quotes. Atoms are a very powerful tool, they are used to reference erlang functions as well as keys and Elixir methods. Here are a few valid atoms. &amp;lt;pre&amp;gt;&amp;lt;div class=&amp;quot;codecolorer-container text solarized-light language-elixir&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; 1
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; :name, :first_name, :&amp;quot;last name&amp;quot;, &amp;amp;nbsp;:===, :is_it_@_question? &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; ### Booleans {#booleans} Of course, booleans are true and false values. But the nice thing about them is at the end of the day, they’re just atoms. ### Strings {#strings} By default, strings in Elixir are &amp;lt;a href=&amp;quot;https://en.wikipedia.org/wiki/UTF-8&amp;quot; target=&amp;quot;_blank&amp;quot; rel=&amp;quot;noopener noreferrer&amp;quot;&amp;gt;UTF-8&amp;lt;/a&amp;gt; compliant. To use them you can have an arbitrary number of characters enclosed by &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; &amp;quot; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; or &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; &#39; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; . You can also have interpolated expressions inside the string as well as escaped characters. Be aware that single quoted strings are actually a list of binaries. ### Anonymous Functions {#anonymous-functions} As a functional language, Elixir has anonymous functions as a basic type. A simple way to write a function is &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; fn (argument_list) -&amp;gt; body end &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; . But a function can have multiple bodies with multiple argument lists, guard clauses, and so on. Dave Thomas, in the &amp;lt;a href=&amp;quot;https://pragprog.com/book/elixir/programming-elixir&amp;quot; target=&amp;quot;_blank&amp;quot; rel=&amp;quot;noopener noreferrer&amp;quot;&amp;gt;Programming Elixir&amp;lt;/a&amp;gt; book, suggests we think of fn…end as being the quotes that surround a string literal, where instead of returning a string value we are returning a function. ### Tuples {#tuples} Tuple is an immutable indexed array. They are fast to return its size and slow to append new values due its immutable nature. When updating a tuple, you are actually creating a whole new copy of the tuple self. Tuples are very often used as the return value of an array. While coding in Elixir you will very often see this, &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; {:ok, something_else_here} &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; . Here’s how we write a tuple: &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; {?a,?b,?c} &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; . ### Pattern Matching {#pattern-matching} I won’t be able to explain everything you need to know about Pattern Matching, however what you are about to read covers a lot of what you need to know to get started. Elixir uses &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; = &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; as a match operator. To understand this, we kind of need to unlearn what we know about &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; = &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; in other traditional languages. In traditional languages the equals operator is for assignment. In Elixir, the equals operators is for pattern matching. So, that’s the way it works values in the left hand side. If they are variables they are bound to the right hand side, if they are not variables elixir tries to match them with the right hand side. #### Pin Operator {#pin-operator} Elixir provides a way to always force pattern matching against the variable in the left hand side, the pin operator. ### Lists {#lists} In Elixir, Lists look like arrays as we know it from other languages but they are not. Lists are linked structures which consist of a head and a tail. #### Keyword Lists {#keyword-lists} Keyword Lists are a list of Tuple pairs. You simply write them as lists. For instance: [{:one, 1}, 2, {:three, 3}]. There’s a shortcut for defining lists, here’s how it looks: [one: 1, three: 3]. In order to retrieve an item from a keyword list you can either use: &amp;lt;pre&amp;gt;&amp;lt;div class=&amp;quot;codecolorer-container text solarized-light language-elixir&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; 1
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; Keyword.get([{:one, 1}, 2, {:three, 3}], :one) &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; Or use the shortcut: &amp;lt;pre&amp;gt;&amp;lt;div class=&amp;quot;codecolorer-container text solarized-light language-elixir&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; 1
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; [{:one, 1}, 2, {:three, 3}][:one] &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; Because keyword lists are slow when retrieving a value, in it is an expensive operation, so if you are storing data that needs fast access you should use a Map. #### Maps {#maps} Maps are an efficient collection of key/value pairs. The key can have any value you want as a key, but usually should be the same type. Different from keyword lists, Maps allow only one entry for a given key. They are efficient as they grow and they can be used in the Elixir pattern matching in general use maps when you need an associative array. This &amp;lt;a href=&amp;quot;https://www.toptal.com/elixir/getting-started-elixir-programming-language&amp;quot; target=&amp;quot;_blank&amp;quot; rel=&amp;quot;noopener noreferrer&amp;quot;&amp;gt;article&amp;lt;/a&amp;gt; originally appeared on &amp;lt;a href=&amp;quot;https://www.toptal.com/elixir/&amp;quot; target=&amp;quot;_blank&amp;quot; rel=&amp;quot;noopener noreferrer&amp;quot;&amp;gt;Toptal&amp;lt;/a&amp;gt; ]]></content>
             </sphinx:document>
            
            <sphinx:document id="1097 ">
              <title>&lt;![CDATA[Flowers near office]]></title>
              <link>&lt;![CDATA[/2017/05/03/flowers-near-office/]]></link>
              <pubDate>1493819484</pubDate>
              <content>&lt;![CDATA[ from Instagram: http://ift.tt/2p5xnls ]]></content>
             </sphinx:document>
            
            <sphinx:document id="1098 ">
              <title>&lt;![CDATA[Windows Vs Linux – One more time]]></title>
              <link>&lt;![CDATA[/2017/04/07/windows-linux-time/]]></link>
              <pubDate>1491548845</pubDate>
              <content>&lt;![CDATA[ Image via Wikipedia One of the most written and commented articles has to be Linux vs Windows (of course there are competitors like vim vs emacs) but none has been covered so much as Linux vs Windows. So, what am I going to write here which is not covered earlier in so many other posts. Well a little different perspective 🙂
We will take this post in points so that we do not divert and its easier for you to comment with quotes to point number 🙂
These are for complete different segments of users. Windows is for everyone and Linux is for geeks and fan-boy‘s. Well, not that I agree with this but lets face the fact. Windows is OS on which all the drivers works and you dont have to worry about which Webcam I need to buy or which scanner will work.
The reason for this is multi-fold but does that matter to everyday users.
Cost factor. This is something that keeps popping up every time there is some discussion like this. I don’t think that anyone using Linux is using it because it is free. If there is someone using the FREE OS just because it is free then I for one would definitely like to understand if the same person would use Windows if it was free.
BTW, I guess in China people don’t even know that Windows license’s are paid.
Ease of Use People using Windows have always this notion that Linux is difficult to use. I found it the other way round. I find myself limited in ways to work on Windows (Oh and yes, I am stuck with Windows here for last around 2 months). Its mostly a question of perception. There are still things in Linux that you might have to do in the so called bash/console/terminal/command prompt, call it what you want to. But mostly that is the case for doing things faster and otherwise you probably would not need to open a terminal ever.
But if you go to any of the forums, you will definitely get suggestions to open a terminal first. Why, because you will be getting suggestions from veterans in the field. These guys have been using Linux since the days when there was no GUI or using GUI was considered sin. Just kidding but seriously you can do things much faster in a “command window”.
Different Filesystems. Windows uses FAT/vFAT/NTFS and so on whereas Linux uses some 83 other types of FS. Mostly widely used being ext2, ext3, ext4 and reiser (I guess ). Why does it matter to you? Because you can use (read as read/write) any of the windows Filesystems on the Linux box natively but not the other way round. So, be careful with this.
File-type and associations. Files and folders are same on Linux and Windows. Does not make much of a difference. Both are handled in similar manner. Not the same if you look a little deeper. This is one thing that confuses most who are new to Linux.
In Windows the File type and the action of double click is based on the extension of the filename. So, if I have a file with name “a.txt” then the default text editor would be used. That is not the case in Linux (well the File Manager uses similar concept , see I told you it is confusing). The file type in linux is determined by the header in the file that is stored along with the files and not seen by us normally. Thus allowing you to store a pdf file with “.txt” extension and still be able to use pdf viewer to open the file. How cool is that 🙂 or how confusing is that 🙁
Applications Some would say that the number of applications available on Windows is much more that available on Linux. Oh yeah, surely and how many of them you can use or rather how many of them are required. If not all, most of the useful ones are paid. So, you need to buy a license to use it. This is not the case with Linux, you have some couple of thousands of applications with mostly very decent GUI’s developed by Open Source advocates. And they were actually generous enough to compile it to “.exe” for the windows also.
Fanboys The main reason for liking any one of the OS is probably because you met a Windows fanboy first so you also became a Windows fanboy. If you met a Linux fanboy first then you would become a Linux fan. Okay, there are chances that you met a more hardcore fanboy of the other side of the war, then he might convert you to his side and win over you.
I will leave it at abrupt end, so that it can tickle some more thoughts in both you and me 🙂
Related articles Linux Foundation&amp;#8217;s t-shirt competition (zdnet.com) Encrypt Your Private Dropbox Data With EncFS (webupd8.org) Google Chrome 12 Stable version for Linux, Mac and Windows is Available Now (techie-buzz.com) 8 Ways Technology Is Improving Your Health ]]></content>
             </sphinx:document>
            
            <sphinx:document id="1099 ">
              <title>&lt;![CDATA[Celebrating 25 Years of Linux Kernel Development]]></title>
              <link>&lt;![CDATA[/2017/04/03/celebrating-25-years-linux-kernel-development/]]></link>
              <pubDate>1491181959</pubDate>
              <content>&lt;![CDATA[Linux is now 25 years old, but it’s no hipster. It’s not chasing around Pokemon, and it’s not moving back in with its parents due to crippling student debt. In fact, Linux is still growing and evolving, but the core ideas of the Linux State of Mind remain the same.
You see, Linux is much more than an operating system, it’s a mindset. Even if you don’t agree with its philosophy, you can’t afford to ignore it.
That’s why we decided to pay homage to this iconic operating system and the ever-growing community of developers who keep it going.
25 years of Linux: Honoring the great penguin coup To mark the occasion, the Linux Foundation recently published the seventh edition of its Linux Kernel Development Report, which offers a detailed recap of all the work done over the past couple of decades. The adoption of Git, 10 years ago, made tracking easier (not that we’re looking for exact numbers here). It’s estimated that more than 14,000 developers have invested time and effort in Linux kernel development since 2005. This army of talent comes from more than 1,300 companies, and the report lists a number of industry heavyweights as the main sponsors of Linux kernel development: Intel, Samsung, Red Hat, AMD, Google, ARM, Texas Instruments and more. While it’s the epitome of open-source, Linux kernel development is not a hobby. Not anymore. So, as we wish Linux a happy birthday, let’s take a quick look at some kernel development highlights: 25 years of development Contributions from 14,000 developers since 2005 5,000 new developers joined the effort in the past 30 months ~22 million lines of code currently constitute the Linux Kernel More than 4,500 lines of new code added each day Development is speeding up Linux State of Mind When it was first released in August 1991, few could have imagined the long-term impact of Linus Torvalds’ open-source OS on the software industry. At the time, the tech landscape was dominated by a handful of big players, the likes of Microsoft, Apple, and IBM. The nineties were an era of rapid technological progress, and new technologies – most notably the Internet – made remote, distributed development a possibility. Developers halfway around the globe could finally collaborate on immensely complex software projects. It goes without saying that Toptal, and indeed every freelancer, owes a debt of gratitude to Linux pioneers who validated the concept of remote software development in an era of dial-up internet. They made it work, without Git, Skype, broadband, and a bunch of other technologies and tools we take for granted today. In fact, most of these tools were in part made possible by Linux-based servers and many are open-source. But what drove the industry to adopt Linux? Well, to put it bluntly, the simple fact of not being Microsoft was a big part of it. A lot of UNIX people just had an issue with proprietary operating systems and wanted an open-source alternative. Diehards couldn’t reconcile with the fact that mainstream operating systems were a proprietary walled garden. Their vision was to create an open-source alternative, something that everyone could use free of charge, something they could modify and redistribute at will. Idealism and business rarely cross paths, but when they do, we often end up with novel ideas backed by passionate proponents and criticized by equally passionate detractors. The idea of an open-source software ecosystem is as powerful today as it was in the early nineties, and with a quarter century of Linux development behind us, we can get a better idea of its profound impact on industry. Open-Sourcing and Democratising The Internet But wait, most of us are reading this on non-Linux systems: Windows and Mac rigs, smartphones and tablets running UNIX-like operating systems, so why aren’t we on Linux systems? Well, we are, at least sort of. How many LAMP servers sprung into action today, to serve you your daily dose of emails, social feed updates, useless ads and (mis)information? Personally, I think this is the biggest contribution to mankind made by the Linux community: Linux-based servers helped our industry take off and legitimized the open-source concept. It was no longer about UNIX enthusiasts trying to create an open-source alternative to fight The Empire; Linux took on big brands on their home turf and emerged victorious. The concept was vindicated and mainstreamed, proving once and for all that open-source isn’t just a heartwarming notion; It’s good for business. What did we get out of it? Linux helped lower the bar for developers and entrepreneurs entering the industry. Successful Linux distros grabbed a sizeable market share in the hosting industry, generating pressure on competing platforms. In this war of attrition, Linux servers prevailed thanks to a number of factors. In the end, they came to dominate many market segments. Today, anyone can get a reasonably powerful hosting plan for peanuts, and if they’re looking for the cheapest possible solution, they’re bound to end up with a flavor of Linux. The rest of the stack is usually as free and open as Linux itself. That’s what our side of the industry got out of Linux: The ability to quickly deploy products on low-cost, open-source infrastructure. How many pet projects, started on the cheap, turned into multi-billion enterprises? How many would have failed had it not been for Linux? Where’s the Money Linuxowski? A common misconception about Linux development is that it’s handled solely by enthusiasts and that it’s not a niche for people looking to cash in. While Linux is a labor of love, it’s also big business in its own way. As I highlighted earlier, development is speeding up, and more Linux developers from more companies are choosing to contribute. They’re not simply choosing to set aside their precious time because they are good Linux folk; the latest report states that the number of unpaid developers working on the kernel has dropped to 7.7 percent, dipping into single-digit territory for the first time. While some might not agree, I see this is a very positive trend. Enthusiasm doesn’t pay bills, and it’s hard to keep any project going on enthusiasm alone for more than a few years, let alone a gargantuan project like Linux that came into being a generation ago. It doesn’t end there. According to numerous surveys, demand for Linux talent remains robust, and is actually increasing, and so is the Linux server market share. A few years ago, it would have been much easier to tally up the number of shipped servers, motherboards, and other hardware, and figure out the number of Linux boxes in the wild. This is no longer the case. Linux in The Cloud A dark Cloud came along and made this process more difficult, much to the dismay of analysts. When your job is to look at numbers and market trends, any lack of data or ambiguity is bad for business, and for a while analysts expressed concerns about the future of Linux in the post-cloud era. These concerns made a lot of sense (and, to some extent, still do) because the cloud ecosystem was an oligopoly from the get-go, dominated by the Amazons and Googles of the world. The Cloud did not kill off small Linux servers, but it hasn’t been kind to them either: At one end of the spectrum, you’ll find people who believe the cloud will transform the server market, and through consolidation, will forever change the hosting industry. This economy of scale argument is tempting because it’s logical to assume cloud industry leaders will offer superior pricing by virtue of their size. You don’t get sweetheart hardware deals if you have a small, regional datacenter and need a couple of hundred fresh boxes every year; you get them if you have a massive cloud infrastructure and need dozens of new servers on a weekly basis. However, I find this argument overly simplistic. The opposing camp espouses equally simplistic views, but it tends to be more optimistic. A lot of Linux veterans have high hopes for cloud development; they believe CloudStack and OpenStack will help turn the tide, and they think there will always be room for smaller players. As usual, the truth is somewhere in the middle, but let’s not weigh in on this; it’s beyond the scope of this article. Suffice it to say that both options could work for Linux in the long run. Even if the hosting industry is forever transformed and consolidated, that doesn’t mean demand for Linux talent will evaporate. On the contrary, it’s likely to increase regardless of what happens, although demand will evolve to meet new requirements. The Next 25 Years What do the next 25 years have in store for Linux? It’s hard to say, but I have a feeling Linux isn’t going anywhere, at least not in the foreseeable future: The server industry is evolving, but it’s been doing so forever. Linux has a habit of seizing server market share, although the cloud could transform the industry in ways we’re just beginning to realize. Either way, Linux servers aren’t going anywhere just yet. Linux still has a relatively low market share in consumer markets, dwarfed by Windows and OS X. This will not change anytime soon. Linux does not have a significant share in mobile, although Android currently dominates this space. Mobile is becoming an Android/iOS duopoly. It’s oversaturated; there are too many software and hardware platforms out there, so it’s doubtful Linux will ever take off in this market. Gaming is a potentially huge, untapped market for Linux. This market is dominated by Windows in the desktop segment, proprietary operating systems in the console space, and Android and iOS in mobile. Valve’s SteamOS is the latest attempt to get Linux on gaming rigs, and it’s a promising concept. Unfortunately, demand for Steam Machines has been soft and Linux still has a negligible market share in the gaming industry. Emerging segments include the Internet of Things (IoT), wearables, smart home devices, and more. Due to its open-source nature and the potential for a very small OS footprint, Linux-based operating systems could find their way into a range of connected devices, from our homes and cars to our places of business. High-performance computing has a good chance of becoming a Linux-only space. Linux has practically replaced UNIX and other operating systems in current-generation supercomputers. It’s hard to make Linux-related predictions due to the nature of the OS and the Linux community. Evolution doesn’t necessarily have to be a straight line, and Linux developers have proven this time and again. Linux could morph into something completely different over the next couple of decades and become the OS of choice for various products and services we can’t even imagine today. Source: Toptal ]]></content>
             </sphinx:document>
            
            <sphinx:document id="1100 ">
              <title>&lt;![CDATA[Happy Holi]]></title>
              <link>&lt;![CDATA[/2017/03/13/happy-holi-2/]]></link>
              <pubDate>1489370244</pubDate>
              <content>&lt;![CDATA[ from Instagram: http://ift.tt/2mAhN1I ]]></content>
             </sphinx:document>
            
            <sphinx:document id="1101 ">
              <title>&lt;![CDATA[Linux Best Practices and Tips]]></title>
              <link>&lt;![CDATA[/2017/03/06/linux-practices-tips/]]></link>
              <pubDate>1488761150</pubDate>
              <content>&lt;![CDATA[ Linux is powerful, flexible, and can be adapted to a broad range of uses. While best practices for administrating Linux servers are not hard to find due the popularity of the operating system, there is always a need for up-to-date Linux advice, along with the best tips, from our experienced Toptal Linux administrators. How to Avoid Frustration After Forgetting To Use Sudo Command &amp;lt;p&amp;gt; Have you ever typed a command in your terminal, only to find out you forgot to prefix it with the &amp;lt;/p&amp;gt; &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; sudo &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;p&amp;gt; command? You have to retype the whole command again just to add the &amp;lt;/p&amp;gt; &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; sudo &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;p&amp;gt; in front of it. Frustrating! &amp;lt;/p&amp;gt; &amp;lt;p&amp;gt; Well, you can add this simple alias to your &amp;lt;/p&amp;gt; &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; .bashrc &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;p&amp;gt; to help you reduce the frustration: &amp;lt;/p&amp;gt; &amp;lt;pre&amp;gt; 1
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; alias argh=&#39;sudo $(history -p \!\!)&#39; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;p&amp;gt; The command is pretty simple; &amp;lt;em&amp;gt;history&amp;lt;/em&amp;gt; is a program that keeps track of your terminal command history. You can execute any command in your &amp;lt;em&amp;gt;history&amp;lt;/em&amp;gt; by using various methods described in the &amp;lt;/p&amp;gt; &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; man history &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;p&amp;gt; page. &amp;lt;/p&amp;gt; &amp;lt;p&amp;gt; In our example, we use &amp;lt;/p&amp;gt; &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; history -p \!\! &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;p&amp;gt; , which prints the most recent command in your history list. So, our alias &amp;lt;/p&amp;gt; &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; argh &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;p&amp;gt; executes the last used command in the history with &amp;lt;/p&amp;gt; &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; sudo &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;p&amp;gt; in front of it. &amp;lt;/p&amp;gt; &amp;lt;p&amp;gt; You can, of course, change the string &amp;lt;/p&amp;gt; &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; argh &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;p&amp;gt; with your most favorite word. Here is an &amp;lt;a href=&amp;quot;https://twitter.com/liamosaur/status/506975850596536320&amp;quot; target=&amp;quot;_blank&amp;quot; rel=&amp;quot;noopener noreferrer&amp;quot;&amp;gt;example and the original source for the idea&amp;lt;/a&amp;gt;. &amp;lt;/p&amp;gt; &amp;lt;h2&amp;gt; How to Analyze Log Files to Count the Number of Occurrences in a Time Span? &amp;lt;/h2&amp;gt; &amp;lt;p&amp;gt; Often, when analyzing log files, it is useful to count the number of occurrences of a particular event during some time span. Let’s say, for example, that we want to count the number of “new sessions”. &amp;lt;/p&amp;gt; &amp;lt;p&amp;gt; First, let’s verify the log format by finding the last two lines that contain the text “New session”: &amp;lt;/p&amp;gt; &amp;lt;pre&amp;gt; 1
2
3
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; $ grep &amp;amp;lt;span class=&amp;quot;hljs-string&amp;quot;&amp;amp;gt;&#39;New session&#39;&amp;amp;lt;/span&amp;amp;gt; test.log | tail -&amp;amp;lt;span class=&amp;quot;hljs-number&amp;quot;&amp;amp;gt;2&amp;amp;lt;/span&amp;amp;gt;&amp;lt;br /&amp;gt; &amp;amp;lt;span class=&amp;quot;hljs-number&amp;quot;&amp;amp;gt;2016&amp;amp;lt;/span&amp;amp;gt;-&amp;amp;lt;span class=&amp;quot;hljs-number&amp;quot;&amp;amp;gt;06&amp;amp;lt;/span&amp;amp;gt;-&amp;amp;lt;span class=&amp;quot;hljs-number&amp;quot;&amp;amp;gt;30&amp;amp;lt;/span&amp;amp;gt; &amp;amp;lt;span class=&amp;quot;hljs-number&amp;quot;&amp;amp;gt;15&amp;amp;lt;/span&amp;amp;gt;:&amp;amp;lt;span class=&amp;quot;hljs-number&amp;quot;&amp;amp;gt;50&amp;amp;lt;/span&amp;amp;gt;:&amp;amp;lt;span class=&amp;quot;hljs-number&amp;quot;&amp;amp;gt;56.985&amp;amp;lt;/span&amp;amp;gt; [&amp;amp;lt;span class=&amp;quot;hljs-number&amp;quot;&amp;amp;gt;033&amp;amp;lt;/span&amp;amp;gt;] Info &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; Session &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp;&amp;amp;lt;span class=&amp;quot;hljs-number&amp;quot;&amp;amp;gt;50&amp;amp;lt;/span&amp;amp;gt;: New session (total &amp;amp;lt;span class=&amp;quot;hljs-number&amp;quot;&amp;amp;gt;50&amp;amp;lt;/span&amp;amp;gt;), call from &amp;amp;lt;span class=&amp;quot;hljs-string&amp;quot;&amp;amp;gt;&amp;quot;172.24.9.39&amp;quot;&amp;amp;lt;/span&amp;amp;gt;.&amp;lt;br /&amp;gt; &amp;amp;lt;span class=&amp;quot;hljs-number&amp;quot;&amp;amp;gt;2016&amp;amp;lt;/span&amp;amp;gt;-&amp;amp;lt;span class=&amp;quot;hljs-number&amp;quot;&amp;amp;gt;06&amp;amp;lt;/span&amp;amp;gt;-&amp;amp;lt;span class=&amp;quot;hljs-number&amp;quot;&amp;amp;gt;30&amp;amp;lt;/span&amp;amp;gt; &amp;amp;lt;span class=&amp;quot;hljs-number&amp;quot;&amp;amp;gt;15&amp;amp;lt;/span&amp;amp;gt;:&amp;amp;lt;span class=&amp;quot;hljs-number&amp;quot;&amp;amp;gt;50&amp;amp;lt;/span&amp;amp;gt;:&amp;amp;lt;span class=&amp;quot;hljs-number&amp;quot;&amp;amp;gt;57.000&amp;amp;lt;/span&amp;amp;gt; [&amp;amp;lt;span class=&amp;quot;hljs-number&amp;quot;&amp;amp;gt;033&amp;amp;lt;/span&amp;amp;gt;] Info &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; Session &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp;&amp;amp;lt;span class=&amp;quot;hljs-number&amp;quot;&amp;amp;gt;51&amp;amp;lt;/span&amp;amp;gt;: New session (total &amp;amp;lt;span class=&amp;quot;hljs-number&amp;quot;&amp;amp;gt;51&amp;amp;lt;/span&amp;amp;gt;), call from &amp;amp;lt;span class=&amp;quot;hljs-string&amp;quot;&amp;amp;gt;&amp;quot;172.24.9.39&amp;quot;&amp;amp;lt;/span&amp;amp;gt;. &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;p&amp;gt; In the commands above, &amp;lt;/p&amp;gt; &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; grep &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;p&amp;gt; is used to filter all log lines and show only those that have the text “New session” (case sensitive). Then, &amp;lt;/p&amp;gt; &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; tail -2 &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;p&amp;gt; is used to show only the last two lines filtered by &amp;lt;/p&amp;gt; &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; grep &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;p&amp;gt; . The parameter &amp;lt;/p&amp;gt; &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; -2 &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;p&amp;gt; makes sure only the last two lines are shown, as the usual default of the &amp;lt;/p&amp;gt; &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; tail &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;p&amp;gt; command is to show the last ten lines. The results of the &amp;lt;/p&amp;gt; &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; grep &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;p&amp;gt; command are redirected to the &amp;lt;/p&amp;gt; &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; tail &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;p&amp;gt; command using the pipe &amp;lt;/p&amp;gt; &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; | &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;p&amp;gt; . This makes all lines filtered by &amp;lt;/p&amp;gt; &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; grep &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;p&amp;gt; serve as input to the &amp;lt;/p&amp;gt; &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; tail &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;p&amp;gt; command. &amp;lt;/p&amp;gt; &amp;lt;p&amp;gt; Now, let’s use the log lines we’ve extracted above to come up with a method to group the occurrences per hour. All log lines we obtain with &amp;lt;/p&amp;gt; &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; grep &#39;New session&#39; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;p&amp;gt; will have the following format: &amp;lt;/p&amp;gt; &amp;lt;pre&amp;gt; 1
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; 2016-06-30 15:50:56.985 [033] Info &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; Session &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp;50: New session (total 50), call from &amp;quot;172.24.9.39&amp;quot;. &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;p&amp;gt; We can use a combination of &amp;lt;/p&amp;gt; &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; cut &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;p&amp;gt; and &amp;lt;/p&amp;gt; &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; uniq &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;p&amp;gt; to count all occurrences per hour in the lines filtered by &amp;lt;/p&amp;gt; &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; grep &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;p&amp;gt; . We’ll use &amp;lt;/p&amp;gt; &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; cut &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;p&amp;gt; to extract just the &amp;lt;em&amp;gt;hour&amp;lt;/em&amp;gt; from the log lines passed by &amp;lt;/p&amp;gt; &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; grep &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;p&amp;gt; . The following comparison shows which characters we want from each log line: &amp;lt;/p&amp;gt; &amp;lt;pre&amp;gt; 1
2
3
4
5
6
7
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; -- Characters indexes ------&amp;lt;br /&amp;gt; 0 &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp;10 &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp;20&amp;lt;br /&amp;gt; 1234567890123456789012345&amp;lt;br /&amp;gt; ----------------------------&amp;lt;br /&amp;gt; 2016-06-30 15:50:56.985 [033] Info &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; Session &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp;50: New session (total 50), call from &amp;quot;172.24.9.39&amp;quot;.&amp;lt;br /&amp;gt; -- The line above becomes --&amp;lt;br /&amp;gt; 15 &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;p&amp;gt; We can therefore see that we want to extract just the 12th and 13th characters from each of the log lines, since that represents the hour of each entry. With this, we can then group the results and verify the count of events for each hour of the day, which is what we do in the next step. &amp;lt;/p&amp;gt; &amp;lt;p&amp;gt; To group and count the events per hour, we use &amp;lt;/p&amp;gt; &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; uniq -c &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;p&amp;gt; . Please note the &amp;lt;/p&amp;gt; &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; uniq &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;p&amp;gt; command depends on the sorted input to group correctly, meaning that there should never be hour 14 after hour 15, for example. This is rarely a problem with logs because the time should always increase as new lines are added. &amp;lt;/p&amp;gt; &amp;lt;p&amp;gt; Assembling the commands together and executing them, we get: &amp;lt;/p&amp;gt; &amp;lt;pre&amp;gt; 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; $ grep &amp;amp;lt;span class=&amp;quot;hljs-string&amp;quot;&amp;amp;gt;&#39;New session&#39;&amp;amp;lt;/span&amp;amp;gt; aacserver20160630.log | cut -c12-&amp;amp;lt;span class=&amp;quot;hljs-number&amp;quot;&amp;amp;gt;13&amp;amp;lt;/span&amp;amp;gt; | uniq -c&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;lt;span class=&amp;quot;hljs-number&amp;quot;&amp;amp;gt;48&amp;amp;lt;/span&amp;amp;gt; &amp;amp;lt;span class=&amp;quot;hljs-number&amp;quot;&amp;amp;gt;00&amp;amp;lt;/span&amp;amp;gt;&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;lt;span class=&amp;quot;hljs-number&amp;quot;&amp;amp;gt;42&amp;amp;lt;/span&amp;amp;gt; &amp;amp;lt;span class=&amp;quot;hljs-number&amp;quot;&amp;amp;gt;01&amp;amp;lt;/span&amp;amp;gt;&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;lt;span class=&amp;quot;hljs-number&amp;quot;&amp;amp;gt;42&amp;amp;lt;/span&amp;amp;gt; &amp;amp;lt;span class=&amp;quot;hljs-number&amp;quot;&amp;amp;gt;02&amp;amp;lt;/span&amp;amp;gt;&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;lt;span class=&amp;quot;hljs-number&amp;quot;&amp;amp;gt;66&amp;amp;lt;/span&amp;amp;gt; &amp;amp;lt;span class=&amp;quot;hljs-number&amp;quot;&amp;amp;gt;03&amp;amp;lt;/span&amp;amp;gt;&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp;&amp;amp;lt;span class=&amp;quot;hljs-number&amp;quot;&amp;amp;gt;1&amp;amp;lt;/span&amp;amp;gt; &amp;amp;lt;span class=&amp;quot;hljs-number&amp;quot;&amp;amp;gt;04&amp;amp;lt;/span&amp;amp;gt;&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp;&amp;amp;lt;span class=&amp;quot;hljs-number&amp;quot;&amp;amp;gt;2&amp;amp;lt;/span&amp;amp;gt; &amp;amp;lt;span class=&amp;quot;hljs-number&amp;quot;&amp;amp;gt;05&amp;amp;lt;/span&amp;amp;gt;&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp;&amp;amp;lt;span class=&amp;quot;hljs-number&amp;quot;&amp;amp;gt;2&amp;amp;lt;/span&amp;amp;gt; &amp;amp;lt;span class=&amp;quot;hljs-number&amp;quot;&amp;amp;gt;06&amp;amp;lt;/span&amp;amp;gt;&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;lt;span class=&amp;quot;hljs-number&amp;quot;&amp;amp;gt;42&amp;amp;lt;/span&amp;amp;gt; &amp;amp;lt;span class=&amp;quot;hljs-number&amp;quot;&amp;amp;gt;07&amp;amp;lt;/span&amp;amp;gt;&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;lt;span class=&amp;quot;hljs-number&amp;quot;&amp;amp;gt;46&amp;amp;lt;/span&amp;amp;gt; &amp;amp;lt;span class=&amp;quot;hljs-number&amp;quot;&amp;amp;gt;08&amp;amp;lt;/span&amp;amp;gt;&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;lt;span class=&amp;quot;hljs-number&amp;quot;&amp;amp;gt;44&amp;amp;lt;/span&amp;amp;gt; &amp;amp;lt;span class=&amp;quot;hljs-number&amp;quot;&amp;amp;gt;09&amp;amp;lt;/span&amp;amp;gt;&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;lt;span class=&amp;quot;hljs-number&amp;quot;&amp;amp;gt;42&amp;amp;lt;/span&amp;amp;gt; &amp;amp;lt;span class=&amp;quot;hljs-number&amp;quot;&amp;amp;gt;10&amp;amp;lt;/span&amp;amp;gt;&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;lt;span class=&amp;quot;hljs-number&amp;quot;&amp;amp;gt;42&amp;amp;lt;/span&amp;amp;gt; &amp;amp;lt;span class=&amp;quot;hljs-number&amp;quot;&amp;amp;gt;11&amp;amp;lt;/span&amp;amp;gt;&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;lt;span class=&amp;quot;hljs-number&amp;quot;&amp;amp;gt;42&amp;amp;lt;/span&amp;amp;gt; &amp;amp;lt;span class=&amp;quot;hljs-number&amp;quot;&amp;amp;gt;12&amp;amp;lt;/span&amp;amp;gt;&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;lt;span class=&amp;quot;hljs-number&amp;quot;&amp;amp;gt;42&amp;amp;lt;/span&amp;amp;gt; &amp;amp;lt;span class=&amp;quot;hljs-number&amp;quot;&amp;amp;gt;13&amp;amp;lt;/span&amp;amp;gt;&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;lt;span class=&amp;quot;hljs-number&amp;quot;&amp;amp;gt;42&amp;amp;lt;/span&amp;amp;gt; &amp;amp;lt;span class=&amp;quot;hljs-number&amp;quot;&amp;amp;gt;14&amp;amp;lt;/span&amp;amp;gt;&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;lt;span class=&amp;quot;hljs-number&amp;quot;&amp;amp;gt;42&amp;amp;lt;/span&amp;amp;gt; &amp;amp;lt;span class=&amp;quot;hljs-number&amp;quot;&amp;amp;gt;15&amp;amp;lt;/span&amp;amp;gt;&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp;&amp;amp;lt;span class=&amp;quot;hljs-number&amp;quot;&amp;amp;gt;8&amp;amp;lt;/span&amp;amp;gt; &amp;amp;lt;span class=&amp;quot;hljs-number&amp;quot;&amp;amp;gt;16&amp;amp;lt;/span&amp;amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;p&amp;gt; Each line of the above output contains two numbers. The second represents the hour and the first represents the number of log entries (for new sessions) that hour. We can therefore quickly see from these results that something might have gone wrong between 4 and 7 AM, since there was such a drop in new sessions during those hours. &amp;lt;/p&amp;gt; &amp;lt;p&amp;gt; All this was easily accomplished with the combination of &amp;lt;/p&amp;gt; &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; grep &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;p&amp;gt; , &amp;lt;/p&amp;gt; &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; cut &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;p&amp;gt; and &amp;lt;/p&amp;gt; &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; uniq &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;p&amp;gt; commands. &amp;lt;/p&amp;gt; &amp;lt;h2&amp;gt; How to Quickly Get Through Bash History? &amp;lt;/h2&amp;gt; &amp;lt;p&amp;gt; Let’s say some time ago you used a very long bash command that you would now like to reuse. However, you don’t want to scroll &amp;lt;em&amp;gt;up&amp;lt;/em&amp;gt; by repeatedly clicking the arrow key to get to it. &amp;lt;/p&amp;gt; &amp;lt;p&amp;gt; There’s an easy trick to pull to access the Bash history, and it is called the &amp;lt;/p&amp;gt; &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; reverse-i-search &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;p&amp;gt; mode. This mode will search through the history reverse-chronologically so that your last used command that has your input keyword will come up first. &amp;lt;/p&amp;gt; &amp;lt;p&amp;gt; So, to quickly get through you Bash history, press &amp;lt;/p&amp;gt; &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; CTRL&#43;R &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;p&amp;gt; on the keyboard to activate bash’s &amp;lt;/p&amp;gt; &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; reverse-i-search &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;p&amp;gt; mode, then type in part of the command you’re looking for, and it will show it up. When it does, just press &amp;lt;/p&amp;gt; &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; Enter &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;p&amp;gt; to execute it. &amp;lt;/p&amp;gt; &amp;lt;p&amp;gt; Ninja tip: While searching, try to type in one or more unique words from the previous long command that you are looking for, as this will help you find it more quickly. &amp;lt;/p&amp;gt; How to Add More Accountability to Command Line Work? You’re not a machine. At least, not most of the time. Like any human, you might be fooled by your imperfection and commit what we call a human error. The ensuing three short tips will help bring some peace of mind when you are not-so-sure about your guiltiness, or just let you know that you need to assume your error and think of a way to repair the damage. Add a timestamp to your bash history This small tip will allow you to look forward in your shell history, knowing when each of your commands was executed: 1
2
3
4
5
6
7
8
9
10
11
12
13
~$ &amp;lt;span class=&#34;hljs-keyword&#34;&amp;gt;export&amp;lt;/span&amp;gt; HISTTIMEFORMAT=&amp;lt;span class=&#34;hljs-string&#34;&amp;gt;&#34;%d/%m/%y %T &#34;&amp;lt;/span&amp;gt;
~$ history
&amp;nbsp; &amp;nbsp; &amp;lt;span class=&#34;hljs-number&#34;&amp;gt;1&amp;lt;/span&amp;gt; &amp;nbsp;&amp;lt;span class=&#34;hljs-number&#34;&amp;gt;05&amp;lt;/span&amp;gt;/&amp;lt;span class=&#34;hljs-number&#34;&amp;gt;05&amp;lt;/span&amp;gt;/&amp;lt;span class=&#34;hljs-number&#34;&amp;gt;16&amp;lt;/span&amp;gt; &amp;lt;span class=&#34;hljs-number&#34;&amp;gt;18&amp;lt;/span&amp;gt;:&amp;lt;span class=&#34;hljs-number&#34;&amp;gt;07&amp;lt;/span&amp;gt;:&amp;lt;span class=&#34;hljs-number&#34;&amp;gt;03&amp;lt;/span&amp;gt; clear
&amp;nbsp; &amp;nbsp; &amp;lt;span class=&#34;hljs-number&#34;&amp;gt;2&amp;lt;/span&amp;gt; &amp;nbsp;&amp;lt;span class=&#34;hljs-number&#34;&amp;gt;05&amp;lt;/span&amp;gt;/&amp;lt;span class=&#34;hljs-number&#34;&amp;gt;05&amp;lt;/span&amp;gt;/&amp;lt;span class=&#34;hljs-number&#34;&amp;gt;16&amp;lt;/span&amp;gt; &amp;lt;span class=&#34;hljs-number&#34;&amp;gt;18&amp;lt;/span&amp;gt;:&amp;lt;span class=&#34;hljs-number&#34;&amp;gt;07&amp;lt;/span&amp;gt;:&amp;lt;span class=&#34;hljs-number&#34;&amp;gt;04&amp;lt;/span&amp;gt; &amp;lt;span class=&#34;hljs-built_in&#34;&amp;gt;cd&amp;lt;/span&amp;gt;
&amp;nbsp; &amp;nbsp; &amp;lt;span class=&#34;hljs-number&#34;&amp;gt;3&amp;lt;/span&amp;gt; &amp;nbsp;&amp;lt;span class=&#34;hljs-number&#34;&amp;gt;05&amp;lt;/span&amp;gt;/&amp;lt;span class=&#34;hljs-number&#34;&amp;gt;05&amp;lt;/span&amp;gt;/&amp;lt;span class=&#34;hljs-number&#34;&amp;gt;16&amp;lt;/span&amp;gt; &amp;lt;span class=&#34;hljs-number&#34;&amp;gt;18&amp;lt;/span&amp;gt;:&amp;lt;span class=&#34;hljs-number&#34;&amp;gt;07&amp;lt;/span&amp;gt;:&amp;lt;span class=&#34;hljs-number&#34;&amp;gt;05&amp;lt;/span&amp;gt; ls -ltr
&amp;nbsp; &amp;nbsp; &amp;lt;span class=&#34;hljs-number&#34;&amp;gt;4&amp;lt;/span&amp;gt; &amp;nbsp;&amp;lt;span class=&#34;hljs-number&#34;&amp;gt;05&amp;lt;/span&amp;gt;/&amp;lt;span class=&#34;hljs-number&#34;&amp;gt;05&amp;lt;/span&amp;gt;/&amp;lt;span class=&#34;hljs-number&#34;&amp;gt;16&amp;lt;/span&amp;gt; &amp;lt;span class=&#34;hljs-number&#34;&amp;gt;18&amp;lt;/span&amp;gt;:&amp;lt;span class=&#34;hljs-number&#34;&amp;gt;07&amp;lt;/span&amp;gt;:&amp;lt;span class=&#34;hljs-number&#34;&amp;gt;07&amp;lt;/span&amp;gt; clear
&amp;nbsp; &amp;nbsp; &amp;lt;span class=&#34;hljs-number&#34;&amp;gt;5&amp;lt;/span&amp;gt; &amp;nbsp;&amp;lt;span class=&#34;hljs-number&#34;&amp;gt;05&amp;lt;/span&amp;gt;/&amp;lt;span class=&#34;hljs-number&#34;&amp;gt;05&amp;lt;/span&amp;gt;/&amp;lt;span class=&#34;hljs-number&#34;&amp;gt;16&amp;lt;/span&amp;gt; &amp;lt;span class=&#34;hljs-number&#34;&amp;gt;18&amp;lt;/span&amp;gt;:&amp;lt;span class=&#34;hljs-number&#34;&amp;gt;07&amp;lt;/span&amp;gt;:&amp;lt;span class=&#34;hljs-number&#34;&amp;gt;12&amp;lt;/span&amp;gt; touch file
&amp;nbsp; &amp;nbsp; &amp;lt;span class=&#34;hljs-number&#34;&amp;gt;6&amp;lt;/span&amp;gt; &amp;nbsp;&amp;lt;span class=&#34;hljs-number&#34;&amp;gt;05&amp;lt;/span&amp;gt;/&amp;lt;span class=&#34;hljs-number&#34;&amp;gt;05&amp;lt;/span&amp;gt;/&amp;lt;span class=&#34;hljs-number&#34;&amp;gt;16&amp;lt;/span&amp;gt; &amp;lt;span class=&#34;hljs-number&#34;&amp;gt;18&amp;lt;/span&amp;gt;:&amp;lt;span class=&#34;hljs-number&#34;&amp;gt;07&amp;lt;/span&amp;gt;:&amp;lt;span class=&#34;hljs-number&#34;&amp;gt;17&amp;lt;/span&amp;gt; chmod &#43;rw file
&amp;nbsp; &amp;nbsp; &amp;lt;span class=&#34;hljs-number&#34;&amp;gt;7&amp;lt;/span&amp;gt; &amp;nbsp;&amp;lt;span class=&#34;hljs-number&#34;&amp;gt;05&amp;lt;/span&amp;gt;/&amp;lt;span class=&#34;hljs-number&#34;&amp;gt;05&amp;lt;/span&amp;gt;/&amp;lt;span class=&#34;hljs-number&#34;&amp;gt;16&amp;lt;/span&amp;gt; &amp;lt;span class=&#34;hljs-number&#34;&amp;gt;18&amp;lt;/span&amp;gt;:&amp;lt;span class=&#34;hljs-number&#34;&amp;gt;07&amp;lt;/span&amp;gt;:&amp;lt;span class=&#34;hljs-number&#34;&amp;gt;22&amp;lt;/span&amp;gt; chmod &#43;x file
&amp;nbsp; &amp;nbsp; &amp;lt;span class=&#34;hljs-number&#34;&amp;gt;8&amp;lt;/span&amp;gt; &amp;nbsp;&amp;lt;span class=&#34;hljs-number&#34;&amp;gt;05&amp;lt;/span&amp;gt;/&amp;lt;span class=&#34;hljs-number&#34;&amp;gt;05&amp;lt;/span&amp;gt;/&amp;lt;span class=&#34;hljs-number&#34;&amp;gt;16&amp;lt;/span&amp;gt; &amp;lt;span class=&#34;hljs-number&#34;&amp;gt;18&amp;lt;/span&amp;gt;:&amp;lt;span class=&#34;hljs-number&#34;&amp;gt;07&amp;lt;/span&amp;gt;:&amp;lt;span class=&#34;hljs-number&#34;&amp;gt;28&amp;lt;/span&amp;gt; cat &amp;gt; file
&amp;nbsp; &amp;nbsp; &amp;lt;span class=&#34;hljs-number&#34;&amp;gt;9&amp;lt;/span&amp;gt; &amp;nbsp;&amp;lt;span class=&#34;hljs-number&#34;&amp;gt;05&amp;lt;/span&amp;gt;/&amp;lt;span class=&#34;hljs-number&#34;&amp;gt;05&amp;lt;/span&amp;gt;/&amp;lt;span class=&#34;hljs-number&#34;&amp;gt;16&amp;lt;/span&amp;gt; &amp;lt;span class=&#34;hljs-number&#34;&amp;gt;18&amp;lt;/span&amp;gt;:&amp;lt;span class=&#34;hljs-number&#34;&amp;gt;07&amp;lt;/span&amp;gt;:&amp;lt;span class=&#34;hljs-number&#34;&amp;gt;34&amp;lt;/span&amp;gt; git commit &amp;lt;span class=&#34;hljs-operator&#34;&amp;gt;-a&amp;lt;/span&amp;gt; -m ‘cool feature&amp;lt;span class=&#34;hljs-string&#34;&amp;gt;&#39;
&amp;nbsp; &amp;nbsp;10 &amp;nbsp;05/05/16 18:07:36 git push
&amp;lt;/span&amp;gt; If you want to make this permanent, add the following line to your 1
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; .bashrc &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; file. 1
&amp;lt;span class=&#34;hljs-keyword&#34;&amp;gt;export&amp;lt;/span&amp;gt; HISTTIMEFORMAT=&amp;lt;span class=&#34;hljs-string&#34;&amp;gt;&#34;%d/%m/%y %T &#34;&amp;lt;/span&amp;gt; Share your immediate bash history across multiple sessions Nowadays, almost everyone uses more than one window or tab at the same time. Browser tabs, chats windows, and of course multiple console sessions. As you might have already noticed, your bash history is saved to the disk at the end of the session when you log out. This is perfectly fine most of the time, but for several reasons you might want to share that command history immediately with your other sessions. To do that, you can just add this to your 1
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; .bashrc &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; file. 1
2
3
&amp;lt;span class=&#34;hljs-keyword&#34;&amp;gt;export&amp;lt;/span&amp;gt; HISTCONTROL=ignoredups:erasedups &amp;nbsp;
&amp;lt;span class=&#34;hljs-built_in&#34;&amp;gt;shopt&amp;lt;/span&amp;gt; &amp;lt;span class=&#34;hljs-operator&#34;&amp;gt;-s&amp;lt;/span&amp;gt; histappend &amp;nbsp;
&amp;lt;span class=&#34;hljs-keyword&#34;&amp;gt;export&amp;lt;/span&amp;gt; PROMPT_COMMAND=&amp;lt;span class=&#34;hljs-string&#34;&amp;gt;&#34;&amp;lt;span class=&#34;hljs-variable&#34;&amp;gt;${PROMPT_COMMAND:&#43;$PROMPT_COMMAND$&#39;\n&#39;}&amp;lt;/span&amp;gt;history -a; history -c; history -r&#34;&amp;lt;/span&amp;gt; Now, let me explain how it works: The first statement will avoid duplicate entries in your command history. The second statement appends the history to your history file, instead of rewriting it. The third statement will set the 1
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; PROMPT_COMMAND &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;p&amp;gt; variable with the commands that will save the file, cleanup the in-memory command history stack, and reload the file from the disk again. The &amp;lt;/p&amp;gt; &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; PROMPT_COMMAND &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;p&amp;gt; variable contents are executed every time you execute a command in the shell session, or when you just press Enter, and then when the history stack is updated in the current session.&amp;lt;/li&amp;gt; &amp;lt;/ul&amp;gt; &amp;lt;h3 id=&amp;quot;check-which-files-were-modified-by-a-command&amp;quot;&amp;gt; Check which files were modified by a command &amp;lt;/h3&amp;gt; &amp;lt;p&amp;gt; There is an overall safety rule when working with the command line: if you don’t know what it does, don’t run it. However, sometimes &amp;lt;em&amp;gt;you want&amp;lt;/em&amp;gt; to execute particular things, even your code in your test environment, to “see what happens”. &amp;lt;/p&amp;gt; &amp;lt;p&amp;gt; Well, take that mysterious command and run it like this: &amp;lt;/p&amp;gt; &amp;lt;pre&amp;gt; 1
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; D=&amp;amp;lt;span class=&amp;quot;hljs-string&amp;quot;&amp;amp;gt;&amp;quot;&amp;amp;lt;span class=&amp;quot;hljs-variable&amp;quot;&amp;amp;gt;$(date &amp;quot;&#43;%F %T.%N&amp;quot;)&amp;amp;lt;/span&amp;amp;gt;&amp;quot;&amp;amp;lt;/span&amp;amp;gt;; sleep &amp;amp;lt;span class=&amp;quot;hljs-number&amp;quot;&amp;amp;gt;0.5&amp;amp;lt;/span&amp;amp;gt;; &amp;amp;lt;command&amp;amp;gt;; find . -newermt &amp;amp;lt;span class=&amp;quot;hljs-string&amp;quot;&amp;amp;gt;&amp;quot;&amp;amp;lt;span class=&amp;quot;hljs-variable&amp;quot;&amp;amp;gt;$D&amp;amp;lt;/span&amp;amp;gt;&amp;quot;&amp;amp;lt;/span&amp;amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;p&amp;gt; Where &amp;lt;/p&amp;gt; &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; &amp;lt;command&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;p&amp;gt; is what you want to execute. &amp;lt;/p&amp;gt; &amp;lt;p&amp;gt; This example takes the current time and saves its value to the variable &amp;lt;/p&amp;gt; &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; D &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;p&amp;gt; , then waits for a half second and executes the command. Finally, search for any new file created since that moment in the current directory. It’s not perfect, as another process might have modified the files during that period, but it will give you an excellent idea about which files you need to inspect and look for changes. &amp;lt;/p&amp;gt; &amp;lt;p&amp;gt; There are a few notes about the &amp;lt;/p&amp;gt; &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; sleep &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;p&amp;gt; command. Besides the fact that the &amp;lt;/p&amp;gt; &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; date &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;p&amp;gt; command is taking the time in nanoseconds resolution, your machine might be fast, and some of the files might not be caught by &amp;lt;/p&amp;gt; &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; find &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;p&amp;gt; . It’s always better to inspect false-positive results than miss some real occurrences. This time, I’m assuming that you’re using GNU &amp;lt;/p&amp;gt; &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; sleep &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;p&amp;gt; , which currently supports resolutions under 1 second. Otherwise, just use &amp;lt;/p&amp;gt; &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; 1 &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;p&amp;gt; keeping in mind that by extending the time to be evaluated by find, you might see some additional false-positive results. &amp;lt;/p&amp;gt; &amp;lt;p&amp;gt; Now, check this example: &amp;lt;/p&amp;gt; &amp;lt;pre&amp;gt; 1
2
3
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; &amp;amp;lt;span class=&amp;quot;hljs-comment&amp;quot;&amp;amp;gt;# D=&amp;quot;$(date &amp;quot;&#43;%F %T.%N&amp;quot;)&amp;quot;; sleep 0.5; ./mysterious ; find /etc -newermt &amp;quot;$D&amp;quot;;&amp;amp;lt;/span&amp;amp;gt;&amp;lt;br /&amp;gt; Dont&amp;amp;lt;span class=&amp;quot;hljs-string&amp;quot;&amp;amp;gt;&#39;t worry, I&#39;&amp;amp;lt;/span&amp;amp;gt;m good&amp;lt;br /&amp;gt; /etc/passwd &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;p&amp;gt; The &amp;lt;/p&amp;gt; &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; mysterious &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;p&amp;gt; command, despite the fact it prints “Don’t worry, I’m good”, modified your &amp;lt;/p&amp;gt; &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; /etc/passwd &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;p&amp;gt; file and you just found it by executing it in this way. &amp;lt;/p&amp;gt; &amp;lt;h2&amp;gt; Which Desktop Linux Distribution Is Recommended for Developers? &amp;lt;/h2&amp;gt; &amp;lt;p&amp;gt; Among developers, usually back-end developers who need to set-up their Ruby or NodeJS or any other language working environment, there is often a big dilemma: which Linux distribution should be used? Which Linux distribution is the best? Which Linux distribution is the easiest to setup? Which Linux distribution will run the best in a virtual environment, or on old hardware? All these questions are hard to answer, and whole series of articles could be written on the topic. The basic answer “pick the one you’re most comfortable using” does not apply when developers don’t have time nor resources to test all the different Linux distributions. Not to mention that whichever Linux distribution one recommends, there will be always two more that disagree. But our best &amp;lt;a href=&amp;quot;https://www.toptal.com/linux&amp;quot;&amp;gt;Toptal Linux developers&amp;lt;/a&amp;gt; came up with a short list for people that are looking to pick the best, recommended by the best. &amp;lt;/p&amp;gt; &amp;lt;p&amp;gt; Before the list, we need to mention desktop environments. In desktop Linux distributions, the main differentiating factor beside setup complexity for new users are desktop environments, like &amp;lt;a href=&amp;quot;https://www.gnome.org/&amp;quot; target=&amp;quot;_blank&amp;quot; rel=&amp;quot;noopener noreferrer&amp;quot;&amp;gt;Gnome&amp;lt;/a&amp;gt;, &amp;lt;a href=&amp;quot;http://unity.ubuntu.com/&amp;quot; target=&amp;quot;_blank&amp;quot; rel=&amp;quot;noopener noreferrer&amp;quot;&amp;gt;Unity&amp;lt;/a&amp;gt;, &amp;lt;a href=&amp;quot;http://cinnamon.linuxmint.com/&amp;quot; target=&amp;quot;_blank&amp;quot; rel=&amp;quot;noopener noreferrer&amp;quot;&amp;gt;Cinnamon&amp;lt;/a&amp;gt;, and &amp;lt;a href=&amp;quot;https://www.kde.org/&amp;quot; target=&amp;quot;_blank&amp;quot; rel=&amp;quot;noopener noreferrer&amp;quot;&amp;gt;KDE&amp;lt;/a&amp;gt;. If you were thinking that recommending a Linux distribution is a subjective and controversial topic, discussing favorite Linux desktop environments is even harder, because it can easily attract a lot of flame wars and it’s hard to make a technical discussion about it. Nevertheless, desktop environments are often playing important roles in the final decision, and we had to mention them, but we won’t go into details. Take a look at included links to learn about their philosophy, see how each one looks like, and pick the one you like the most. &amp;lt;/p&amp;gt; &amp;lt;p&amp;gt; Here is the unranked list: &amp;lt;/p&amp;gt; &amp;lt;ul&amp;gt; &amp;lt;li&amp;gt; &amp;lt;strong&amp;gt;Ubuntu&amp;lt;/strong&amp;gt; &amp;amp;#8211; Consensus is that the first and the most general pick is Ubuntu. It is the easiest, comes with support for most hardware right out of the box, and it is very friendly to people who are new to Linux. It’s only downside is that it’s pretty heavy, because of the all the stuff that comes with. It is also worth noting that their Unity GUI is causing a lot of controversies between hard core Linux users. &amp;lt;/li&amp;gt; &amp;lt;li&amp;gt; &amp;lt;strong&amp;gt;Xubuntu&amp;lt;/strong&amp;gt; &amp;amp;#8211; If you are looking for simplicity, Xubuntu is the way to go. OS is lightweight, and it supports and runs well on the old hardware, but keep in mind that some things don’t work out of the box, especially if you have a very new computer with UHD (Ultra High Definition) display. &amp;lt;/li&amp;gt; &amp;lt;li&amp;gt; &amp;lt;strong&amp;gt;Kubuntu&amp;lt;/strong&amp;gt;. Popular Ubuntu based distribution for people who like KDE desktop environment, which has its own philosophy different to other environments. &amp;lt;/li&amp;gt; &amp;lt;li&amp;gt; &amp;lt;strong&amp;gt;elementaryOS&amp;lt;/strong&amp;gt; Ubuntu based, heavily influenced by OSX and Macintosh design. If you want Linux that seems like Macintosh, this is the distribution to go for. It has its own desktop “shell”, with very minimalistic and light-weight apps for daily, common usage. &amp;lt;/li&amp;gt; &amp;lt;li&amp;gt; &amp;lt;strong&amp;gt;Mint&amp;lt;/strong&amp;gt; &amp;amp;#8211; A bit heavy, but not as much as Ubuntu, nice Cinnamon desktop environment for people who like more classical desktops (Cinnamon is based on Gnome 2.x). On the other hand, it has out-of-the-box multimedia support, and if something is missing, it’s Ubuntu and Debian compatible. &amp;lt;/li&amp;gt; &amp;lt;li&amp;gt; &amp;lt;strong&amp;gt;Fedora&amp;lt;/strong&amp;gt; A user-friendly distribution from RedHat. It is recommended if you like the Gnome 3 user interface, which is arguably the “strangest” (it is not bad, just unusual). Fedora is also a good pick for developers that run RedHat Enterprise Linux or Centos on their servers because they share the same core, and &amp;lt;em&amp;gt;yum&amp;lt;/em&amp;gt; and &amp;lt;em&amp;gt;rpm&amp;lt;/em&amp;gt; knowledge transfers from RedHat Enterprise Linux and Centos. Out of the box, Fedora Linux distribution was always recognized as one supporting developers well, with a lot of IDEs and development build tools available in the scenarios. &amp;lt;/li&amp;gt; &amp;lt;li&amp;gt; &amp;lt;strong&amp;gt;Arch Linux&amp;lt;/strong&amp;gt; Popular “rolling-release” distribution, with no base “release”, but always the latest stable versions of individual packages. Developers looking to always be on bleeding edge should look into this distribution. &amp;lt;/li&amp;gt; &amp;lt;/ul&amp;gt; &amp;lt;p&amp;gt; In the end, avoid &amp;lt;strong&amp;gt;Debian&amp;lt;/strong&amp;gt; and &amp;lt;strong&amp;gt;RedHat&amp;lt;/strong&amp;gt;, especially if you are a new Linux user. They are more server-side oriented. However, while not very friendly to developers, they are still used by many professionals. &amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;h2&amp;gt; Which Server Linux Distribution Is Recommended for Back-end Developers? &amp;lt;/h2&amp;gt; &amp;lt;p&amp;gt; We covered desktop Linux distributions, but what about server distributions? Desktop Linux distributions are focused on the GUI, desktop environments, and simplicity in order to attract as many new users to the platform. On the other hand, server Linux distributions are focused primary on stability and security. GUI is not an important factor, because often they are running in the “headless mode” (a server that has no monitor, keyboard or mouse), and users (developers) connect to the servers remotely via the terminal. Another reason is that GUI elements take up precious memory, and every bit of free memory is very valuable. Stability and security we don’t need to explain, everyone wants their application safe and available. &amp;lt;/p&amp;gt; &amp;lt;p&amp;gt; So, which server Linux distribution should you pick? &amp;lt;/p&amp;gt; &amp;lt;ul&amp;gt; &amp;lt;li&amp;gt; &amp;lt;strong&amp;gt;Debian&amp;lt;/strong&amp;gt; is considered the most stable server OS by hardcode system administrators for its very stable release cycle and sturdy, robust base system setup. The install image is relatively small and can be customized to very specific needs. The software base is huge, with 56864 software packages as of this writing. There’s a caveat, though. These packages are shared with desktop versions of Debian. Many other distributions, both client and server are based on debian’s .deb packages. &amp;lt;/li&amp;gt; &amp;lt;li&amp;gt; &amp;lt;strong&amp;gt;Ubuntu Server&amp;lt;/strong&amp;gt; is not bad either. It’s built completely on top of Debian and it’s 100% binary compatible with it, and Canonical (the company behind Ubuntu) is investing more to make Ubuntu reliable server software. There is arguably more help about it online, and it has more up-to-date packages which is a mixed blessing in a server environment, but its LTS (long-term-support) releases are very popular. Developers working on Ubuntu and Ubuntu-based desktop distributions tend to prefer it due to the same software package management system, apt. &amp;lt;/li&amp;gt; &amp;lt;li&amp;gt; &amp;lt;strong&amp;gt;RedHat Enterprise Linux&amp;lt;/strong&amp;gt; or RHEL for short, is the other large stable server distribution, backed by RedHat. It is a commercial distribution, with base software available for free but paid support licenses. RedHat has many internal software tools and it’s working with several of the biggest enterprise software vendors, like Oracle, to make RedHat a perfect home for enterprise systems. Additionally, it’s at the heart of OpenShift, the RedHat platform-as-a-service initiative. RedHat Linux is popular with enterprise developers, as the support licenses can get a bit expensive for smaller projects. The software package system is based on rpm packages and yum update manager. It rivals Debian and Ubuntu for stability, longevity and software support. &amp;lt;/li&amp;gt; &amp;lt;li&amp;gt; &amp;lt;strong&amp;gt;CentOS&amp;lt;/strong&amp;gt; is the “free” version of RHEL. It’s built almost entirely out of RHEL, stripped of Red Hat branding and based on the same package system and same packages. It’s popular among developers who prefer to work with RPM and possibly ones using Fedora as their desktop system of choice. &amp;lt;/li&amp;gt; &amp;lt;li&amp;gt; &amp;lt;strong&amp;gt;Scientific Linux&amp;lt;/strong&amp;gt; “&amp;lt;em&amp;gt;is a Linux release put together by Fermilab, CERN, and various other labs and universities around the world ready tuned for experimenters&amp;lt;/em&amp;gt;”. It’s a distribution focused more on computing and it’s suited for such purposes, and it’s based on RedHat/CentOS. &amp;lt;/li&amp;gt; &amp;lt;li&amp;gt; &amp;lt;strong&amp;gt;CoreOS&amp;lt;/strong&amp;gt; is very popular as a lightweight OS to run software containers on. Unlike the other distributions listed here, CoreOS comes with no package manager: the developer is expected to provide all software dependencies as a part of a lightweight “container”, a self-contained package of software. &amp;lt;/li&amp;gt; &amp;lt;/ul&amp;gt; &amp;lt;h2&amp;gt; How To Remove Color Codes From The Output Of A Command? &amp;lt;/h2&amp;gt; &amp;lt;p&amp;gt; Many command line tools on Linux produce colored outputs. For example, the following command on a typical Linux and Git setup will produce lines of output where each will begin with a colored word: &amp;lt;/p&amp;gt; &amp;lt;pre&amp;gt; 1
2
3
4
5
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; $ git log --oneline --color&amp;lt;br /&amp;gt; e785d0f Fix submit panel error&amp;lt;br /&amp;gt; d83ff21 Implement remote belt&amp;lt;br /&amp;gt; c0dfae9 Make login fields required&amp;lt;br /&amp;gt; 8f69a2a Initial commit &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;p&amp;gt; These colored outputs, when read by a human, are convenient, however, they make it difficult to produce complex commands involving pipes and command substitutions. When the following command is executed in a terminal within a Git repository, it will yield the very first commit hash for the repository: &amp;lt;/p&amp;gt; &amp;lt;pre&amp;gt; 1
2
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; $ git log --oneline --color | tail -n 1 | awk &#39;{print $1}&#39;&amp;lt;br /&amp;gt; 8f69a2a &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;p&amp;gt; Since the output is colored, the actual content of the output contains some hidden characters. The following command, when executed within a Git repository, will end with a somewhat cryptic error: &amp;lt;/p&amp;gt; &amp;lt;pre&amp;gt; 1
2
3
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; $ git show --pretty=&amp;quot;format:&amp;quot; --name-only $(git log --oneline --color | tail -n 1 | awk &#39;{print $1}&#39;)&amp;lt;br /&amp;gt; bash: $&#39;\E[33ma1d1e20\E[m&#39;: command not found&amp;lt;br /&amp;gt; solver/solver.go &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;p&amp;gt; Solving this issue is simple, and requires a simple change to the command above. Pipe the colored output through &amp;lt;/p&amp;gt; &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; sed &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;p&amp;gt; , a Unix utility that parses and transforms text, to remove all &amp;lt;a href=&amp;quot;http://tldp.org/HOWTO/Bash-Prompt-HOWTO/x329.html&amp;quot; target=&amp;quot;_blank&amp;quot; rel=&amp;quot;noopener noreferrer&amp;quot;&amp;gt;invisible color codes&amp;lt;/a&amp;gt;: &amp;lt;/p&amp;gt; &amp;lt;pre&amp;gt; 1
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; sed -r &amp;quot;s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g&amp;quot; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;pre&amp;gt; 1
2
3
4
5
6
7
8
9
10
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; $ git show --pretty=&amp;quot;format:&amp;quot; --name-only $(git log --oneline --color | \&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; tail -n 1 | \&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; awk &#39;{print $1}&#39; | \&amp;lt;br /&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; sed -r &amp;quot;s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g&amp;quot;)&amp;lt;br /&amp;gt; README.md&amp;lt;br /&amp;gt; app.yaml&amp;lt;br /&amp;gt; index.html&amp;lt;br /&amp;gt; script.js&amp;lt;br /&amp;gt; solver/solver.go&amp;lt;br /&amp;gt; style.css &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;h2&amp;gt; How to Search and Replace a String in All the File Names? &amp;lt;/h2&amp;gt; &amp;lt;p&amp;gt; As a developer, you need to rename a file or more files in a directory from time to time, and replace part of the file name with a particular string. This can be achieved with the following single line in the Linux shell: &amp;lt;/p&amp;gt; &amp;lt;pre&amp;gt; 1
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; for file in *oldname*; do mv $file $(echo $file| sed -e &amp;quot;s/oldname/newname/g&amp;quot;); done &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;p&amp;gt; In the snippet above, &amp;lt;/p&amp;gt; &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; oldname &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;p&amp;gt; is the search string we need to replace, and &amp;lt;/p&amp;gt; &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; newname &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;p&amp;gt; is the new replacement string. The &amp;lt;/p&amp;gt; &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; for &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;p&amp;gt; loop iterates over all the files in the current directory and fills the &amp;lt;/p&amp;gt; &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; file &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;p&amp;gt; variable with every instance of the found files. The &amp;lt;/p&amp;gt; &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; sed &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;p&amp;gt; command replaces the found matching string with the new replacement string, and passes this as the second parameter to the &amp;lt;/p&amp;gt; &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; mv &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;p&amp;gt; command. Note that this snippet will not do string replacement recursively, meaning it will not walk into subfolders. &amp;lt;/p&amp;gt; &amp;lt;p&amp;gt; Here is an example that renames all files having string &amp;lt;/p&amp;gt; &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; oldname &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;p&amp;gt; in their filename and replaces them with a &amp;lt;/p&amp;gt; &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; newname &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;p&amp;gt; : &amp;lt;/p&amp;gt; &amp;lt;pre&amp;gt; 1
2
3
4
5
6
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; $ touch oldname.txt oldname.c oldname-test.c test-oldname.c&amp;lt;br /&amp;gt; $ ls&amp;lt;br /&amp;gt; oldname.c &amp;amp;nbsp;oldname-test.c &amp;amp;nbsp;oldname.txt &amp;amp;nbsp;test-oldname.c&amp;lt;br /&amp;gt; $ for file in *oldname*; do mv $file $(echo $file| sed -e &amp;quot;s/oldname/newname/g&amp;quot;); done&amp;lt;br /&amp;gt; $ ls&amp;lt;br /&amp;gt; newname.c &amp;amp;nbsp;newname-test.c &amp;amp;nbsp;newname.txt &amp;amp;nbsp;test-newname.c &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;p&amp;gt; If we want to do the same thing, but this time including the files in all the subfolders (nested or not), one way to do it in Bash (version 4&#43;) would be like this: &amp;lt;/p&amp;gt; &amp;lt;pre&amp;gt; 1
2
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; $ shopt -s globstar&amp;lt;br /&amp;gt; $ for file in ./**/*oldname*; do mv $file $(echo $file| sed -e &amp;quot;s/oldname/newname/g&amp;quot;); done &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;p&amp;gt; Enabling &amp;lt;/p&amp;gt; &amp;lt;div class=&amp;quot;codecolorer-container text solarized-light&amp;quot; style=&amp;quot;overflow:auto;white-space:nowrap;width:550px;&amp;quot;&amp;gt; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td class=&amp;quot;line-numbers&amp;quot;&amp;gt; &amp;lt;div&amp;gt; 1&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; globstar &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;p&amp;gt; and using the double star notation, we ask the shell to walk recursively through the folder tree to find all the matching files. The rest of the snippet remains the same. &amp;lt;/p&amp;gt; &amp;lt;p&amp;gt; Source: &amp;lt;a href=&amp;quot;https://www.toptal.com/linux/tips-and-practices&amp;quot;&amp;gt;Toptal&amp;lt;/a&amp;gt; &amp;lt;/p&amp;gt; &amp;lt;pre&amp;gt;&amp;lt;/pre&amp;gt; &amp;lt;p&amp;gt; &amp;lt;/p&amp;gt; ]]></content>
             </sphinx:document>
            
            <sphinx:document id="1102 ">
              <title>&lt;![CDATA[Mehandi]]></title>
              <link>&lt;![CDATA[/2017/02/09/mehandi/]]></link>
              <pubDate>1486624647</pubDate>
              <content>&lt;![CDATA[ from Instagram: http://ift.tt/2kQW0oc ]]></content>
             </sphinx:document>
            
            <sphinx:document id="1103 ">
              <title>&lt;![CDATA[Merry together]]></title>
              <link>&lt;![CDATA[/2017/01/31/merry-together/]]></link>
              <pubDate>1485828044</pubDate>
              <content>&lt;![CDATA[ from Instagram: http://ift.tt/2klfb8U ]]></content>
             </sphinx:document>
            
            <sphinx:document id="1104 ">
              <title>&lt;![CDATA[Just hanging around.]]></title>
              <link>&lt;![CDATA[/2017/01/26/just-hanging-around/]]></link>
              <pubDate>1485447548</pubDate>
              <content>&lt;![CDATA[ from Instagram: http://ift.tt/2k7Emfx ]]></content>
             </sphinx:document>
            
            <sphinx:document id="1105 ">
              <title>&lt;![CDATA[Some nice fonts in Fedora for coding]]></title>
              <link>&lt;![CDATA[/2016/12/26/nice-fonts-fedora-coding/]]></link>
              <pubDate>1482713131</pubDate>
              <content>&lt;![CDATA[Here is link to fedoramagazine article on this:
6 great monospaced fonts for code and terminal in Fedora And what the article does not mention is how to install these from terminal. You can use the following command to install them all
sudo dnf install levien-inconsolata-fonts.noarch \ adobe-source-code-pro-fonts.noarch mozilla-fira-fonts-common.noarch \ mozilla-fira-sans-fonts.noarch google-droid-sans-fonts.noarch \ google-droid-sans-mono-fonts.noarch nethack-bitmap-fonts.noarch \ nethack-bitmap-fonts-core.noarch ]]></content>
             </sphinx:document>
            
            <sphinx:document id="1106 ">
              <title>&lt;![CDATA[update for wordpress.com issue]]></title>
              <link>&lt;![CDATA[/2015/04/03/update-wordpress-com-issue/]]></link>
              <pubDate>1428022067</pubDate>
              <content>&lt;![CDATA[I had issues with my mobile and reset it without taking back up of Google authenticator. Guess what, now I have no access to the worpress.com account to which my blog was linked. Tried everything and when nothing worked, had to create a new account in worespress.com…. Hopefully my subscribers will not have any issues with this change.
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1107 ">
              <title>&lt;![CDATA[Nice discussion on Control Panel ( free ) for VPS.]]></title>
              <link>&lt;![CDATA[/2014/12/27/nice-discussion-control-panel-free-vps/]]></link>
              <pubDate>1419641104</pubDate>
              <content>&lt;![CDATA[http://xmodulo.com/free-control-panel-for-vps.html
Enjoy the discussion and information if you are looking for free control panel for VPS or some other host.
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1108 ">
              <title>&lt;![CDATA[PHP Image gallery with fancybox.]]></title>
              <link>&lt;![CDATA[/2014/12/09/php-image-gallery-fancybox/]]></link>
              <pubDate>1418086772</pubDate>
              <content>&lt;![CDATA[So, I was looking for some quick to setup PHP Image gallery file. I found couple but none of them suited my needs too well. So I had to write my own.
Very simple PHP script to show all the images under ‘images’ folder.
Shows some details in the images.
That is all that I wanted and that is all that this script does. So pretty simple single php file. Dependency is on fancybox so you will need the jquery and all but nothing else is required.
https://github.com/raj77in/PHP-ImagaeGallery.git
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1109 ">
              <title>&lt;![CDATA[Search CVE – web interface with php]]></title>
              <link>&lt;![CDATA[/2014/11/03/search-cve-web-interface-php/]]></link>
              <pubDate>1414977783</pubDate>
              <content>&lt;![CDATA[So, last few weeks have been very busy with lot of security issues, so I thought of having a local CVE Search app. But all I could find on google and github.com were on python and nothing that I could use quickly. So here is link to one that I wrote quickly:
CVE Search PHP
It’s in php. So just download in some folder and access from a web-server and you are done.
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1110 ">
              <title>&lt;![CDATA[CACert.org – get free ssl certificates.]]></title>
              <link>&lt;![CDATA[/2014/07/28/cacert-org-free-ssl-certificates/]]></link>
              <pubDate>1406509381</pubDate>
              <content>&lt;![CDATA[From CACert website :
CAcert.org is a community-driven Certificate Authority that issues certificates to the public at large for free.
CAcert’s goal is to promote awareness and education on computer security through the use of encryption, specifically by providing cryptographic certificates. These certificates can be used to digitally sign and encrypt email, authenticate and authorize users connecting to websites and secure data transmission over the internet. Any application that supports the Secure Socket Layer Protocol (SSL or TLS) can make use of certificates signed by CAcert, as can any application that uses X.509 certificates, e.g. for encryption or code signing and document signatures.
If you want to have free certificates issued to you, join the CAcert Community .
If you want to use certificates issued by CAcert, read the CAcert Root Distribution License .This license applies to using the CAcert root keys .
So, what are you waiting for , head over to CACert.
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1111 ">
              <title>&lt;![CDATA[get the contents of whole site like some wiki or wikia]]></title>
              <link>&lt;![CDATA[/2014/02/24/contents-site-wiki-wikia/]]></link>
              <pubDate>1393204094</pubDate>
              <content>&lt;![CDATA[For wikis and wikia, generally if you are trying to get some url mirror, then websucker.py is an excellent option. This script is in the python sources so, to get this tool,
yumdownloader --source python Install the rpm downloaded in current directory and then go to ~/rpmbuild/SOUURCES. You should find a Python-*.tar.xz file here, just extract with
tar xvf Python*.tar.xz and there you go, you should find the tool in Tools/webchecker/websucker.py.
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1112 ">
              <title>&lt;![CDATA[Apache server stats with small and useful bash script.]]></title>
              <link>&lt;![CDATA[/2013/11/29/apache-server-stats-small-bash-script/]]></link>
              <pubDate>1385688936</pubDate>
              <content>&lt;![CDATA[Just copy this script to your web-server cgi-bin directory and enjoy.
The script with show the common errors like 404 Error, Internal Server Error and others. It will show the User agent distribution using simple commands like grep, uniq, awk and so on.
You would need to change the tfile – which is temporary file and also the access.log path in the next line.
Just re-direct the output to some file with html extenstion. You could even put this in the cron which re-directs the output to some html in server document root.
#!/bin/bashtfile=/tmp/apache.logsudo grep $(date &#39;&#43;%d/%b/%Y&#39;) /var/log/apache2/access.log &amp;gt;$tfilethits=$(grep -c . $tfile)echo &#34;Content-type: text/html&#34;echo &#34;&#34;echo &#34;Report for $(date &#39;&#43;%d/%b/%Y&#39;) Report for $(hostname) on $(date ‘&#43;%d/%b/%Y’) &#34;echo &#34;Total hits :: $thits&#34;echo &#34;&#34;echo &#34;User agent distribution :: &#34;#awk -F&#34; &#39;{print $6}&#39; $tfile | sort | uniq -c | sort -frawk -F&#34; &#39;{print $6}&#39; $tfile | sed &#39;s/(([^;]&#43;; [^;]&#43;)[^)]*)/(1)/&#39; |sort |uniq -c|sort -frecho &#34;User response code: &#34;awk &#39;BEGIN{a[200]=&#34;OK&#34;;a[206]=&#34;Partial Content&#34;;a[301]=&#34;Moved Permanently&#34;;a[302]=&#34;Found&#34;;a[304]=&#34;Not Modified&#34;;a[401]=&#34;Unauthorised (password required)&#34;;a[403]=&#34;Forbidden&#34;;a[404]=&#34;Not Found&#34;;a[500]=&#34;Internal Server Error&#34;;}{print $9 &#34; =&amp;gt; &#34;a[$9]&#34;&#34;}&#39; $tfile | sort | uniq -c | sort -nrecho &#34;404 Error Summary::&#34;awk &#39;($9 ~ /404/)&#39; $tfile | awk &#39;{print $9,$7}&#39; | sort | uniq -c|sort -nr|head -5echo &#34;IP Visit counts :: &#34;awk &#39;{print $1}&#39; $tfile | grep -o &#34;[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}&#34; | sort -n | uniq -c | sort -nr|while read count ipdoname=$(echo $ip|/usr/bin/logresolve)printf &#34;%5st%-15st%sn&#34; $count $ip $namedone# cat $tfile |grep -o &#34;[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}&#34; | sort -nr | uniq -c | sort -necho &#34;Top Agents :: &#34;cat $tfile | awk -F&#34; &#39;{print $6}&#39;| sort -n | uniq -c | sort -nr |head -5 echo &#34;Top urls ::&#34;cat $tfile | awk -F&#34; &#39;{print $2}&#39;| sort -n | uniq -c | sort -nr |head -5echo -n &#34;Total Bytes ::: &#34;cat $tfile | awk &#39;{ sum &#43;= $10 } END { if ( sum &amp;gt; 1024*1024) {print sum/(1024*1024)&#34;Mb&#34;}else if ( sum &amp;gt; 1024) {print sum/1024&#34;Kb&#34;;}else print sum }&#39;echo -n &#34;Total Seconds :: &#34;cat $tfile | awk &#39;{ sum &#43;= $13 } END { print sum }&#39;# sed &#39;s/.*GET (.*) HTTP.*/1/g&#39; $tfile|awk -F/ &#39;{if ( NF &amp;gt; 3 ) print $2&#34;/&#34;$3&#34;/&#34;$4; else print $2;}&#39;|sort|uniq -c Apache Server Stats – Download the script in zip file format.
And here is a sample ::
Report for on Total hits :: User agent distribution ::
User response code:
404 Error Summary::
IP Visit counts :: Top Agents ::
Top urls ::
Total Bytes :::
Total Seconds ::
Hope that it will be useful.
Related articles Analyze traffic on server Top 10 psql &amp;#8221; commands I use Use Full tips to find out load issues on the Linux Server ]]></content>
             </sphinx:document>
            
            <sphinx:document id="1113 ">
              <title>&lt;![CDATA[Happy Diwali]]></title>
              <link>&lt;![CDATA[/2013/11/04/happy-diwali-2/]]></link>
              <pubDate>1383527276</pubDate>
              <content>&lt;![CDATA[Wish you all a very happy and prosperous Diwali 2013.
[][1]{.thumbnail}Diwaili 2013 ]]></content>
             </sphinx:document>
            
            <sphinx:document id="1114 ">
              <title>&lt;![CDATA[Lal Bagh 2013 – Photos from Flower show on 15 Aug 2013]]></title>
              <link>&lt;![CDATA[/2013/08/12/lal-bagh-2013-photos-flower-show-15-aug-2013/]]></link>
              <pubDate>1376269975</pubDate>
              <content>&lt;![CDATA[Its again that time of the year, when visiting Lal Bagh ( Bangalore , India) is so much fun. There is a lot of crowd and there are lot of opportunities for photography. So, here are some of the photos 😉
{.thumbnail}
For more, visit my Flickr profile.
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1115 ">
              <title>&lt;![CDATA[remove the background the easy way — online]]></title>
              <link>&lt;![CDATA[/2013/07/17/remove-background-easy-online/]]></link>
              <pubDate>1374024922</pubDate>
              <content>&lt;![CDATA[Here is a nice link to web application that lets you remove the unwanted background. Just head over to the side, follow the simple instructions of marking the background and the subject and you are done.
http://clippingmagic.com/
Pretty good results you will get here, you may need to do a little work on the results but otherwise pretty good results.
Related articles Remove Unnecessary Jars! What are the names of frameworks for creating android applications? CSS Completed ]]></content>
             </sphinx:document>
            
            <sphinx:document id="1116 ">
              <title>&lt;![CDATA[IE8 – Developer Tools]]></title>
              <link>&lt;![CDATA[/2013/04/15/ie8-developer-tools/]]></link>
              <pubDate>1365989480</pubDate>
              <content>&lt;![CDATA[Don’t start banging me for this, but I had to test something on Windows and thus found out this. I f you need to debug or test something on IE8 on Windows, then you can simply press “F12” and this will bring up the developer tools… could be useful to you, sometime if you are stuck with testing something on IE on windows 🙂
Related articles Microsoft&amp;#8217;s Revamped &amp;#8216;Modern.IE&amp;#8217; Offers Free Windows Virtual Machines Microsoft Launches Windows QuickStart Kit For Mac Developers, A $25 USB Stick With Windows 8 Pro And Parallels For Mac Microsoft Updates Modern.ie, Website Testing Made Easier ]]></content>
             </sphinx:document>
            
            <sphinx:document id="1117 ">
              <title>&lt;![CDATA[Ubuntu hushlogin]]></title>
              <link>&lt;![CDATA[/2013/03/27/ubuntu-hushlogin/]]></link>
              <pubDate>1364385605</pubDate>
              <content>&lt;![CDATA[In Ubuntu, if you do not like all the information that comes when you do a remote login, then you just need to do this:
touch ~/.hushlogin]]></content>
             </sphinx:document>
            
            <sphinx:document id="1118 ">
              <title>&lt;![CDATA[New improvements in site.]]></title>
              <link>&lt;![CDATA[/2012/11/16/improvements-site/]]></link>
              <pubDate>1353075555</pubDate>
              <content>&lt;![CDATA[Have spent some time today to speed up the blog today and made some improvements.
Today I finally managed to get some time to update my site and change theme. I also made some changes that should decrease the page loading time. Have updated the “Sitemap” page and also the contact me page. There are couple of other changes that should make your experience a lot more better.
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1119 ">
              <title>&lt;![CDATA[Your own local search engine.]]></title>
              <link>&lt;![CDATA[/2012/04/09/local-search-engine/]]></link>
              <pubDate>1333938677</pubDate>
              <content>&lt;![CDATA[There are times when you would want to have a local search engine capable of indexing even pdf and doc files. So here is a solution.
You can use “Omega” and here are the instructions.
download omega from http:// xapian.org/download
yum install xapian libuuid-devel And then make and install omega and for this you can follow the instructions.
Federated Search Engine Diagram (Photo credit: Wikipedia) Create index using command omindex
and then you can use quest or search.py to search or you can setup the cgi way so that you can use local browser to search.
You can setup cron with following to update the index regularly:
omindex -p --db /var/lib/omega/data/default --url /URL /path/to/index Related articles GetListed.org Adds Major Local Data Player, Updates Interface (prweb.com) IndustrialWebSearch.com Acquires SourceLocal.com (prweb.com) ]]></content>
             </sphinx:document>
            
            <sphinx:document id="1120 ">
              <title>&lt;![CDATA[visio support comes to Linux with loads of new features of LibreOffice.]]></title>
              <link>&lt;![CDATA[/2012/03/17/visio-support-linux-loads-features-libreoffice/]]></link>
              <pubDate>1331965974</pubDate>
              <content>&lt;![CDATA[Image via Wikipedia LibreOffice 3.5 was released few days back with loads of features and improvements. Most bragged about feature should be capability to read visio diagrams. You can read the full list of features here. And here are some interesting features:
Better UI for header/footer handling. Easily add header or footers. Quickly see what is edited with new changing text boundaries. Quickly edit or remove headers and footers without going through page styles formatting. (Cédric Bosdonnat) New faster built-in grammar checker for English and several other languages. (László Németh) New multi-line input bar in Calc. The arrow-control at the end of the toolbar allows to switch this on/off. (Anurag Jain, Noel Power) Import filter for Microsoft Visio documents. (Fridrich Štrba, Eilidh McAdam, Valek Filippov) Custom Shapes import was greatly enhanced, many bugs were fixed and new presets implementation added. (Radek Doulik) and many more… Related articles The Bright Future of LibreOffice (pcworld.com) LibreOffice 3.5 Released (news.slashdot.org) Jono Bacon: Kudos, LibreOffice (jonobacon.org) Intel backs Libre Office by joining The Document Foundation (thetechscoop.net) ]]></content>
             </sphinx:document>
            
            <sphinx:document id="1121 ">
              <title>&lt;![CDATA[cream bash ide – vim with bash support]]></title>
              <link>&lt;![CDATA[/2012/03/14/cream-bash-ide-vim-bash-support/]]></link>
              <pubDate>1331705808</pubDate>
              <content>&lt;![CDATA[ Image via Wikipedia Here you can find the cream editor. This is basically vim editor with lots of customizations thus making it simpler for the users to use the editor directly.
This version already has the bash and perl support plugins and thus you can start using them as IDE without the need to add any plugins. It has a simple and advanced mode. In the simple mode you need not worry about all the modes of the vi/vim editor. How cool is that 🙂
Related articles How to build vim 7.3.285 from source (stackoverflow.com) Why I use vim (michaeltrier.com) Get yourself som new themes for vim (amit-agarwal.co.in) ]]></content>
             </sphinx:document>
            
            <sphinx:document id="1122 ">
              <title>&lt;![CDATA[Google gravity for fun]]></title>
              <link>&lt;![CDATA[/2012/03/11/google-gravity-fun/]]></link>
              <pubDate>1331446460</pubDate>
              <content>&lt;![CDATA[Image via CrunchBase 1) Write &amp;#8216;Google Gravity&amp;#8216; in Google search box,press enter. 2) Click on the 1st result that appears i.e. Google Gravity. 3) Wait 2 seconds. Something cool will happen. 4) Play with it for a while. 5) Then write any word in the Google search bar and press Enter. 6) Wait and see. Something even cooler will happen 🙂 Awesome !!!.. Related articles Google Gravity (mgitecetech.wordpress.com) Google Sphere (mgitecetech.wordpress.com) Does anyone enjoy a practical joke? (birthnavigators.wordpress.com) ]]></content>
             </sphinx:document>
            
            <sphinx:document id="1123 ">
              <title>&lt;![CDATA[Happy New Year 2012]]></title>
              <link>&lt;![CDATA[/2011/12/31/happy-year-2012/]]></link>
              <pubDate>1325313844</pubDate>
              <content>&lt;![CDATA[Happy new year to all.
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1124 ">
              <title>&lt;![CDATA[30 Best Windows Mobile Applications]]></title>
              <link>&lt;![CDATA[/2011/12/28/30-windows-mobile-applications/]]></link>
              <pubDate>1325054356</pubDate>
              <content>&lt;![CDATA[30 Best Windows Mobile Applications 33 Comments »
Share inShare
The main reason why people still love window mobile is because of its freeware applications and excellent add-ons. Windows Mobile users carry great access to third party applications than any other Mobile Operating system in the market. At the same time it might be confusing for the user to settle on which window mobile apps to download. So we at honeytechblog did a search and have compiled a list of Top 30 Best window mobile applications. These applications will ensure following features such as networking, themes, tools for tweak, music players, newsreaders, Internet browser, document manager and much more.
1. Facebook
The famous social networks is now a mobile application updated with latest news and posts.
2. TwitToday
Twitter is one of the popular micro blogging site and all the twitter activities can be controlled with this windows application. Once it is added, a textbox is displayed into the screen.
3. NET Compact Framework
Almost all applications in the mobile require .NET framework. This application has all the required libraries and the language required for .NET framework.
4. Viigo
This is a RSS feed that offers instant access to all favorite blogs, news, entertainment, finance, weather, reviews, games and much more.
More ..
Related articles WhizNets Launches Mobile App Square (prweb.com) Running Windows Mobile Application at startup (stackoverflow.com) Implementing different windows/forms in a Windows Mobile application? (stackoverflow.com) ]]></content>
             </sphinx:document>
            
            <sphinx:document id="1125 ">
              <title>&lt;![CDATA[Merry Christmas]]></title>
              <link>&lt;![CDATA[/2011/12/25/merry-christmas-2/]]></link>
              <pubDate>1324795376</pubDate>
              <content>&lt;![CDATA[Merry Christmas to all.
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1126 ">
              <title>&lt;![CDATA[qemu manager for Windows to run your linux distribution]]></title>
              <link>&lt;![CDATA[/2011/12/22/qemu-manager-windows-run-linux-distribution/]]></link>
              <pubDate>1324535629</pubDate>
              <content>&lt;![CDATA[If you are into virtualization, then you must have heard about Qemu. And if you are on windows then this is a must:
http://www.davereyn.co.uk/download.htm
Related articles Political Hotsheet Herman Cain drops out 1 of 9 &amp;#8211; CBS News (cbsnews.com) Romney, Gingrich Proceed Carefully in GOP Showdown &amp;#8211; ABC News (abcnews.go.com) Wisconsin rallies to beat Michigan State in Big Ten title game &amp;#8211; Chicago Tribune (chicagotribune.com) ]]></content>
             </sphinx:document>
            
            <sphinx:document id="1127 ">
              <title>&lt;![CDATA[Need Google&#43; invitaion.. leave a comment here.]]></title>
              <link>&lt;![CDATA[/2011/07/01/google-invitaion-leave-comment/]]></link>
              <pubDate>1309523450</pubDate>
              <content>&lt;![CDATA[ I just got mine, if you need a google plus invitation leave your email id in comments 🙂
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1128 ">
              <title>&lt;![CDATA[Google&#43; – way to go for experinmenting.]]></title>
              <link>&lt;![CDATA[/2011/07/01/google-experinmenting/]]></link>
              <pubDate>1309473756</pubDate>
              <content>&lt;![CDATA[ Finally I got a invitations and was able to get into the Google&#43; today. Having been trying to do this for last couple of days, was quite anxious on how it is and how it fairs against Facebook and twitter.
First, heres a first look of the account:
[][1]google&#43; Screenshot Most noticable thing, as soon as you login is that all your contacts from google aare directly visible in your account and you can directly put them in any of the circles that you like. Picasaweb photos can be imported.
Will update more shortly, after I have experimented a little more on this.
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1129 ">
              <title>&lt;![CDATA[Another nice and feature rich alternative to Google Search]]></title>
              <link>&lt;![CDATA[/2011/06/27/nice-feature-rich-alternative-google-search/]]></link>
              <pubDate>1309139648</pubDate>
              <content>&lt;![CDATA[ Image via CrunchBase Some time back I had written a post on Scroogle. Scroogle is good, it provides privacy. But if you want more for your browsing experience, something that you thought was always missing in a lot of search engines, then there’s a better search engine and it is DuckDuckGo.
The very first reason that you may want to use this search engine is that it does not bubble you and neither it tracks you.
Here is the link to an article that presents response from Matt Cutts of Google.
Here is the list from their about page as to why you may want to use this search engine:
DuckDuckGo is a general purpose search engine like Google or Bing.
• Get way more instant answers
Zero-click info above the links (red box).
• Less spam and clutter
We ban those useless sites with just ads.
• Lots and lots of goodies
Special searches (tech), syntax &amp;amp; settings.
• Real privacy
We don’t track you! (Illustrated guide.)
Bubble or personilazation of search result and/or SSL and privacy are not the reasons that I liked the search engine. There are some features in this search engine that you would definately like.
Here is a link to their goodies page.You will see that its real well thought out and does provide a lot of “bang” syntax which I for one is definately finding useful.
There are quite some other features that you will find useful, so what are you waiting for. Browser addon for Firefox, here.
Related articles DuckDuckGo: Ditch Google, Bing for Unfiltered Search (searchenginewatch.com) DuckDuckGo Brings Private Searching And Zero Click Results To Android (androidpolice.com) DuckDuckGo: Escape your search engine Filter Bubble (dontbubble.us) ]]></content>
             </sphinx:document>
            
            <sphinx:document id="1130 ">
              <title>&lt;![CDATA[My Photos in the Nikon d5100 contest.]]></title>
              <link>&lt;![CDATA[/2011/06/13/photos-nikon-d5100-contest/]]></link>
              <pubDate>1307974340</pubDate>
              <content>&lt;![CDATA[ I have submitted my photos on the D5100 Nikon Photo contest. Do visit the links below and if you like them, vote for my photos 🙂
To vote, just click on the link. You will be taken to Nikon site, Facebook connect and vote.. simple. Thanks for all the support.
[][1]Flower Closeup [][2]Food [][3]Camellion [][4]Tortoise [][5]Dubai Night View ]]></content>
             </sphinx:document>
            
            <sphinx:document id="1131 ">
              <title>&lt;![CDATA[Registrations restricted for some time]]></title>
              <link>&lt;![CDATA[/2011/06/08/registrations-restricted-time/]]></link>
              <pubDate>1307526787</pubDate>
              <content>&lt;![CDATA[ Since morning today, the registrations has increased dramatically and hence for the time being I have restricted the registration to only verified Open ID. Extremely sorry for the inconvenience caused to all the genuine users.
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1132 ">
              <title>&lt;![CDATA[Corruption, India and Social Activist]]></title>
              <link>&lt;![CDATA[/2011/06/04/corruption-india-social-activist/]]></link>
              <pubDate>1307172333</pubDate>
              <content>&lt;![CDATA[ First off, sorry for being completely off beat this time but I could not help but write on this.
Everyone in the world by now would have definitely heard about the Indian’s Fight against corruption. Very good thing to do, there should be no corruption in any country in the world and if there is corruption then it should be fought. Now, lets look at how India is fighting this:
Some people thought to get Lokpal bill and started a “Fast”.
Some else felt the need to get the black money back, and started another fast. The fast was popularized more by the govt actions taken to stop this :). Amazing fast this is, BTW, if you did not know:
a) There is a FB page for this
b) Cameras are recording this, for what I don’t know
c) Most media coverage
d) Government is probably watching TV to monitor this than doing anything else today.
e) Thousands of Crore of Indians are not working as they are on “Satyagrah“.
Hope things will go as planned.
On a side note, isnt this the same person who is questioned again and again on the source of money and also where did the money come for all this arrangement in “some” maidan. Also, will the PM come to discuss with me the other Bills of Parliament if I went on Hunger Strike.
Related articles Who&amp;#8217;s afraid of the Lokpal Bill? (savedaughters19.wordpress.com) Fast Unto Death &amp;#8211; Blackmailing the government&amp;#8230;right? or wrong? (indialimits.wordpress.com) Anna Hazare announces indefinite fast for passing of Lokpal Bill (panasianbiz.com) What Is The Purpose Of Creating Such A Lokpal? (savedaughters19.wordpress.com) ]]></content>
             </sphinx:document>
            
            <sphinx:document id="1133 ">
              <title>&lt;![CDATA[My new Maemo 5 Nokia N900 Mobile.]]></title>
              <link>&lt;![CDATA[/2011/05/21/maemo-5-nokia-n900-mobile/]]></link>
              <pubDate>1305928530</pubDate>
              <content>&lt;![CDATA[ Image via CrunchBase I have been thinking of buying the “N900” Nokia mobile for quite sometime but for certain reasons could not get my hands on this mobile so far. Finally couple of days back, I got my hands on this beautiful and powerful piece of software and hardware.
Well, here are some snaps for ya ll:
BTW before we go to the snaps, there are some things that you will not see in the pics here but makes the first and the best impressions and they are Browsing, Email, Connectivity, Screen Resolution, Size of the icons (big enough to do most of the tasks with bare hands) et al. Not to mention the great integration of the skype and GTalk contacts into the usual contacts and calling them like other GSM calls.
First the carry case:
[][1]Nokia N900 cover Next the mobile in my hands 🙂
[][2]Nokia N900 And the X-terminal running bash:
[][3]bash running on N900 (Nokia) Complete Debian running in chroot environment on the mobile:
[][4]Debian on N900 conky running on this:
[][5]conky running on N900 mplayer and finally Ovi maps running on the phone:
[][6]Ovi Maps on N900 [][7]mplayer on N900 Nokia Related articles Video demo: Skype for Nokia N900 (share.skype.com) Nokia drops Ovi brand, replaces it with Nokia (dgui.wordpress.com) N900 Application Round Up (jeffhoogland.blogspot.com) MeeGo-Powered Nokia N9 to Be Called Nokia N950 (gottabemobile.com) ]]></content>
             </sphinx:document>
            
            <sphinx:document id="1134 ">
              <title>&lt;![CDATA[browsing the windows machines and their shares – listing]]></title>
              <link>&lt;![CDATA[/2011/04/30/browsing-windows-machines-shares-listing/]]></link>
              <pubDate>1304175715</pubDate>
              <content>&lt;![CDATA[ smbtree is a very nice command to check all the machines that are present in the LAN (your connected network). For this to work you may need to look at this article also.
1
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; smbtree -U &amp;lt;strong&amp;gt;username &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; Related articles Prompted for a username and password when browsing to an IIS virtual directory (ask.metafilter.com) How to Delete History in Internet Explorer (lockergnome.com) How To Guide: Deploy VNC via Group Policy (edugeek.net) Windows just doesn&amp;#8217;t like tunnels (ask.metafilter.com) Windows Tips &amp;#8211; Speed Up your Network Share Browsing (hitechbarkadaz.wordpress.com) ]]></content>
             </sphinx:document>
            
            <sphinx:document id="1135 ">
              <title>&lt;![CDATA[Mohali Maahol!!!! KRICKET Diplomacy comes of AGE!!!!]]></title>
              <link>&lt;![CDATA[/2011/04/05/mohali-maahol-kricket-diplomacy-comes-of-age/]]></link>
              <pubDate>1301943416</pubDate>
              <content>&lt;![CDATA[ Enjoy reading this 🙂
Mohali Maahol&#43;ACEAIQAhACE KRICKET Diplomacy comes of AGE&#43;ACEAIQAhACE Eleven flannelled fools chasing a red ball, with eleven thousand fools cheering them.
Bernard Shaw
This Englishman would have turned aback in his grave&#43;ACEAIQAh By George&#43;ACEAIQAhACE Had he glimpsed the current fervour and crescendo the game has attained. The World Cup which began in an almost staid and lacklustre manner (the Opening Ceremony was quite a damp squib, my thoughts) &#43;IBM slowly but surely reached a state of frenzy with each win for India.
The week saw the Mother of All Matches at Mohali &#43;IBM the one which was keenly anticipated, awaited, attended and finally achieved&#43;ACEAIQAhACE Yes the Mohali Madness had such a viral frenzy that has seldom been witnessed in the willow world.
The match was no more a match but a national event with a Moholiday across almost the entire country. The game assumed more guargantuan proportions when our Politicos entered the arena.
Manmohan Singh&#43;IBk-s invitation to his counterpart was an act unprecedented resulting in the coining of a new term in International Polity &#43;IBM Cricket Diplomacy. Last that I heard was this was going to be included into the Merriam&#43;IBk-s list (the list that Oxford Press collates to add new words into the dictionary).
Soon the new channels went so gaga over this event &#43;IBM special NDTV episodes were quickly canned focussing on the dress code, IAF copter from Islamabad to Mohali to the menu items on the hosted dinner. Sanjeev Kapoor hosted a 6 episode serial on his channel dessicating each item on the menu along with its political flavours and tastes&#43;ACEAIQAhACEAIQ
What happened on the ground is&#43;ICY.. well HISTORY&#43;ACEAIQAhACEAIQ What happened after the match is &#43;ICY. Well was a MYSTERY which I am demystifying for you&#43;ACEAIQAhACE Given the immense media hype and public favour that was generated because of the Mohali Match- India and Pakistan both have decided that the best way to move forward is by playing cricket. Cricket has been redefined now&#43;ICY and HOW&#43;ACEAIQAhACE
&#43;ACo A daily soap match is planned between India and Pakistan under the aegis of SPORTS. This will be played for one hour every evening. The format is such that 26 weeks is one innings covering a year for a match. The entire concept and copyright for this format is the brainchild of Balaji Telefilms. The game has been rechristened as KRICKET along with an assortment of new word formations like Katch, Knee before Wicket, Kover, Kat (Ekta beware of Sallu&#43;ICY Ranbir&#43;ICY???), Kall etc.
&#43;ACo There will be celebrity umpires with a vast varieties of audience participation events planned. Some of the celebrities rumoured to be umpiring the game for the weekend episodes are Big B, SRK, Aishwarya Rai etc. Rajnikant was requested to grace one session but he refused as his presence was conditional to the fact that 22 Rajnis will play amongst themselves.
&#43;ACo One week is being planned wih AB Corp as &#43;IBM Kaun Banega Kricketer with live audience given a chance to play the real game. The rules of the game will be suitably modified to accommodate these events.
&#43;ACo Veena Malik and Shoaib Akhtar (he is now a celebrity kricketainer) are busy practising for a hot and racy item number for the Pakistani team whereas Mallika Sherawat and Emran Hashmi are doing their bit for the Indian team. Mallika- Emraan are shooting at the Lords stadium for a hot racy and a passionate item number. The song is reportedly inspired from the unforgettable dialogue rendered by the original He-Man Garam Dharam. The song is titled &#43;IBM Choom Choom ke Maaroonga&#43;ACEAIQAhACE
&#43;ACo Manish Malhotra has designed the sportswear for both the teams.
Read more…….. http://ideasinfinitum.blogspot.com/2011/04/eleven-flannelled-fools-chasing-red&#43;AF8-01.html
Related articles Dinner diplomacy at Mohali (hindu.com) &amp;#8220;Cricket diplomacy at Mohali&amp;#8221; and related posts (asianetindia.com) I Am In Mohali (thinkloud65.wordpress.com) ]]></content>
             </sphinx:document>
            
            <sphinx:document id="1136 ">
              <title>&lt;![CDATA[Slackware Linux 13.37 RC 3.1415926535897932384626433832]]></title>
              <link>&lt;![CDATA[/2011/04/02/slackware-linux-13-37-rc-3-1415926535897932384626433832/]]></link>
              <pubDate>1301759762</pubDate>
              <content>&lt;![CDATA[ Slackware released the next version a few days back and guess the complete name : Slackware Linux 13.37 RC 3.1415926535897932384626433832. You must be crazy to tell the complete version to anyone.
Development Release: Slackware Linux 13.37 RC 3.1415926535897932384626433832 More fun with Slackware’s version numbers as Patrick Volkerding announces the latest release candidate for the upcoming Slackware Linux 13.37: &#43;ACI-There have been quite a few changes so we will have one more release candidate: Slackware 13.37 RC 3.14159265358979323846264338327950288419716. Very close now&#43;ACE But we’ll likely hold out for….
Related articles Slackware 13.37&amp;#8230; I Couldn&amp;#8217;t Wait (lockergnome.com) How To Install Linux Software (lockergnome.com) Links: KDE SC News (Including Akademy), Distribution Reviews, and Upside for Red Hat (techrights.org) ]]></content>
             </sphinx:document>
            
            <sphinx:document id="1137 ">
              <title>&lt;![CDATA[sakura – Reaaly good terminal with very few dependencies.]]></title>
              <link>&lt;![CDATA[/2011/03/30/sakura-reaaly-good-terminal-with-very-few-dependencies/]]></link>
              <pubDate>1301507015</pubDate>
              <content>&lt;![CDATA[ I was searching for something in the Fedora repos and found a really good terminal, sakura. Its very much like Gnome-terminal. I did not find much difference other than using less memory.
To install:
1
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; sudo yum install sakura &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; and the details of the package:
Name : sakura Arch : i686 Version : 2.3.8 Release : 1.fc14 Size : 137 k Repo : installed From repo : fedora Summary : Terminal emulator based on GTK and VTE URL : http://pleyades.net/david/sakura.php License : GPLv2 Description : Sakura is a terminal emulator based on GTK and VTE. It’s a terminal emulator with few dependencies, so you don’t need a full GNOME desktop installed to have a decent terminal emulator. Related articles Zephyr Announces Support for Internet Explorer 9 (prweb.com) Vintage Terminal Emulator (adafruit.com) GNOME Terminal tricks and tips (ghacks.net) ]]></content>
             </sphinx:document>
            
            <sphinx:document id="1138 ">
              <title>&lt;![CDATA[Happy Holi to all.]]></title>
              <link>&lt;![CDATA[/2011/03/20/happy-holi-to-all-2/]]></link>
              <pubDate>1300629667</pubDate>
              <content>&lt;![CDATA[ Happy HOLI to all.
[][1]Holi ]]></content>
             </sphinx:document>
            
            <sphinx:document id="1139 ">
              <title>&lt;![CDATA[Happy Valentines day to all.]]></title>
              <link>&lt;![CDATA[/2011/02/14/happy-valentines-day-to-all/]]></link>
              <pubDate>1297651854</pubDate>
              <content>&lt;![CDATA[ [][1]Rose Happy Valentines to all.
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1140 ">
              <title>&lt;![CDATA[Ranking of the most frequently used commands]]></title>
              <link>&lt;![CDATA[/2011/02/01/ranking-frequently-commands/]]></link>
              <pubDate>1296514483</pubDate>
              <content>&lt;![CDATA[ Lets take a quick look at how to get the most frequently used commands on you shell. So what we need to do is this:
1
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; history | awk &#39;{print $2}&#39; | awk &#39;BEGIN {FS=&amp;quot;|&amp;quot;}{print $1}&#39; | sort | uniq -c | sort -n | tail | sort -nr &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; So, how did we arrive at this and will this always work? No it might not always work. A typical example is where HISTTIMEFORMAT variable is set. In that case, if you check history, you will see that after the number column we have time and date in the specified format, in which case, you will get wrong information from the above command. Anyways, forgetting these special cases, lets go to how we got this command:
1
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; history|awk &#39;{print $2}&#39; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; will give us list of all the commands that we have used and are in history. But this will also give commands like “history|more” as one command as this does not have any space. So, we eliminate whatever is there after the “|” with awk command
1
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; history|awk &#39;{print $2}&#39;|awk -F&amp;quot;|&amp;quot; &#39;{print $1}&#39; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; or
1
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; history | awk &#39;{print $2}&#39; | awk &#39;BEGIN {FS=&amp;quot;|&amp;quot;}{print $1}&#39; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; and now to get all the counts, we need to sort and then count unique occurances:
1
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;text codecolorer&amp;quot;&amp;gt; history | awk &#39;{print $2}&#39; | awk &#39;BEGIN {FS=&amp;quot;|&amp;quot;}{print $1}&#39;|sort|uniq -c &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; Time for pretty display and make the display more readable to users:
add sort -n to sort with first column treated as number and then tail to display only few lines and then sort -nr to display in reverse order so that the top entry is the most used one 🙂
Related articles imabonehead: Linuxaria 6 Tricks with awk : Linuxaria (linuxaria.com) Poor mans dmenu benchmark (dieter.plaetinck.be) How do I use awk inside my Automator workflow? (ask.metafilter.com) ]]></content>
             </sphinx:document>
            
            <sphinx:document id="1141 ">
              <title>&lt;![CDATA[bash math]]></title>
              <link>&lt;![CDATA[/2011/01/30/bash-math/]]></link>
              <pubDate>1296340946</pubDate>
              <content>&lt;![CDATA[ some quick links :
http://mainstreetanswers.org/bash/math.php
http://www.faqs.org/docs/abs/HTML/mathc.html
http://tldp.org/LDP/abs/html/mathc.html Related articles W3C Announces MathML 3, New Standards for Math on the Web (readwriteweb.com) Find all the missing paths in the PATH variable in bash script (amit-agarwal.co.in) Nice site for Math related games and resources&amp;#8230; (greenbananablog.org) bash 4.0 &amp;#8211; new feature mapfile (amit-agarwal.co.in) ]]></content>
             </sphinx:document>
            
            <sphinx:document id="1142 ">
              <title>&lt;![CDATA[fork a new process in perl]]></title>
              <link>&lt;![CDATA[/2011/01/28/fork-process-perl/]]></link>
              <pubDate>1296167574</pubDate>
              <content>&lt;![CDATA[ I was doing something today and found that I require to fork a new process in perl. Now I had never done this earlier, so I did not know how to do this.
First some background :
I was doing some program very similar to http server, where the script accepts some input through a socket and then processes the same. In doing so I was seeing that the script was taking some time in processing the input and thus was not processing the second request until the first one was completed. Simple solution, fork the process.
[cc lang=”perl”]
$pid=fork();
if (! $fork)
{
do the child processing
exit
}
else
{
do the parent processing
exit
}
Related articles Given/when &amp;#8211; The Perl switch statement (transfixedbutnotdead.com) How to Identify a Good Perl Programmer (modernperlbooks.com) A Timely Start &amp;#8211; Perl.com (perl.com) Why I Stuck With Perl (blogs.perl.org) ]]></content>
             </sphinx:document>
            
            <sphinx:document id="1143 ">
              <title>&lt;![CDATA[First earning on the blog in the form of advertising]]></title>
              <link>&lt;![CDATA[/2011/01/22/earning-blog-form-advertising/]]></link>
              <pubDate>1295706832</pubDate>
              <content>&lt;![CDATA[ &amp;lt;dd class=&amp;quot;wp-caption-dd zemanta-img-attribution&amp;quot; style=&amp;quot;font-size: 0.8em;&amp;quot;&amp;gt; Image via &amp;lt;a href=&amp;quot;http://commons.wikipedia.org/wiki/File:Successful_business.jpg&amp;quot;&amp;gt;Wikipedia&amp;lt;/a&amp;gt; &amp;lt;/dd&amp;gt; &amp;lt;/dl&amp;gt; Thanks to all my visitors, I was approached by some advitisers, which suited very well with the theme and philosophy of my blog and thus accepted the same. So, thanks to all my visitors, now my blog has earned its first income in the form of advertising.
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1144 ">
              <title>&lt;![CDATA[Happy New Yeat to all.]]></title>
              <link>&lt;![CDATA[/2011/01/01/happy-yeat/]]></link>
              <pubDate>1293895547</pubDate>
              <content>&lt;![CDATA[ New Year wishes to all…
[][1]HappyNewYear ]]></content>
             </sphinx:document>
            
            <sphinx:document id="1145 ">
              <title>&lt;![CDATA[MGL Cloud Initiative]]></title>
              <link>&lt;![CDATA[/2010/12/07/mgl-cloud-initiative/]]></link>
              <pubDate>1291691210</pubDate>
              <content>&lt;![CDATA[ MGL recently launched cloud services.
Enclosed is the brochure on MGL Cloud Initiative.
Also visit MGL facebook and twitter pages and email us your feedback.
http://www.facebook.com/pages/UltraCloud_MGL/146551115366538?ref=sgm
http://twitter.com/#!/UltraCloud_MGL
MGL_Cloud_Brochure _New.pdf
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1146 ">
              <title>&lt;![CDATA[Photos of my office in the morning]]></title>
              <link>&lt;![CDATA[/2010/12/02/photos-office-morning/]]></link>
              <pubDate>1291255592</pubDate>
              <content>&lt;![CDATA[ Here are photos of my office on 20/Nov at 3AM in the morning. This is taken in the moonlight.
[][1]Moon in the morning [][2]My office in moonlight Sorry, the quality of the photo is not that good as the photo was taken from my mobile Samsung Omnia Pro, did not have my DSLR with me that time.
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1147 ">
              <title>&lt;![CDATA[Free Home made calendar for December 2010.]]></title>
              <link>&lt;![CDATA[/2010/11/29/free-home-calendar-december-2010/]]></link>
              <pubDate>1291036458</pubDate>
              <content>&lt;![CDATA[ Hope you will like this 🙂
[][1]December Calendar Related articles Publish iCal Calendars Without MobileMe Or An OS X Server [Mac] (makeuseof.com) MUTTS and Eckhart Tolle Together Again in Enlightening &amp;#8216;Guardians of Being&amp;#8217; 2011 Wall Calendar Calendar (prweb.com) Free 2011 Calendars (forthemommas.com) ]]></content>
             </sphinx:document>
            
            <sphinx:document id="1148 ">
              <title>&lt;![CDATA[Happy Birthday Yash]]></title>
              <link>&lt;![CDATA[/2010/11/28/happy-birthday-yash/]]></link>
              <pubDate>1290952482</pubDate>
              <content>&lt;![CDATA[ If you don’t know then Yash is my son’s name.. Here are some photos for you 🙂
[][1]Decoration of Birthday Cake [][2]Birthday Cake [][3]Birthday Cake ]]></content>
             </sphinx:document>
            
            <sphinx:document id="1149 ">
              <title>&lt;![CDATA[Fundraising for Linux Foundation.]]></title>
              <link>&lt;![CDATA[/2010/11/13/fundraising-linux-foundation/]]></link>
              <pubDate>1289658047</pubDate>
              <content>&lt;![CDATA[ All of us have been benefited by Linux in some way or other and this is due to all the work that is being done by so many organizations and people around the world. I would like to spare some time to tell you about my initiative to raise 100$ for Linux Foundation. Please visit my donation page or click donate on the widget in the bottom of the page. The Linux Foundation will highly appreciate it and so would I.
I hope you would like to give back if you can … I am keeping my fingers crossed.
Related articles Linaro group advances Linux on ARM with 11.10 release (arstechnica.com) Linux Mint Updates; Easy DVD Edition Upgrades, Improved Menus, Integrated Search Engines [Downloads] (lifehacker.com) Wayland Goes Linux (lockergnome.com) China Mobile Joins the Linux Foundation (linux.slashdot.org) ]]></content>
             </sphinx:document>
            
            <sphinx:document id="1150 ">
              <title>&lt;![CDATA[Happy Diwali to all]]></title>
              <link>&lt;![CDATA[/2010/11/05/happy-diwali/]]></link>
              <pubDate>1288976096</pubDate>
              <content>&lt;![CDATA[ Wish all of you a Very Very Happy and Safe Diwali. Hope you enjoy this festival. [][1]Diwali Pooja [][2]Diwali Crackers [][3]Diwali Crackers ]]></content>
             </sphinx:document>
            
            <sphinx:document id="1151 ">
              <title>&lt;![CDATA[Calender for the month of November – free.]]></title>
              <link>&lt;![CDATA[/2010/10/29/calender-month-november-free/]]></link>
              <pubDate>1288334950</pubDate>
              <content>&lt;![CDATA[ Here is the calendar for the month of November that you can use as wallpaper.
[][1]Calendar November Related articles How to Synchronize MSN Calender with iPhone (chasingeyes.com) Wall calender marks time by falling apart (makezine.com) &amp;#8220;Alien Astronauts&amp;#8221; Von Daniken Says UFO Alien &amp;#8216;Gods&amp;#8217; will Return at the End of the Mayan Calender (grantlawrence.blogspot.com) The chokehold of calenders &amp;#8211; via coffeekid (weblog.muledesign.com) ]]></content>
             </sphinx:document>
            
            <sphinx:document id="1152 ">
              <title>&lt;![CDATA[Linux&gt;1% Campaign. Prove that we are more than 1% !]]></title>
              <link>&lt;![CDATA[/2010/10/25/linux1-campaign-prove-that-we-are-more-than-1/]]></link>
              <pubDate>1288014378</pubDate>
              <content>&lt;![CDATA[Linux&amp;gt;1% Campaign. Prove that we are more than 1% !
At http://www.dudalibre.com they are running a campaign to make every owner of computers running Linux register. The aim is to prove that the general assumption, that only 1 % of all computers run Linux is wrong. Everyone is needed if this effort is going to succeed.
http://www.dudalibre.com/en/gnulinuxcounter
The page can also be displayed in Spanish and French
I voted for my distro Fedora, hope you do the same for your linux distribution and prove that Linux does run on high number of desktop.
Related articles &amp;#8220;we are more than 1%&amp;#8221; initiative aims to prove Linux is bigger than you think (omgubuntu.co.uk) Linux Failed? Think Again (lockergnome.com) Linux Problems, Causes &amp; Solutions (teabreak.pk) The State of Linux IO Scheduling For the Desktop? (ask.slashdot.org) ]]></content>
             </sphinx:document>
            
            <sphinx:document id="1153 ">
              <title>&lt;![CDATA[http://ninite.com/linux/makeuseof –  very good collection of utilities for .deb based distro’s]]></title>
              <link>&lt;![CDATA[/2010/10/08/httpninitecomlinuxmakeuseof-good-collection-utilities-deb-based-distros/]]></link>
              <pubDate>1286506402</pubDate>
              <content>&lt;![CDATA[ Head over to http://ninite.com/linux/makeuseof and you will find a nice utility created by the makeuseof guys. This will allow you to select the applications that you want to install and once you have made the selection you can download the unattended installer.
Well, to be frank with you I really do not see the need for this unless you don’t know how to add repositories or install simple stuff. Most of this (no, actually all of this except dropbox in my Fedora setup with the repositories that I have set). Now for one application why would I do that if that was available for Fedora. Any-ways pretty good for newbies, still.
Related articles by Zemanta Ninite for Linux &amp;#8211; debunking the myths (omgubuntu.co.uk) MakeUseOf Linux Pack 2010: All-In-One Easy Installer (makeuseof.com) Ninite For Linux: Install Multiple Applications Without Any Hassle (maketecheasier.com) Ninite Brings No-Hassle Bulk Installations to Linux (e1evation.com) ]]></content>
             </sphinx:document>
            
            <sphinx:document id="1154 ">
              <title>&lt;![CDATA[Performance issues resolved with my blog.]]></title>
              <link>&lt;![CDATA[/2010/10/01/performance-issues-resolved-blog/]]></link>
              <pubDate>1285944797</pubDate>
              <content>&lt;![CDATA[ For last 2-3 weeks there were quite a lot of performance issues with my website. I was looking at the same but could not get enough time to have all of them resolved together. Finally I have spent time on my web hosting and wordpress installation to resolve these issues.
I have taken this opportunity to optimize the blog also. Now the page loading time should be much lesser and you should not be seeing any issues with respect to the site performance or un-availability. If you do see some issues, leave me a comment or contact me through contact me page.
I hope you have a better experience.
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1155 ">
              <title>&lt;![CDATA[Free Calendar for October 2010]]></title>
              <link>&lt;![CDATA[/2010/09/30/free-calendar-october-2010/]]></link>
              <pubDate>1285812992</pubDate>
              <content>&lt;![CDATA[ Hope you like my work with gimp and Nikon D5000 .
&amp;lt;img class=&amp;quot;size-medium wp-image-2501&amp;quot; title=&amp;quot;Calendar October 2010&amp;quot; src=&amp;quot;http://blog.amit-agarwal.co.in/wp-content/uploads/2010/09/calOct10-300x199.jpg&amp;quot; alt=&amp;quot;Calendar October 2010&amp;quot; width=&amp;quot;300&amp;quot; height=&amp;quot;199&amp;quot; /&amp;gt;
&amp;lt;a href=&amp;quot;http://blog.amit-agarwal.co.in/wp-content/uploads/2010/09/calOct10.jpg&amp;quot;&amp;gt;Download Link&amp;lt;div class=&amp;quot;zemanta-pixie&amp;quot; style=&amp;quot;margin-top: 10px; height: 15px;&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zemanta-pixie-a&amp;quot; title=&amp;quot;Enhanced by Zemanta&amp;quot; href=&amp;quot;http://www.zemanta.com/&amp;quot;&amp;gt;&amp;lt;img class=&amp;quot;zemanta-pixie-img&amp;quot; style=&amp;quot;border: medium none; float: right;&amp;quot; src=&amp;quot;http://img.zemanta.com/zemified_e.png?x-id=2104687a-c8b4-4199-944e-69204d710f76&amp;quot; alt=&amp;quot;Enhanced by Zemanta&amp;quot; /&amp;gt;&amp;lt;span class=&amp;quot;zem-script more-related pretty-attribution&amp;quot;&amp;gt;
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1156 ">
              <title>&lt;![CDATA[Hard and Software requirements… can you beat this.]]></title>
              <link>&lt;![CDATA[/2010/09/23/hard-and-software-requirements-can-you-beat-this/]]></link>
              <pubDate>1285250491</pubDate>
              <content>&lt;![CDATA[ The other day, I was looking at OTRS Documentation and guess what, I found a requirement that I could not full-fill. The requirement was for “Hard and Software”.
OTRS Documentation Can you full-fill this requirement?
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1157 ">
              <title>&lt;![CDATA[web page error\’d – Name cannot be less that 5 characters :)]]></title>
              <link>&lt;![CDATA[/2010/09/09/web-page-errord-5-characters/]]></link>
              <pubDate>1284003352</pubDate>
              <content>&lt;![CDATA[ If you have noticed, I have put a new &amp;lt;a class=&amp;quot;zem_slink&amp;quot; title=&amp;quot;Toolbar&amp;quot; rel=&amp;quot;wikipedia&amp;quot; href=&amp;quot;http://en.wikipedia.org/wiki/Toolbar&amp;quot;&amp;gt;tool-bar in the bottom. The tool-bar is delivered from the wibiya cdn and while registering for the service, I got the below error 🙂
&amp;lt;img class=&amp;quot;size-medium wp-image-2446&amp;quot; title=&amp;quot;wibiya error&#39;d&amp;quot; src=&amp;quot;http://blog.amit-agarwal.co.in/wp-content/uploads/2010/08/wibiya-300x162.png&amp;quot; alt=&amp;quot;wibiya error&#39;d&amp;quot; width=&amp;quot;300&amp;quot; height=&amp;quot;162&amp;quot; /&amp;gt;
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1158 ">
              <title>&lt;![CDATA[OpenID for non-SuperUsers]]></title>
              <link>&lt;![CDATA[/2010/09/07/openid-nonsuperusers/]]></link>
              <pubDate>1283902565</pubDate>
              <content>&lt;![CDATA[ Based on the results of my Unobtrusive &amp;lt;a class=&amp;quot;zem_slink&amp;quot; title=&amp;quot;OpenID Foundation&amp;quot; rel=&amp;quot;homepage&amp;quot; href=&amp;quot;http://openid.net&amp;quot;&amp;gt;OpenID post, it is quite evident that there is a lot of partial &amp;lt;a class=&amp;quot;zem_slink&amp;quot; title=&amp;quot;Knowledge&amp;quot; rel=&amp;quot;wikipedia&amp;quot; href=&amp;quot;http://en.wikipedia.org/wiki/Knowledge&amp;quot;&amp;gt;knowledge about OpenID out there. While my knowledge on the subject is far from complete, this post is my attempt to share what I have learned with others.
The target audience for the bulk of this post is people who are capable of adding autodiscovery links to their blog templates, may be able to install a small &amp;lt;a class=&amp;quot;zem_slink&amp;quot; title=&amp;quot;PHP&amp;quot; rel=&amp;quot;homepage&amp;quot; href=&amp;quot;http://www.php.net/&amp;quot;&amp;gt;PHP script and/or know what a &amp;lt;a class=&amp;quot;zem_slink&amp;quot; title=&amp;quot;Hypertext Transfer Protocol&amp;quot; rel=&amp;quot;wikipedia&amp;quot; href=&amp;quot;http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol&amp;quot;&amp;gt;HTTP &amp;lt;a class=&amp;quot;zem_slink&amp;quot; title=&amp;quot;List of HTTP headers&amp;quot; rel=&amp;quot;wikipedia&amp;quot; href=&amp;quot;http://en.wikipedia.org/wiki/List_of_HTTP_headers&amp;quot;&amp;gt;header is.
Claim Your Blog
For starters, one thing I didn’t make clear is that I was expecting people to continue to use their blog or homepage URI’s; what I did not expect was that people would start to use their identity &amp;lt;a class=&amp;quot;zem_slink&amp;quot; title=&amp;quot;Uniform Resource Identifier&amp;quot; rel=&amp;quot;wikipedia&amp;quot; href=&amp;quot;http://en.wikipedia.org/wiki/Uniform_Resource_Identifier&amp;quot;&amp;gt;URIs instead. These people have identities hosted by &amp;lt;a class=&amp;quot;zem_slink&amp;quot; title=&amp;quot;LiveJournal&amp;quot; rel=&amp;quot;homepage&amp;quot; href=&amp;quot;http://www.livejournal.com&amp;quot;&amp;gt;LiveJournal, Verisign, &amp;lt;a class=&amp;quot;zem_slink&amp;quot; title=&amp;quot;myOpenID&amp;quot; rel=&amp;quot;homepage&amp;quot; href=&amp;quot;https://www.myopenid.com/&amp;quot;&amp;gt;MyOpenID, 2idi, &amp;lt;a class=&amp;quot;zem_slink&amp;quot; title=&amp;quot;Technorati&amp;quot; rel=&amp;quot;homepage&amp;quot; href=&amp;quot;http://technorati.com&amp;quot;&amp;gt;Technorati, Vox, TypeKey, and others.
What I expected would happen instead is that people would claim their &amp;lt;a class=&amp;quot;zem_slink&amp;quot; title=&amp;quot;Blog&amp;quot; rel=&amp;quot;wikipedia&amp;quot; href=&amp;quot;http://en.wikipedia.org/wiki/Blog&amp;quot;&amp;gt;blogs using their identity. In OpenID terms, this is called delegation, which sounds scary, but in reality it is just a form of autodiscovery, just like you do for your feed.
If you have an OpenID identity and a blog, then follow these instructions. If you don’t have an OpenID identity, you can get one for free at MyOpenID. Here’s mine.
Given such an identity, copy the following into the head section of your weblog, adjusting the two URIs as appropriate:
&amp;lt;a href=&amp;quot;http://intertwingly.net/blog/2007/01/03/OpenID-for-non-SuperUsers&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;
&amp;lt;a href=&amp;quot;http://intertwingly.net/blog/2007/01/03/OpenID-for-non-SuperUsers&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;Continue Reading.&amp;lt;h6 class=&amp;quot;zemanta-related-title&amp;quot; style=&amp;quot;font-size: 1em;&amp;quot;&amp;gt;Related articles by Zemanta &amp;lt;ul class=&amp;quot;zemanta-article-ul&amp;quot;&amp;gt; &amp;lt;li class=&amp;quot;zemanta-article-ul-li&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;http://www.readwriteweb.com/cloud/2010/08/qa-janrain-on-openid-in-the-fe.php&amp;quot;&amp;gt;Q&amp;amp;A: Janrain&amp;amp;#8217;s CEO Discusses OpenID in the Federal Government (readwriteweb.com) &amp;lt;li class=&amp;quot;zemanta-article-ul-li&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;http://factoryjoe.com/blog/2010/05/16/combing-openid-and-oauth-with-openid-connect/&amp;quot;&amp;gt;Two tastes better together: Combining OpenID and OAuth with OpenID Connect (factoryjoe.com) &amp;lt;li class=&amp;quot;zemanta-article-ul-li&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;http://www.webmonkey.com/2010/05/new-openid-connect-proposal-could-solve-many-of-the-social-webs-woes/&amp;quot;&amp;gt;New &amp;amp;#8217;OpenID Connect&amp;amp;#8217; Proposal Could Solve Many of the Social Web&amp;amp;#8217;s Woes (webmonkey.com) &amp;lt;li class=&amp;quot;zemanta-article-ul-li&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;http://www.rateitall.com/i-980761-openid.aspx&amp;quot;&amp;gt;1 reviews of OpenID (rateitall.com) &amp;lt;div class=&amp;quot;zemanta-pixie&amp;quot; style=&amp;quot;margin-top: 10px; height: 15px;&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zemanta-pixie-a&amp;quot; title=&amp;quot;Enhanced by Zemanta&amp;quot; href=&amp;quot;http://www.zemanta.com/&amp;quot;&amp;gt;&amp;lt;img class=&amp;quot;zemanta-pixie-img&amp;quot; style=&amp;quot;border: medium none; float: right;&amp;quot; src=&amp;quot;http://img.zemanta.com/zemified_e.png?x-id=2d13171a-2ed3-401a-ae24-4ab615201988&amp;quot; alt=&amp;quot;Enhanced by Zemanta&amp;quot; /&amp;gt;&amp;lt;span class=&amp;quot;zem-script more-related pretty-attribution&amp;quot;&amp;gt;
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1159 ">
              <title>&lt;![CDATA[Download Free calendar for September 2010]]></title>
              <link>&lt;![CDATA[/2010/09/05/download-free-calendar-september-2010/]]></link>
              <pubDate>1283706455</pubDate>
              <content>&lt;![CDATA[ Here is something that I got my hands dirty on just now 🙂
&amp;lt;img class=&amp;quot;size-medium wp-image-2499&amp;quot; title=&amp;quot;Calendar September 2010&amp;quot; src=&amp;quot;http://blog.amit-agarwal.co.in/wp-content/uploads/2010/09/calSep10-300x199.jpg&amp;quot; alt=&amp;quot;Calendar September 2010&amp;quot; width=&amp;quot;300&amp;quot; height=&amp;quot;199&amp;quot; /&amp;gt;
&amp;lt;a href=&amp;quot;http://blog.amit-agarwal.co.in/wp-content/uploads/2010/09/calSep10.jpg&amp;quot;&amp;gt;Download link.
Hope you like it.
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1160 ">
              <title>&lt;![CDATA[Happy Janamastmi]]></title>
              <link>&lt;![CDATA[/2010/09/02/happy-janamastmi/]]></link>
              <pubDate>1283393891</pubDate>
              <content>&lt;![CDATA[ Happy Janamastmi to all of you 🙂
&amp;lt;img class=&amp;quot;size-medium wp-image-2470&amp;quot; title=&amp;quot;Janamastmi&amp;quot; src=&amp;quot;http://blog.amit-agarwal.co.in/wp-content/uploads/2010/09/DSC_0405-300x200.jpg&amp;quot; alt=&amp;quot;Janamastmi&amp;quot; width=&amp;quot;300&amp;quot; height=&amp;quot;200&amp;quot; /&amp;gt;
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1161 ">
              <title>&lt;![CDATA[Use the last command\’s output as input to a command without piping and bind to it to a key sequence in bash.]]></title>
              <link>&lt;![CDATA[/2010/09/01/commands-output-input-command-piping-bind-key-sequence-bash/]]></link>
              <pubDate>1283366575</pubDate>
              <content>&lt;![CDATA[ Use the last command&amp;amp;#8217;s output as input to a command without piping and
bind to it to a key sequence in &amp;lt;a class=&amp;quot;zem_slink&amp;quot; title=&amp;quot;Bash (Unix shell)&amp;quot; rel=&amp;quot;homepage&amp;quot; href=&amp;quot;http://tiswww.case.edu/php/chet/bash/bashtop.html&amp;quot;&amp;gt;bash.
1
&amp;lt;td&amp;gt; &amp;lt;div class=&amp;quot;bash codecolorer&amp;quot;&amp;gt; &amp;amp;nbsp;&amp;lt;span class=&amp;quot;kw3&amp;quot;&amp;gt;bind&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;co3&amp;quot;&amp;gt;\&#39;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;st0&amp;quot;&amp;gt;&amp;quot;\\C-h&amp;quot;&amp;lt;/span&amp;gt;: &amp;lt;span class=&amp;quot;st0&amp;quot;&amp;gt;&amp;quot;\\&amp;lt;span class=&amp;quot;es5&amp;quot;&amp;gt;`fc\\ \\-s\\`&amp;lt;/span&amp;gt;&amp;quot;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;co3&amp;quot;&amp;gt;\&#39;&amp;lt;/span&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; My comment : fc is the fix command of the bash builtin.
This is similar to using `!!` or
In bash 4.1 it seems you can bind directly to a shell command, but I&amp;amp;#8217;m
not running that version.
View this command to comment, vote or add to favourites View all commands by rthemocap commandlinefu.com
by David Winterbottom (codeinthehole.com)
&amp;lt;a class=&amp;quot;zem_slink&amp;quot; title=&amp;quot;Uniform Resource Locator&amp;quot; rel=&amp;quot;wikipedia&amp;quot; href=&amp;quot;http://en.wikipedia.org/wiki/Uniform_Resource_Locator&amp;quot;&amp;gt;URL:
&amp;lt;a href=&amp;quot;http://feedproxy.google.com/~r/Command-line-fu/~3/Y59sGmIg24s/use-the-last-commands-output-as-input-to-a-command-without-piping-and-bind-to-it-to-a-key-sequence-in-bash.&amp;quot;&amp;gt;http://feedproxy.google.com/~r/Command-line-fu/~3/Y59sGmIg24s/use-the-last-commands-output-as-input-to-a-command-without-piping-and-bind-to-it-to-a-key-sequence-in-bash.&amp;lt;h6 class=&amp;quot;zemanta-related-title&amp;quot; style=&amp;quot;font-size: 1em;&amp;quot;&amp;gt;Related articles by Zemanta &amp;lt;ul class=&amp;quot;zemanta-article-ul&amp;quot;&amp;gt; &amp;lt;li class=&amp;quot;zemanta-article-ul-li&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;http://www.commandlinefu.com/commands/view/5034/google-translate&amp;quot;&amp;gt;Google Translate | commandlinefu.com (commandlinefu.com) &amp;lt;li class=&amp;quot;zemanta-article-ul-li&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;http://www.nofluffjuststuff.com/blog/matthew_mccullough/2010/08/git_bash_prompt&amp;quot;&amp;gt;Git Bash Prompt (nofluffjuststuff.com) &amp;lt;li class=&amp;quot;zemanta-article-ul-li&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;http://www.innovationsts.com/blog/?p=1395&amp;quot;&amp;gt;Writing Better Shell Scripts – Part 1 | Innovations Technology Solutions | Blog (innovationsts.com) &amp;lt;li class=&amp;quot;zemanta-article-ul-li&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;http://blog.extracheese.org/2010/05/the-tar-pipe.html&amp;quot;&amp;gt;The Tar Pipe (extracheese.org) &amp;lt;div class=&amp;quot;zemanta-pixie&amp;quot; style=&amp;quot;margin-top: 10px; height: 15px;&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zemanta-pixie-a&amp;quot; title=&amp;quot;Enhanced by Zemanta&amp;quot; href=&amp;quot;http://www.zemanta.com/&amp;quot;&amp;gt;&amp;lt;img class=&amp;quot;zemanta-pixie-img&amp;quot; style=&amp;quot;border: medium none; float: right;&amp;quot; src=&amp;quot;http://img.zemanta.com/zemified_e.png?x-id=519b6bb2-2552-40a7-a9dc-c70e8d4afe3d&amp;quot; alt=&amp;quot;Enhanced by Zemanta&amp;quot; /&amp;gt;&amp;lt;span class=&amp;quot;zem-script more-related pretty-attribution&amp;quot;&amp;gt;
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1162 ">
              <title>&lt;![CDATA[New entry – My DSLR from Nikon… just loving it.]]></title>
              <link>&lt;![CDATA[/2010/08/29/entry-dslr-nikon-loving/]]></link>
              <pubDate>1283071319</pubDate>
              <content>&lt;![CDATA[ For last couple of months, I was thinking of taking a &amp;lt;a class=&amp;quot;zem_slink&amp;quot; title=&amp;quot;Digital single-lens reflex camera&amp;quot; rel=&amp;quot;wikipedia&amp;quot; href=&amp;quot;http://en.wikipedia.org/wiki/Digital_single-lens_reflex_camera&amp;quot;&amp;gt;DSLR. I had a entry level DSLR from &amp;lt;a class=&amp;quot;zem_slink&amp;quot; title=&amp;quot;Fujifilm&amp;quot; rel=&amp;quot;homepage&amp;quot; href=&amp;quot;http://www.fujifilm.com/&amp;quot;&amp;gt;FujiFilm &amp;lt;a class=&amp;quot;zem_slink&amp;quot; title=&amp;quot;FinePix S9100&amp;quot; rel=&amp;quot;wikipedia&amp;quot; href=&amp;quot;http://en.wikipedia.org/wiki/FinePix_S9100&amp;quot;&amp;gt;S9600(which now I am planning to sell off). This is a very nice &amp;lt;a class=&amp;quot;zem_slink&amp;quot; title=&amp;quot;Camera&amp;quot; rel=&amp;quot;wikipedia&amp;quot; href=&amp;quot;http://en.wikipedia.org/wiki/Camera&amp;quot;&amp;gt;camera indeed, but I had to have a better camera. So, I searched and researched and finally it came down to list of few things I wanted: a camera with couple of features, a &amp;lt;a class=&amp;quot;zem_slink&amp;quot; title=&amp;quot;Zoom lens&amp;quot; rel=&amp;quot;wikipedia&amp;quot; href=&amp;quot;http://en.wikipedia.org/wiki/Zoom_lens&amp;quot;&amp;gt;zoom lens to begin with. So, after the discussion with one of my friends (Murali), thanks to him I have got my SLR (&amp;lt;a class=&amp;quot;zem_slink&amp;quot; title=&amp;quot;Nikon D5000&amp;quot; rel=&amp;quot;wikipedia&amp;quot; href=&amp;quot;http://en.wikipedia.org/wiki/Nikon_D5000&amp;quot;&amp;gt;Nikon D5000). Its a dream come true. Here are some snaps of the box.
&amp;lt;img class=&amp;quot;size-medium wp-image-2450&amp;quot; title=&amp;quot;Nikon D5000 Box Pack&amp;quot; src=&amp;quot;http://blog.amit-agarwal.co.in/wp-content/uploads/2010/08/640x480-DSCN01811-225x300.jpg&amp;quot; alt=&amp;quot;Nikon D5000 Box Pack&amp;quot; width=&amp;quot;225&amp;quot; height=&amp;quot;300&amp;quot; /&amp;gt;
&amp;lt;img class=&amp;quot;size-medium wp-image-2451&amp;quot; title=&amp;quot;Nikon D5000 Box Pack&amp;quot; src=&amp;quot;http://blog.amit-agarwal.co.in/wp-content/uploads/2010/08/640x480-DSCN0184-300x225.jpg&amp;quot; alt=&amp;quot;Nikon D5000 Box Pack&amp;quot; width=&amp;quot;300&amp;quot; height=&amp;quot;225&amp;quot; /&amp;gt;
&amp;lt;img class=&amp;quot;size-medium wp-image-2452&amp;quot; title=&amp;quot;Nikon D5000&amp;quot; src=&amp;quot;http://blog.amit-agarwal.co.in/wp-content/uploads/2010/08/640x480-DSCN0185-300x225.jpg&amp;quot; alt=&amp;quot;Nikon D5000&amp;quot; width=&amp;quot;300&amp;quot; height=&amp;quot;225&amp;quot; /&amp;gt;
I will post few more posts on the first few photos from my SLR 🙂
Here is the snap of the camera :
&amp;lt;img title=&amp;quot;D5000 Camera&amp;quot; src=&amp;quot;http://www.nikon.co.in/products/1316/d51d9da185/D5000_LCD_4_i.jpg&amp;quot; alt=&amp;quot;D5000 Camera&amp;quot; width=&amp;quot;500&amp;quot; height=&amp;quot;375&amp;quot; /&amp;gt;
&amp;lt;img title=&amp;quot;D5000 Front&amp;quot; src=&amp;quot;http://www.nikon.co.in/products/1316/d51d9da185/D5000_18_55_front34l_i.jpg&amp;quot; alt=&amp;quot;D5000 Front&amp;quot; width=&amp;quot;500&amp;quot; height=&amp;quot;375&amp;quot; /&amp;gt;
&amp;lt;img title=&amp;quot;D5000 Back&amp;quot; src=&amp;quot;http://www.nikon.co.in/products/1316/d51d9da185/D5000_back_1_i.jpg&amp;quot; alt=&amp;quot;D5000 Back&amp;quot; width=&amp;quot;500&amp;quot; height=&amp;quot;375&amp;quot; /&amp;gt;
And the features:
New Vari-angle monitor &amp;lt;a class=&amp;quot;zem_slink&amp;quot; title=&amp;quot;Nikon DX format&amp;quot; rel=&amp;quot;wikipedia&amp;quot; href=&amp;quot;http://en.wikipedia.org/wiki/Nikon_DX_format&amp;quot;&amp;gt;Nikon DX-format 12.3-megapixel &amp;lt;a class=&amp;quot;zem_slink&amp;quot; title=&amp;quot;Active pixel sensor&amp;quot; rel=&amp;quot;wikipedia&amp;quot; href=&amp;quot;http://en.wikipedia.org/wiki/Active_pixel_sensor&amp;quot;&amp;gt;CMOS &amp;lt;a class=&amp;quot;zem_slink&amp;quot; title=&amp;quot;Image sensor&amp;quot; rel=&amp;quot;wikipedia&amp;quot; href=&amp;quot;http://en.wikipedia.org/wiki/Image_sensor&amp;quot;&amp;gt;image sensor Specially designed EXPEED &amp;lt;a class=&amp;quot;zem_slink&amp;quot; title=&amp;quot;Image processing&amp;quot; rel=&amp;quot;wikipedia&amp;quot; href=&amp;quot;http://en.wikipedia.org/wiki/Image_processing&amp;quot;&amp;gt;image processing system Live View shooting Movie clips with D-Movie 19 Scene Modes Scene Recognition System with Face Detection System Active D-Lighting 11-point &amp;lt;a class=&amp;quot;zem_slink&amp;quot; title=&amp;quot;Autofocus&amp;quot; rel=&amp;quot;wikipedia&amp;quot; href=&amp;quot;http://en.wikipedia.org/wiki/Autofocus&amp;quot;&amp;gt;AF system with Multi-CAM 1000 autofocus module Picture Control System Photo editing Nikon Integrated Dust Reduction System And the technical specification :&amp;lt;table border=&amp;quot;0&amp;quot; cellspacing=&amp;quot;1&amp;quot; cellpadding=&amp;quot;7&amp;quot; width=&amp;quot;100%&amp;quot;&amp;gt; &amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt; &amp;lt;td width=&amp;quot;20%&amp;quot; bgcolor=&amp;quot;#ffffff&amp;quot;&amp;gt;
Type of Camera &amp;lt;td bgcolor=&amp;quot;#ffffff&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zem_slink&amp;quot; title=&amp;quot;Single-lens reflex camera&amp;quot; rel=&amp;quot;wikipedia&amp;quot; href=&amp;quot;http://en.wikipedia.org/wiki/Single-lens_reflex_camera&amp;quot;&amp;gt;Single-lens reflex &amp;lt;a class=&amp;quot;zem_slink&amp;quot; title=&amp;quot;Digital camera&amp;quot; rel=&amp;quot;wikipedia&amp;quot; href=&amp;quot;http://en.wikipedia.org/wiki/Digital_camera&amp;quot;&amp;gt;digital camera &amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt; &amp;lt;td width=&amp;quot;20%&amp;quot; bgcolor=&amp;quot;#ffffff&amp;quot;&amp;gt;Effective Pixels &amp;lt;td bgcolor=&amp;quot;#ffffff&amp;quot;&amp;gt;12.3 million &amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt; &amp;lt;td width=&amp;quot;20%&amp;quot; bgcolor=&amp;quot;#ffffff&amp;quot;&amp;gt;Image Sensor &amp;lt;td bgcolor=&amp;quot;#ffffff&amp;quot;&amp;gt;Nikon DX format (23.6 x 15.8 mm) CMOS sensor &amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt; &amp;lt;td width=&amp;quot;20%&amp;quot; bgcolor=&amp;quot;#ffffff&amp;quot;&amp;gt;Image Size (Pixels) &amp;lt;td bgcolor=&amp;quot;#ffffff&amp;quot;&amp;gt;4,288 x 2,848 [L], 3,216 x 2,136 [M], 2,144 x 1,424 [S]
D-movie: 1280 x 720 / 24fps, 640 x 480 / 24fps, 320 x 240 / 24fps &amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt; &amp;lt;td width=&amp;quot;20%&amp;quot; bgcolor=&amp;quot;#ffffff&amp;quot;&amp;gt;Sensitivity &amp;lt;td bgcolor=&amp;quot;#ffffff&amp;quot;&amp;gt;ISO 200 to 3,200 in steps of 1/3 EV, plus HI-0.3, HI-0.7, HI-1 (ISO 6400); LO-0.3, LO-0.7 and LO-1 (ISO 100) &amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt; &amp;lt;td width=&amp;quot;20%&amp;quot; bgcolor=&amp;quot;#ffffff&amp;quot;&amp;gt;File Format &amp;lt;td bgcolor=&amp;quot;#ffffff&amp;quot;&amp;gt;NEF (12 bit compressed RAW)
JPEG (Baseline-compliant)
AVI movie (Motion JPEG compression format with monaural sound) &amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt; &amp;lt;td width=&amp;quot;20%&amp;quot; bgcolor=&amp;quot;#ffffff&amp;quot;&amp;gt;Storage Media &amp;lt;td bgcolor=&amp;quot;#ffffff&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zem_slink&amp;quot; title=&amp;quot;Secure Digital&amp;quot; rel=&amp;quot;wikipedia&amp;quot; href=&amp;quot;http://en.wikipedia.org/wiki/Secure_Digital&amp;quot;&amp;gt;SD memory card (SDHC compliant) &amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt; &amp;lt;td width=&amp;quot;20%&amp;quot; bgcolor=&amp;quot;#ffffff&amp;quot;&amp;gt;Shooting Modes &amp;lt;td bgcolor=&amp;quot;#ffffff&amp;quot;&amp;gt;1) Single frame
2) Continuous: 4fps
3) Self-timer
4) Delayed remote
5) Quick-response remote
6) Silent shooting
7) D-Movie &amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt; &amp;lt;td width=&amp;quot;20%&amp;quot; bgcolor=&amp;quot;#ffffff&amp;quot;&amp;gt;White Balance &amp;lt;td bgcolor=&amp;quot;#ffffff&amp;quot;&amp;gt;Auto (hybrid control with image sensor and 420-segment RGB sensor) 12 manual modes, 31 color temperature settings, preset manual, fine tuning, white-balance bracketing &amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt; &amp;lt;td width=&amp;quot;20%&amp;quot; bgcolor=&amp;quot;#ffffff&amp;quot;&amp;gt;LCD Monitor &amp;lt;td bgcolor=&amp;quot;#ffffff&amp;quot;&amp;gt;2.7&amp;amp;#8221;, 230,000-dot, low-temperature polysilicon TFT vari-angle LCD &amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt; &amp;lt;td width=&amp;quot;20%&amp;quot; bgcolor=&amp;quot;#ffffff&amp;quot;&amp;gt;Playback Function &amp;lt;td bgcolor=&amp;quot;#ffffff&amp;quot;&amp;gt;1) Full-frame, 2) Thumbnail (4/9/72, calendar), 3) playback zoom, 4) RGB histogram display, 5) RGB histogram for portion of the image visible in the monitor with playback zoom, 6) Slide show, 7) Movie playback, 8) stop-motion movies &amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt; &amp;lt;td width=&amp;quot;20%&amp;quot; bgcolor=&amp;quot;#ffffff&amp;quot;&amp;gt;Delete Function &amp;lt;td bgcolor=&amp;quot;#ffffff&amp;quot;&amp;gt;1) Card format, 2) All frames delete, 3) Selected frames delete &amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt; &amp;lt;td width=&amp;quot;20%&amp;quot; bgcolor=&amp;quot;#ffffff&amp;quot;&amp;gt;Interface &amp;lt;td bgcolor=&amp;quot;#ffffff&amp;quot;&amp;gt;USB 2.0 (High-speed): MTP/PT, GP-1 (GPS Unit) &amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt; &amp;lt;td width=&amp;quot;20%&amp;quot; bgcolor=&amp;quot;#ffffff&amp;quot;&amp;gt;Picture Angle (in 35mm [135] format equivalent) &amp;lt;td bgcolor=&amp;quot;#ffffff&amp;quot;&amp;gt;Approx. 1.5x lens focal length &amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt; &amp;lt;td width=&amp;quot;20%&amp;quot; bgcolor=&amp;quot;#ffffff&amp;quot;&amp;gt;Viewfinder &amp;lt;td bgcolor=&amp;quot;#ffffff&amp;quot;&amp;gt;Eye-level penta-Dach mirror type; built-in diopter adjustment (-1.7 to &#43;0.5m-1) &amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt; &amp;lt;td width=&amp;quot;20%&amp;quot; bgcolor=&amp;quot;#ffffff&amp;quot;&amp;gt;Focusing Screen &amp;lt;td bgcolor=&amp;quot;#ffffff&amp;quot;&amp;gt;Type B Brite View clear matte screen Mark V with superimposed focus brackets &amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt; &amp;lt;td width=&amp;quot;20%&amp;quot; bgcolor=&amp;quot;#ffffff&amp;quot;&amp;gt;Viewfinder Frame Coverage/Magnification (with 50mm lens at infinity; -1.0 m-1) &amp;lt;td bgcolor=&amp;quot;#ffffff&amp;quot;&amp;gt;Approx. 95%/ Approx. 0.78x &amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt; &amp;lt;td width=&amp;quot;20%&amp;quot; bgcolor=&amp;quot;#ffffff&amp;quot;&amp;gt;Autofocus &amp;lt;td bgcolor=&amp;quot;#ffffff&amp;quot;&amp;gt;TTL phase detection by Nikon Multi-CAM 1000 autofocus module with AF-assist (range approx. 0.5-3m/1ft 8 in. – 9ft 10 in.); Detection range: -1 to &#43;19 EV (ISO 100 at (ISO 100 at 20°C/68°F) &amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt; &amp;lt;td width=&amp;quot;20%&amp;quot; bgcolor=&amp;quot;#ffffff&amp;quot;&amp;gt;Focus Modes &amp;lt;td bgcolor=&amp;quot;#ffffff&amp;quot;&amp;gt;1) Autofocus (AF): Single-servo AF (AF-S); Continuous servo AF (AF-C); Auto AF-S/AF-C selection (AF-A), 2) Manual focus (MF) can be selected from 11 focus point &amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt; &amp;lt;td width=&amp;quot;20%&amp;quot; bgcolor=&amp;quot;#ffffff&amp;quot;&amp;gt;Exposure Metering System &amp;lt;td bgcolor=&amp;quot;#ffffff&amp;quot;&amp;gt;1) Scene-recognition system compatible 3D color matrix metering ? (type G and D lenses), color matrix metering II (other CPU lenses)
2) Center-weighted (weight given to 8-mm circle in center of frame)
3) spot metering (meters 3.5-mm circle centered on selected focus point) &amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt; &amp;lt;td width=&amp;quot;20%&amp;quot; bgcolor=&amp;quot;#ffffff&amp;quot;&amp;gt;Exposure Metering Range (at normal temperature [68°F/20°C], ISO 100 equivalent, f/1.4 lens) &amp;lt;td bgcolor=&amp;quot;#ffffff&amp;quot;&amp;gt;1) 0 to 20 EV (3D-Color Matrix or Center-weighted metering)
2) 2 to 20 EV (Spot metering) &amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt; &amp;lt;td width=&amp;quot;20%&amp;quot; bgcolor=&amp;quot;#ffffff&amp;quot;&amp;gt;Exposure Control &amp;lt;td bgcolor=&amp;quot;#ffffff&amp;quot;&amp;gt;1) Digital Vari-Program (Auto, Auto [Flash Off], Portrait, Landscape, Child, Sports, Close Up, Night Portrait),
2) Programmed Auto [P],
3) Shutter-Priority Auto [S],
4) Aperture Priority Auto [A],
5) Manual [M],
6) Scene modes applied with mode dial set to SCENE : Night landscape, Party/Indoor, Beach/Snow, Sunset, Dusk/Dawn, Pet portrait, Candlelight, Blossom, Autumn colors, Food, Sihouette, High key, Low key &amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt; &amp;lt;td width=&amp;quot;20%&amp;quot; bgcolor=&amp;quot;#ffffff&amp;quot;&amp;gt;Auto Exposure Bracketing &amp;lt;td bgcolor=&amp;quot;#ffffff&amp;quot;&amp;gt;3 exposures in increments, ?2.0– &#43;2.0 (in steps of 1/2 or 1/3 EV) &amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt; &amp;lt;td width=&amp;quot;20%&amp;quot; bgcolor=&amp;quot;#ffffff&amp;quot;&amp;gt;Shutter &amp;lt;td bgcolor=&amp;quot;#ffffff&amp;quot;&amp;gt;Electronically controlled vertical-travel focal plane shutter, 30 to 1/4000sec in steps of 1/3 EV plus bulb &amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt; &amp;lt;td width=&amp;quot;20%&amp;quot; bgcolor=&amp;quot;#ffffff&amp;quot;&amp;gt;Sync Contact &amp;lt;td bgcolor=&amp;quot;#ffffff&amp;quot;&amp;gt;X-contact only; flash synchronization at up to 1/200 sec &amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt; &amp;lt;td width=&amp;quot;20%&amp;quot; bgcolor=&amp;quot;#ffffff&amp;quot;&amp;gt;Flash Control &amp;lt;td bgcolor=&amp;quot;#ffffff&amp;quot;&amp;gt;1) i-TTL flash control by 420-segment RGB sensor; i-TTL balanced fill-flash for digital SLR, standard i-TTL flash for digital SLR &amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt; &amp;lt;td width=&amp;quot;20%&amp;quot; bgcolor=&amp;quot;#ffffff&amp;quot;&amp;gt;Flash Sync Modes &amp;lt;td bgcolor=&amp;quot;#ffffff&amp;quot;&amp;gt;1) Front-curtain sync,
2) Red-eye reduction,
3) Slow sync with red-eye reduction,
4) Slow sync, rear-curtain sync &amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt; &amp;lt;td width=&amp;quot;20%&amp;quot; bgcolor=&amp;quot;#ffffff&amp;quot;&amp;gt;Self-Timer &amp;lt;td bgcolor=&amp;quot;#ffffff&amp;quot;&amp;gt;Electronically controlled timer with duration of 2, 5, 10 or 20 s. &amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt; &amp;lt;td width=&amp;quot;20%&amp;quot; bgcolor=&amp;quot;#ffffff&amp;quot;&amp;gt;Depth of Field Preview Button &amp;lt;td bgcolor=&amp;quot;#ffffff&amp;quot;&amp;gt;No &amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt; &amp;lt;td width=&amp;quot;20%&amp;quot; bgcolor=&amp;quot;#ffffff&amp;quot;&amp;gt;Remote Control &amp;lt;td bgcolor=&amp;quot;#ffffff&amp;quot;&amp;gt;Via Wireless Remote Control ML-L3 (optional) &amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt; &amp;lt;td width=&amp;quot;20%&amp;quot; bgcolor=&amp;quot;#ffffff&amp;quot;&amp;gt;GPS &amp;lt;td bgcolor=&amp;quot;#ffffff&amp;quot;&amp;gt;via GP-1 GPS Unit (optional) &amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt; &amp;lt;td width=&amp;quot;20%&amp;quot; bgcolor=&amp;quot;#ffffff&amp;quot;&amp;gt;Supported Languages &amp;lt;td bgcolor=&amp;quot;#ffffff&amp;quot;&amp;gt;Total of 17 languages: Chinese (Simplified and Traditional), Danish, Dutch, English, Finnish, French, German, Italian, Japanese, Korean, Norwegian, Polish, Portuguese, Russian, Spanish, Swedish &amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt; &amp;lt;td width=&amp;quot;20%&amp;quot; bgcolor=&amp;quot;#ffffff&amp;quot;&amp;gt;Power Requirements &amp;lt;td bgcolor=&amp;quot;#ffffff&amp;quot;&amp;gt;Rechargeable EN-EL9a Li-ion battery, EH-5a AC adapter (available separately; requires optional EP-5 AC adapter connector; EN-EL9 also supported) &amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt; &amp;lt;td width=&amp;quot;20%&amp;quot; bgcolor=&amp;quot;#ffffff&amp;quot;&amp;gt;Battery Life (on a fully charged battery) &amp;lt;td bgcolor=&amp;quot;#ffffff&amp;quot;&amp;gt;Approx. 510 shots &amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt; &amp;lt;td width=&amp;quot;20%&amp;quot; bgcolor=&amp;quot;#ffffff&amp;quot;&amp;gt;Tripod Socket &amp;lt;td bgcolor=&amp;quot;#ffffff&amp;quot;&amp;gt;1/4 in. (ISO1222) &amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt; &amp;lt;td width=&amp;quot;20%&amp;quot; bgcolor=&amp;quot;#ffffff&amp;quot;&amp;gt;Dimensions &amp;lt;td bgcolor=&amp;quot;#ffffff&amp;quot;&amp;gt;Approx. 127 x 104 x 80mm &amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt; &amp;lt;td width=&amp;quot;20%&amp;quot; bgcolor=&amp;quot;#ffffff&amp;quot;&amp;gt;Weight (without battery, memory card or body cap) &amp;lt;td bgcolor=&amp;quot;#ffffff&amp;quot;&amp;gt;Approx. 560g &amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt; &amp;lt;td width=&amp;quot;20%&amp;quot; bgcolor=&amp;quot;#ffffff&amp;quot;&amp;gt;Supplied Accessories (may differ by country or area) &amp;lt;td bgcolor=&amp;quot;#ffffff&amp;quot;&amp;gt;Rechargeable Li-ion battery EN-EL9a, Quick charger MH-23, USB cable UC-E6, Rubber Eyecup DK-24, Camera strap AN-DC3, Body cap, Eyepiece cap DK-5, Software Suite CD-ROM, AV Cable EG-CP14 &amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt; &amp;lt;td width=&amp;quot;20%&amp;quot; bgcolor=&amp;quot;#ffffff&amp;quot;&amp;gt;Other Features &amp;lt;td bgcolor=&amp;quot;#ffffff&amp;quot;&amp;gt;Vari-angle LCD monitor with range of movement: 0°–180° for opening/closing (?90°–180° for rotation),Integrated Dust Reductions System, Graphic User Interface, Live view (with face-priority AF), D-Movie &amp;lt;div class=&amp;quot;zemanta-pixie&amp;quot; style=&amp;quot;margin-top: 10px; height: 15px;&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zemanta-pixie-a&amp;quot; title=&amp;quot;Enhanced by Zemanta&amp;quot; href=&amp;quot;http://www.zemanta.com/&amp;quot;&amp;gt;&amp;lt;img class=&amp;quot;zemanta-pixie-img&amp;quot; style=&amp;quot;border: medium none; float: right;&amp;quot; src=&amp;quot;http://img.zemanta.com/zemified_e.png?x-id=4329cf03-c03e-4551-8a27-c181db4ee368&amp;quot; alt=&amp;quot;Enhanced by Zemanta&amp;quot; /&amp;gt;&amp;lt;span class=&amp;quot;zem-script more-related pretty-attribution&amp;quot;&amp;gt;
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1163 ">
              <title>&lt;![CDATA[Zabbix error\’d — just for fun]]></title>
              <link>&lt;![CDATA[/2010/08/28/zabbix-errord-fun/]]></link>
              <pubDate>1283020069</pubDate>
              <content>&lt;![CDATA[ &amp;lt;img class=&amp;quot;size-medium wp-image-2432&amp;quot; title=&amp;quot;History-Zabbix Error&#39;d&amp;quot; src=&amp;quot;http://blog.amit-agarwal.co.in/wp-content/uploads/2010/08/History-Zabbix-300x151.jpg&amp;quot; alt=&amp;quot;History-Zabbix Error&#39;d&amp;quot; width=&amp;quot;300&amp;quot; height=&amp;quot;151&amp;quot; /&amp;gt;
I was woking on Zabbix some days back and here&amp;amp;#8217;s a screenshot that I took from Zabbix running on &amp;lt;a class=&amp;quot;zem_slink&amp;quot; title=&amp;quot;Red Hat&amp;quot; rel=&amp;quot;homepage&amp;quot; href=&amp;quot;http://www.redhat.com&amp;quot;&amp;gt;Red Hat Enterprise &amp;lt;a class=&amp;quot;zem_slink&amp;quot; title=&amp;quot;Linux&amp;quot; rel=&amp;quot;homepage&amp;quot; href=&amp;quot;http://www.kernel.org/&amp;quot;&amp;gt;Linux 5. Pretty interesting to see that there is a graph with all the values on the &amp;lt;a class=&amp;quot;zem_slink&amp;quot; title=&amp;quot;Cartesian coordinate system&amp;quot; rel=&amp;quot;wikipedia&amp;quot; href=&amp;quot;http://en.wikipedia.org/wiki/Cartesian_coordinate_system&amp;quot;&amp;gt;Y-axis as 3.26GB and still there is a trend on the graph. How many times did you get such graph 🙂
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1164 ">
              <title>&lt;![CDATA[Happy Independence Day]]></title>
              <link>&lt;![CDATA[/2010/08/15/happy-independence-day/]]></link>
              <pubDate>1281842609</pubDate>
              <content>&lt;![CDATA[ Happy Independence Day to all.
&amp;lt;a href=&amp;quot;http://blog.amit-agarwal.co.in/wp-content/uploads/2010/08/DSCN1316.jpg&amp;quot;&amp;gt;&amp;lt;img class=&amp;quot;size-medium wp-image-2374&amp;quot; title=&amp;quot;Independence Day Celebration in School&amp;quot; src=&amp;quot;http://blog.amit-agarwal.co.in/wp-content/uploads/2010/08/DSCN1316-300x205.jpg&amp;quot; alt=&amp;quot;Independence Day Celebration in School&amp;quot; width=&amp;quot;300&amp;quot; height=&amp;quot;205&amp;quot; /&amp;gt;&amp;lt;div class=&amp;quot;zemanta-pixie&amp;quot; style=&amp;quot;margin-top: 10px; height: 15px;&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zemanta-pixie-a&amp;quot; title=&amp;quot;Enhanced by Zemanta&amp;quot; href=&amp;quot;http://www.zemanta.com/&amp;quot;&amp;gt;&amp;lt;img class=&amp;quot;zemanta-pixie-img&amp;quot; style=&amp;quot;border: medium none; float: right;&amp;quot; src=&amp;quot;http://img.zemanta.com/zemified_e.png?x-id=a412647a-18c4-4f00-a62f-93de0d55329f&amp;quot; alt=&amp;quot;Enhanced by Zemanta&amp;quot; /&amp;gt;&amp;lt;span class=&amp;quot;zem-script more-related pretty-attribution&amp;quot;&amp;gt;
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1165 ">
              <title>&lt;![CDATA[SMS from my site - free worldwide.]]></title>
              <link>&lt;![CDATA[/2010/07/27/sms-site-free-worldwide/]]></link>
              <pubDate>1280245884</pubDate>
              <content>&lt;![CDATA[Thanks to Free widget, now you can send worldwide free SMS from the widgets in my blog.
Hope it helps you.
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1166 ">
              <title>&lt;![CDATA[PuTTY alternatives - AlternativeTo.net]]></title>
              <link>&lt;![CDATA[/2010/07/27/putty-alternatives-alternativeto-net-2/]]></link>
              <pubDate>1280203775</pubDate>
              <content>&lt;![CDATA[ I like PuTTY quite a bit but do not like the fact that it does not have any tab feature. So, if I am working on multiple machines then un-necessarily I will have too many windows open cluttering my desktop. So, here is the result of my quest to find the alternative:
&amp;lt;a href=&amp;quot;http://alternativeto.net/desktop/putty/&amp;quot;&amp;gt;http://alternativeto.net/desktop/putty/&amp;lt;h6 class=&amp;quot;zemanta-related-title&amp;quot; style=&amp;quot;font-size: 1em;&amp;quot;&amp;gt;Related articles by Zemanta &amp;lt;ul class=&amp;quot;zemanta-article-ul&amp;quot;&amp;gt; &amp;lt;li class=&amp;quot;zemanta-article-ul-li&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;http://blog.amit-agarwal.co.in/2010/06/05/putty-ssh-without-password/&amp;quot;&amp;gt;PuTTY ssh without password (amit-agarwal.co.in) &amp;lt;li class=&amp;quot;zemanta-article-ul-li&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;http://www.downloadsquad.com/2010/05/18/kitty-is-win32-native-putty/?zemanta-tracking&amp;quot;&amp;gt;KiTTY is Win32-native PuTTY (downloadsquad.com) &amp;lt;li class=&amp;quot;zemanta-article-ul-li&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;http://lifehacker.com/5541871/kitty-adds-session-saving-portability-and-more-to-putty&amp;quot;&amp;gt;KiTTY Adds Session Saving, Portability, and More to PuTTY [Downloads] (lifehacker.com) &amp;lt;li class=&amp;quot;zemanta-article-ul-li&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;http://blog.amit-agarwal.co.in/2010/04/11/putty-export-client-display-on-login-for-opening-x-application-and-terminal/&amp;quot;&amp;gt;PuTTY export client display on login for opening X application and terminal. (amit-agarwal.co.in) &amp;lt;div class=&amp;quot;zemanta-pixie&amp;quot; style=&amp;quot;margin-top: 10px; height: 15px;&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zemanta-pixie-a&amp;quot; title=&amp;quot;Enhanced by Zemanta&amp;quot; href=&amp;quot;http://www.zemanta.com/&amp;quot;&amp;gt;&amp;lt;img class=&amp;quot;zemanta-pixie-img&amp;quot; style=&amp;quot;border: medium none; float: right;&amp;quot; src=&amp;quot;http://blog.amit-agarwal.co.in/wp-content/uploads/2010/08/zemified_e3.png&amp;quot; alt=&amp;quot;Enhanced by Zemanta&amp;quot; /&amp;gt;&amp;lt;span class=&amp;quot;zem-script more-related pretty-attribution&amp;quot;&amp;gt;
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1167 ">
              <title>&lt;![CDATA[How To Quickly Check If You’re Running A Javascript Enabled Browser]]></title>
              <link>&lt;![CDATA[/2010/07/18/how-to-quickly-check-if-you%E2%80%99re-running-a-javascript-enabled-browser/]]></link>
              <pubDate>1279460328</pubDate>
              <content>&lt;![CDATA[ &amp;lt;a href=&amp;quot;http://www.makeuseof.com/tag/what-is-javascript-how-works&amp;quot;&amp;gt;Javascript is an integral part of &amp;lt;a class=&amp;quot;zem_slink&amp;quot; title=&amp;quot;Web browser&amp;quot; rel=&amp;quot;wikipedia&amp;quot; href=&amp;quot;http://en.wikipedia.org/wiki/Web_browser&amp;quot;&amp;gt;web browsing and a lot of websites use Javascript for &amp;lt;a class=&amp;quot;zem_slink&amp;quot; title=&amp;quot;Web application&amp;quot; rel=&amp;quot;wikipedia&amp;quot; href=&amp;quot;http://en.wikipedia.org/wiki/Web_application&amp;quot;&amp;gt;web applications and functions. A question I get at AskTheAdmin.com often is how I can tell if I am using a Javascript enabled browser. I have two quick methods to tell if the browser you are using does or does not support Javascript.
The first thing I recommend is browsing over to a special Java test website called &amp;lt;a href=&amp;quot;http://www.javatester.org/enabled.html&amp;quot;&amp;gt;JavaTester. There is code on this page that will tell you if you can run &amp;lt;a href=&amp;quot;http://www.makeuseof.com/tag/wonder-beauty-java-applets&amp;quot;&amp;gt;Java Applets and if Javascript is enabled and supported by your browser. The answers will be shown to you on the webpage once it is completed loading.
My favorite part about this site is that it also gives you the &amp;lt;a class=&amp;quot;zem_slink&amp;quot; title=&amp;quot;HTML&amp;quot; rel=&amp;quot;wikipedia&amp;quot; href=&amp;quot;http://en.wikipedia.org/wiki/HTML&amp;quot;&amp;gt;HTML code that they used to create the tests. This allows you to add this code to your website to display the results.
When we get to the site this is what we will see:
You will be able to tell at a glance what your browser can and cannot do. For Javascript scroll down to the 3rd bulleted point and after it says: Is Java enabled?, you will either see true or false. True will let you know that you are using a Javascript enabled browser. If it says false you will need to see if Java is installed and if not, &amp;lt;a href=&amp;quot;http://java.com&amp;quot;&amp;gt;install it and enable it.
The Java test website goes on to explain that Java and Javascript are two very different programming languages and pretty much only share the first four letters of their name. To learn the difference between the two languages you can check out these two Wikipedia pages &amp;lt;a href=&amp;quot;http://en.wikipedia.org/wiki/JavaScript&amp;quot;&amp;gt;here and &amp;lt;a href=&amp;quot;http://en.wikipedia.org/wiki/Java&amp;quot;&amp;gt;here to read about Javascript and Java respectively.
But they have another easy to use &amp;lt;a href=&amp;quot;http://www.javatester.org/javascript.html&amp;quot;&amp;gt;JavaScript test :
If you are looking for the easiest and quickest test possible the one above is it. But if you also need some more information regarding your browser’s capabilities you can check out this &amp;lt;a href=&amp;quot;http://www.cyscape.com/showbrow.aspx?bhcp=1&amp;quot;&amp;gt;browser capability test website. This is a web application called Browser Hawk.
You can see the output from my &amp;lt;a class=&amp;quot;zem_slink&amp;quot; title=&amp;quot;Firefox&amp;quot; rel=&amp;quot;homepage&amp;quot; href=&amp;quot;http://www.getfirefox.com&amp;quot;&amp;gt;FireFox 3.6.3 below:
All three of these web tests will be able to quickly tell you if your browser is actually Javascript enabled. If you have to send a user to a website to test their browser I would send them to the second one from JavaTester as it is the easiest one to see the results on.
If you are a programmer you can easily integrate the code from these pages to create your own test sites on your local intranet or website. If you do code up your own snazzy pages we would love to see them so hit us with the links in the comments.
If you are looking for a Java test website you &amp;lt;a href=&amp;quot;http://www.java.com/en/download/help/testvm.xml&amp;quot;&amp;gt;can check this one out. It will work with all operating systems and &amp;lt;a class=&amp;quot;zem_slink&amp;quot; title=&amp;quot;Internet Explorer&amp;quot; rel=&amp;quot;wikipedia&amp;quot; href=&amp;quot;http://en.wikipedia.org/wiki/Internet_Explorer&amp;quot;&amp;gt;Internet Explorer, Firefox, Mozilla and Netscape.
Do you like MakeUseOf articles? &amp;lt;a href=&amp;quot;http://www.makeuseof.com/tag/share-share-share-spread-word/&amp;quot;&amp;gt;Do share our articles with others! It’s really important to us.
Similar MakeUseOf Articles &amp;lt;a href=&amp;quot;http://www.makeuseof.com/tag/top-10-professional-sample-code-websites-for-programmers/&amp;quot;&amp;gt;Top 10 Professional Sample Code Websites For Programmers (35 comments) &amp;lt;a href=&amp;quot;http://www.makeuseof.com/tag/top-5-websites-for-java-application-examples/&amp;quot;&amp;gt;Top 5 Websites for Java Application Examples (18 comments) &amp;lt;a href=&amp;quot;http://www.makeuseof.com/tag/grant-pdf-print-power-to-your-website-visitors/&amp;quot;&amp;gt;Grant PDF Print Power to Your Website Visitors (8 comments) &amp;lt;a href=&amp;quot;http://www.makeuseof.com/tag/write-develop-html-offline-with-first-page/&amp;quot;&amp;gt;Write &amp;amp; Develop HTML Offline with First Page (12 comments) &amp;lt;a href=&amp;quot;http://www.makeuseof.com/tag/wordpress-tv-the-best-wordpress-tutorials-ever/&amp;quot;&amp;gt;WordPress.tv – The Best WordPress Tutorials Ever! (14 comments) &amp;lt;a href=&amp;quot;http://www.makeuseof.com/tag/wordpress-exploit-scanner-helps-administrators-scan-their-database-for-malicious-files/&amp;quot;&amp;gt;WordPress Exploit Scanner Helps Administrators Scan Their Database For Malicious Files (14 comments) &amp;lt;a href=&amp;quot;http://www.makeuseof.com/tag/what-is-javascript-how-works/&amp;quot;&amp;gt;What is JavaScript and How Does It Work? [Technology Explained] (4 comments) &amp;lt;a href=&amp;quot;http://www.makeuseof.com/tag/web-metrics-101-what-do-all-these-terms-mean/&amp;quot;&amp;gt;Web Metrics 101 – What DO all these Terms Mean? (18 comments) &amp;lt;a href=&amp;quot;http://www.makeuseof.com/tag/view-your-google-analytics-account-using-adobe-air/&amp;quot;&amp;gt;View your Google Analytics Account using Adobe AIR (11 comments) &amp;lt;a href=&amp;quot;http://www.makeuseof.com/tag/use-webslug-to-see-how-fast-your-site-loads/&amp;quot;&amp;gt;Use Webslug To See How Fast Your Site Loads (3 comments) &amp;lt;a href=&amp;quot;http://feedads.g.doubleclick.net/~a/bzDDEnrQp7hjGIUV5jOTCvxvNZo/0/da&amp;quot;&amp;gt;
&amp;lt;a href=&amp;quot;http://feedads.g.doubleclick.net/~a/bzDDEnrQp7hjGIUV5jOTCvxvNZo/1/da&amp;quot;&amp;gt;
&amp;lt;a href=&amp;quot;http://feeds.feedburner.com/~ff/Makeuseof?a=e5yad0IRQV0:EMcbh9wf_G0:qj6IDK7rITs&amp;quot;&amp;gt; &amp;lt;a href=&amp;quot;http://feeds.feedburner.com/~ff/Makeuseof?a=e5yad0IRQV0:EMcbh9wf_G0:gIN9vFwOqvQ&amp;quot;&amp;gt; &amp;lt;a href=&amp;quot;http://feeds.feedburner.com/~ff/Makeuseof?a=e5yad0IRQV0:EMcbh9wf_G0:yIl2AUoC8zA&amp;quot;&amp;gt; &amp;lt;a href=&amp;quot;http://feeds.feedburner.com/~ff/Makeuseof?a=e5yad0IRQV0:EMcbh9wf_G0:V_sGLiPBpWU&amp;quot;&amp;gt; &amp;lt;a href=&amp;quot;http://feeds.feedburner.com/~ff/Makeuseof?a=e5yad0IRQV0:EMcbh9wf_G0:F7zBnMyn0Lo&amp;quot;&amp;gt; &amp;lt;a href=&amp;quot;http://feeds.feedburner.com/~ff/Makeuseof?a=e5yad0IRQV0:EMcbh9wf_G0:I9og5sOYxJI&amp;quot;&amp;gt; &amp;lt;a href=&amp;quot;http://feeds.feedburner.com/~ff/Makeuseof?a=e5yad0IRQV0:EMcbh9wf_G0:D7DqB2pKExk&amp;quot;&amp;gt;
URL: &amp;lt;a href=&amp;quot;http://feedproxy.google.com/~r/Makeuseof/~3/e5yad0IRQV0/&amp;quot;&amp;gt;http://feedproxy.google.com/~r/Makeuseof/~3/e5yad0IRQV0/&amp;lt;h6 class=&amp;quot;zemanta-related-title&amp;quot; style=&amp;quot;font-size: 1em;&amp;quot;&amp;gt;Related articles by Zemanta &amp;lt;ul class=&amp;quot;zemanta-article-ul&amp;quot;&amp;gt; &amp;lt;li class=&amp;quot;zemanta-article-ul-li&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;http://www.makeuseof.com/tag/2-quick-ways-check-running-javascript-enabled-browser/&amp;quot;&amp;gt;How To Quickly Check If You&amp;amp;#8217;re Running A Javascript Enabled Browser (makeuseof.com) &amp;lt;li class=&amp;quot;zemanta-article-ul-li&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;http://mozakai.blogspot.com/2010/07/experiments-with-static-javascript-as.html&amp;quot;&amp;gt;Experiments with &amp;amp;#8217;Static&amp;amp;#8217; JavaScript: As Fast As Native Code? (mozakai.blogspot.com) &amp;lt;li class=&amp;quot;zemanta-article-ul-li&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;https://developer.mozilla.org/en/a_re-introduction_to_javascript&amp;quot;&amp;gt;A re-introduction to JavaScript (developer.mozilla.org) &amp;lt;li class=&amp;quot;zemanta-article-ul-li&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;http://www.installationwiki.org/GWT&amp;quot;&amp;gt;imabonehead: GWT – InstallationWiki (installationwiki.org) &amp;lt;div class=&amp;quot;zemanta-pixie&amp;quot; style=&amp;quot;margin-top: 10px; height: 15px;&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zemanta-pixie-a&amp;quot; title=&amp;quot;Enhanced by Zemanta&amp;quot; href=&amp;quot;http://www.zemanta.com/&amp;quot;&amp;gt;&amp;lt;img class=&amp;quot;zemanta-pixie-img&amp;quot; style=&amp;quot;border: medium none; float: right;&amp;quot; src=&amp;quot;http://blog.amit-agarwal.co.in/wp-content/uploads/2010/08/zemified_e7.png&amp;quot; alt=&amp;quot;Enhanced by Zemanta&amp;quot; /&amp;gt;&amp;lt;span class=&amp;quot;zem-script more-related pretty-attribution&amp;quot;&amp;gt;
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1168 ">
              <title>&lt;![CDATA[Upload a video to youtube]]></title>
              <link>&lt;![CDATA[/2010/07/17/upload-a-video-to-youtube-2/]]></link>
              <pubDate>1279307809</pubDate>
              <content>&lt;![CDATA[ &amp;lt;span style=&amp;quot;font-size: x-large;&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;http://feedproxy.google.com/~r/Command-line-fu/~3/JXJj-wy4keA/upload-a-video-to-youtube&amp;quot;&amp;gt;Upload a video to youtube $ google youtube post &amp;ndash;title &amp;quot;My Video&amp;quot; &amp;ndash;category Education ~/myvideo.avi &amp;lt;a class=&amp;quot;zem_slink freebase/guid/9202a8c04000641f800000000042acea&amp;quot; title=&amp;quot;Google&amp;quot; rel=&amp;quot;homepage&amp;quot; href=&amp;quot;http://google.com&amp;quot;&amp;gt;Google just released a new commend line tool offering all sorts of new services from the commend line. One of them is uploading a &amp;lt;a class=&amp;quot;zem_slink freebase/guid/9202a8c04000641f8000000000982f58&amp;quot; title=&amp;quot;YouTube&amp;quot; rel=&amp;quot;homepage&amp;quot; href=&amp;quot;http://www.youtube.com/&amp;quot;&amp;gt;youtube video but there are plenty more google services to interact with.
&amp;lt;a class=&amp;quot;zem_slink freebase/guid/9202a8c04000641f8000000000054c6a&amp;quot; title=&amp;quot;Uploading and downloading&amp;quot; rel=&amp;quot;wikipedia&amp;quot; href=&amp;quot;http://en.wikipedia.org/wiki/Uploading_and_downloading&amp;quot;&amp;gt;Download it here: &amp;lt;a href=&amp;quot;http://code.google.com/p/googlecl/&amp;quot;&amp;gt;http://code.google.com/p/googlecl/
Manual: &amp;lt;a href=&amp;quot;http://code.google.com/p/googlecl/wiki/Manual&amp;quot;&amp;gt;http://code.google.com/p/googlecl/wiki/Manual
&amp;lt;a href=&amp;quot;http://www.commandlinefu.com/commands/view/5877/upload-a-video-to-youtube&amp;quot;&amp;gt;View this command to comment, vote or add to favourites &amp;lt;a href=&amp;quot;http://feeds2.feedburner.com/commands/by/spiffwalker&amp;quot;&amp;gt;View all commands by &amp;lt;a href=&amp;quot;http://feeds2.feedburner.com/commands/by/spiffwalker&amp;quot;&amp;gt;spiffwalker &amp;lt;a href=&amp;quot;http://www.commandlinefu.com&amp;quot;&amp;gt;
by David Winterbottom (&amp;lt;a href=&amp;quot;http://codeinthehole.com&amp;quot;&amp;gt;codeinthehole.com)
&amp;lt;a href=&amp;quot;http://feedads.g.doubleclick.net/~a/76bFfHbKVlPjtMLy17VmRmuWIQ8/0/da&amp;quot;&amp;gt;
&amp;lt;a href=&amp;quot;http://feedads.g.doubleclick.net/~a/76bFfHbKVlPjtMLy17VmRmuWIQ8/1/da&amp;quot;&amp;gt;
URL: &amp;lt;a href=&amp;quot;http://feedproxy.google.com/~r/Command-line-fu/~3/JXJj-wy4keA/upload-a-video-to-youtube&amp;quot;&amp;gt;http://feedproxy.google.com/~r/Command-line-fu/~3/JXJj-wy4keA/upload-a-video-to-youtube&amp;lt;h6 class=&amp;quot;zemanta-related-title&amp;quot;&amp;gt;Related articles by Zemanta &amp;lt;ul class=&amp;quot;zemanta-article-ul&amp;quot;&amp;gt; &amp;lt;li class=&amp;quot;zemanta-article-ul-li&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;http://code.google.com/p/googlecl/wiki/ExampleScripts&amp;quot;&amp;gt;ExampleScripts – googlecl – Example commands and tasks GoogleCL can do. – Project Hosting on Google Code (code.google.com) &amp;lt;li class=&amp;quot;zemanta-article-ul-li&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;http://www.geek.com/articles/news/youtube-now-supports-4k-video-2010079/&amp;quot;&amp;gt;YouTube now supports 4K video (geek.com) &amp;lt;li class=&amp;quot;zemanta-article-ul-li&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;http://maketecheasier.com/beginner-guide-googlecl/2010/06/23&amp;quot;&amp;gt;The Beginner Guide to Use GoogleCL (maketecheasier.com) &amp;lt;div class=&amp;quot;zemanta-pixie&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zemanta-pixie-a&amp;quot; title=&amp;quot;Enhanced by Zemanta&amp;quot; href=&amp;quot;http://www.zemanta.com/&amp;quot;&amp;gt;&amp;lt;img class=&amp;quot;zemanta-pixie-img&amp;quot; src=&amp;quot;http://blog.amit-agarwal.co.in/wp-content/uploads/2010/08/zemified_c14.gif&amp;quot; alt=&amp;quot;Enhanced by Zemanta&amp;quot; /&amp;gt;&amp;lt;span class=&amp;quot;zem-script more-related more-info pretty-attribution paragraph-reblog&amp;quot;&amp;gt;
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1169 ">
              <title>&lt;![CDATA[Unixmen - Tips to reduce memory usage on Firefox]]></title>
              <link>&lt;![CDATA[/2010/07/14/unixmen-tips-to-reduce-memory-usage-on-firefox/]]></link>
              <pubDate>1279069592</pubDate>
              <content>&lt;![CDATA[ A nice aritcle on reducing the memory usage of firefox on &amp;lt;a class=&amp;quot;zem_slink&amp;quot; title=&amp;quot;Linux&amp;quot; rel=&amp;quot;wikipedia&amp;quot; href=&amp;quot;http://en.wikipedia.org/wiki/Linux&amp;quot;&amp;gt;Linux.
There are some things in life everyone is looking for and no one ever finds and there are other things that people keep finding and re-finding and inventing and re-inventing. Reducing memory usage for &amp;lt;a class=&amp;quot;zem_slink&amp;quot; title=&amp;quot;Firefox&amp;quot; rel=&amp;quot;homepage&amp;quot; href=&amp;quot;http://www.mozilla.com/firefox/&amp;quot;&amp;gt;Firefox and speeding it up is one such thing. So, here is another story to reduce the memory usage of firefox.
&amp;lt;a href=&amp;quot;http://www.unixmen.com/linux-tutorials/744-how-to-reduce-memory-usage-on-firefox-linux&amp;quot;&amp;gt;Unixmen – Tips to reduce memory usage on Firefox | Linux | Unixmen&amp;lt;h6 class=&amp;quot;zemanta-related-title&amp;quot;&amp;gt;Related articles by Zemanta &amp;lt;ul class=&amp;quot;zemanta-article-ul&amp;quot;&amp;gt; &amp;lt;li class=&amp;quot;zemanta-article-ul-li&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;http://gizmodo.com/5454501/mozilla-firefox-36-official-20-faster-than-35&amp;quot;&amp;gt;Mozilla Firefox 3.6 Official, 20% Faster Than 3.5 [Browsers] (gizmodo.com) &amp;lt;li class=&amp;quot;zemanta-article-ul-li&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;http://www.v3.co.uk/v3/news/2256578/firefox-goes-live&amp;quot;&amp;gt;Firefox 3.6 goes live (v3.co.uk) &amp;lt;li class=&amp;quot;zemanta-article-ul-li&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;http://www.slumpedoverkeyboarddead.com/2009/12/29/8-hidden-firefox-secrets-revealed/&amp;quot;&amp;gt;8 Hidden Firefox Secrets Revealed (slumpedoverkeyboarddead.com) &amp;lt;li class=&amp;quot;zemanta-article-ul-li&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;http://www.slumpedoverkeyboarddead.com/2009/12/30/mozilla-foundation-delays-future-firefoxes/&amp;quot;&amp;gt;Mozilla Foundation delays future Firefoxes (slumpedoverkeyboarddead.com) &amp;lt;li class=&amp;quot;zemanta-article-ul-li&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;http://blog.amit-agarwal.co.in/2010/01/16/browser-and-os-stats-on-my-blog/&amp;quot;&amp;gt;Browser and OS stats on my blog (amit-agarwal.co.in) &amp;lt;div class=&amp;quot;zemanta-pixie&amp;quot; style=&amp;quot;margin-top: 10px; height: 15px;&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zemanta-pixie-a&amp;quot; title=&amp;quot;Enhanced by Zemanta&amp;quot; href=&amp;quot;http://www.zemanta.com/&amp;quot;&amp;gt;&amp;lt;img class=&amp;quot;zemanta-pixie-img&amp;quot; style=&amp;quot;border: medium none; float: right;&amp;quot; src=&amp;quot;http://blog.amit-agarwal.co.in/wp-content/uploads/2010/08/zemified_e2.png&amp;quot; alt=&amp;quot;Enhanced by Zemanta&amp;quot; /&amp;gt;&amp;lt;span class=&amp;quot;zem-script more-related pretty-attribution&amp;quot;&amp;gt;
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1170 ">
              <title>&lt;![CDATA[A Five-Way Linux Distribution Comparison In 2010]]></title>
              <link>&lt;![CDATA[/2010/07/14/a-five-way-linux-distribution-comparison-in-2010/]]></link>
              <pubDate>1279069590</pubDate>
              <content>&lt;![CDATA[ ]]></content>
             </sphinx:document>
            
            <sphinx:document id="1171 ">
              <title>&lt;![CDATA[New Improvements in the site and added few more features.]]></title>
              <link>&lt;![CDATA[/2010/07/11/improvements-site-added-features/]]></link>
              <pubDate>1278835164</pubDate>
              <content>&lt;![CDATA[ Last couple of days I have spent quite some time on the &amp;lt;a class=&amp;quot;zem_slink freebase/guid/9202a8c04000641f8000000000041684&amp;quot; title=&amp;quot;Website&amp;quot; rel=&amp;quot;wikipedia&amp;quot; href=&amp;quot;http://en.wikipedia.org/wiki/Website&amp;quot;&amp;gt;website design and format and performance along with moving my Hosting Provider.
Here are couple of things that you would notice immediately:
Site loading time is decreased substantially. I saw it loading in 5 seconds from my system.
I have moved my hosting from ZNetIndia to &amp;lt;a class=&amp;quot;zem_slink freebase/guid/9202a8c04000641f80000000003f4284&amp;quot; title=&amp;quot;Go Daddy&amp;quot; rel=&amp;quot;geolocation&amp;quot; href=&amp;quot;http://maps.google.com/maps?ll=33.617409,-111.90477&amp;amp;spn=0.01,0.01&amp;amp;q=33.617409,-111.90477%20%28Go%20Daddy%29&amp;amp;t=h&amp;quot;&amp;gt;GoDaddy. Though the users do not have any direct impact in experience but that has definitely improved the performance. I have spent quite some amount of money on this and would request the viewers to click on the &amp;lt;a class=&amp;quot;zem_slink freebase/guid/9202a8c04000641f800000000042acea&amp;quot; title=&amp;quot;Google&amp;quot; rel=&amp;quot;homepage&amp;quot; href=&amp;quot;http://google.com&amp;quot;&amp;gt;Google Advertisements to help me cover it. You help is much appreciated. Other way you can help is by way of buying my photos from my &amp;lt;a title=&amp;quot;My E Sop&amp;quot; href=&amp;quot;http://shop.amit-agarwal.co.in&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;e-shop.
Changed the theme to more &amp;lt;a class=&amp;quot;zem_slink freebase/guid/9202a8c04000641f80000000005008c7&amp;quot; title=&amp;quot;Business class&amp;quot; rel=&amp;quot;wikipedia&amp;quot; href=&amp;quot;http://en.wikipedia.org/wiki/Business_class&amp;quot;&amp;gt;Business class look with a professional attitude.
Performance on &amp;lt;a class=&amp;quot;zem_slink freebase/guid/9202a8c04000641f800000000002a173&amp;quot; title=&amp;quot;Mobile, Alabama&amp;quot; rel=&amp;quot;geolocation&amp;quot; href=&amp;quot;http://maps.google.com/maps?ll=30.6944444444,-88.0430555556&amp;amp;spn=0.1,0.1&amp;amp;q=30.6944444444,-88.0430555556%20%28Mobile%2C%20Alabama%29&amp;amp;t=h&amp;quot;&amp;gt;Mobile is very much improved. I have installed a new theme for mobile and have improved performance.
Added few more links on my page.
Removed un-necessary plugins.
Added support for translations. Google &amp;lt;a class=&amp;quot;zem_slink freebase/guid/9202a8c04000641f80000000005740ce&amp;quot; title=&amp;quot;Ajax (programming)&amp;quot; rel=&amp;quot;wikipedia&amp;quot; href=&amp;quot;http://en.wikipedia.org/wiki/Ajax_%28programming%29&amp;quot;&amp;gt;AJAX Translation ROCKS.
Hope all this will make your experience better.&amp;lt;h6 class=&amp;quot;zemanta-related-title&amp;quot;&amp;gt;Related articles by Zemanta &amp;lt;ul class=&amp;quot;zemanta-article-ul&amp;quot;&amp;gt; &amp;lt;li class=&amp;quot;zemanta-article-ul-li&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;http://www.seobook.com/i-it-i-love-it-i-want-some-more-it&amp;quot;&amp;gt;I Like it, I Love it, I Want Some More of It (seobook.com) &amp;lt;li class=&amp;quot;zemanta-article-ul-li&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;http://mikemueller.posterous.com/has-your-site-been-hacked&amp;quot;&amp;gt;Has your site been hacked? (mikemueller.posterous.com) &amp;lt;li class=&amp;quot;zemanta-article-ul-li&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;http://activerain.com/blogsview/1697873/has-your-site-been-hacked-&amp;quot;&amp;gt;Has your Site been HACKED? (activerain.com) &amp;lt;li class=&amp;quot;zemanta-article-ul-li&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;http://www.mailchimp.com/blog/are-you-ready-for-the-like-button/&amp;quot;&amp;gt;Are you ready for the Like button? (mailchimp.com) &amp;lt;div class=&amp;quot;zemanta-pixie&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zemanta-pixie-a&amp;quot; title=&amp;quot;Enhanced by Zemanta&amp;quot; href=&amp;quot;http://www.zemanta.com/&amp;quot;&amp;gt;&amp;lt;img class=&amp;quot;zemanta-pixie-img&amp;quot; src=&amp;quot;http://blog.amit-agarwal.co.in/wp-content/uploads/2010/08/zemified_c13.gif&amp;quot; alt=&amp;quot;Enhanced by Zemanta&amp;quot; /&amp;gt;&amp;lt;span class=&amp;quot;zem-script more-related more-info pretty-attribution paragraph-reblog&amp;quot;&amp;gt;
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1172 ">
              <title>&lt;![CDATA[need help on deciding the ISP to host my website.]]></title>
              <link>&lt;![CDATA[/2010/06/25/deciding-isp-host-website/]]></link>
              <pubDate>1277466412</pubDate>
              <content>&lt;![CDATA[ My &amp;lt;a class=&amp;quot;zem_slink freebase/en/internet_hosting_service&amp;quot; title=&amp;quot;Internet hosting service&amp;quot; rel=&amp;quot;wikipedia&amp;quot; href=&amp;quot;http://en.wikipedia.org/wiki/Internet_hosting_service&amp;quot;&amp;gt;hosting services account is expiring next month and I am evaluating to see if I should stick with the current &amp;lt;a class=&amp;quot;zem_slink freebase/en/internet_service_provider&amp;quot; title=&amp;quot;Internet service provider&amp;quot; rel=&amp;quot;wikipedia&amp;quot; href=&amp;quot;http://en.wikipedia.org/wiki/Internet_service_provider&amp;quot;&amp;gt;ISP (&amp;lt;a href=&amp;quot;http://znetindia.com&amp;quot;&amp;gt;http://znetindia.com or &amp;lt;a href=&amp;quot;http://zneti.com&amp;quot;&amp;gt;http://zneti.com). I am quite happy with the current service but miss the &amp;lt;a class=&amp;quot;zem_slink freebase/en/shell_account&amp;quot; title=&amp;quot;Shell account&amp;quot; rel=&amp;quot;wikipedia&amp;quot; href=&amp;quot;http://en.wikipedia.org/wiki/Shell_account&amp;quot;&amp;gt;shell account service. Since there is no shell account so I cannot do much on the &amp;lt;a class=&amp;quot;zem_slink freebase/en/server&amp;quot; title=&amp;quot;Server (computing)&amp;quot; rel=&amp;quot;wikipedia&amp;quot; href=&amp;quot;http://en.wikipedia.org/wiki/Server_%28computing%29&amp;quot;&amp;gt;server..
Currently I am looking at :
&amp;lt;a href=&amp;quot;http://www.csoft.net&amp;quot;&amp;gt;CSoft
&amp;lt;a href=&amp;quot;http://www.arvixe.com/linux_web_hosting&amp;quot;&amp;gt; arvixe
&amp;lt;a href=&amp;quot;http://www.godaddy.com&amp;quot;&amp;gt; GoDaddy &amp;lt;a href=&amp;quot;http://www.hostaz.com/&amp;quot;&amp;gt; Hostaz
&amp;lt;a href=&amp;quot;http://www.webhostingssh.net/&amp;quot;&amp;gt; WebHosting
&amp;lt;a href=&amp;quot;http://www.hostmonster.com&amp;quot;&amp;gt;Host Monster
Please feel free to suggest any other that I might have missed an you feel is pretty good.&amp;lt;h6 class=&amp;quot;zemanta-related-title&amp;quot;&amp;gt;Related articles by Zemanta &amp;lt;ul class=&amp;quot;zemanta-article-ul&amp;quot;&amp;gt; &amp;lt;li class=&amp;quot;zemanta-article-ul-li&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;http://www.wealthyways4you.com/online-business/hostgator-web-hosting-a-new-era-in-web-hosting&amp;quot;&amp;gt;Hostgator Web Hosting – A New Era In Web Hosting (wealthyways4you.com) &amp;lt;li class=&amp;quot;zemanta-article-ul-li&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;http://www.wired.com/epicenter/2010/06/you-dont-want-isps-to-innovate/&amp;quot;&amp;gt;You Don&amp;amp;#8217;t Want ISPs to Innovate (wired.com) &amp;lt;li class=&amp;quot;zemanta-article-ul-li&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;http://blogs.journalism.co.uk/editors/2010/06/24/the-battle-of-bandwidth-online-publishers-at-risk-from-isp-pricing-changes/&amp;quot;&amp;gt;&amp;amp;#8217;The Battle of Bandwidth&amp;amp;#8217;: Online publishers at risk from ISP pricing changes (blogs.journalism.co.uk) &amp;lt;li class=&amp;quot;zemanta-article-ul-li&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;http://techdirt.com/articles/20100621/1636239907.shtml&amp;quot;&amp;gt;NY Times Becomes A Trademark Bully Over A Logo For A Newspaper That Hasn&amp;amp;#8217;t Existed In 40&#43; Years (techdirt.com) &amp;lt;li class=&amp;quot;zemanta-article-ul-li&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;http://marketersdaily.com/how-isps-limit-bandwidth-hogs.html&amp;quot;&amp;gt;How ISP&amp;amp;#8217;s Limit Bandwidth Hogs (marketersdaily.com) &amp;lt;div class=&amp;quot;zemanta-pixie&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zemanta-pixie-a&amp;quot; title=&amp;quot;Enhanced by Zemanta&amp;quot; href=&amp;quot;http://www.zemanta.com/&amp;quot;&amp;gt;&amp;lt;img class=&amp;quot;zemanta-pixie-img&amp;quot; src=&amp;quot;http://blog.amit-agarwal.co.in/wp-content/uploads/2010/08/zemified_c12.gif&amp;quot; alt=&amp;quot;Enhanced by Zemanta&amp;quot; /&amp;gt;&amp;lt;span class=&amp;quot;zem-script more-related more-info pretty-attribution paragraph-reblog&amp;quot;&amp;gt;
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1173 ">
              <title>&lt;![CDATA[How To Quickly Check If You’re Running A Javascript Enabled Browser]]></title>
              <link>&lt;![CDATA[/2010/06/20/quickly-check-youre-running-javascript-enabled-browser/]]></link>
              <pubDate>1277024261</pubDate>
              <content>&lt;![CDATA[**&amp;lt;span style=&amp;quot;font-size: x-large;&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;http://feedproxy.google.com/~r/Makeuseof/~3/e5yad0IRQV0/&amp;quot;&amp;gt; **
&amp;lt;img src=&amp;quot;http://blog.amit-agarwal.co.in/wp-content/uploads/2010/08/javaHead1.png&amp;quot; border=&amp;quot;0&amp;quot; alt=&amp;quot;javascript enabled browser&amp;quot; align=&amp;quot;bottom&amp;quot; /&amp;gt;&amp;lt;a href=&amp;quot;http://www.makeuseof.com/tag/what-is-javascript-how-works&amp;quot;&amp;gt;Javascript is an integral part of &amp;lt;a class=&amp;quot;zem_slink freebase/en/web_browser&amp;quot; title=&amp;quot;Web browser&amp;quot; rel=&amp;quot;wikipedia&amp;quot; href=&amp;quot;http://en.wikipedia.org/wiki/Web_browser&amp;quot;&amp;gt;web browsing and a lot of websites use Javascript for web applications and functions. A question I get at AskTheAdmin.com often is how I can tell if I am using a Javascript enabled browser. I have two quick methods to tell if the browser you are using does or does not support Javascript.
The first thing I recommend is browsing over to a special Java test website called &amp;lt;a href=&amp;quot;http://www.javatester.org/enabled.html&amp;quot;&amp;gt;JavaTester. There is code on this page that will tell you if you can run &amp;lt;a href=&amp;quot;http://www.makeuseof.com/tag/wonder-beauty-java-applets&amp;quot;&amp;gt;Java Applets and if Javascript is enabled and supported by your browser. The answers will be shown to you on the webpage once it is completed loading.
My favorite part about this site is that it also gives you the &amp;lt;a class=&amp;quot;zem_slink freebase/en/html&amp;quot; title=&amp;quot;HTML&amp;quot; rel=&amp;quot;wikipedia&amp;quot; href=&amp;quot;http://en.wikipedia.org/wiki/HTML&amp;quot;&amp;gt;HTML code that they used to create the tests. This allows you to add this code to your website to display the results.
When we get to the site this is what we will see:
&amp;lt;img src=&amp;quot;http://blog.amit-agarwal.co.in/wp-content/uploads/2010/08/java1.png&amp;quot; border=&amp;quot;0&amp;quot; alt=&amp;quot;javascript enabled browser&amp;quot; width=&amp;quot;584&amp;quot; height=&amp;quot;611&amp;quot; align=&amp;quot;bottom&amp;quot; /&amp;gt;
You will be able to tell at a glance what your browser can and cannot do. For Javascript scroll down to the 3rd bulleted point and after it says: Is Java enabled?, you will either see true or false. True will let you know that you are using a Javascript enabled browser. If it says false you will need to see if Java is installed and if not, &amp;lt;a href=&amp;quot;http://java.com&amp;quot;&amp;gt;install it and enable it.
The Java test website goes on to explain that Java and Javascript are two very different &amp;lt;a class=&amp;quot;zem_slink freebase/en/programming_language&amp;quot; title=&amp;quot;Programming language&amp;quot; rel=&amp;quot;wikipedia&amp;quot; href=&amp;quot;http://en.wikipedia.org/wiki/Programming_language&amp;quot;&amp;gt;programming languages and pretty much only share the first four letters of their name. To learn the difference between the two languages you can check out these two Wikipedia pages &amp;lt;a href=&amp;quot;http://en.wikipedia.org/wiki/JavaScript&amp;quot;&amp;gt;here and &amp;lt;a href=&amp;quot;http://en.wikipedia.org/wiki/Java&amp;quot;&amp;gt;here to read about Javascript and Java respectively.
But they have another easy to use &amp;lt;a href=&amp;quot;http://www.javatester.org/javascript.html&amp;quot;&amp;gt;JavaScript test :
&amp;lt;img src=&amp;quot;http://blog.amit-agarwal.co.in/wp-content/uploads/2010/08/java2.png&amp;quot; border=&amp;quot;0&amp;quot; alt=&amp;quot;javascript enabled browser&amp;quot; width=&amp;quot;402&amp;quot; height=&amp;quot;176&amp;quot; align=&amp;quot;bottom&amp;quot; /&amp;gt;
If you are looking for the easiest and quickest test possible the one above is it. But if you also need some more information regarding your browser’s capabilities you can check out this &amp;lt;a href=&amp;quot;http://www.cyscape.com/showbrow.aspx?bhcp=1&amp;quot;&amp;gt;browser capability test website. This is a web application called Browser Hawk.
You can see the output from my &amp;lt;a class=&amp;quot;zem_slink freebase/en/mozilla_firefox&amp;quot; title=&amp;quot;Firefox&amp;quot; rel=&amp;quot;homepage&amp;quot; href=&amp;quot;http://www.mozilla.com/en-US/firefox/&amp;quot;&amp;gt;FireFox 3.6.3 below:
&amp;lt;img src=&amp;quot;http://blog.amit-agarwal.co.in/wp-content/uploads/2010/08/java0.png&amp;quot; border=&amp;quot;0&amp;quot; alt=&amp;quot;enable javascript in browser&amp;quot; width=&amp;quot;408&amp;quot; height=&amp;quot;693&amp;quot; align=&amp;quot;bottom&amp;quot; /&amp;gt;
All three of these web tests will be able to quickly tell you if your browser is actually Javascript enabled. If you have to send a user to a website to test their browser I would send them to the second one from JavaTester as it is the easiest one to see the results on.
If you are a programmer you can easily integrate the code from these pages to create your own test sites on your local intranet or website. If you do code up your own snazzy pages we would love to see them so hit us with the links in the comments.
If you are looking for a Java test website you &amp;lt;a href=&amp;quot;http://www.java.com/en/download/help/testvm.xml&amp;quot;&amp;gt;can check this one out. It will work with all operating systems and &amp;lt;a class=&amp;quot;zem_slink freebase/en/internet_explorer&amp;quot; title=&amp;quot;Internet Explorer&amp;quot; rel=&amp;quot;wikipedia&amp;quot; href=&amp;quot;http://en.wikipedia.org/wiki/Internet_Explorer&amp;quot;&amp;gt;Internet Explorer, Firefox, Mozilla and Netscape.
Do you like MakeUseOf articles? &amp;lt;a href=&amp;quot;http://www.makeuseof.com/tag/share-share-share-spread-word/&amp;quot;&amp;gt;Do share our articles with others! It’s really important to us.
Similar MakeUseOf Articles &amp;lt;a href=&amp;quot;http://www.makeuseof.com/tag/top-10-professional-sample-code-websites-for-programmers/&amp;quot;&amp;gt;Top 10 Professional Sample Code Websites For Programmers (35 comments) &amp;lt;a href=&amp;quot;http://www.makeuseof.com/tag/top-5-websites-for-java-application-examples/&amp;quot;&amp;gt;Top 5 Websites for Java Application Examples (18 comments) &amp;lt;a href=&amp;quot;http://www.makeuseof.com/tag/grant-pdf-print-power-to-your-website-visitors/&amp;quot;&amp;gt;Grant PDF Print Power to Your Website Visitors (8 comments) &amp;lt;a href=&amp;quot;http://www.makeuseof.com/tag/write-develop-html-offline-with-first-page/&amp;quot;&amp;gt;Write &amp;amp; Develop HTML Offline with First Page (12 comments) &amp;lt;a href=&amp;quot;http://www.makeuseof.com/tag/wordpress-tv-the-best-wordpress-tutorials-ever/&amp;quot;&amp;gt;WordPress.tv – The Best WordPress Tutorials Ever! (14 comments) &amp;lt;a href=&amp;quot;http://www.makeuseof.com/tag/wordpress-exploit-scanner-helps-administrators-scan-their-database-for-malicious-files/&amp;quot;&amp;gt;WordPress Exploit Scanner Helps Administrators Scan Their Database For Malicious Files (14 comments) &amp;lt;a href=&amp;quot;http://www.makeuseof.com/tag/what-is-javascript-how-works/&amp;quot;&amp;gt;What is JavaScript and How Does It Work? [Technology Explained] (4 comments) &amp;lt;a href=&amp;quot;http://www.makeuseof.com/tag/web-metrics-101-what-do-all-these-terms-mean/&amp;quot;&amp;gt;Web Metrics 101 – What DO all these Terms Mean? (18 comments) &amp;lt;a href=&amp;quot;http://www.makeuseof.com/tag/view-your-google-analytics-account-using-adobe-air/&amp;quot;&amp;gt;View your Google Analytics Account using Adobe AIR (11 comments) &amp;lt;a href=&amp;quot;http://www.makeuseof.com/tag/use-webslug-to-see-how-fast-your-site-loads/&amp;quot;&amp;gt;Use Webslug To See How Fast Your Site Loads (3 comments) &amp;lt;a href=&amp;quot;http://feedads.g.doubleclick.net/~a/bzDDEnrQp7hjGIUV5jOTCvxvNZo/0/da&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;http://blog.amit-agarwal.com/wp-content/uploads/img.zemanta.com/~a/bzDDEnrQp7hjGIUV5jOTCvxvNZo/0/di&amp;quot; border=&amp;quot;0&amp;quot; alt=&amp;quot;&amp;quot; align=&amp;quot;bottom&amp;quot; /&amp;gt;
&amp;lt;a href=&amp;quot;http://feedads.g.doubleclick.net/~a/bzDDEnrQp7hjGIUV5jOTCvxvNZo/1/da&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;http://blog.amit-agarwal.com/wp-content/uploads/img.zemanta.com/~a/bzDDEnrQp7hjGIUV5jOTCvxvNZo/1/di&amp;quot; border=&amp;quot;0&amp;quot; alt=&amp;quot;&amp;quot; align=&amp;quot;bottom&amp;quot; /&amp;gt;
&amp;lt;a href=&amp;quot;http://feeds.feedburner.com/~ff/Makeuseof?a=e5yad0IRQV0:EMcbh9wf_G0:qj6IDK7rITs&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;http://blog.amit-agarwal.com/wp-content/uploads/img.zemanta.com/~ff/Makeuseof?d=qj6IDK7rITs&amp;quot; border=&amp;quot;0&amp;quot; alt=&amp;quot;&amp;quot; align=&amp;quot;bottom&amp;quot; /&amp;gt; &amp;lt;a href=&amp;quot;http://feeds.feedburner.com/~ff/Makeuseof?a=e5yad0IRQV0:EMcbh9wf_G0:gIN9vFwOqvQ&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;http://blog.amit-agarwal.com/wp-content/uploads/img.zemanta.com/~ff/Makeuseof?i=e5yad0IRQV0:EMcbh9wf_G0:gIN9vFwOqvQ&amp;quot; border=&amp;quot;0&amp;quot; alt=&amp;quot;&amp;quot; align=&amp;quot;bottom&amp;quot; /&amp;gt; &amp;lt;a href=&amp;quot;http://feeds.feedburner.com/~ff/Makeuseof?a=e5yad0IRQV0:EMcbh9wf_G0:yIl2AUoC8zA&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;http://blog.amit-agarwal.com/wp-content/uploads/img.zemanta.com/~ff/Makeuseof?d=yIl2AUoC8zA&amp;quot; border=&amp;quot;0&amp;quot; alt=&amp;quot;&amp;quot; align=&amp;quot;bottom&amp;quot; /&amp;gt; &amp;lt;a href=&amp;quot;http://feeds.feedburner.com/~ff/Makeuseof?a=e5yad0IRQV0:EMcbh9wf_G0:V_sGLiPBpWU&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;http://blog.amit-agarwal.com/wp-content/uploads/img.zemanta.com/~ff/Makeuseof?i=e5yad0IRQV0:EMcbh9wf_G0:V_sGLiPBpWU&amp;quot; border=&amp;quot;0&amp;quot; alt=&amp;quot;&amp;quot; align=&amp;quot;bottom&amp;quot; /&amp;gt; &amp;lt;a href=&amp;quot;http://feeds.feedburner.com/~ff/Makeuseof?a=e5yad0IRQV0:EMcbh9wf_G0:F7zBnMyn0Lo&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;http://blog.amit-agarwal.com/wp-content/uploads/img.zemanta.com/~ff/Makeuseof?i=e5yad0IRQV0:EMcbh9wf_G0:F7zBnMyn0Lo&amp;quot; border=&amp;quot;0&amp;quot; alt=&amp;quot;&amp;quot; align=&amp;quot;bottom&amp;quot; /&amp;gt; &amp;lt;a href=&amp;quot;http://feeds.feedburner.com/~ff/Makeuseof?a=e5yad0IRQV0:EMcbh9wf_G0:I9og5sOYxJI&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;http://blog.amit-agarwal.com/wp-content/uploads/img.zemanta.com/~ff/Makeuseof?d=I9og5sOYxJI&amp;quot; border=&amp;quot;0&amp;quot; alt=&amp;quot;&amp;quot; align=&amp;quot;bottom&amp;quot; /&amp;gt; &amp;lt;a href=&amp;quot;http://feeds.feedburner.com/~ff/Makeuseof?a=e5yad0IRQV0:EMcbh9wf_G0:D7DqB2pKExk&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;http://blog.amit-agarwal.com/wp-content/uploads/img.zemanta.com/~ff/Makeuseof?i=e5yad0IRQV0:EMcbh9wf_G0:D7DqB2pKExk&amp;quot; border=&amp;quot;0&amp;quot; alt=&amp;quot;&amp;quot; align=&amp;quot;bottom&amp;quot; /&amp;gt; &amp;lt;img src=&amp;quot;http://blog.amit-agarwal.com/wp-content/uploads/img.zemanta.com/~r/Makeuseof/~4/e5yad0IRQV0&amp;quot; border=&amp;quot;0&amp;quot; alt=&amp;quot;&amp;quot; width=&amp;quot;1&amp;quot; height=&amp;quot;1&amp;quot; align=&amp;quot;bottom&amp;quot; /&amp;gt;
URL: &amp;lt;a href=&amp;quot;http://feedproxy.google.com/~r/Makeuseof/~3/e5yad0IRQV0/&amp;quot;&amp;gt;http://feedproxy.google.com/~r/Makeuseof/~3/e5yad0IRQV0/&amp;lt;h6 class=&amp;quot;zemanta-related-title&amp;quot;&amp;gt;Related articles by Zemanta &amp;lt;ul class=&amp;quot;zemanta-article-ul&amp;quot;&amp;gt; &amp;lt;li class=&amp;quot;zemanta-article-ul-li&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;http://www.makeuseof.com/tag/what-is-javascript-how-works/&amp;quot;&amp;gt;What is JavaScript and How Does It Work? [Technology Explained] (makeuseof.com) &amp;lt;li class=&amp;quot;zemanta-article-ul-li&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;http://ajaxian.com/archives/jskb-javascript-knowledge-base-shrinking-your-code-via-browserscope-and-caja&amp;quot;&amp;gt;JSKB: JavaScript Knowledge Base. Shrinking your code via BrowserScope and Caja (ajaxian.com) &amp;lt;li class=&amp;quot;zemanta-article-ul-li&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;http://www.mt-soft.com.ar/2010/06/02/javascript-physics-engine/&amp;quot;&amp;gt;JavaScript Physics Engine (mt-soft.com.ar) &amp;lt;div class=&amp;quot;zemanta-pixie&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zemanta-pixie-a&amp;quot; title=&amp;quot;Enhanced by Zemanta&amp;quot; href=&amp;quot;http://www.zemanta.com/&amp;quot;&amp;gt;&amp;lt;img class=&amp;quot;zemanta-pixie-img&amp;quot; src=&amp;quot;http://blog.amit-agarwal.co.in/wp-content/uploads/2010/08/zemified_c7.gif&amp;quot; alt=&amp;quot;Enhanced by Zemanta&amp;quot; /&amp;gt;&amp;lt;span class=&amp;quot;zem-script more-related more-info pretty-attribution paragraph-reblog&amp;quot;&amp;gt;
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1174 ">
              <title>&lt;![CDATA[Configuration of my home desktop - updated]]></title>
              <link>&lt;![CDATA[/2010/06/11/configuration-home-desktop-updated/]]></link>
              <pubDate>1276221120</pubDate>
              <content>&lt;![CDATA[ Here is the list of components of my Desktop :
&amp;lt;a class=&amp;quot;zem_slink freebase/en/nvidia&amp;quot; title=&amp;quot;Nvidia&amp;quot; rel=&amp;quot;geolocation&amp;quot; href=&amp;quot;http://maps.google.com/maps?ll=37.3707277778,-121.963738889&amp;amp;spn=0.01,0.01&amp;amp;q=37.3707277778,-121.963738889%20%28Nvidia%29&amp;amp;t=h&amp;quot;&amp;gt;nVidia Corporation G96 [&amp;lt;a class=&amp;quot;zem_slink&amp;quot; title=&amp;quot;GeForce&amp;quot; rel=&amp;quot;homepage&amp;quot; href=&amp;quot;http://www.nvidia.com/object/geforce_family.html&amp;quot;&amp;gt;GeForce 9500 GT] (rev a1) with 1GB
&amp;lt;a class=&amp;quot;zem_slink freebase/en/intel_corporation&amp;quot; title=&amp;quot;Intel Corporation&amp;quot; rel=&amp;quot;geolocation&amp;quot; href=&amp;quot;http://maps.google.com/maps?ll=37.3879277778,-121.963538889&amp;amp;spn=0.01,0.01&amp;amp;q=37.3879277778,-121.963538889%20%28Intel%20Corporation%29&amp;amp;t=h&amp;quot;&amp;gt;Intel(R) &amp;lt;a class=&amp;quot;zem_slink freebase/en/intel_core_microarchitecture&amp;quot; title=&amp;quot;Intel Core (microarchitecture)&amp;quot; rel=&amp;quot;wikipedia&amp;quot; href=&amp;quot;http://en.wikipedia.org/wiki/Intel_Core_%28microarchitecture%29&amp;quot;&amp;gt;Core(TM) i5 CPU 650 @ 3.20GHz with 6 core
Transcend JM1333KLU-2G @ 1333MHz – totalling 4 GB of &amp;lt;a class=&amp;quot;zem_slink freebase/en/ddr3_sdram&amp;quot; title=&amp;quot;DDR3 SDRAM&amp;quot; rel=&amp;quot;wikipedia&amp;quot; href=&amp;quot;http://en.wikipedia.org/wiki/DDR3_SDRAM&amp;quot;&amp;gt;DDR3 RAM
22 inch BENQ &amp;lt;a class=&amp;quot;zem_slink freebase/en/liquid_crystal_display&amp;quot; title=&amp;quot;LCD&amp;quot; rel=&amp;quot;wikinvest&amp;quot; href=&amp;quot;http://www.wikinvest.com/concept/LCD&amp;quot;&amp;gt;LCD monitor
2 Seagate &amp;lt;a class=&amp;quot;zem_slink freebase/en/hard_disk&amp;quot; title=&amp;quot;Hard disk drive&amp;quot; rel=&amp;quot;wikipedia&amp;quot; href=&amp;quot;http://en.wikipedia.org/wiki/Hard_disk_drive&amp;quot;&amp;gt;HDD of 1 Tera Byte
1 Seagate HDD of 250 GB 🙂&amp;lt;h6 class=&amp;quot;zemanta-related-title&amp;quot;&amp;gt;Related articles by Zemanta &amp;lt;ul class=&amp;quot;zemanta-article-ul&amp;quot;&amp;gt; &amp;lt;li class=&amp;quot;zemanta-article-ul-li&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;http://www.lockergnome.com/jkls/2010/06/10/msi-gt660-a-laptop-for-any-gamer/&amp;quot;&amp;gt;MSI GT660: A Laptop for Any Gamer (lockergnome.com) &amp;lt;li class=&amp;quot;zemanta-article-ul-li&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;http://crenk.com/introducing-lamborghini-vx7/&amp;quot;&amp;gt;Introducing Lamborghini VX7 (crenk.com) &amp;lt;li class=&amp;quot;zemanta-article-ul-li&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;http://www.geardiary.com/2010/04/08/gear-deal-hp-pavilion-dv7t-quad-edition-17-3-core-i7-laptop-w4gb-ram/&amp;quot;&amp;gt;Gear Deal- HP Pavilion dv7t Quad Edition 17.3? Core i7 Laptop w/4GB RAM (geardiary.com) &amp;lt;li class=&amp;quot;zemanta-article-ul-li&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;http://www.crunchgear.com/2010/05/11/lenovo-z565-z560-z460-z360-u160/&amp;quot;&amp;gt;Lenovo refreshes laptop line for 2010 (crunchgear.com) &amp;lt;li class=&amp;quot;zemanta-article-ul-li&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;http://www.engadget.com/2010/05/12/digital-storm-tempts-with-4-4ghz-black-ops-assassin-gaming-deskt/&amp;quot;&amp;gt;Digital Storm tempts with 4.4GHz Black|OPS Assassin gaming desktop (engadget.com) &amp;lt;div class=&amp;quot;zemanta-pixie&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zemanta-pixie-a&amp;quot; title=&amp;quot;Enhanced by Zemanta&amp;quot; href=&amp;quot;http://www.zemanta.com/&amp;quot;&amp;gt;&amp;lt;img class=&amp;quot;zemanta-pixie-img&amp;quot; src=&amp;quot;http://blog.amit-agarwal.co.in/wp-content/uploads/2010/08/zemified_c3.gif&amp;quot; alt=&amp;quot;Enhanced by Zemanta&amp;quot; /&amp;gt;&amp;lt;span class=&amp;quot;zem-script more-related more-info pretty-attribution paragraph-reblog&amp;quot;&amp;gt;
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1175 ">
              <title>&lt;![CDATA[Stats for blog.amit-agarwal.co.in]]></title>
              <link>&lt;![CDATA[/2010/06/09/stats-blogamitagarwalcoin/]]></link>
              <pubDate>1276102623</pubDate>
              <content>&lt;![CDATA[ Last couple of weeks/months has been a very good time for my blog. The subscribers have increased, the visits have increased. My blog is visited more and more from the search results. My alexa ranking has come down drastically. Thanks to all my readers, subscribers and followers.
Here are some of the stats from the last 2 weeks:
&amp;lt;a href=&amp;quot;http://blog.amit-agarwal.co.in/wp-content/uploads/2010/06/WordPress_1276058887078.jpg&amp;quot;&amp;gt;&amp;lt;img class=&amp;quot;size-medium wp-image-1676&amp;quot; title=&amp;quot;Stats for blog.amit-agarwal.co.in&amp;quot; src=&amp;quot;http://blog.amit-agarwal.co.in/wp-content/uploads/2010/08/WordPress_1276058887078-300x219.jpg&amp;quot; alt=&amp;quot;Stats for blog.amit-agarwal.co.in&amp;quot; width=&amp;quot;300&amp;quot; height=&amp;quot;219&amp;quot; /&amp;gt;
&amp;lt;a href=&amp;quot;http://blog.amit-agarwal.co.in/wp-content/uploads/2010/06/WordPress_1276058914123.jpg&amp;quot;&amp;gt;&amp;lt;img class=&amp;quot;size-medium wp-image-1677&amp;quot; title=&amp;quot;Stats for blog.amit-agarwal.co.in&amp;quot; src=&amp;quot;http://blog.amit-agarwal.co.in/wp-content/uploads/2010/08/WordPress_1276058914123-300x192.jpg&amp;quot; alt=&amp;quot;Stats for blog.amit-agarwal.co.in&amp;quot; width=&amp;quot;300&amp;quot; height=&amp;quot;192&amp;quot; /&amp;gt;
&amp;lt;a href=&amp;quot;http://blog.amit-agarwal.co.in/wp-content/uploads/2010/06/WordPress_1276058842698.jpg&amp;quot;&amp;gt;&amp;lt;img class=&amp;quot;size-medium wp-image-1678&amp;quot; title=&amp;quot;Stats for blog.amit-agarwal.co.in&amp;quot; src=&amp;quot;http://blog.amit-agarwal.co.in/wp-content/uploads/2010/08/WordPress_1276058842698-300x170.jpg&amp;quot; alt=&amp;quot;Stats for blog.amit-agarwal.co.in&amp;quot; width=&amp;quot;300&amp;quot; height=&amp;quot;170&amp;quot; /&amp;gt;
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1176 ">
              <title>&lt;![CDATA[PuTTY alternatives - AlternativeTo.net]]></title>
              <link>&lt;![CDATA[/2010/06/04/putty-alternatives-alternativeto-net/]]></link>
              <pubDate>1275617205</pubDate>
              <content>&lt;![CDATA[ Sometimes after hours of searching you find a link so good that it needs no introductions and neither any writeup. I found one such page today :
&amp;lt;a href=&amp;quot;http://alternativeto.net/desktop/putty/&amp;quot;&amp;gt;http://alternativeto.net/desktop/putty/&amp;lt;h6 class=&amp;quot;zemanta-related-title&amp;quot;&amp;gt;Related articles by Zemanta &amp;lt;ul class=&amp;quot;zemanta-article-ul&amp;quot;&amp;gt; &amp;lt;li class=&amp;quot;zemanta-article-ul-li&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;http://www.downloadsquad.com/2010/05/18/kitty-is-win32-native-putty/&amp;quot;&amp;gt;KiTTY is Win32-native PuTTY (downloadsquad.com) &amp;lt;li class=&amp;quot;zemanta-article-ul-li&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;http://blog.amit-agarwal.co.in/2010/04/11/putty-export-client-display-on-login-for-opening-x-application-and-terminal/&amp;quot;&amp;gt;PuTTY export client display on login for opening X application and terminal. (amit-agarwal.co.in) &amp;lt;li class=&amp;quot;zemanta-article-ul-li&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;http://colonelqubit.wordpress.com/2010/05/05/time-to-empty-my-pockets-for-foss-projects/&amp;quot;&amp;gt;Time to empty my pockets for FOSS projects (colonelqubit.wordpress.com) &amp;lt;div class=&amp;quot;zemanta-pixie&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zemanta-pixie-a&amp;quot; title=&amp;quot;Reblog this post [with Zemanta]&amp;quot; href=&amp;quot;http://reblog.zemanta.com/zemified/a0e0301f-eb88-41fd-afbb-ab5bea19c81b/&amp;quot;&amp;gt;&amp;lt;img class=&amp;quot;zemanta-pixie-img&amp;quot; src=&amp;quot;http://blog.amit-agarwal.co.in/wp-content/uploads/2010/08/reblog_b96.png&amp;quot; alt=&amp;quot;Reblog this post [with Zemanta]&amp;quot; /&amp;gt;&amp;lt;span class=&amp;quot;zem-script more-related more-info pretty-attribution paragraph-reblog&amp;quot;&amp;gt;
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1177 ">
              <title>&lt;![CDATA[Google staff dropping Windows for Macs, Linux PCs]]></title>
              <link>&lt;![CDATA[/2010/06/02/google-staff-dropping-windows-macs-linux-pcs/]]></link>
              <pubDate>1275443614</pubDate>
              <content>&lt;![CDATA[ For those who keep saying this is not the year of linux and probably it will never be 🙂 Google staff dropping &amp;lt;a class=&amp;quot;zem_slink freebase/en/microsoft_windows&amp;quot; title=&amp;quot;Windows&amp;quot; rel=&amp;quot;homepage&amp;quot; href=&amp;quot;http://www.microsoft.com/WINDOWS&amp;quot;&amp;gt;Windows for Macs, &amp;lt;a class=&amp;quot;zem_slink freebase/en/linux&amp;quot; title=&amp;quot;Linux&amp;quot; rel=&amp;quot;wikipedia&amp;quot; href=&amp;quot;http://en.wikipedia.org/wiki/Linux&amp;quot;&amp;gt;Linux &amp;lt;a class=&amp;quot;zem_slink freebase/en/personal_computer&amp;quot; title=&amp;quot;Personal computer&amp;quot; rel=&amp;quot;wikipedia&amp;quot; href=&amp;quot;http://en.wikipedia.org/wiki/Personal_computer&amp;quot;&amp;gt;PCs
Google is abandoning the use of Windows by its staff as it\&amp;#8217;s too much of a security threat, multiple staffers said Monday night. Recent concerns about ]]></content>
             </sphinx:document>
            
            <sphinx:document id="1178 ">
              <title>&lt;![CDATA[Busy]]></title>
              <link>&lt;![CDATA[/2010/05/30/busy/]]></link>
              <pubDate>1275233708</pubDate>
              <content>&lt;![CDATA[I am busy finding a good photo to submit on one of the photography contest. Once I have finalized the Photo, will post the details and the photos here :). Probably tomorrow. Till then so long.
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1179 ">
              <title>&lt;![CDATA[Checking the links to your site (from affiliates) using cron and bash script.]]></title>
              <link>&lt;![CDATA[/2010/05/28/checking-links-site-affiliates-cron-bash-script/]]></link>
              <pubDate>1274991993</pubDate>
              <content>&lt;![CDATA[ If you have some affiliate links and are concerned about their presence then you can setup &amp;lt;a class=&amp;quot;zem_slink freebase/guid/9202a8c04000641f80000000045c9c5b&amp;quot; title=&amp;quot;Cron&amp;quot; rel=&amp;quot;wikipedia&amp;quot; href=&amp;quot;http://en.wikipedia.org/wiki/Cron&amp;quot;&amp;gt;cron to check the links for you regularly. For this you need a very simple script (as below) and a cron entry (example further down).
#!/bin/bash –
#===============================================================================
# FILE: checklinks.sh
# USAGE: ./checklinks.sh
# DESCRIPTION: Check if the links exists on affiliate sites
# OPTIONS: —
# REQUIREMENTS: —
# BUGS: —
# NOTES: —
# AUTHOR: &amp;lt;a class=&amp;quot;zem_slink&amp;quot; title=&amp;quot;Amit Agarwal&amp;quot; rel=&amp;quot;homepage&amp;quot; href=&amp;quot;http://amit-agarwal.co.in&amp;quot;&amp;gt;Amit Agarwal (AKA), amit.agarwal@amit-agarwal.co.in
# COMPANY: Individual
# VERSION: 1.0
# CREATED: 04/07/2010 08:19:29 AM IST
# REVISION: —
#===============================================================================
websites=&amp;amp;#8221;space seperated &amp;lt;a class=&amp;quot;zem_slink freebase/en/website&amp;quot; title=&amp;quot;Website&amp;quot; rel=&amp;quot;wikipedia&amp;quot; href=&amp;quot;http://en.wikipedia.org/wiki/Website&amp;quot;&amp;gt;website address like http://amit-agarwal.co.in http://blog.amit-agarwal.co.in&amp;amp;#8221;
echo &amp;amp;#8221;Checking the sites for Links&amp;amp;#8221;
echo $websites|tr &amp;amp;#8217; &amp;amp;#8217; &amp;amp;#8217;\n&amp;amp;#8217;
echo
echo
for i in $websites
do
curl -s $i |grep amit-agarwal.co.in &amp;gt; &amp;lt;a class=&amp;quot;zem_slink freebase/en/dev_null&amp;quot; title=&amp;quot;/dev/null&amp;quot; rel=&amp;quot;wikipedia&amp;quot; href=&amp;quot;http://en.wikipedia.org/wiki//dev/null&amp;quot;&amp;gt;/dev/null
if [ $? != 0 ]
then
echo &amp;amp;#8221;Link not found on $i&amp;amp;#8221;
fi
done
Then make a crontab entry like this:
40 08 * * * (echo &amp;amp;#8221;Subject: Link verification on affiliate sites @ `date`&amp;amp;#8221;;/checklinks.sh) |/usr/sbin/sendmail &amp;lt;h6 class=&amp;quot;zemanta-related-title&amp;quot;&amp;gt;Related articles by Zemanta &amp;lt;ul class=&amp;quot;zemanta-article-ul&amp;quot;&amp;gt; &amp;lt;li class=&amp;quot;zemanta-article-ul-li&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;http://blog.amit-agarwal.co.in/2010/03/08/email-web-statistics-from-the-hosted-website-using-awstats-page/&amp;quot;&amp;gt;Email web statistics from the hosted website using awstats page. (amit-agarwal.co.in) &amp;lt;li class=&amp;quot;zemanta-article-ul-li&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;http://on10.net/blogs/sarahintampa/Bings-Wallpaper-Search-Feature/&amp;quot;&amp;gt;Bing&amp;amp;#8217;s Wallpaper Search Feature (on10.net) &amp;lt;li class=&amp;quot;zemanta-article-ul-li&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;http://blog.amit-agarwal.co.in/2010/02/10/bash-script-with-sql-to-get-the-number-of-records-from-multiple-tables/&amp;quot;&amp;gt;bash script with sql to get the number of records from multiple tables. (amit-agarwal.co.in) &amp;lt;li class=&amp;quot;zemanta-article-ul-li&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;http://lifehacker.com/5483992/variably-safe-for-work-previews-questionable-links-keeps-you-out-of-trouble&amp;quot;&amp;gt;Variably Safe For Work Previews Questionable Links, Keeps You Out of Trouble (lifehacker.com) &amp;lt;li class=&amp;quot;zemanta-article-ul-li&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;http://blog.amit-agarwal.co.in/2010/04/07/email-with-templates-with-variables-from-the-command-line-with-sendmail-or-any-other-mta/&amp;quot;&amp;gt;email with templates (with variables) from the command line with sendmail or any other MTA. (amit-agarwal.co.in) &amp;lt;div class=&amp;quot;zemanta-pixie&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zemanta-pixie-a&amp;quot; title=&amp;quot;Reblog this post [with Zemanta]&amp;quot; href=&amp;quot;http://reblog.zemanta.com/zemified/a5be6337-90ec-447d-b44c-ee5c4a2128c2/&amp;quot;&amp;gt;&amp;lt;img class=&amp;quot;zemanta-pixie-img&amp;quot; src=&amp;quot;http://blog.amit-agarwal.co.in/wp-content/uploads/2010/08/reblog_b92.png&amp;quot; alt=&amp;quot;Reblog this post [with Zemanta]&amp;quot; /&amp;gt;&amp;lt;span class=&amp;quot;zem-script more-related more-info pretty-attribution paragraph-reblog&amp;quot;&amp;gt;
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1180 ">
              <title>&lt;![CDATA[10 Wordpress Traffic Builder Plugins That Work]]></title>
              <link>&lt;![CDATA[/2010/05/26/10-wordpress-traffic-builder-plugins-work/]]></link>
              <pubDate>1274874115</pubDate>
              <content>&lt;![CDATA[ This article covers several useful &amp;lt;a class=&amp;quot;zem_slink freebase/en/wordpress&amp;quot; title=&amp;quot;WordPress&amp;quot; rel=&amp;quot;homepage&amp;quot; href=&amp;quot;http://wordpress.org&amp;quot;&amp;gt;WordPress traffic builder &amp;lt;a class=&amp;quot;zem_slink freebase/en/plugin&amp;quot; title=&amp;quot;Plug-in (computing)&amp;quot; rel=&amp;quot;wikipedia&amp;quot; href=&amp;quot;http://en.wikipedia.org/wiki/Plug-in_%28computing%29&amp;quot;&amp;gt;plugins. The most important aspect of owning a &amp;lt;a class=&amp;quot;zem_slink freebase/en/website&amp;quot; title=&amp;quot;Website&amp;quot; rel=&amp;quot;wikipedia&amp;quot; href=&amp;quot;http://en.wikipedia.org/wiki/Website&amp;quot;&amp;gt;website is the amount of visitors you receive. I’m referring to your website’s traffic, which can be very hard to generate in the beginning stages. It’s essential that you &amp;lt;a href=&amp;quot;http://www.makeuseof.com/tag/6-websites-to-track-a-websites-traffic/&amp;quot;&amp;gt;track your website’s traffic to see where you’re at.
&amp;lt;a class=&amp;quot;zem_slink freebase/en/search_engine_optimization&amp;quot; title=&amp;quot;Search engine optimization&amp;quot; rel=&amp;quot;wikipedia&amp;quot; href=&amp;quot;http://en.wikipedia.org/wiki/Search_engine_optimization&amp;quot;&amp;gt;Search Engine Optimization (SEO) deals with optimizing your site to increase incoming traffic to it. It is a skill that takes a lot of effort and patience to master. Here are &amp;lt;a href=&amp;quot;http://www.makeuseof.com/tag/search-engine-optimization-mistakes-that-will-destroy-your-website/&amp;quot;&amp;gt;10 common SEO mistakes that can destroy your website (and &amp;lt;a href=&amp;quot;http://www.makeuseof.com/tag/10-common-seo-mistakes-that-can-destroy-your-website-part-ii/&amp;quot;&amp;gt;10 more here). You can &amp;lt;a href=&amp;quot;http://www.makeuseof.com/tag/traffic-travis-free-seo-management-tool/&amp;quot;&amp;gt;manage your SEO online with free tools as well.
Here is a list of 10 WordPress traffic builder plugins that work. Installing these to your blog should help you get off to a good start with your SEO.
&amp;lt;span style=&amp;quot;font-size: medium;&amp;quot;&amp;gt;1-3. &amp;lt;a href=&amp;quot;http://wordpress.org/extend/plugins/all-in-one-seo-pack/&amp;quot;&amp;gt;All in One SEO Pack, &amp;lt;a href=&amp;quot;http://wordpress.org/extend/plugins/google-sitemap-generator/&amp;quot;&amp;gt;Google XML Sitemaps, &amp;lt;a href=&amp;quot;http://wordpress.org/extend/plugins/seo-image/&amp;quot;&amp;gt;SEO Friendly Images &amp;lt;img src=&amp;quot;http://blog.amit-agarwal.co.in/wp-content/uploads/2010/08/1-allinone_seo_pack.png&amp;quot; alt=&amp;quot;Wordpress traffic builder plugins&amp;quot; width=&amp;quot;557&amp;quot; height=&amp;quot;441&amp;quot; align=&amp;quot;bottom&amp;quot; /&amp;gt;
The first 3 plugins on this list were featured in an article that Karl wrote back in December called &amp;lt;a href=&amp;quot;http://www.makeuseof.com/tag/3-wordpress-plug-ins-to-automate-improve-your-blog-seo/&amp;quot;&amp;gt;3 WordPress Plugins To Automate &amp;amp; Improve Your Blog SEO. They were All in One SEO Pack, Google XML Sitemaps, and SEO Friendly Images. If you haven’t already, I suggest you try them out—they really work.
URL: &amp;lt;a href=&amp;quot;http://feedproxy.google.com/~r/Makeuseof/~3/dh3-V6El6Hw/&amp;quot;&amp;gt;http://feedproxy.google.com/~r/Makeuseof/~3/dh3-V6El6Hw/&amp;lt;h6 class=&amp;quot;zemanta-related-title&amp;quot;&amp;gt;Related articles by Zemanta &amp;lt;ul class=&amp;quot;zemanta-article-ul&amp;quot;&amp;gt; &amp;lt;li class=&amp;quot;zemanta-article-ul-li&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;http://www.wpjedi.com/twitter-anywhere-plus-plugin/&amp;quot;&amp;gt;Twitter @Anywhere Plus Plugin: Add @Anywhere To WordPress (wpjedi.com) &amp;lt;li class=&amp;quot;zemanta-article-ul-li&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;http://www.makeuseof.com/tag/10-wordpress-traffic-builder-plugins-work/&amp;quot;&amp;gt;10 WordPress Traffic Builder Plugins That Work (makeuseof.com) &amp;lt;li class=&amp;quot;zemanta-article-ul-li&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;http://www.socialmediatoday.com/SMC/189508&amp;quot;&amp;gt;Top WordPress Plugins You Should be Using Right Now (socialmediatoday.com) &amp;lt;li class=&amp;quot;zemanta-article-ul-li&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;http://www.blogworldexpo.com/blog/2010/05/03/top-10-most-popular-wordpress-plugins/&amp;quot;&amp;gt;Top 10 Most Popular WordPress Plugins (blogworldexpo.com) &amp;lt;li class=&amp;quot;zemanta-article-ul-li&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;http://www.davidnaylor.co.uk/wassup-wordpress-plugin.html&amp;quot;&amp;gt;Wassup WordPress Plugin (davidnaylor.co.uk) &amp;lt;div class=&amp;quot;zemanta-pixie&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zemanta-pixie-a&amp;quot; title=&amp;quot;Reblog this post [with Zemanta]&amp;quot; href=&amp;quot;http://reblog.zemanta.com/zemified/b406ea7a-5cfc-433e-a942-fbd6f06ddbd4/&amp;quot;&amp;gt;&amp;lt;img class=&amp;quot;zemanta-pixie-img&amp;quot; src=&amp;quot;http://blog.amit-agarwal.co.in/wp-content/uploads/2010/08/reblog_b70.png&amp;quot; alt=&amp;quot;Reblog this post [with Zemanta]&amp;quot; /&amp;gt;&amp;lt;span class=&amp;quot;zem-script more-related more-info pretty-attribution paragraph-reblog&amp;quot;&amp;gt;
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1181 ">
              <title>&lt;![CDATA[Script to download all the related videos from youtube with youtube-dl]]></title>
              <link>&lt;![CDATA[/2010/05/17/script-download-related-videos-youtube-youtubedl/]]></link>
              <pubDate>1274111960</pubDate>
              <content>&lt;![CDATA[ Lets cut the long discussion &amp;lt;a class=&amp;quot;zem_slink freebase/en/short_subject&amp;quot; title=&amp;quot;Short film&amp;quot; rel=&amp;quot;wikipedia&amp;quot; href=&amp;quot;http://en.wikipedia.org/wiki/Short_film&amp;quot;&amp;gt;short and directly give you the script. The script is combination of all the posts that I did in the past about youtube &amp;lt;a class=&amp;quot;zem_slink freebase/en/uploading_and_downloading&amp;quot; title=&amp;quot;Uploading and downloading&amp;quot; rel=&amp;quot;wikipedia&amp;quot; href=&amp;quot;http://en.wikipedia.org/wiki/Uploading_and_downloading&amp;quot;&amp;gt;downloads. You need to copy all the &amp;lt;a class=&amp;quot;zem_slink freebase/en/uniform_resource_locator&amp;quot; title=&amp;quot;Uniform Resource Locator&amp;quot; rel=&amp;quot;wikipedia&amp;quot; href=&amp;quot;http://en.wikipedia.org/wiki/Uniform_Resource_Locator&amp;quot;&amp;gt;URL&amp;amp;#8217;s in a file called &amp;amp;#8221;~/youtube.urls&amp;amp;#8221; which you want to be downloaded. Or if you need to donwload the related videos, then save the html of the page and give it as the first argument for the script. So, here&amp;amp;#8217;s the scrit:
#!/bin/bash –
#===============================================================================
# FILE: youtube_releated.sh
# USAGE: ./youtube_releated.sh
# DESCRIPTION: Get the related urls from the youtube html
# OPTIONS: —
# REQUIREMENTS: —
# BUGS: —
# NOTES: —
# AUTHOR: Amit Agarwal (AKA), amit.agarwal@amit-agarwal.co.in
# COMPANY: Individual
# VERSION: 1.0
# CREATED: 05/02/2010 04:45:54 PM IST
# REVISION: —
#===============================================================================
user=raj77india
pass=Kukku1977
if [ $# -ge 1 ]
then
for i in $(&amp;lt;a class=&amp;quot;zem_slink freebase/en/grep&amp;quot; title=&amp;quot;Grep&amp;quot; rel=&amp;quot;wikipedia&amp;quot; href=&amp;quot;http://en.wikipedia.org/wiki/Grep&amp;quot;&amp;gt;grep video-&amp;lt;a class=&amp;quot;zem_slink freebase/en/html_element&amp;quot; title=&amp;quot;HTML element&amp;quot; rel=&amp;quot;wikipedia&amp;quot; href=&amp;quot;http://en.wikipedia.org/wiki/HTML_element&amp;quot;&amp;gt;list-item $1 |sed &amp;amp;#8217;s/&amp;amp;.*//&amp;amp;#8217;|sed &amp;amp;#8217;s/.*=&amp;amp;#8221;\(.*\)/\1/&amp;amp;#8217;)
do
echo &amp;amp;#8221;&amp;lt;a class=&amp;quot;zem_slink freebase/en/writing&amp;quot; title=&amp;quot;Writing&amp;quot; rel=&amp;quot;wikipedia&amp;quot; href=&amp;quot;http://en.wikipedia.org/wiki/Writing&amp;quot;&amp;gt;Writing $i to youtube.urls file&amp;amp;#8221;
echo &amp;amp;#8221;http://www.youtube.com$i&amp;amp;#8221; &amp;raquo; ~/youtube.urls
done
fi
read -p &amp;amp;#8221;Download all the urls :&amp;amp;#8221; ans
cd ~
if [ &amp;amp;#8221;$ans&amp;amp;#8221; = &amp;amp;#8221;y&amp;amp;#8221; ]
then
grep -v &amp;amp;#8221;^#&amp;amp;#8221; ~/youtube.urls &amp;gt; /tmp/youtube.urls
while read line
do
youtube-dl -u $user -p $pass -t $line
done &amp;lt; /tmp/youtube.urls
fi
read -p &amp;amp;#8221;Add title to the file :&amp;amp;#8221; ans1
if [ &amp;amp;#8221;$ans1&amp;amp;#8221; != &amp;amp;#8221;y&amp;amp;#8221; ]
then
exit
fi
rm -f /tmp/youtube.urls
while read line
do
echo $line|grep -c &amp;amp;#8221;^#&amp;amp;#8221;
if [ $(echo $line|grep -c &amp;amp;#8221;^#&amp;amp;#8221;) -eq 1 ]
then
echo &amp;amp;#8221;#$line&amp;amp;#8221; &amp;raquo;/tmp/youtube.urls
echo &amp;amp;#8221;Skipping $line&amp;amp;#8221;
continue
else
title=$(youtube-dl -u $user -p $pass -e $line)
echo &amp;amp;#8221;title is $title&amp;amp;#8221;
fi
done &amp;lt;~/youtube.urls
mv /tmp/youtube.urls ~/youtube.urls
Since the script is quite simple, its not much documented. Anyways if you need help, feel free to contact me 🙂 (contact form or comment)&amp;lt;h6 class=&amp;quot;zemanta-related-title&amp;quot;&amp;gt;Related articles by Zemanta &amp;lt;ul class=&amp;quot;zemanta-article-ul&amp;quot;&amp;gt; &amp;lt;li class=&amp;quot;zemanta-article-ul-li&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;http://mashable.com/2010/05/12/youtube-unlisted-videos/&amp;quot;&amp;gt;YouTube Introduces New Privacy Option for Videos (mashable.com) &amp;lt;li class=&amp;quot;zemanta-article-ul-li&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;http://blog.amit-agarwal.co.in/2010/05/03/download-youtube-video-command-line-youtubedl/&amp;quot;&amp;gt;Download youtube video directly from the command line with youtube-dl (amit-agarwal.co.in) &amp;lt;li class=&amp;quot;zemanta-article-ul-li&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;http://www.mt-soft.com.ar/2010/05/08/bytubed-makes-it-easier-than-ever-to-download-multiple-youtube-videos-in-one-go/&amp;quot;&amp;gt;BYTubeD Makes It Easier Than Ever To Download Multiple Youtube Videos In One Go (mt-soft.com.ar) &amp;lt;li class=&amp;quot;zemanta-article-ul-li&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;http://news.cnet.com/8301-27076_3-20004804-248.html?part=rss&amp;amp;subj=news&amp;amp;tag=2547-1_3-0-20&amp;quot;&amp;gt;YouTube gets a very useful &amp;amp;#8217;unlisted&amp;amp;#8217; video option (news.cnet.com) &amp;lt;li class=&amp;quot;zemanta-article-ul-li&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;http://r.zemanta.com/?u=http%3A//www.telegraph.co.uk/technology/google/7718944/YouTube-to-allow-private-videos.html&amp;amp;a=17971522&amp;amp;rid=c0dd8728-f84d-4fa7-9713-82709d89e076&amp;amp;e=60f5225d824312c9b68b523582484d50&amp;quot;&amp;gt;YouTube to allow &amp;amp;#8217;private&amp;amp;#8217; videos (telegraph.co.uk) &amp;lt;div class=&amp;quot;zemanta-pixie&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zemanta-pixie-a&amp;quot; title=&amp;quot;Reblog this post [with Zemanta]&amp;quot; href=&amp;quot;http://reblog.zemanta.com/zemified/c0dd8728-f84d-4fa7-9713-82709d89e076/&amp;quot;&amp;gt;&amp;lt;img class=&amp;quot;zemanta-pixie-img&amp;quot; src=&amp;quot;http://blog.amit-agarwal.co.in/wp-content/uploads/2010/08/reblog_b88.png&amp;quot; alt=&amp;quot;Reblog this post [with Zemanta]&amp;quot; /&amp;gt;&amp;lt;span class=&amp;quot;zem-script more-related more-info pretty-attribution paragraph-reblog&amp;quot;&amp;gt;
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1182 ">
              <title>&lt;![CDATA[Downloading all related videos from youtube with youtube-dl]]></title>
              <link>&lt;![CDATA[/2010/05/16/downloading-related-videos-youtube-youtubedl/]]></link>
              <pubDate>1274025196</pubDate>
              <content>&lt;![CDATA[ How many time did you want to see all the videos (related) to the one you were watching on youtube but decided otherwise as the downloaded was not fast enough. Or has it happened to you that you wanted to &amp;lt;a class=&amp;quot;zem_slink freebase/en/uploading_and_downloading&amp;quot; title=&amp;quot;Uploading and downloading&amp;quot; rel=&amp;quot;wikipedia&amp;quot; href=&amp;quot;http://en.wikipedia.org/wiki/Uploading_and_downloading&amp;quot;&amp;gt;download all the related videos, in either case you can use the youtube-dl utility I blogged about some times back. First you need to get all the &amp;lt;a class=&amp;quot;zem_slink freebase/en/uniform_resource_locator&amp;quot; title=&amp;quot;Uniform Resource Locator&amp;quot; rel=&amp;quot;wikipedia&amp;quot; href=&amp;quot;http://en.wikipedia.org/wiki/Uniform_Resource_Locator&amp;quot;&amp;gt;URL&amp;amp;#8217;s in a &amp;lt;a class=&amp;quot;zem_slink freebase/en/text_file&amp;quot; title=&amp;quot;Text file&amp;quot; rel=&amp;quot;wikipedia&amp;quot; href=&amp;quot;http://en.wikipedia.org/wiki/Text_file&amp;quot;&amp;gt;text file, and the simplest way to do this is :
press &amp;lt;a class=&amp;quot;zem_slink freebase/en/control_key&amp;quot; title=&amp;quot;Control key&amp;quot; rel=&amp;quot;wikipedia&amp;quot; href=&amp;quot;http://en.wikipedia.org/wiki/Control_key&amp;quot;&amp;gt;Ctrl&#43;u
copy the html and paste it in a text file and save it.
Note: Ctrl&#43;u in most browsers is for viewing the source. If you do not want to do this then you can simply do a save as and save the html &amp;lt;a class=&amp;quot;zem_slink freebase/en/computer_file&amp;quot; title=&amp;quot;Computer file&amp;quot; rel=&amp;quot;wikipedia&amp;quot; href=&amp;quot;http://en.wikipedia.org/wiki/Computer_file&amp;quot;&amp;gt;file 🙂
Now time to get all the URL&amp;amp;#8217;s from the html:
for i in $(&amp;lt;a class=&amp;quot;zem_slink freebase/en/grep&amp;quot; title=&amp;quot;Grep&amp;quot; rel=&amp;quot;wikipedia&amp;quot; href=&amp;quot;http://en.wikipedia.org/wiki/Grep&amp;quot;&amp;gt;grep video-&amp;lt;a class=&amp;quot;zem_slink freebase/en/html_element&amp;quot; title=&amp;quot;HTML element&amp;quot; rel=&amp;quot;wikipedia&amp;quot; href=&amp;quot;http://en.wikipedia.org/wiki/HTML_element&amp;quot;&amp;gt;list-item |sed &amp;amp;#8217;s/&amp;amp;amp.*//&amp;amp;#8217;|sed &amp;amp;#8217;s/.*=&amp;amp;#8221;\(.*\)/\1/&amp;amp;#8217;)
do
echo &amp;amp;#8221;Writing $i to youtube.urls file&amp;amp;#8221;
echo &amp;amp;#8221;http://www.youtube.com$i&amp;amp;#8221; &amp;raquo; ~/youtube.urls
done
Just change the filename in the above with the file that you just saved and you will get all the URL&amp;amp;#8217;s in the file &amp;amp;#8221;~/youtube.urls&amp;amp;#8221;. Once this is done you can simply do
youtube-dl -a ~/youtube.urls&amp;lt;h6 class=&amp;quot;zemanta-related-title&amp;quot;&amp;gt;Related articles by Zemanta &amp;lt;ul class=&amp;quot;zemanta-article-ul&amp;quot;&amp;gt; &amp;lt;li class=&amp;quot;zemanta-article-ul-li&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;http://www.mt-soft.com.ar/2010/04/15/a-new-way-to-gather-and-organize-your-online-content-with-weblist-me/&amp;quot;&amp;gt;A New Way To Gather And Organize Your Online Content With Weblist.me (mt-soft.com.ar) &amp;lt;li class=&amp;quot;zemanta-article-ul-li&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;http://chrisfulstow.com/counting-blank-lines-in-a-large-text-file-with-csharp-and-dotnet/&amp;quot;&amp;gt;Counting blank lines in a large text file with C# and .NET (chrisfulstow.com) &amp;lt;li class=&amp;quot;zemanta-article-ul-li&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;http://helpdeskgeek.com/linux-tips/linux-cat-command/&amp;quot;&amp;gt;View Text Files Quickly in Linux (helpdeskgeek.com) &amp;lt;li class=&amp;quot;zemanta-article-ul-li&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;http://blog.amit-agarwal.co.in/2010/04/05/removereplace-textpath-in-config-file/&amp;quot;&amp;gt;remove/replace text/path in config file. (amit-agarwal.co.in) &amp;lt;div class=&amp;quot;zemanta-pixie&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zemanta-pixie-a&amp;quot; title=&amp;quot;Reblog this post [with Zemanta]&amp;quot; href=&amp;quot;http://reblog.zemanta.com/zemified/e20839dd-9a7d-40ae-a40b-f508c0e5b70f/&amp;quot;&amp;gt;&amp;lt;img class=&amp;quot;zemanta-pixie-img&amp;quot; src=&amp;quot;http://blog.amit-agarwal.co.in/wp-content/uploads/2010/08/reblog_b87.png&amp;quot; alt=&amp;quot;Reblog this post [with Zemanta]&amp;quot; /&amp;gt;&amp;lt;span class=&amp;quot;zem-script more-related more-info pretty-attribution paragraph-reblog&amp;quot;&amp;gt;
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1183 ">
              <title>&lt;![CDATA[Download youtube video directly from the command line with youtube-dl]]></title>
              <link>&lt;![CDATA[/2010/05/03/download-youtube-video-command-line-youtubedl/]]></link>
              <pubDate>1272908287</pubDate>
              <content>&lt;![CDATA[ If you keep searching for applications to &amp;lt;a class=&amp;quot;zem_slink freebase/en/uploading_and_downloading&amp;quot; title=&amp;quot;Uploading and downloading&amp;quot; rel=&amp;quot;wikipedia&amp;quot; href=&amp;quot;http://en.wikipedia.org/wiki/Uploading_and_downloading&amp;quot;&amp;gt;download the &amp;lt;a class=&amp;quot;zem_slink freebase/en/youtube&amp;quot; title=&amp;quot;YouTube&amp;quot; rel=&amp;quot;homepage&amp;quot; href=&amp;quot;http://www.youtube.com/&amp;quot;&amp;gt;youtube videos or you keep searching for the firefox addons to download the embedded the video, then this is for you. Ofcouse that is the case, only if you do not want to copy it after you have watched it in the &amp;lt;a class=&amp;quot;zem_slink freebase/en/web_browser&amp;quot; title=&amp;quot;Web browser&amp;quot; rel=&amp;quot;wikipedia&amp;quot; href=&amp;quot;http://en.wikipedia.org/wiki/Web_browser&amp;quot;&amp;gt;browser :). If you have already watched it then you can copy it from the &amp;lt;a class=&amp;quot;zem_slink freebase/en/mozilla_firefox&amp;quot; title=&amp;quot;Firefox&amp;quot; rel=&amp;quot;homepage&amp;quot; href=&amp;quot;http://www.mozilla.com/en-US/firefox/&amp;quot;&amp;gt;Firefox cache. I will post on that later for now lets see youtube-dl.
Lets download it first:
&amp;lt;a class=&amp;quot;zem_slink freebase/en/sudo&amp;quot; title=&amp;quot;Sudo&amp;quot; rel=&amp;quot;homepage&amp;quot; href=&amp;quot;http://www.sudo.ws/&amp;quot;&amp;gt;sudo yum install youtube-dl
Now when you want to download a video then all you need to do is
youtube-dl &amp;lt;a class=&amp;quot;zem_slink freebase/en/uniform_resource_locator&amp;quot; title=&amp;quot;Uniform Resource Locator&amp;quot; rel=&amp;quot;wikipedia&amp;quot; href=&amp;quot;http://en.wikipedia.org/wiki/Uniform_Resource_Locator&amp;quot;&amp;gt;URL
This will work only if you can watch without logging in to your account, if you need to &amp;lt;a class=&amp;quot;zem_slink freebase/guid/9202a8c04000641f80000000055d5879&amp;quot; title=&amp;quot;Login&amp;quot; rel=&amp;quot;wikipedia&amp;quot; href=&amp;quot;http://en.wikipedia.org/wiki/Login&amp;quot;&amp;gt;login then you should provide your &amp;lt;a class=&amp;quot;zem_slink freebase/en/user&amp;quot; title=&amp;quot;User (computing)&amp;quot; rel=&amp;quot;wikipedia&amp;quot; href=&amp;quot;http://en.wikipedia.org/wiki/User_%28computing%29&amp;quot;&amp;gt;username and &amp;lt;a class=&amp;quot;zem_slink freebase/en/password&amp;quot; title=&amp;quot;Password&amp;quot; rel=&amp;quot;wikipedia&amp;quot; href=&amp;quot;http://en.wikipedia.org/wiki/Password&amp;quot;&amp;gt;password, like so:
youtube-dl -u username -p password URL
The problem with this is that the file will be saved with not so useful name. If you want to save the file with appropriate name then you can save the file with the title name:
youtube-dl -t URL
There are few other options worth looking at, specially :
-f FMT, –format=FMT
video format code
-b, –best-quality download the best quality video possible
-m, –mobile-version
alias for -f 17
-d, –high-def alias for -f 22
If you have multiple url&amp;amp;#8217;s to download then place all the url&amp;amp;#8217;s in a file, and then use the command:
youtube-dl -a filename
Hope this is useful to you.&amp;lt;h6 class=&amp;quot;zemanta-related-title&amp;quot;&amp;gt;Related articles by Zemanta &amp;lt;ul class=&amp;quot;zemanta-article-ul&amp;quot;&amp;gt; &amp;lt;li class=&amp;quot;zemanta-article-ul-li&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;http://en.onsoftware.com/ask-onsoftware-downloading-hd-video-from-youtube/&amp;quot;&amp;gt;Ask OnSoftware: Downloading HD video from YouTube (en.onsoftware.com) &amp;lt;li class=&amp;quot;zemanta-article-ul-li&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;http://www.ghacks.net/2010/04/08/bulk-youtube-video-downloader-for-firefox/&amp;quot;&amp;gt;Bulk Youtube Video Downloader For Firefox (ghacks.net) &amp;lt;li class=&amp;quot;zemanta-article-ul-li&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;http://www.ghacks.net/2010/05/03/megavideo-time-limit-bypass/&amp;quot;&amp;gt;Megavideo Time Limit Bypass (ghacks.net) &amp;lt;li class=&amp;quot;zemanta-article-ul-li&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;http://www.ghacks.net/2010/04/13/convert-youtube-videos-to-mp3/&amp;quot;&amp;gt;Convert Youtube Videos To MP3 (ghacks.net) &amp;lt;li class=&amp;quot;zemanta-article-ul-li&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;http://adriansjournal.blogspot.com/2010/04/at-last-forgotten-youtube-video.html&amp;quot;&amp;gt;At Last! The Forgotten YouTube Video Downloader. (adriansjournal.blogspot.com) &amp;lt;div class=&amp;quot;zemanta-pixie&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zemanta-pixie-a&amp;quot; title=&amp;quot;Reblog this post [with Zemanta]&amp;quot; href=&amp;quot;http://reblog.zemanta.com/zemified/e6774c25-e405-4636-8b59-68f2046b4476/&amp;quot;&amp;gt;&amp;lt;img class=&amp;quot;zemanta-pixie-img&amp;quot; src=&amp;quot;http://blog.amit-agarwal.co.in/wp-content/uploads/2010/08/reblog_b80.png&amp;quot; alt=&amp;quot;Reblog this post [with Zemanta]&amp;quot; /&amp;gt;&amp;lt;span class=&amp;quot;zem-script more-related more-info pretty-attribution paragraph-reblog&amp;quot;&amp;gt;
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1184 ">
              <title>&lt;![CDATA[How To Modify Your Wordpress Theme Via The Browser Using Stiqr]]></title>
              <link>&lt;![CDATA[/2010/04/27/modify-wordpress-theme-browser-stiqr/]]></link>
              <pubDate>1272384463</pubDate>
              <content>&lt;![CDATA[ &amp;lt;a href=&amp;quot;http://feedads.g.doubleclick.net/%7Ea/O7jc_lFA7WTnPLGHjbYaxjhpRBM/0/da&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;http://blog.amit-agarwal.com/wp-content/uploads/img.zemanta.com/%7Ea/O7jc_lFA7WTnPLGHjbYaxjhpRBM/0/di&amp;quot; alt=&amp;quot;&amp;quot; align=&amp;quot;bottom&amp;quot; /&amp;gt;
&amp;lt;a href=&amp;quot;http://feedads.g.doubleclick.net/%7Ea/O7jc_lFA7WTnPLGHjbYaxjhpRBM/1/da&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;http://blog.amit-agarwal.com/wp-content/uploads/img.zemanta.com/%7Ea/O7jc_lFA7WTnPLGHjbYaxjhpRBM/1/di&amp;quot; alt=&amp;quot;&amp;quot; align=&amp;quot;bottom&amp;quot; /&amp;gt;
&amp;lt;img src=&amp;quot;http://blog.amit-agarwal.co.in/wp-content/uploads/2010/08/00_Stiqr_logo.jpg&amp;quot; alt=&amp;quot;00_Stiqr_logo.jpg&amp;quot; width=&amp;quot;253&amp;quot; height=&amp;quot;114&amp;quot; align=&amp;quot;bottom&amp;quot; /&amp;gt;Ordinary &amp;lt;a href=&amp;quot;http://www.makeuseof.com/tag/how-to-build-a-self-hosted-wordpress-blog-for-free/&amp;quot;&amp;gt;self-hosted WordPress users know only too well that even though choosing and using thousands of available themes is a snap, creating one is an almost impossible task. You could use &amp;lt;a href=&amp;quot;http://www.makeuseof.com/tag/customize-design-wordpress-theme-easily-constructor/&amp;quot;&amp;gt;one of the customizable themes to modify the look to your liking, but that’s as far as you can go. Theme creating is not for the faint-hearted who are afraid to plunge into &amp;lt;a class=&amp;quot;zem_slink freebase/en/html&amp;quot; title=&amp;quot;HTML&amp;quot; rel=&amp;quot;wikipedia&amp;quot; href=&amp;quot;http://en.wikipedia.org/wiki/HTML&amp;quot;&amp;gt;HTML, &amp;lt;a class=&amp;quot;zem_slink freebase/en/php&amp;quot; title=&amp;quot;PHP&amp;quot; rel=&amp;quot;homepage&amp;quot; href=&amp;quot;http://www.php.net/&amp;quot;&amp;gt;PHP and &amp;lt;a class=&amp;quot;zem_slink freebase/en/cascading_style_sheets&amp;quot; title=&amp;quot;Cascading Style Sheets&amp;quot; rel=&amp;quot;wikipedia&amp;quot; href=&amp;quot;http://en.wikipedia.org/wiki/Cascading_Style_Sheets&amp;quot;&amp;gt;CSS coding.
But that’s not the case anymore. I recently stumbled across a WordPress theme &amp;lt;a class=&amp;quot;zem_slink freebase/en/editing&amp;quot; title=&amp;quot;Editing&amp;quot; rel=&amp;quot;wikipedia&amp;quot; href=&amp;quot;http://en.wikipedia.org/wiki/Editing&amp;quot;&amp;gt;editor plugin called &amp;lt;a href=&amp;quot;http://www.stiqr.com/&amp;quot;&amp;gt;Stiqr – still in beta as every other Web 2.0 service is – which can help ordinary web users to become a “skillful” &amp;lt;a class=&amp;quot;zem_slink freebase/en/web_design&amp;quot; title=&amp;quot;Web design&amp;quot; rel=&amp;quot;wikipedia&amp;quot; href=&amp;quot;http://en.wikipedia.org/wiki/Web_design&amp;quot;&amp;gt;web designer. If you can &amp;lt;a class=&amp;quot;zem_slink freebase/en/drag-and-drop&amp;quot; title=&amp;quot;Drag-and-drop&amp;quot; rel=&amp;quot;wikipedia&amp;quot; href=&amp;quot;http://en.wikipedia.org/wiki/Drag-and-drop&amp;quot;&amp;gt;drag and drop objects, you can modify the look of your web. Self-hosted WordPress is officially included in the list of supported type of websites.
&amp;lt;img src=&amp;quot;http://blog.amit-agarwal.co.in/wp-content/uploads/2010/08/02_Also_works_on.png&amp;quot; alt=&amp;quot;Wordpress theme editor plugin&amp;quot; width=&amp;quot;300&amp;quot; height=&amp;quot;320&amp;quot; align=&amp;quot;bottom&amp;quot; /&amp;gt;
And everything is done without the need for a standalone web builder application, or the coding knowledge. All you need is a browser.
&amp;lt;img src=&amp;quot;http://blog.amit-agarwal.co.in/wp-content/uploads/2010/08/01_Stiqr_front_page.jpg&amp;quot; alt=&amp;quot;Wordpress theme editor plugin&amp;quot; width=&amp;quot;550&amp;quot; height=&amp;quot;325&amp;quot; align=&amp;quot;bottom&amp;quot; /&amp;gt;
&amp;lt;span style=&amp;quot;font-size: medium;&amp;quot;&amp;gt;Setting Up The Stage If you’ve always wanted to design your own &amp;lt;a class=&amp;quot;zem_slink freebase/en/website&amp;quot; title=&amp;quot;Website&amp;quot; rel=&amp;quot;wikipedia&amp;quot; href=&amp;quot;http://en.wikipedia.org/wiki/Website&amp;quot;&amp;gt;website but the all the technical terminologies scared you, now is the perfect time for you to start. Visit Stiqr and click on the “Get Started Now“.
&amp;lt;img src=&amp;quot;http://blog.amit-agarwal.co.in/wp-content/uploads/2010/08/03_Get_Started.png&amp;quot; alt=&amp;quot;Wordpress theme editor plugin&amp;quot; width=&amp;quot;500&amp;quot; height=&amp;quot;165&amp;quot; align=&amp;quot;bottom&amp;quot; /&amp;gt;
But don’t expect to see the ordinary sign-up process because it’s not that obvious. Before going through the “Enter Your Name” and “Enter Your Email” routines, you have to insert one line of code in your website. But you don’t have to tremble with fear, because all the steps are painless in WordPress.
Stiqr will provide you with the code, save it to be used later.
&amp;lt;img src=&amp;quot;http://blog.amit-agarwal.co.in/wp-content/uploads/2010/08/05-One-Line-of-Code.jpg&amp;quot; alt=&amp;quot;wordpress theme editor&amp;quot; width=&amp;quot;566&amp;quot; height=&amp;quot;198&amp;quot; align=&amp;quot;bottom&amp;quot; /&amp;gt;
Armed with the code, login to your WordPress.
&amp;lt;img src=&amp;quot;http://blog.amit-agarwal.co.in/wp-content/uploads/2010/08/06-WP-Login.jpg&amp;quot; alt=&amp;quot;wordpress theme editor&amp;quot; width=&amp;quot;339&amp;quot; height=&amp;quot;335&amp;quot; align=&amp;quot;bottom&amp;quot; /&amp;gt;
Then navigate to the right sidebar, and click “Editor” under the “Appearance” menu.
&amp;lt;img src=&amp;quot;http://blog.amit-agarwal.co.in/wp-content/uploads/2010/08/07-Theme-Editor.jpg&amp;quot; alt=&amp;quot;wordpress theme editor&amp;quot; width=&amp;quot;175&amp;quot; height=&amp;quot;279&amp;quot; align=&amp;quot;bottom&amp;quot; /&amp;gt;
Within the WordPress theme editor plugin, find the “Footer (footer.php)” and click on the link to edit.
&amp;lt;img src=&amp;quot;http://blog.amit-agarwal.co.in/wp-content/uploads/2010/08/07b-Edit-Footer.jpg&amp;quot; alt=&amp;quot;wordpress blog editor&amp;quot; width=&amp;quot;345&amp;quot; height=&amp;quot;260&amp;quot; align=&amp;quot;bottom&amp;quot; /&amp;gt;
You will see the editable lines of codes for “footer.php“. Navigate to the lower part of the codes and find the closing line for the body – “” – and insert the code that you got from Stiqr above it. Then click the “Update File” button.
&amp;lt;img src=&amp;quot;http://blog.amit-agarwal.co.in/wp-content/uploads/2010/08/07c-Insert-stiqr-code.jpg&amp;quot; alt=&amp;quot;wordpress blog editor&amp;quot; width=&amp;quot;340&amp;quot; height=&amp;quot;220&amp;quot; align=&amp;quot;bottom&amp;quot; /&amp;gt;
After the “File edited successfully” notification appear, go to the main page of your WordPress by clicking “Visit Site” button next to the title of your blog.
&amp;lt;img src=&amp;quot;http://blog.amit-agarwal.co.in/wp-content/uploads/2010/08/07d-Edit-success-Visit-Web.jpg&amp;quot; alt=&amp;quot;wordpress blog editor&amp;quot; width=&amp;quot;367&amp;quot; height=&amp;quot;206&amp;quot; align=&amp;quot;bottom&amp;quot; /&amp;gt;
That concludes the preparation stage.
&amp;lt;span style=&amp;quot;font-size: medium;&amp;quot;&amp;gt;Turn Your WordPress Into A Sticker Scrapbook On the front page of your WordPress blog, press the &amp;lt;a class=&amp;quot;zem_slink freebase/en/keyboard_shortcut&amp;quot; title=&amp;quot;Keyboard shortcut&amp;quot; rel=&amp;quot;wikipedia&amp;quot; href=&amp;quot;http://en.wikipedia.org/wiki/Keyboard_shortcut&amp;quot;&amp;gt;key combination of “Shift &#43; F2” to start Stiqr. As a first time Stiqr user, you will have to register first. Start by entering your &amp;lt;a class=&amp;quot;zem_slink freebase/en/e-mail_address&amp;quot; title=&amp;quot;E-mail address&amp;quot; rel=&amp;quot;wikipedia&amp;quot; href=&amp;quot;http://en.wikipedia.org/wiki/E-mail_address&amp;quot;&amp;gt;email address and click “OK“.
&amp;lt;img src=&amp;quot;http://blog.amit-agarwal.co.in/wp-content/uploads/2010/08/08a-Shift-F2-Registration.jpg&amp;quot; alt=&amp;quot;wysiwyg wordpress theme editor&amp;quot; width=&amp;quot;339&amp;quot; height=&amp;quot;161&amp;quot; align=&amp;quot;bottom&amp;quot; /&amp;gt;
Then continue by choosing your preferred password followed by another “OK“. My advice: please come up with a strong password for this one.
&amp;lt;img src=&amp;quot;http://blog.amit-agarwal.co.in/wp-content/uploads/2010/08/08b-Password-Needed.jpg&amp;quot; alt=&amp;quot;wysiwyg wordpress theme editor&amp;quot; width=&amp;quot;333&amp;quot; height=&amp;quot;160&amp;quot; align=&amp;quot;bottom&amp;quot; /&amp;gt;
If the registration is successful, a notification window will pop-up along with a thank you note and what to do next: wait for the page to be refreshed and press “Shift &#43; F2” button one more time.
&amp;lt;img src=&amp;quot;http://blog.amit-agarwal.co.in/wp-content/uploads/2010/08/08c-Registration-Successful-1.jpg&amp;quot; alt=&amp;quot;wysiwyg wordpress theme editor&amp;quot; width=&amp;quot;476&amp;quot; height=&amp;quot;173&amp;quot; align=&amp;quot;bottom&amp;quot; /&amp;gt;
You will be asked to enter your password to log in. Some might think that this step is unnecessary, but you really need the protection since everybody could access this page. You don’t want anybody to mess around with the look of your site, do you? This is also the reason why you need a strong password.
&amp;lt;img src=&amp;quot;http://blog.amit-agarwal.co.in/wp-content/uploads/2010/08/09-Login-to-Edit.jpg&amp;quot; alt=&amp;quot;09 Login to Edit.jpg&amp;quot; width=&amp;quot;332&amp;quot; height=&amp;quot;158&amp;quot; align=&amp;quot;bottom&amp;quot; /&amp;gt;
Upon successful login, an editor bar will appear at the bottom of your page. You can start using the tools and let your creativity go wild.
&amp;lt;img src=&amp;quot;http://blog.amit-agarwal.co.in/wp-content/uploads/2010/08/10-Start-to-Build-A-Blog.jpg&amp;quot; alt=&amp;quot;10 Start to Build A Blog.jpg&amp;quot; width=&amp;quot;499&amp;quot; height=&amp;quot;393&amp;quot; align=&amp;quot;bottom&amp;quot; /&amp;gt;
I will save the the discussion about editing the look of your webpage using Stiqr for the next part of this article. Until then, you can experiment and get yourself familiar with this cool web-based WYSIWYG web editor.
So far, my opinion about Stiqr is that it has opened up a whole new horizon that I’ve never thought possible: live editing the look of WordPress (or any other kind of website) directly from the browser without the need for coding knowledge. I am absolutely sure that I’ll use this service often in the future.
What do you think of Stiqr? Do you know similar services out there? Please share using the comments below.
Similar MakeUseOf Articles &amp;lt;a href=&amp;quot;http://www.makeuseof.com/tag/how-to-save-87-by-making-a-free-thesis-wordpress-theme-clone/&amp;quot;&amp;gt;Save $87 By Making A Free ‘Thesis’ WordPress Theme Clone (25 comments) &amp;lt;a href=&amp;quot;http://www.makeuseof.com/tag/safely-experiment-customizing-wordpress-themes/&amp;quot;&amp;gt;How To Safely Experiment With Customizing WordPress Themes (9 comments) &amp;lt;a href=&amp;quot;http://www.makeuseof.com/tag/how-to-change-your-wordpress-blog-theme-in-3-easy-steps/&amp;quot;&amp;gt;How To Change Your WordPress Blog Theme In 3 Easy Steps (11 comments) &amp;lt;a href=&amp;quot;http://www.makeuseof.com/tag/create-wordpress-blog-facebook-template-foxinni/&amp;quot;&amp;gt;Foxinni Facebook Template Makes Your WordPress Blog Look Like Facebook (1 comments) &amp;lt;a href=&amp;quot;http://www.makeuseof.com/tag/customize-design-wordpress-theme-easily-constructor/&amp;quot;&amp;gt;Design Your Own WordPress Theme Easily With Constructor (12 comments) &amp;lt;a href=&amp;quot;http://www.makeuseof.com/tag/a-beginners-guide-to-building-your-own-wordpress-theme/&amp;quot;&amp;gt;A Beginner’s Guide To Building Your Own WordPress Theme (15 comments) &amp;lt;a href=&amp;quot;http://www.makeuseof.com/tag/4-good-websites-for-great-wordpress-and-blogger-skins/&amp;quot;&amp;gt;4 Websites for Great WordPress Themes &amp;amp; Blogger Skins (9 comments) &amp;lt;a href=&amp;quot;http://www.makeuseof.com/tag/understanding-windows-7-themes-inside-out/&amp;quot;&amp;gt;Your Easy Guide to Windows 7 Themes (23 comments) &amp;lt;a href=&amp;quot;http://www.makeuseof.com/tag/top-5-windows-7-themes/&amp;quot;&amp;gt;Top 5 Windows 7 Themes You Might Want To Try (18 comments) &amp;lt;a href=&amp;quot;http://www.makeuseof.com/tag/the-first-wordpress-plugins-you-must-install/&amp;quot;&amp;gt;The First WordPress Plugins You Must Install (34 comments) &amp;lt;a href=&amp;quot;http://feeds.feedburner.com/%7Eff/Makeuseof?a=X7l7fwwrXFo:3Q6GjUxeQfw:qj6IDK7rITs&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;http://blog.amit-agarwal.com/wp-content/uploads/img.zemanta.com/%7Eff/Makeuseof?d=qj6IDK7rITs&amp;quot; alt=&amp;quot;&amp;quot; align=&amp;quot;bottom&amp;quot; /&amp;gt; &amp;lt;a href=&amp;quot;http://feeds.feedburner.com/%7Eff/Makeuseof?a=X7l7fwwrXFo:3Q6GjUxeQfw:gIN9vFwOqvQ&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;http://blog.amit-agarwal.com/wp-content/uploads/img.zemanta.com/%7Eff/Makeuseof?i=X7l7fwwrXFo:3Q6GjUxeQfw:gIN9vFwOqvQ&amp;quot; alt=&amp;quot;&amp;quot; align=&amp;quot;bottom&amp;quot; /&amp;gt; &amp;lt;a href=&amp;quot;http://feeds.feedburner.com/%7Eff/Makeuseof?a=X7l7fwwrXFo:3Q6GjUxeQfw:yIl2AUoC8zA&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;http://blog.amit-agarwal.com/wp-content/uploads/img.zemanta.com/%7Eff/Makeuseof?d=yIl2AUoC8zA&amp;quot; alt=&amp;quot;&amp;quot; align=&amp;quot;bottom&amp;quot; /&amp;gt; &amp;lt;a href=&amp;quot;http://feeds.feedburner.com/%7Eff/Makeuseof?a=X7l7fwwrXFo:3Q6GjUxeQfw:V_sGLiPBpWU&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;http://blog.amit-agarwal.com/wp-content/uploads/img.zemanta.com/%7Eff/Makeuseof?i=X7l7fwwrXFo:3Q6GjUxeQfw:V_sGLiPBpWU&amp;quot; alt=&amp;quot;&amp;quot; align=&amp;quot;bottom&amp;quot; /&amp;gt; &amp;lt;a href=&amp;quot;http://feeds.feedburner.com/%7Eff/Makeuseof?a=X7l7fwwrXFo:3Q6GjUxeQfw:F7zBnMyn0Lo&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;http://blog.amit-agarwal.com/wp-content/uploads/img.zemanta.com/%7Eff/Makeuseof?i=X7l7fwwrXFo:3Q6GjUxeQfw:F7zBnMyn0Lo&amp;quot; alt=&amp;quot;&amp;quot; align=&amp;quot;bottom&amp;quot; /&amp;gt; &amp;lt;a href=&amp;quot;http://feeds.feedburner.com/%7Eff/Makeuseof?a=X7l7fwwrXFo:3Q6GjUxeQfw:I9og5sOYxJI&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;http://blog.amit-agarwal.com/wp-content/uploads/img.zemanta.com/%7Eff/Makeuseof?d=I9og5sOYxJI&amp;quot; alt=&amp;quot;&amp;quot; align=&amp;quot;bottom&amp;quot; /&amp;gt; &amp;lt;a href=&amp;quot;http://feeds.feedburner.com/%7Eff/Makeuseof?a=X7l7fwwrXFo:3Q6GjUxeQfw:D7DqB2pKExk&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;http://blog.amit-agarwal.com/wp-content/uploads/img.zemanta.com/%7Eff/Makeuseof?i=X7l7fwwrXFo:3Q6GjUxeQfw:D7DqB2pKExk&amp;quot; alt=&amp;quot;&amp;quot; align=&amp;quot;bottom&amp;quot; /&amp;gt; &amp;lt;img src=&amp;quot;http://blog.amit-agarwal.com/wp-content/uploads/img.zemanta.com/%7Er/Makeuseof/%7E4/X7l7fwwrXFo&amp;quot; alt=&amp;quot;&amp;quot; width=&amp;quot;1&amp;quot; height=&amp;quot;1&amp;quot; align=&amp;quot;bottom&amp;quot; /&amp;gt;
URL: &amp;lt;a href=&amp;quot;http://feedproxy.google.com/%7Er/Makeuseof/%7E3/X7l7fwwrXFo/&amp;quot;&amp;gt;http://feedproxy.google.com/~r/Makeuseof/~3/X7l7fwwrXFo/&amp;lt;h6 class=&amp;quot;zemanta-related-title&amp;quot;&amp;gt;Related articles by Zemanta &amp;lt;ul class=&amp;quot;zemanta-article-ul&amp;quot;&amp;gt; &amp;lt;li class=&amp;quot;zemanta-article-ul-li&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;http://crenk.com/stiqr-free-wordpress-plugin-that-lets-you-customize-your-wordpress-blog-without-coding/&amp;quot;&amp;gt;Stiqr: Free WordPress Plugin That Lets You Customize Your WordPress Blog Without Coding (crenk.com) &amp;lt;li class=&amp;quot;zemanta-article-ul-li&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;http://www.bloggingot.com/social-media-marketing/add-stickies-to-your-blog-with-stigr/&amp;quot;&amp;gt;Add Stickies To Your Blog With Stiqr (bloggingot.com) &amp;lt;li class=&amp;quot;zemanta-article-ul-li&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;http://www.appscout.com/2010/03/stiqr_allows_you_to_add_sticke.php&amp;quot;&amp;gt;Stiqr Allows You to Add Stickers and Widgets to Your Web Page (appscout.com) &amp;lt;li class=&amp;quot;zemanta-article-ul-li&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;http://crenk.com/free-visual-theme-editor-for-wordpress/&amp;quot;&amp;gt;Free Visual Theme Editor for WordPress (crenk.com) &amp;lt;div class=&amp;quot;zemanta-pixie&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zemanta-pixie-a&amp;quot; title=&amp;quot;Reblog this post [with Zemanta]&amp;quot; href=&amp;quot;http://reblog.zemanta.com/zemified/0ebf2b71-69a9-482f-b877-38fa979b5aab/&amp;quot;&amp;gt;&amp;lt;img class=&amp;quot;zemanta-pixie-img&amp;quot; src=&amp;quot;http://blog.amit-agarwal.co.in/wp-content/uploads/2010/08/reblog_b69.png&amp;quot; alt=&amp;quot;Reblog this post [with Zemanta]&amp;quot; /&amp;gt;&amp;lt;span class=&amp;quot;zem-script more-related more-info pretty-attribution paragraph-reblog&amp;quot;&amp;gt;
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1185 ">
              <title>&lt;![CDATA[Upgrade to Fedora 13 from your existing version using yum.]]></title>
              <link>&lt;![CDATA[/2010/04/21/upgrade-fedora-13-existing-version-yum/]]></link>
              <pubDate>1271864826</pubDate>
              <content>&lt;![CDATA[ Well. this time it seems to be very simple :
yum –releasever=13 upgrade
update 22/April/2010:
The key file will not be there so there are two options for you in this case:
Install the following rpms from the downloaded rpms with &amp;amp;#8221;yum –nogpg localinstall&amp;amp;#8221;
a) fedora-release
b) fedora-release-notes Run the whole upgrade with –nogpg option. Issue observed after the upgrade:
The new kernel was not added in the grub menu and I had to manually add the below entry in the &amp;lt;a class=&amp;quot;zem_slink freebase/en/gnu_grub&amp;quot; title=&amp;quot;GNU GRUB&amp;quot; rel=&amp;quot;homepage&amp;quot; href=&amp;quot;http://www.gnu.org/software/grub/&amp;quot;&amp;gt;menu.lst file:
title &amp;lt;a class=&amp;quot;zem_slink freebase/en/fedora&amp;quot; title=&amp;quot;Fedora&amp;quot; rel=&amp;quot;homepage&amp;quot; href=&amp;quot;http://fedoraproject.org/&amp;quot;&amp;gt;Fedora (2.6.33.1-24.fc13.i686.PAE)
root (hd0,11)
kernel /boot/vmlinuz-2.6.33.1-24.fc13.i686.PAE ro root=UUID=f832d6ce-dad3-4af9-9ef1-aac950f8284c rhgb quiet SYSFONT=latarcyrheb-sun16 LANG=en_US.UTF-8 KEYTABLE=us &amp;lt;a class=&amp;quot;zem_slink freebase/en/init&amp;quot; title=&amp;quot;Init&amp;quot; rel=&amp;quot;wikipedia&amp;quot; href=&amp;quot;http://en.wikipedia.org/wiki/Init&amp;quot;&amp;gt;init=/sbin/bootchartd
Because of this I was not able to start the X server until I restarted the system with the entry in place and selecting this in the GRUB menu.&amp;lt;h6 class=&amp;quot;zemanta-related-title&amp;quot;&amp;gt;Related articles by Zemanta &amp;lt;ul class=&amp;quot;zemanta-article-ul&amp;quot;&amp;gt; &amp;lt;li class=&amp;quot;zemanta-article-ul-li&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;http://ostatic.com/blog/linux-shedding-indie-status-is-a-good-thing&amp;quot;&amp;gt;Linux Shedding Indie Status is a Good Thing (ostatic.com) &amp;lt;div class=&amp;quot;zemanta-pixie&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zemanta-pixie-a&amp;quot; title=&amp;quot;Reblog this post [with Zemanta]&amp;quot; href=&amp;quot;http://reblog.zemanta.com/zemified/46a0147d-93ca-4ebf-bc6f-db9c5841bad7/&amp;quot;&amp;gt;&amp;lt;img class=&amp;quot;zemanta-pixie-img&amp;quot; src=&amp;quot;http://blog.amit-agarwal.co.in/wp-content/uploads/2010/08/reblog_b79.png&amp;quot; alt=&amp;quot;Reblog this post [with Zemanta]&amp;quot; /&amp;gt;&amp;lt;span class=&amp;quot;zem-script more-related more-info pretty-attribution paragraph-reblog&amp;quot;&amp;gt;
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1186 ">
              <title>&lt;![CDATA[Microsoft Updates Linux Code]]></title>
              <link>&lt;![CDATA[/2010/04/08/microsoft-updates-linux-code/]]></link>
              <pubDate>1270690907</pubDate>
              <content>&lt;![CDATA[ Microsoft releases enhancements to the Hyper-V Linux Integration Services that the company contributed to the Linux community in 2009.
Microsoft has released enhancements to the Hyper-V Linux Integration Services that the company contributed to
&amp;lt;a href=&amp;quot;http://www.eweek.com/c/a/Linux-and-Open-Source/Microsoft-Updates-Linux-Code-741438/?kc=EWKNLLIN04062010STR1&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;Read more.
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1187 ">
              <title>&lt;![CDATA[l-exp listrs – A new look at linux blogs and sites]]></title>
              <link>&lt;![CDATA[/2010/04/07/l-exp-listrs-a-new-look-at-linux-blogs-and-sites/]]></link>
              <pubDate>1270626968</pubDate>
              <content>&lt;![CDATA[ ]]></content>
             </sphinx:document>
            
            <sphinx:document id="1188 ">
              <title>&lt;![CDATA[[Movie Review]RANN- predictable from Puttu]]></title>
              <link>&lt;![CDATA[/2010/03/14/movie-reviewrann-predictable-from-puttu/]]></link>
              <pubDate>1268577012</pubDate>
              <content>&lt;![CDATA[ IdealisticHarshvardhan mallik(&amp;lt;span style=&amp;quot;font-size: medium;&amp;quot;&amp;gt; &amp;lt;span style=&amp;quot;color: #ff420e;&amp;quot;&amp;gt;B) and his son Jay(&amp;lt;a class=&amp;quot;zem_slink freebase/en/sudeep&amp;quot; title=&amp;quot;Sudeep&amp;quot; rel=&amp;quot;wikipedia&amp;quot; href=&amp;quot;http://en.wikipedia.org/wiki/Sudeep&amp;quot;&amp;gt;Sudeep), find their channel loosing out on &amp;lt;span style=&amp;quot;color: #9999ff;&amp;quot;&amp;gt;popularity ratings for a rival &amp;lt;span style=&amp;quot;color: #7e0021;&amp;quot;&amp;gt;channel smartly run by his X-employee &amp;lt;a class=&amp;quot;zem_slink freebase/en/mohnish_behl&amp;quot; title=&amp;quot;Mohnish Behl&amp;quot; rel=&amp;quot;imdb&amp;quot; href=&amp;quot;http://www.imdb.com/name/nm0046894/&amp;quot;&amp;gt;Mohnish Behl. Jay is provoked and hence in an attempt to rebuild and regain the foothold,he &amp;lt;span style=&amp;quot;color: #00ae00;&amp;quot;&amp;gt;plans a &amp;lt;a class=&amp;quot;zem_slink freebase/en/sting_operation&amp;quot; title=&amp;quot;Sting operation&amp;quot; rel=&amp;quot;wikipedia&amp;quot; href=&amp;quot;http://en.wikipedia.org/wiki/Sting_operation&amp;quot;&amp;gt;sting operationwith aspiring PM **&amp;lt;span style=&amp;quot;color: #280099;&amp;quot;&amp;gt;Manoj Pandey**(&amp;lt;a class=&amp;quot;zem_slink freebase/en/paresh_rawal&amp;quot; title=&amp;quot;Paresh Rawal&amp;quot; rel=&amp;quot;imdb&amp;quot; href=&amp;quot;http://www.imdb.com/name/nm0712546/&amp;quot;&amp;gt;Paresh Rawal) and his &amp;lt;span style=&amp;quot;color: #00cccc;&amp;quot;&amp;gt;Co-Bro industrialistRajat Kapoor. Everybody gets their share,but end up &amp;lt;span style=&amp;quot;color: #0099ff;&amp;quot;&amp;gt;gobbling the truth. How is that revealed and what are their&amp;lt;span style=&amp;quot;color: #94bd5e;&amp;quot;&amp;gt;repurcussions forms the rest. Frankly this aint a &amp;lt;span style=&amp;quot;color: #5e11a6;&amp;quot;&amp;gt;media centric movie****, it is just a &amp;lt;span style=&amp;quot;color: #00ff00;&amp;quot;&amp;gt;common thing among all the characters. It doesn&amp;amp;#8217;t give an insight or per se the background &amp;lt;span style=&amp;quot;color: #00dcff;&amp;quot;&amp;gt;processing of how &amp;lt;a class=&amp;quot;zem_slink freebase/en/printing&amp;quot; title=&amp;quot;Printing&amp;quot; rel=&amp;quot;wikipedia&amp;quot; href=&amp;quot;http://en.wikipedia.org/wiki/Printing&amp;quot;&amp;gt;print media sell news and grab people&amp;amp;#8217;s attention****. Okay we even despise this fact, since movies are not meant to educate, but to entertain. Then in that case &amp;lt;a class=&amp;quot;zem_slink freebase/guid/9202a8c04000641f800000000a382166&amp;quot; title=&amp;quot;Rann (film)&amp;quot; rel=&amp;quot;homepage&amp;quot; href=&amp;quot;http://www.janaganarann.com/&amp;quot;&amp;gt;Rann aint such a bad movie. Infact its a movie wherein &amp;lt;span style=&amp;quot;color: #5e11a6;&amp;quot;&amp;gt;conflicting characters are caught in different situations and the way they react to it. Though predictable for most part, it keeps you**&amp;lt;span style=&amp;quot;color: #00cccc;&amp;quot;&amp;gt;interested because of RGV&amp;amp;#8217;s style**of framing.
For example, a scene where Paresh Rawal bursts &amp;lt;span style=&amp;quot;color: #0099ff;&amp;quot;&amp;gt;into different gigglesby looking at her **&amp;lt;span style=&amp;quot;color: #47b8b8;&amp;quot;&amp;gt;grandmotherwhile negotiating with Mohnish Behl, is **&amp;lt;span style=&amp;quot;color: #5c8526;&amp;quot;&amp;gt;endearing to watch.
In another scene, involving him he delivers following line to display his ferociousness &amp;lt;span style=&amp;quot;color: #b3b300;&amp;quot;&amp;gt;“Kuch to vajay hogi ki hum Manoj pandey hain”.. Sudeep as Jay has mighty role, but he &amp;lt;span style=&amp;quot;color: #ff6309;&amp;quot;&amp;gt;hams it up at one point and alleviates at another****. Watch him in that scene where he tries to &amp;lt;span style=&amp;quot;color: #0084d1;&amp;quot;&amp;gt;convince &amp;lt;span style=&amp;quot;color: #0084d1;&amp;quot;&amp;gt; &amp;lt;span style=&amp;quot;font-size: medium;&amp;quot;&amp;gt;B&amp;lt;span style=&amp;quot;color: #0084d1;&amp;quot;&amp;gt;of the sting operation****.
Paresh rawal (last seen in &amp;lt;a class=&amp;quot;zem_slink freebase/en/daud&amp;quot; title=&amp;quot;Daud (film)&amp;quot; rel=&amp;quot;imdb&amp;quot; href=&amp;quot;http://www.imdb.com/title/tt0118931/&amp;quot;&amp;gt;Daud), as usual is a **&amp;lt;span style=&amp;quot;color: #ffb515;&amp;quot;&amp;gt;irresistable to watch in**dhoti clad goonda..
Rajpal yadav as wannabe &amp;lt;a class=&amp;quot;zem_slink freebase/en/compact_disc&amp;quot; title=&amp;quot;Compact Disc&amp;quot; rel=&amp;quot;wikipedia&amp;quot; href=&amp;quot;http://en.wikipedia.org/wiki/Compact_Disc&amp;quot;&amp;gt;CD perfectly**&amp;lt;span style=&amp;quot;color: #47b8b8;&amp;quot;&amp;gt;describes the nuts running**behind &amp;lt;a class=&amp;quot;zem_slink freebase/en/breaking_news&amp;quot; title=&amp;quot;Breaking news&amp;quot; rel=&amp;quot;wikipedia&amp;quot; href=&amp;quot;http://en.wikipedia.org/wiki/Breaking_news&amp;quot;&amp;gt;breaking news.
Riteish deshmukh(Parag shastry, find out what his role is) an ardent fan of Harshvardhan mallik, &amp;lt;span style=&amp;quot;color: #944794;&amp;quot;&amp;gt;plays a straight faced &amp;lt;a class=&amp;quot;zem_slink freebase/en/journalist&amp;quot; title=&amp;quot;Journalist&amp;quot; rel=&amp;quot;wikipedia&amp;quot; href=&amp;quot;http://en.wikipedia.org/wiki/Journalist&amp;quot;&amp;gt;journalist with little effect.
Mohnish behl looks unreal and**&amp;lt;span style=&amp;quot;color: #47b8b8;&amp;quot;&amp;gt;overcooks himself. **
&amp;lt;span style=&amp;quot;color: #ff00ff;&amp;quot;&amp;gt;Big B is mechanical throughout****,other than the the final act. Watch him closely in that terrifically rendered confession cum monologue at the end, &amp;lt;span style=&amp;quot;color: #ff3333;&amp;quot;&amp;gt;u see trembling hands****.
Dont expect a complete **&amp;lt;span style=&amp;quot;color: #4700b8;&amp;quot;&amp;gt;parda-fash or revelation of how media mis-use,glorify and magnify the news. The film explains the effect that media has on the ppl involved&amp;lt;span style=&amp;quot;color: #3deb3d;&amp;quot;&amp;gt; in a capsulic way,**including us – the couch potatoes, but never explains **&amp;lt;span style=&amp;quot;color: #00dcff;&amp;quot;&amp;gt;the effect on media itself.**And that is an irony.
As mentioned above its not **&amp;lt;span style=&amp;quot;color: #ff00ff;&amp;quot;&amp;gt;“Not-watchable” kinda of movie **in its entirety, but give it a shot if u have an appetite for &amp;lt;span style=&amp;quot;color: #6b0094;&amp;quot;&amp;gt;RGV&amp;amp;#8217;s trademark narration and and his team&amp;amp;#8217;s technical brilliance.
**The review is done by Prashant Prahlad Abkari, who is a collegue and good friend of mine.
** &amp;lt;div class=&amp;quot;zemanta-pixie&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zemanta-pixie-a&amp;quot; title=&amp;quot;Reblog this post [with Zemanta]&amp;quot; href=&amp;quot;http://reblog.zemanta.com/zemified/5e4210a1-af6c-4417-a5e2-0955072acc18/&amp;quot;&amp;gt;&amp;lt;img class=&amp;quot;zemanta-pixie-img&amp;quot; src=&amp;quot;http://blog.amit-agarwal.co.in/wp-content/uploads/2010/08/reblog_b64.png&amp;quot; alt=&amp;quot;Reblog this post [with Zemanta]&amp;quot; /&amp;gt;&amp;lt;span class=&amp;quot;zem-script more-related more-info pretty-attribution paragraph-reblog&amp;quot;&amp;gt;
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1189 ">
              <title>&lt;![CDATA[powertwitter for firefox- twitter with new look]]></title>
              <link>&lt;![CDATA[/2010/03/12/powertwitter-for-firefox-twitter-with-new-look/]]></link>
              <pubDate>1268400270</pubDate>
              <content>&lt;![CDATA[ ]]></content>
             </sphinx:document>
            
            <sphinx:document id="1190 ">
              <title>&lt;![CDATA[Xoost – Search engine]]></title>
              <link>&lt;![CDATA[/2010/03/10/xoost-search-engine/]]></link>
              <pubDate>1268225376</pubDate>
              <content>&lt;![CDATA[ ]]></content>
             </sphinx:document>
            
            <sphinx:document id="1191 ">
              <title>&lt;![CDATA[Happy holi to all.]]></title>
              <link>&lt;![CDATA[/2010/03/02/happy-holi-to-all/]]></link>
              <pubDate>1267497187</pubDate>
              <content>&lt;![CDATA[ A very happy Holi to all.
&amp;lt;a href=&amp;quot;http://blog.amit-agarwal.co.in/wp-content/uploads/2010/03/DSCN1119.resized.jpg&amp;quot;&amp;gt;&amp;lt;img class=&amp;quot;size-medium wp-image-1559&amp;quot; title=&amp;quot;Holi&amp;quot; src=&amp;quot;http://blog.amit-agarwal.co.in/wp-content/uploads/2010/08/DSCN1119.resized-300x168.jpg&amp;quot; alt=&amp;quot;Holi&amp;quot; width=&amp;quot;300&amp;quot; height=&amp;quot;168&amp;quot; /&amp;gt;
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1192 ">
              <title>&lt;![CDATA[Airtel does not need old customers]]></title>
              <link>&lt;![CDATA[/2010/03/01/airtel-does-not-need-old-customers/]]></link>
              <pubDate>1267459712</pubDate>
              <content>&lt;![CDATA[ Couple of days back, I shifted my house. No big deal, right. Not for Airtel :).
I applied for a change in installation address and applied for the same. And promptly they told me that it will be done in 4 days time. I was a very happy person, but the happiness did not last long. After 4 days also there was no response and thus I called the call center again and they told me that the area I shifted to was not feasible for them (PS: It was just the opposite side of the road). Great, so I called the Area Manager whose number I had from a conversation I had with him. (BTW, I was the first customer for Airtel in my area).
Ok, so he said, he will get it done ASAP. As committed, he called me next morning and told that he was sending a executive to take care of things. Only when he arrived he told me that he had come to collect documents to give me a new connection, to which I promptly refused.
I called in the guy again, and after few minutes of explanation, I agreed to take a new connection. He said the executive would come again by that night to collect the documents and get my signature. But the executive never came. So I called the AREA Manager again, and he said he will check and come back with details. That never happened and after that I tried calling him couple of times but he never picked up and thus finally I decided that there is no way that I can get the connection shifted or get a new connection. So, as of now, I disconnected my connection and took a Photon&#43; would were co-operative enough to spend some time to get my connection up in a days time. I had my own issues with Photon&#43; but the guys were really helpful.
After I placed the request for disconnection, I got a call from Airtel stating that the shifting has been approved and they were coming to do the installation but that was after 11 days of my initial request and by then I had already had my connection up.
So, this is the reason that you did not see any update on my blog since sometime. I thought I will share this &amp;amp;#8221;Enlightening&amp;amp;#8221; story of mine with my readers so that you know how difficult it can be do change your house/home. Any one else having similar issues or good things to share, feel free to do so.
Chao for now.
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1193 ">
              <title>&lt;![CDATA[Wallpaper designed by me with GIMP.]]></title>
              <link>&lt;![CDATA[/2010/02/04/wallpaper-designed-by-me-with-gimp/]]></link>
              <pubDate>1265299102</pubDate>
              <content>&lt;![CDATA[ Here&amp;amp;#8217;s the wallpaper, did not spend much time but I think this came out quite good.
&amp;lt;a href=&amp;quot;http://blog.amit-agarwal.co.in/wp-content/uploads/2010/02/Untitled.jpg&amp;quot;&amp;gt;&amp;lt;img class=&amp;quot;size-medium wp-image-1551&amp;quot; title=&amp;quot;Wallpaper&amp;quot; src=&amp;quot;http://blog.amit-agarwal.co.in/wp-content/uploads/2010/08/Untitled-300x225.jpg&amp;quot; alt=&amp;quot;Wallpaper&amp;quot; width=&amp;quot;300&amp;quot; height=&amp;quot;225&amp;quot; /&amp;gt;
Click to view full size or to download.
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1194 ">
              <title>&lt;![CDATA[been busy for last couple of days….]]></title>
              <link>&lt;![CDATA[/2010/01/24/been-busy-for-last-couple-of-days/]]></link>
              <pubDate>1264347955</pubDate>
              <content>&lt;![CDATA[ Sorry to all my followers, been busy for last couple of days so there was not much of update…. anyways, I think I should be more free from this week onwards. Reason for being busy was that my sister is blessed with a pricess.
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1195 ">
              <title>&lt;![CDATA[Blog once and educate 40,000 underprivileged children of India]]></title>
              <link>&lt;![CDATA[/2010/01/18/blog-once-and-educate-40000-underprivileged-children-of-india/]]></link>
              <pubDate>1263828247</pubDate>
              <content>&lt;![CDATA[ Here&amp;amp;#8217;s one of the mail that I received from the IndiBlogger team.
&amp;lt;span style=&amp;quot;font-size: x-small;&amp;quot;&amp;gt;Dear &amp;lt;a class=&amp;quot;zem_slink&amp;quot; title=&amp;quot;Amit Agarwal&amp;quot; rel=&amp;quot;homepage&amp;quot; href=&amp;quot;http://www.labnol.org/about.html&amp;quot;&amp;gt;Amit Agarwal,
&amp;lt;span style=&amp;quot;font-size: x-small;&amp;quot;&amp;gt;Here is a unique opportunity to reach out and impact thousands of lives through your blog. Yes, sitting at your desk and writing a &amp;lt;a class=&amp;quot;zem_slink&amp;quot; title=&amp;quot;blog post&amp;quot; rel=&amp;quot;homepage&amp;quot; href=&amp;quot;http://blog.facebook.com/blog.php?post=136782277130&amp;quot;&amp;gt;blog post can help educate 40,000 young Indians all over our country!
&amp;lt;span style=&amp;quot;font-size: x-small;&amp;quot;&amp;gt;One of &amp;lt;a class=&amp;quot;zem_slink freebase/en/india&amp;quot; title=&amp;quot;India&amp;quot; rel=&amp;quot;geolocation&amp;quot; href=&amp;quot;http://maps.google.com/maps?ll=28.6133333333,77.2083333333&amp;amp;spn=10.0,10.0&amp;amp;q=28.6133333333,77.2083333333%20%28India%29&amp;amp;t=h&amp;quot;&amp;gt;India’s most trusted and credible &amp;lt;a class=&amp;quot;zem_slink freebase/en/non-governmental_organization&amp;quot; title=&amp;quot;Non-governmental organization&amp;quot; rel=&amp;quot;wikipedia&amp;quot; href=&amp;quot;http://en.wikipedia.org/wiki/Non-governmental_organization&amp;quot;&amp;gt;NGOs, &amp;lt;a class=&amp;quot;zem_slink freebase/en/giveindia&amp;quot; title=&amp;quot;GiveIndia&amp;quot; rel=&amp;quot;wikipedia&amp;quot; href=&amp;quot;http://en.wikipedia.org/wiki/GiveIndia&amp;quot;&amp;gt;GiveIndia is taking part in a competition on &amp;lt;a class=&amp;quot;zem_slink freebase/en/facebook&amp;quot; title=&amp;quot;Facebook&amp;quot; rel=&amp;quot;homepage&amp;quot; href=&amp;quot;http://facebook.com&amp;quot;&amp;gt;Facebook to win a US$1 million grant. The winner will be the NGO that gets the highest number of votes from Facebook users. The prize of $1 million will help put or keep 40,000 children across India in &amp;lt;a class=&amp;quot;zem_slink freebase/en/school&amp;quot; title=&amp;quot;School&amp;quot; rel=&amp;quot;wikipedia&amp;quot; href=&amp;quot;http://en.wikipedia.org/wiki/School&amp;quot;&amp;gt;school for one year!
&amp;lt;span style=&amp;quot;font-size: x-small;&amp;quot;&amp;gt;Imagine the IndiBlogger community coming together to spread the word and help the &amp;lt;a class=&amp;quot;zem_slink freebase/en/poverty&amp;quot; title=&amp;quot;Poverty&amp;quot; rel=&amp;quot;wikipedia&amp;quot; href=&amp;quot;http://en.wikipedia.org/wiki/Poverty&amp;quot;&amp;gt;underprivileged children of India. The impact would be tremendous and together, IndiBloggers and GiveIndia would be able to gather the votes we need to win.
&amp;lt;span style=&amp;quot;font-size: x-small;&amp;quot;&amp;gt;Voting in the competition is for one week only, from Friday, January 15 – Friday, January 22, 2010. Can we make a difference in the next 5 days? We sure hope so! &amp;lt;span style=&amp;quot;font-size: x-small;&amp;quot;&amp;gt;The link for voting, where you can also see more details of the competition is &amp;lt;span style=&amp;quot;font-size: x-small;&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;http://apps.facebook.com/chasecommunitygiving/charities/338730&amp;quot;&amp;gt;http://apps.facebook.com/chasecommunitygiving/charities/338730&amp;lt;span style=&amp;quot;font-size: x-small;&amp;quot;&amp;gt; &amp;lt;span style=&amp;quot;font-size: x-small;&amp;quot;&amp;gt;There’s been lots of talk about how &amp;lt;a class=&amp;quot;zem_slink freebase/en/social_media&amp;quot; title=&amp;quot;Social media&amp;quot; rel=&amp;quot;wikinvest&amp;quot; href=&amp;quot;http://www.wikinvest.com/concept/Social_media&amp;quot;&amp;gt;social media can bring change and make an impact on the world we live in. Well, here is one tangible way for us to take a small action that could have a HUGE outcome.
&amp;lt;span style=&amp;quot;font-size: x-small;&amp;quot;&amp;gt;In case you have more questions about this, please write to &amp;lt;a href=&amp;quot;mailto:giveindiachase@gmail.com&amp;quot;&amp;gt;giveindiachase@gmail.com and a GiveIndia team member would be happy to reply.
&amp;lt;span style=&amp;quot;font-size: x-small;&amp;quot;&amp;gt;Regards,
&amp;lt;span style=&amp;quot;font-size: x-small;&amp;quot;&amp;gt;The IndiBlogger Team &amp;amp; The GiveIndia Team
&amp;lt;span style=&amp;quot;font-size: x-small;&amp;quot;&amp;gt;blog.giveindia.org
&amp;lt;span style=&amp;quot;font-size: x-small;&amp;quot;&amp;gt;@GiveIndia
&amp;lt;span style=&amp;quot;font-size: x-small;&amp;quot;&amp;gt;—————————————————————
&amp;lt;span style=&amp;quot;font-size: x-small;&amp;quot;&amp;gt;Click &amp;lt;a href=&amp;quot;http://www.indiblogger.in/myaccount.php&amp;quot;&amp;gt;here to manage your email alerts.&amp;lt;h6 class=&amp;quot;zemanta-related-title&amp;quot;&amp;gt;Related articles by Zemanta &amp;lt;ul class=&amp;quot;zemanta-article-ul&amp;quot;&amp;gt; &amp;lt;li class=&amp;quot;zemanta-article-ul-li&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;http://www.slideshare.net/armorissa/year-ending-chance-to-double-your-donation-impact&amp;quot;&amp;gt;Year ending chance to double your donation impact (slideshare.net) &amp;lt;li class=&amp;quot;zemanta-article-ul-li&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;http://www.slideshare.net/PluggedIn/postling-plugged-in-n-y-c011210&amp;quot;&amp;gt;Postling Plugged In N Y C011210 (slideshare.net) &amp;lt;li class=&amp;quot;zemanta-article-ul-li&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;http://broadcasting-brain.com/2009/12/31/the-broadcasting-brain-2009-most-popular-posts/&amp;quot;&amp;gt;The Broadcasting Brain 2009 Most Popular Posts (broadcasting-brain.com) &amp;lt;li class=&amp;quot;zemanta-article-ul-li&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;http://www.fashionindustrynetwork.com/xn/detail/786233:BlogPost:317979?xg_source=activity&amp;quot;&amp;gt;Macala Wright added a blog post (fashionindustrynetwork.com) &amp;lt;li class=&amp;quot;zemanta-article-ul-li&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;http://leftofsean.com/?p=2999&amp;quot;&amp;gt;The Updating NYE Blog Post… (leftofsean.com) &amp;lt;div class=&amp;quot;zemanta-pixie&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zemanta-pixie-a&amp;quot; title=&amp;quot;Reblog this post [with Zemanta]&amp;quot; href=&amp;quot;http://reblog.zemanta.com/zemified/fc203fea-5ec6-478d-992b-e69ed698d82b/&amp;quot;&amp;gt;&amp;lt;img class=&amp;quot;zemanta-pixie-img&amp;quot; src=&amp;quot;http://blog.amit-agarwal.co.in/wp-content/uploads/2010/08/reblog_b39.png&amp;quot; alt=&amp;quot;Reblog this post [with Zemanta]&amp;quot; /&amp;gt;&amp;lt;span class=&amp;quot;zem-script more-related more-info pretty-attribution paragraph-reblog&amp;quot;&amp;gt;
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1196 ">
              <title>&lt;![CDATA[Browser and OS stats on my blog]]></title>
              <link>&lt;![CDATA[/2010/01/16/browser-and-os-stats-on-my-blog/]]></link>
              <pubDate>1263657135</pubDate>
              <content>&lt;![CDATA[ ]]></content>
             </sphinx:document>
            
            <sphinx:document id="1197 ">
              <title>&lt;![CDATA[Happy New year to all.]]></title>
              <link>&lt;![CDATA[/2009/12/31/happy-new-year-to-all/]]></link>
              <pubDate>1262272310</pubDate>
              <content>&lt;![CDATA[ ]]></content>
             </sphinx:document>
            
            <sphinx:document id="1198 ">
              <title>&lt;![CDATA[Merry Christmas]]></title>
              <link>&lt;![CDATA[/2009/12/25/merry-christmas/]]></link>
              <pubDate>1261750912</pubDate>
              <content>&lt;![CDATA[ Just saying Merry Christmas to you all..
Have a bash !!!
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1199 ">
              <title>&lt;![CDATA[Opens Four Google Frames At Once]]></title>
              <link>&lt;![CDATA[/2009/12/19/opens-four-google-frames-at-once/]]></link>
              <pubDate>1261209109</pubDate>
              <content>&lt;![CDATA[ ]]></content>
             </sphinx:document>
            
            <sphinx:document id="1200 ">
              <title>&lt;![CDATA[check out http://browsershots.org/]]></title>
              <link>&lt;![CDATA[/2009/12/19/check-out-httpbrowsershots-org/]]></link>
              <pubDate>1261208946</pubDate>
              <content>&lt;![CDATA[ If you are a web developer and are worried about how your &amp;lt;a class=&amp;quot;zem_slink&amp;quot; href=&amp;quot;http://en.wikipedia.org/wiki/Website&amp;quot; title=&amp;quot;Website&amp;quot; rel=&amp;quot;wikipedia&amp;quot;&amp;gt;website would look like in the various browsers and do not have the resources to test all the browsers, what do you do? Check out the &amp;lt;a class=&amp;quot;zem_slink&amp;quot; href=&amp;quot;http://en.wikipedia.org/wiki/Web_page&amp;quot; title=&amp;quot;Web page&amp;quot; rel=&amp;quot;wikipedia&amp;quot;&amp;gt;webpage at
&amp;lt;a href=&amp;quot;http://browsershots.org/&amp;quot;&amp;gt;http://browsershots.org/&amp;lt;h6 class=&amp;quot;zemanta-related-title&amp;quot;&amp;gt;Related articles by Zemanta &amp;lt;ul class=&amp;quot;zemanta-article-ul&amp;quot;&amp;gt; &amp;lt;li class=&amp;quot;zemanta-article-ul-li&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;http://www.macstories.net/iphone/website-iphone/&amp;quot;&amp;gt;Setting Up Your Website to Run on iPhone Browser (macstories.net) &amp;lt;div class=&amp;quot;zemanta-pixie&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zemanta-pixie-a&amp;quot; href=&amp;quot;http://reblog.zemanta.com/zemified/8d5363f4-7641-40c8-b111-4a4d12d41ba5/&amp;quot; title=&amp;quot;Reblog this post [with Zemanta]&amp;quot;&amp;gt;&amp;lt;img class=&amp;quot;zemanta-pixie-img&amp;quot; src=&amp;quot;http://blog.amit-agarwal.co.in/wp-content/uploads/2010/08/reblog_e36.png&amp;quot; alt=&amp;quot;Reblog this post [with Zemanta]&amp;quot; /&amp;gt;&amp;lt;span class=&amp;quot;zem-script more-related more-info pretty-attribution paragraph-reblog&amp;quot;&amp;gt;
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1201 ">
              <title>&lt;![CDATA[Google wave invitation available with me.]]></title>
              <link>&lt;![CDATA[/2009/12/10/google-wave-invitation-available-with-me/]]></link>
              <pubDate>1260413902</pubDate>
              <content>&lt;![CDATA[ I have couple of wave invitations available with me, added yesterday by wave team to my accounts. Thanks to wave. It seems that lot of people suddenly saw that the wave invitations remaining in their accounts have increased. So, now I have couple of invitations spare. Please leave a comment and will try to send you one.
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1202 ">
              <title>&lt;![CDATA[Alexa ranking improved by 1000%]]></title>
              <link>&lt;![CDATA[/2009/11/26/alexa-ranking-improved-by-1000/]]></link>
              <pubDate>1259253027</pubDate>
              <content>&lt;![CDATA[ I just checked my &amp;lt;a id=&amp;quot;aptureLink_XU7RJWNcFG&amp;quot; href=&amp;quot;http://en.wikipedia.org/wiki/Alexa%20rank&amp;quot;&amp;gt;Alexa ranking and guess what, I have a 1000% change in last 7 days. Thanks to all my readers.
&amp;lt;a href=&amp;quot;http://blog.amit-agarwal.co.in/wp-content/uploads/2010/08/amit-agarwal.alexa_.jpg&amp;quot;&amp;gt;&amp;lt;img class=&amp;quot;size-full wp-image-1423&amp;quot; title=&amp;quot;amit-agarwal.alexa&amp;quot; src=&amp;quot;http://blog.amit-agarwal.co.in/wp-content/uploads/2010/08/amit-agarwal.alexa_.jpg&amp;quot; alt=&amp;quot;amit-agarwal.alexa&amp;quot; width=&amp;quot;671&amp;quot; height=&amp;quot;340&amp;quot; /&amp;gt;
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1203 ">
              <title>&lt;![CDATA[Google wave invite available with me..]]></title>
              <link>&lt;![CDATA[/2009/11/25/google-wave-invite-available-with-me/]]></link>
              <pubDate>1259166315</pubDate>
              <content>&lt;![CDATA[ ]]></content>
             </sphinx:document>
            
            <sphinx:document id="1204 ">
              <title>&lt;![CDATA[Google wave invites available with mjmwired]]></title>
              <link>&lt;![CDATA[/2009/11/25/google-wave-invites-available-with-httpwww-mjmwired-netlinux/]]></link>
              <pubDate>1259164192</pubDate>
              <content>&lt;![CDATA[ ]]></content>
             </sphinx:document>
            
            <sphinx:document id="1205 ">
              <title>&lt;![CDATA[5 Sites To Find Free Alternatives To Popular Software]]></title>
              <link>&lt;![CDATA[/2009/11/21/5-sites-to-find-free-alternatives-to-popular-software/]]></link>
              <pubDate>1258769606</pubDate>
              <content>&lt;![CDATA[ And sometimes there are software you find irksome and think things could have been better. In any case, I always like to try out a few alternative software choices before I settle with any particular application mainly for two reasons: One, you would never know how good or bad the one you are using is until you try some alternatives and two: a bit of choice and competition can only be for the good of us users! Your motivation might be different: perhaps you want to find a free software that does the same task as the paid software you are using or maybe your favorite Windows application is not available on Mac or Linux.
Whatever maybe the reason, here are some sites that you can use to find alternative software and suggested applications.
Read more…
URL: &amp;lt;a href=&amp;quot;http://feedproxy.google.com/~r/Makeuseof/~3/Jh5sMLbG-8Y/&amp;quot;&amp;gt;http://feedproxy.google.com/~r/Makeuseof/~3/Jh5sMLbG-8Y/
My personal favourite is osalt.&amp;lt;div class=&amp;quot;zemanta-pixie&amp;quot; style=&amp;quot;margin-top: 10px; height: 15px;&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zemanta-pixie-a&amp;quot; title=&amp;quot;Reblog this post [with Zemanta]&amp;quot; href=&amp;quot;http://reblog.zemanta.com/zemified/2e4fce0b-e88a-4233-bb93-defae48bd7fe/&amp;quot;&amp;gt;&amp;lt;img class=&amp;quot;zemanta-pixie-img&amp;quot; style=&amp;quot;border: medium none; float: right;&amp;quot; src=&amp;quot;http://blog.amit-agarwal.co.in/wp-content/uploads/2010/08/reblog_e30.png&amp;quot; alt=&amp;quot;Reblog this post [with Zemanta]&amp;quot; /&amp;gt;&amp;lt;span class=&amp;quot;zem-script more-related pretty-attribution&amp;quot;&amp;gt;
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1206 ">
              <title>&lt;![CDATA[5 Good Image Search Engines Apart From Google Image Search]]></title>
              <link>&lt;![CDATA[/2009/11/10/5-good-image-search-engines-apart-from-google-image-search/]]></link>
              <pubDate>1257821478</pubDate>
              <content>&lt;![CDATA[ Even if you are using Deeperweb for firefox, sometimes google isn&amp;amp;#8217;t just getting you to the right page and picture. You start hunting for more picture search engines, so here&amp;amp;#8217;s the list of best for you.
When the right picture is everything, you need to go deep into the web and comb through the millions that are out there. Image search is just like normal search and similarly painstaking.
&amp;lt;span style=&amp;quot;font-size: medium;&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;http://cyclo.ps/&amp;quot;&amp;gt;Cyclo.ps &amp;lt;span style=&amp;quot;font-size: medium;&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;http://www.pixsy.com/&amp;quot;&amp;gt;Pixsy &amp;lt;span style=&amp;quot;font-size: medium;&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;http://www.spffy.com/&amp;quot;&amp;gt;Spffy (Beta)
&amp;lt;span style=&amp;quot;font-size: medium;&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;http://www.incogna.com/&amp;quot;&amp;gt;Incogna &amp;lt;span style=&amp;quot;font-size: medium;&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;http://www.picsearch.com/&amp;quot;&amp;gt;PicSearch Read more at:
URL: &amp;lt;a href=&amp;quot;http://feedproxy.google.com/~r/Makeuseof/~3/0tiEenMyGbg/&amp;quot;&amp;gt;http://feedproxy.google.com/~r/Makeuseof/~3/0tiEenMyGbg/&amp;lt;h6 class=&amp;quot;zemanta-related-title&amp;quot; style=&amp;quot;font-size: 1em;&amp;quot;&amp;gt;Related articles by Zemanta &amp;lt;ul class=&amp;quot;zemanta-article-ul&amp;quot;&amp;gt; &amp;lt;li class=&amp;quot;zemanta-article-ul-li&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;http://www.capetownmagazine.com/articles/Out%7Ec5/Worldart-Gallery-Church-Street-Cape-Town%7E1952&amp;quot;&amp;gt;Discover the Worldart Gallery (capetownmagazine.com) &amp;lt;li class=&amp;quot;zemanta-article-ul-li&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;http://www.seroundtable.com/archives/021021.html&amp;quot;&amp;gt;Google Now Treats 410 Status Code As &amp;amp;#8221;More Permanent&amp;amp;#8221; Than 404 Status Code (seroundtable.com) &amp;lt;div class=&amp;quot;zemanta-pixie&amp;quot; style=&amp;quot;margin-top: 10px; height: 15px;&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zemanta-pixie-a&amp;quot; title=&amp;quot;Reblog this post [with Zemanta]&amp;quot; href=&amp;quot;http://reblog.zemanta.com/zemified/0e93d7cd-297c-473c-aec6-790c832de331/&amp;quot;&amp;gt;&amp;lt;img class=&amp;quot;zemanta-pixie-img&amp;quot; style=&amp;quot;border: medium none; float: right;&amp;quot; src=&amp;quot;http://blog.amit-agarwal.co.in/wp-content/uploads/2010/08/reblog_e23.png&amp;quot; alt=&amp;quot;Reblog this post [with Zemanta]&amp;quot; /&amp;gt;&amp;lt;span class=&amp;quot;zem-script more-related pretty-attribution&amp;quot;&amp;gt;
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1207 ">
              <title>&lt;![CDATA[Google wave invite, get one for yourself.]]></title>
              <link>&lt;![CDATA[/2009/11/09/google-wave-invite-get-one-for-yourself/]]></link>
              <pubDate>1257734360</pubDate>
              <content>&lt;![CDATA[ &amp;lt;img src=&amp;quot;http://blog.amit-agarwal.co.in/wp-content/uploads/2009/11/500x_wave-invites.jpg&amp;quot; alt=&amp;quot;&amp;quot; width=&amp;quot;500&amp;quot; align=&amp;quot;bottom&amp;quot; /&amp;gt;Earlier this week, Wave re-upped invitations in many users&amp;amp;#8217; Wave inboxes. I chatted with a few folks via Twitter, and we&amp;amp;#8217;ve got several readers willing to donate some Wave invites. Now pay attention, because we&amp;amp;#8217;re only going to explain this once.
Read more.
URL: &amp;lt;a href=&amp;quot;http://feeds.gawker.com/~r/lifehacker/full/~3/Iu3MpCuOIjU/the-wave-invitation-donation-thread&amp;quot;&amp;gt;http://feeds.gawker.com/~r/lifehacker/full/~3/Iu3MpCuOIjU/the-wave-invitation-donation-thread
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1208 ">
              <title>&lt;![CDATA[Introducing Amit Agarwal\’s Photography Site.]]></title>
              <link>&lt;![CDATA[/2009/11/08/introducing-amit-agarwals-photography-site/]]></link>
              <pubDate>1257680597</pubDate>
              <content>&lt;![CDATA[ It it immense pleasure to announce to you the arrival of &amp;lt;a href=&amp;quot;http://aka-photo.com&amp;quot;&amp;gt;http://aka-photo.com
Right now I am nurturing the idea of having this site dedicated to Photography with links to various sites and other such things. If you have any suggestions, drop me a message.
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1209 ">
              <title>&lt;![CDATA[Citibank Doesn\’t Want Your Business, Linux Users]]></title>
              <link>&lt;![CDATA[/2009/11/03/citibank-doesnt-want-your-business-linux-users/]]></link>
              <pubDate>1257215784</pubDate>
              <content>&lt;![CDATA[ This is an article from the Citibank customers in US.
The Consumerist: &amp;amp;#8221;Citibank won&amp;amp;#8217;t let customers using Linux computers log in to their online accounts. Adam argues that in 2009 this doesn&amp;amp;#8217;t make sense, especially when no other major corporate website blocks him like this.&amp;amp;#8221;
URL: &amp;lt;a href=&amp;quot;http://linuxtoday.com/news_story.php3?ltsn=2009-10-31-001-39-IN-BZ-SW&amp;quot;&amp;gt;http://linuxtoday.com/news_story.php3?ltsn=2009-10-31-001-39-IN-BZ-SW
But in India too we don&amp;amp;#8217;t have much too different environment. Though I do not have any issues with the Citibank site, but I have HDFC Insurance. I always pay the premium online. This time the payment failed couple of times and the amount was deducted from my account. When checked with the Customer Service Desk, the confirmed that the payment option does not work on Firefox with Linux. For this time I have made the payment using Cash, but why should there be OS discrimination.
Share your experiences here in comment.&amp;lt;div class=&amp;quot;zemanta-pixie&amp;quot; style=&amp;quot;margin-top: 10px; height: 15px;&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zemanta-pixie-a&amp;quot; title=&amp;quot;Reblog this post [with Zemanta]&amp;quot; href=&amp;quot;http://reblog.zemanta.com/zemified/32675437-998d-4f63-ae44-6b9b3a46f909/&amp;quot;&amp;gt;&amp;lt;img class=&amp;quot;zemanta-pixie-img&amp;quot; style=&amp;quot;border: medium none; float: right;&amp;quot; src=&amp;quot;http://blog.amit-agarwal.co.in/wp-content/uploads/2010/08/reblog_e25.png&amp;quot; alt=&amp;quot;Reblog this post [with Zemanta]&amp;quot; /&amp;gt;&amp;lt;span class=&amp;quot;zem-script more-related pretty-attribution&amp;quot;&amp;gt;
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1210 ">
              <title>&lt;![CDATA[what is my user agent]]></title>
              <link>&lt;![CDATA[/2009/11/02/what-is-my-user-agent/]]></link>
              <pubDate>1257130050</pubDate>
              <content>&lt;![CDATA[ Wonder what your browser is sending to all the websites that you visit.
Check out at &amp;lt;a href=&amp;quot;http://whatsmyuseragent.com/&amp;quot;&amp;gt;http://whatsmyuseragent.com/
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1211 ">
              <title>&lt;![CDATA[Metasploit Project Sold To Rapid7]]></title>
              <link>&lt;![CDATA[/2009/10/29/metasploit-project-sold-to-rapid7/]]></link>
              <pubDate>1256785681</pubDate>
              <content>&lt;![CDATA[[ad]
ancientribe writes &amp;amp;#8221;The wildly popular, open-source Metasploit penetration testing tool project has been sold to Rapid7, a vulnerability management vendor, paving the way for a commercial version of Metasploit to eventually hit the market. HD Moore, creator of Metasploit, was hired by Rapid7 and will continue heading up the project. This is big news for the indie Metasploit Project, which now gets full-time resources. Moore says this will translate into faster turnaround for new features. Just what a commercial Metasploit product will look like is still in the works, but Rapid7 expects to keep the Metasploit penetration testing tool as a separate product with &amp;amp;#8217;high integration&amp;amp;#8217; into Rapid7&amp;amp;#8217;s vulnerability management products.&amp;amp;#8221;
&amp;lt;a href=&amp;quot;http://news.slashdot.org/story/09/10/21/141206/Metasploit-Project-Sold-To-Rapid7?from=rss&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;http://slashdot.org/slashdot-it.pl?from=rss&amp;amp;op=image&amp;amp;style=h0&amp;amp;sid=09/10/21/141206&amp;quot; alt=&amp;quot;&amp;quot; align=&amp;quot;bottom&amp;quot; /&amp;gt;
&amp;lt;a href=&amp;quot;http://news.slashdot.org/story/09/10/21/141206/Metasploit-Project-Sold-To-Rapid7?from=rss&amp;quot;&amp;gt;Read more of this story at Slashdot.
&amp;lt;a href=&amp;quot;http://feedads.g.doubleclick.net/~at/44iGj-kuMXj6cCpZ0nS0OZWKvaw/0/da&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;http://blog.amit-agarwal.com/wp-content/uploads/feedads.g.doubleclick.net/~at/44iGj-kuMXj6cCpZ0nS0OZWKvaw/0/di&amp;quot; border=&amp;quot;0&amp;quot; alt=&amp;quot;&amp;quot; align=&amp;quot;bottom&amp;quot; /&amp;gt;
&amp;lt;a href=&amp;quot;http://feedads.g.doubleclick.net/~at/44iGj-kuMXj6cCpZ0nS0OZWKvaw/1/da&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;http://blog.amit-agarwal.com/wp-content/uploads/feedads.g.doubleclick.net/~at/44iGj-kuMXj6cCpZ0nS0OZWKvaw/1/di&amp;quot; border=&amp;quot;0&amp;quot; alt=&amp;quot;&amp;quot; align=&amp;quot;bottom&amp;quot; /&amp;gt;
URL: &amp;lt;a href=&amp;quot;http://rss.slashdot.org/~r/slashdot/eqWf/~3/T2Y8Cf6XUSg/Metasploit-Project-Sold-To-Rapid7&amp;quot;&amp;gt;http://rss.slashdot.org/~r/slashdot/eqWf/~3/T2Y8Cf6XUSg/Metasploit-Project-Sold-To-Rapid7
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1212 ">
              <title>&lt;![CDATA[raj77in on Google – I am the only one on the first page.]]></title>
              <link>&lt;![CDATA[/2009/10/25/raj77in-on-google-i-am-the-only-one-on-the-first-page/]]></link>
              <pubDate>1256485976</pubDate>
              <content>&lt;![CDATA[ Guess what, I did a search on Goggle for raj77in and I am the only one on the first page (10 results), did not go to the next pages. WOW I must be impressed with myself and with Google.
Here is the link
&amp;lt;a href=&amp;quot;http://www.google.co.in/#hl=en&amp;amp;source=hp&amp;amp;q=raj77in&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;http://www.google.co.in/#hl=en&amp;amp;source=hp&amp;amp;q=raj77in
Comments on how did you find the result for search of your username.&amp;lt;h6 class=&amp;quot;zemanta-related-title&amp;quot; style=&amp;quot;font-size: 1em;&amp;quot;&amp;gt;Related articles by Zemanta &amp;lt;ul class=&amp;quot;zemanta-article-ul&amp;quot;&amp;gt; &amp;lt;li class=&amp;quot;zemanta-article-ul-li&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;http://www.cloudave.com/link/what-does-the-crowd-think-of-enterprise-2-0-and-social-media&amp;quot;&amp;gt;What does the Crowd think of Enterprise 2.0 and Social Media? (cloudave.com) &amp;lt;li class=&amp;quot;zemanta-article-ul-li&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;http://www.frontofficebox.com/FOB_Knowledgebase/2009/10/24/check-your-web-site-grade/&amp;quot;&amp;gt;Check Your Web Site Grade (frontofficebox.com) &amp;lt;div class=&amp;quot;zemanta-pixie&amp;quot; style=&amp;quot;margin-top: 10px; height: 15px;&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zemanta-pixie-a&amp;quot; title=&amp;quot;Reblog this post [with Zemanta]&amp;quot; href=&amp;quot;http://reblog.zemanta.com/zemified/11134e28-c63e-4bb1-ab2f-02795a92106f/&amp;quot;&amp;gt;&amp;lt;img class=&amp;quot;zemanta-pixie-img&amp;quot; style=&amp;quot;border: medium none; float: right;&amp;quot; src=&amp;quot;http://blog.amit-agarwal.co.in/wp-content/uploads/2010/08/reblog_e6.png&amp;quot; alt=&amp;quot;Reblog this post [with Zemanta]&amp;quot; /&amp;gt;&amp;lt;span class=&amp;quot;zem-script more-related pretty-attribution&amp;quot;&amp;gt;
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1213 ">
              <title>&lt;![CDATA[wordpress upgraded to latest 2.8.5]]></title>
              <link>&lt;![CDATA[/2009/10/22/wordpress-upgraded-to-latest-2-8-5/]]></link>
              <pubDate>1256176642</pubDate>
              <content>&lt;![CDATA[ Living on the edge and updating regularly is something I hope everyone likes. So I too did the same and upgraded my wordpress to 2.8.5 as soon as I saw the upgrade notice.
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1214 ">
              <title>&lt;![CDATA[Happy Diwali Wishes]]></title>
              <link>&lt;![CDATA[/2009/10/18/happy-diwali-wishes-2/]]></link>
              <pubDate>1255869430</pubDate>
              <content>&lt;![CDATA[ Wish all my readers, Happy Diwali.
&amp;lt;a href=&amp;quot;http://blog.amit-agarwal.co.in/wp-content/uploads/2010/08/dscf7252.resized.jpg&amp;quot;&amp;gt;&amp;lt;img class=&amp;quot;size-full wp-image-1329&amp;quot; title=&amp;quot;Diwali&amp;quot; src=&amp;quot;http://blog.amit-agarwal.co.in/wp-content/uploads/2010/08/dscf7252.resized.jpg&amp;quot; alt=&amp;quot;Diwali&amp;quot; width=&amp;quot;1038&amp;quot; height=&amp;quot;782&amp;quot; /&amp;gt;
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1215 ">
              <title>&lt;![CDATA[10 Websites to Compare Google vs Bing Results Side By Side]]></title>
              <link>&lt;![CDATA[/2009/10/17/10-websites-to-compare-google-vs-bing-results-side-by-side/]]></link>
              <pubDate>1255747618</pubDate>
              <content>&lt;![CDATA[ 10 Websites to Compare Google vs Bing Results Side By Side Thankfully, the web doesn’t make us take sides. We can have the best of every world. With the launch of Bing, we had another search engine to crawl the web with. A few months and millions of searches down the line, Bing has also built up its legion of users (and fans). It’s Google vs Bing now. The former is still The search engine while the latter calls itself a decision engine.
But I would just like to sit on the ropes with all this because I am just an average user…more interested in getting the results I seek without getting into the algorithm of it all.
Although as an average user, I can say that both search engines deliver different kinds of results. You must have seen it with your search queries. Different query terms gave me different degrees of relevancy in both search engines.
For instance, using the query “makeuseof.com” gave me more pointed results in Google. You can do one of your own and find out.
But there have been results which have come out as more useful for me in Bing as well. It has given me a lot of pleasant vibes with its performance. That just goes to show that we are left to our own choice as far as these two search engines go. I can say that for a lot of us, our sixth sense in the Google vs Bing decision is not exactly working.
Even as the bouts go on, a lot of websites are cropping up around the Google vs Bing preoccupation. They are simple single-function website letting us compare Google and Bing results side by side.
This isn’t a Top to Bottom list but merely a listing of all the addresses that will allow you to do a comparison search of Google vs Bing.
GoogawhoGoogaWho Side by side searching with this plain Jane tool. Enter the search term and you get the search results from Google and a random search engine. The engines come from Google, Yahoo!, Bing, Ask, InfoSpace, AltaVista, Lycos and Dogpile. Click on any of the names to get the results in the dual pane. The Tabulizer button opens results from all search engines in individual tabs. 2. Bing &amp;amp; GoogleBing&amp;amp;Google
Simulataneous dual paned results from both Bing and Google helps you to compare search results easily. 3. Mixxr Mixxr
This search tool covers Google, Yahoo, Bing and Twitter on the same page. The number of frames on the page will depend on the search engines selected. 4. StringyStringy
Along with the Bing and Google comparer, they have their own ‘version’ of Bing which promises to deliver optimized Bing results. 5. Search3 (beta)Search3
It starts with a nice interface and the premise that three search engines are better than one. The others include – Twitter, eBay and Yahoo. It also allows for browser integration (Firefox, IE7, Google Chrome, Flock, and Opera). 6. AskBoth (beta)AskBoth
The search tool comes with a neat interface and browser integration. AskBoth also gives you search and translate add-ons for supported browsers. Read our previous post on AskBoth. 7. Bing Vs GoogleBingVS-Google
We have covered it before in this post. It gives the same facility and browser integration with Firefox and IE to boot. 8. Ranks.nlRanks.nl
In a rank departure from the clean-cut looks of the ones before, this web tool looks like a webmaster’s scalpel. It actually is, with its dropdown menus letting you compare search engines and their different language variants. You can compare Google vs Bing by choosing the engines from the dropdowns. Control the framesets between horizontal or vertical orientation. 9. BingleBingle
Bingle gives you a single window (but dual framed) access to both Google and Bing. You can also easily add it to your browser (IE and Firefox) as its default search engine with a single click. 10. FuriaFuria If a webpage can be called as artless, then this is it. Just a search query box and nothing else. Type in your query and the page splits in two to display results from Google and Bing.
In this list we have seen tools that swing from the Web 2.0 look to those that resemble a weekend project done in a jiffy. Does it look like too many cooks for a single broth? But then having options never harmed anybody.
In the end it’s about getting results that are on the button. Using two popular search engines does help to cancel out the inaccuracies of both. Somebody did mention that two heads are better than one.
Which is your preferred search engine among Google and Bing? When it comes to search, do you have the patience to sift through the results from multiple search engines or would you rather use just one?
Did you like the post? Please do share your thoughts in the comments section!
New on Twitter ? Now you can follow MakeUseOf on Twitter too.
Related posts * Bing: The Next Big Thing From Microsoft (17) * Master the Google Operands – Search Like a God &amp;amp; Save Time (40) * Make Use Of Podcast #30: More Current Google Searches (5) * How To Submit Your Website To Bing &amp;amp; Google For More Traffic (15) * Compare Bing’s search results with Google’s using Bing vs. Google (19)
URL: &amp;lt;a href=&amp;quot;http://feedproxy.google.com/~r/Makeuseof/~3/2rrLLQZzoVI/&amp;quot;&amp;gt;http://feedproxy.google.com/~r/Makeuseof/~3/2rrLLQZzoVI/&amp;lt;div class=&amp;quot;zemanta-pixie&amp;quot; style=&amp;quot;margin-top: 10px; height: 15px;&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zemanta-pixie-a&amp;quot; title=&amp;quot;Reblog this post [with Zemanta]&amp;quot; href=&amp;quot;http://reblog.zemanta.com/zemified/4253e9df-285b-494f-8fab-758ffa2820d8/&amp;quot;&amp;gt;&amp;lt;img class=&amp;quot;zemanta-pixie-img&amp;quot; style=&amp;quot;border: medium none; float: right;&amp;quot; src=&amp;quot;http://blog.amit-agarwal.co.in/wp-content/uploads/2010/08/reblog_e15.png&amp;quot; alt=&amp;quot;Reblog this post [with Zemanta]&amp;quot; /&amp;gt;&amp;lt;span class=&amp;quot;zem-script more-related pretty-attribution&amp;quot;&amp;gt;
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1216 ">
              <title>&lt;![CDATA[Fastfollowers for Twitter users.]]></title>
              <link>&lt;![CDATA[/2009/10/17/fastfollowers-for-twitter-users/]]></link>
              <pubDate>1255746473</pubDate>
              <content>&lt;![CDATA[ &amp;lt;a href=&amp;quot;http://fastfollowers.com?i=raj77in &amp;quot;&amp;gt;Visit here.
**This is a site to increase your followers in twitter. Good way to go.
**
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1217 ">
              <title>&lt;![CDATA[Twitter is overcapacity.]]></title>
              <link>&lt;![CDATA[/2009/10/15/twitter-is-overcapacity/]]></link>
              <pubDate>1255571501</pubDate>
              <content>&lt;![CDATA[ Just now got this on twitter. Nice image to display when overcapacity.
&amp;lt;a href=&amp;quot;http://blog.amit-agarwal.co.in/wp-content/uploads/2009/10/Over_capacity_1255572830327.jpg&amp;quot;&amp;gt;&amp;lt;img class=&amp;quot;size-thumbnail wp-image-1326&amp;quot; title=&amp;quot;Over_capacity&amp;quot; src=&amp;quot;http://blog.amit-agarwal.co.in/wp-content/uploads/2010/08/Over_capacity_1255572830327-150x150.jpg&amp;quot; alt=&amp;quot;Over_capacity&amp;quot; width=&amp;quot;150&amp;quot; height=&amp;quot;150&amp;quot; /&amp;gt;
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1218 ">
              <title>&lt;![CDATA[Diwali lighiying with cheap ping-pong balls.]]></title>
              <link>&lt;![CDATA[/2009/10/11/diwali-lighiying-with-cheap-ping-pong-balls/]]></link>
              <pubDate>1255268891</pubDate>
              <content>&lt;![CDATA[ If you need some cheap and novel ambient lighting for your next party, you&amp;amp;#8217;re only a box of ping-pong balls and a string of lights away from solving your lighting worries.
Instructables user AdvancedMischief needed some novel lighting and was impressed with the diffusing power of the simple ping-pong ball:
At some point last semester I realized that ping pong balls make great diffusers and look really cool when they are glowing. Next we concluded that a hundred glowing ping pong balls would look even cooler. It was at about this point I decided that my apartment was in dire need of some ping pong ball lights.
You&amp;amp;#8217;ll need a strand of lights, ping-pong balls—he recommends buying in bulk on &amp;lt;a class=&amp;quot;zem_slink&amp;quot; title=&amp;quot;eBay&amp;quot; rel=&amp;quot;homepage&amp;quot; href=&amp;quot;http://www.ebay.co.uk/&amp;quot;&amp;gt;eBay, versus paying retail rates for small packages—and a tool to poke holes in the balls. A drill or even a nail will suffice. From there it&amp;amp;#8217;s just a matter of punching holes in a bunch of pingpong balls and wiggling the light inside. For more details check out the full tutorial at the link below.
Ping-Pong Ball Lights [Instructables]
URL: &amp;lt;a href=&amp;quot;http://feeds.gawker.com/~r/lifehacker/full/~3/vBXdeRa7Jkw/use-ping&amp;quot;&amp;gt;http://feeds.gawker.com/~r/lifehacker/full/~3/vBXdeRa7Jkw/use-ping &#43;pong-balls-to-create-diffused-party-lights&amp;lt;div class=&amp;quot;zemanta-pixie&amp;quot; style=&amp;quot;margin-top: 10px; height: 15px;&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zemanta-pixie-a&amp;quot; title=&amp;quot;Reblog this post [with Zemanta]&amp;quot; href=&amp;quot;http://reblog.zemanta.com/zemified/b3d9d9d1-d132-4383-b285-1f0459e809da/&amp;quot;&amp;gt;&amp;lt;img class=&amp;quot;zemanta-pixie-img&amp;quot; style=&amp;quot;border: medium none; float: right;&amp;quot; src=&amp;quot;http://blog.amit-agarwal.co.in/wp-content/uploads/2010/08/reblog_e16.png&amp;quot; alt=&amp;quot;Reblog this post [with Zemanta]&amp;quot; /&amp;gt;&amp;lt;span class=&amp;quot;zem-script more-related pretty-attribution&amp;quot;&amp;gt;
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1219 ">
              <title>&lt;![CDATA[Tag2Find – Tag Your Windows Files with Web-like Tags]]></title>
              <link>&lt;![CDATA[/2009/10/05/tag2find-%E2%80%93-tag-your-windows-files-with-web-like-tags/]]></link>
              <pubDate>1254758367</pubDate>
              <content>&lt;![CDATA[ &amp;lt;a href=&amp;quot;http://blog.amit-agarwal.co.in/category/linux/&amp;quot;&amp;gt;Bookmark this category
Tagging is something your pipsqueak pigtailed sister did with you when you were in your tweens. That kind of ceaseless trailing was pesky. The Web 2.0 version though saves us a lot of bother.
Tagging is commonplace around blogs and websites. We all agree that it’s a speedy way to scour out a web resource; nearly single click in its utility. We are so used to it that we perhaps miss it as a feature in Windows.
Windows XP was born much before Web 2.0 came about. So, there’s the easy explanation. Vista of course has file tagging and Vista Quick Search as a feature but with a leaning towards only Office docs and a few limitations for certain file types like TXT, RTF, and PNG etc. Even then with all ifs and buts, Vista’s search is better for it. Windows XP meanwhile lags behind, huffing and puffing in its file search.
To plug the want, there is always one or the other software. You might have tried out the previously mentioned &amp;lt;a href=&amp;quot;http://www.makeuseof.com/tag/create-tags-for-your-windows-files-with-taggedfrog/&amp;quot;&amp;gt;TaggedFrog. Another of its type is Tag2Find.
There was a brief mention of it some time back. So, let’s take a closer look at how Tag2Find saves us XP users (why not Vista’s too?) some grunt work.
&amp;lt;a href=&amp;quot;http://www.tag2find.com/&amp;quot;&amp;gt;Tag2Find (ver. 0.10.2.5) is a 2.23 MB freeware that allows us to add tags to Windows XP contents and make our search less tedious. According to the site, it’s still in the technical preview stage and the developers are looking to make further improvements.
&amp;lt;span style=&amp;quot;background-color: #ffffff;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;font-size: x-small;&amp;quot;&amp;gt;Read more at &amp;lt;span style=&amp;quot;font-weight: normal; font-size: 13px; background-color: #ffffff;&amp;quot;&amp;gt;URL: &amp;lt;a href=&amp;quot;http://feedproxy.google.com/~r/Makeuseof/~3/tpnC2te-swk/&amp;quot;&amp;gt;http://feedproxy.google.com/~r/Makeuseof/~3/tpnC2te-swk/ ]]></content>
             </sphinx:document>
            
            <sphinx:document id="1220 ">
              <title>&lt;![CDATA[Boot Linux Over HTTP With boot.kernel.org (BKO)]]></title>
              <link>&lt;![CDATA[/2009/10/01/boot-linux-over-http-with-boot-kernel-org-bko/]]></link>
              <pubDate>1254405429</pubDate>
              <content>&lt;![CDATA[ &amp;lt;a href=&amp;quot;http://blog.amit-agarwal.co.in/category/linux/&amp;quot;&amp;gt;Bookmark this category
&amp;lt;font SIZE=&amp;quot;6&amp;quot;&amp;gt;&amp;lt;a HREF=&amp;quot;http://www.debianhelp.org/node/15823&amp;quot;&amp;gt;Boot Linux Over HTTP With boot.kernel.org (BKO) This tutorial shows how you can &amp;lt;a HREF=&amp;quot;http://www.howtoforge.com/boot-linux-over-http-with-boot.kernel.org-bko&amp;quot;&amp;gt;boot Linux over HTTP with boot.kernel.org (BKO). All that users need is Internet connectivity and a small program (gpxe) to boot the machine. This gpxe program provides network booting facility. BKO allows you to boot into the following distributions: Debian, Ubuntu, Damn Small Linux, Knoppix, Fedora. BKO provides gpxe images for USB sticks, CDs, and also for floppies, i.e., you can boot from a USB sticks, a CD, or a floppy.
&amp;lt;a HREF=&amp;quot;http://www.howtoforge.com/boot-linux-over-http-with-boot.kernel.org-bko&amp;quot;&amp;gt;http://www.howtoforge.com/boot-linux-over-http-with-boot.kernel.org-bko
URL: &amp;lt;a HREF=&amp;quot;http://www.debianhelp.org/node/15823&amp;quot;&amp;gt;http://www.debianhelp.org/node/15823
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1221 ">
              <title>&lt;![CDATA[4 Awesome Visual Search Engines To Transform Your Search]]></title>
              <link>&lt;![CDATA[/2009/09/24/4-awesome-visual-search-engines-to-transform-your-search/]]></link>
              <pubDate>1253760624</pubDate>
              <content>&lt;![CDATA[&amp;lt;a href=&amp;quot;http://blog.amit-agarwal.co.in/category/linux/&amp;quot;&amp;gt;Bookmark this category
&amp;lt; !DOCTYPE HTML PUBLIC &amp;quot;-//W3C//DTD HTML 4.0 TRANSITIONAL//EN&amp;quot;&amp;gt; &amp;lt;table CELLSPACING=&amp;quot;0&amp;quot; CELLPADDING=&amp;quot;0&amp;quot; WIDTH=&amp;quot;100%&amp;quot;&amp;gt;
&amp;lt;font SIZE=&amp;quot;6&amp;quot;&amp;gt;&amp;lt;a HREF=&amp;quot;http://feedproxy.google.com/~r/Makeuseof/~3/IqfzzYQXTUE/&amp;quot;&amp;gt;4 Awesome Visual Search Engines To Transform Your Search &amp;lt;img SRC=&amp;quot;http://blog.amit-agarwal.co.in/wp-content/uploads/2010/08/BingVisualSearch.jpg&amp;quot; ALIGN=&amp;quot;bottom&amp;quot; ALT=&amp;quot;Bing Visual Search&amp;quot; BORDER=&amp;quot;0&amp;quot;/&amp;gt;Microsoft’s Bing recently introduced visual search as a different approach to search. I always use regular Google or Bing search for my needs, but sometimes I like to check out other search engines. Variety is the spice of life, and eye-candy is always a refreshing break!
In this article, let us look at 4 Visual Search Engines that provide a unique and enjoyable search experience.
&amp;lt;font SIZE=&amp;quot;4&amp;quot;&amp;gt;&amp;lt;a HREF=&amp;quot;http://www.bing.com/visualsearch&amp;quot;&amp;gt;Bing Visual Search Engine &amp;lt;a HREF=&amp;quot;http://www.makeuseof.com/tag/bing-the-next-big-thing-from-microsoft/&amp;quot;&amp;gt;Bing has introduced a new approach to its visual search by letting you browse topic-specific galleries and narrow the field of your search by selecting filters.
In this approach, you do not need to type anything to start searching. To use the Bing Visual Search Engine, you should have installed &amp;lt;a HREF=&amp;quot;http://www.microsoft.com/Silverlight/&amp;quot;&amp;gt;Silverlight and set your country to US. From the home page, you can see a set of featured galleries, or choose from different categories like Entertainment, Famous People, Reference, Shopping and Sports.
&amp;lt;img SRC=&amp;quot;http://blog.amit-agarwal.co.in/wp-content/uploads/2010/08/BooksMain.jpg&amp;quot; WIDTH=&amp;quot;577&amp;quot; HEIGHT=&amp;quot;316&amp;quot; ALIGN=&amp;quot;bottom&amp;quot; ALT=&amp;quot;Books Main&amp;quot; BORDER=&amp;quot;0&amp;quot;/&amp;gt;
When you select a gallery, you get an eye-popping display of choices, which you can filter using categories on the left. For example, if I choose Popular Books, I get a nice array of books like in a real bookstore. I can sort books by Title, Author, Sales, or even Length. On the left, I can narrow the results by choosing a sub-category or filter. In this case, subcategories for books are Newest, or the Top pre-order/fiction/non-fiction/paperback lists.
I can also use filters to narrow the results for what I might find suitable for my taste: the subject, author, format (hardcover, etc.), and length in pages. Some of the galleries, like the top iPhone apps gallery for example, are especially useful and offer a unique experience. Once you use it for a while, you might think that this new feature distinguishes Bing from Google to a limited extent, as a decision-making engine.
&amp;lt;font SIZE=&amp;quot;4&amp;quot;&amp;gt;&amp;lt;a HREF=&amp;quot;http://www.spezify.com/&amp;quot;&amp;gt;Spezify After using &amp;lt;a HREF=&amp;quot;http://www.makeuseof.com/dir/spezify-visualize-search-results/&amp;quot;&amp;gt;Spezify, I felt we do injustice to the web by using an exclusive textual interface to search the rich multimedia of the web. Spezify works like a generic search engine, except that the results are a visual collage of media drawn from different kinds of media sources – textual links from web pages, informative links from Wikipedia, pictures from across the web, tweets with the search term, videos from YouTube, books from Amazon, and so on. You need Flash to use Spezify.
&amp;lt;img SRC=&amp;quot;http://blog.amit-agarwal.co.in/wp-content/uploads/2010/08/Spezify.jpg&amp;quot; WIDTH=&amp;quot;577&amp;quot; HEIGHT=&amp;quot;324&amp;quot; ALIGN=&amp;quot;bottom&amp;quot; ALT=&amp;quot;Spezify&amp;quot; BORDER=&amp;quot;0&amp;quot;/&amp;gt;
You can browse through the results matrix in both vertical and horizontal directions, and look at the pictures as well as the videos from within the search results page. The links within the tweets will take you directly to the page about that topic. Articles from the web are displayed along with the number of Diggs, which show that Spezify uses Digg to show you popular content. Terms related to the topic are displayed at the top if you wish to explore or narrow your search.
&amp;lt;font SIZE=&amp;quot;4&amp;quot;&amp;gt;&amp;lt;a HREF=&amp;quot;http://www.viewzi.com/&amp;quot;&amp;gt;Viewzi Viewzi, which runs using Flash, is the most customizable and multi-faceted visual search engine. For any search term, it offers up to 19 different ways to view the search results, and you can make any one of them your default. The types of views cover everything under the sun – web screenshots, simple text, photos, music, news, celebrity gossip, recipes, weather, etc.
&amp;lt;img SRC=&amp;quot;http://blog.amit-agarwal.co.in/wp-content/uploads/2010/08/ViewziGlaciersPhoto.jpg&amp;quot; WIDTH=&amp;quot;577&amp;quot; HEIGHT=&amp;quot;334&amp;quot; ALIGN=&amp;quot;bottom&amp;quot; ALT=&amp;quot;Viewzi Glaciers Photo&amp;quot; BORDER=&amp;quot;0&amp;quot;/&amp;gt;
Videos are fetched from Joost, YouTube, and Viddler, but cannot be played back within the results page. However, the best view is the photo tag view, in which you can explore Flickr photos of related tags just by clicking on them. You can drag the tags around whichever way you want, and the interface is quite remarkable.
&amp;lt;font SIZE=&amp;quot;4&amp;quot;&amp;gt;&amp;lt;a HREF=&amp;quot;http://search.spacetime.com/&amp;quot;&amp;gt;Spacetime We had covered &amp;lt;a HREF=&amp;quot;http://www.makeuseof.com/tag/spacetime-3d-browsing-gimmick-or-innovation/&amp;quot;&amp;gt;SpaceTime on MakeUseOf back when it was a 3D browser. SpaceTime is now a visual search engine using Flash, which shows search results in cover-flow style. You can choose results from Google or Wikipedia, or search Images, or videos from YouTube. Again, the videos can’t be played back within the search results, however the image search does look very pretty.
&amp;lt;img SRC=&amp;quot;http://blog.amit-agarwal.co.in/wp-content/uploads/2010/08/SpaceTime3D.jpg&amp;quot; WIDTH=&amp;quot;577&amp;quot; HEIGHT=&amp;quot;312&amp;quot; ALIGN=&amp;quot;bottom&amp;quot; ALT=&amp;quot;SpaceTime 3D&amp;quot; BORDER=&amp;quot;0&amp;quot;/&amp;gt;
While you may not use these visual search engines for routine search queries, they do offer an attractive, unique experience. They can be a great way to introduce children to the richness of the web, or to encourage their curiosity in a certain topic. Even for us, they are a refreshing way to explore the web in a different way.
Last year, &amp;lt;a HREF=&amp;quot;http://www.makeuseof.com/tag/tineye-searching-for-images-with-image/&amp;quot;&amp;gt;we also profiled TinEye which is another possibility – but this one is termed by the site as “reverse search“. You upload an image to them and they will search for similarities.
Are there any of your other favorite visual search engines we missed? Do tell us in the comments!
Did you like the post? Please do share your thoughts in the comments section!
New on MakeUseOf ? Get cheat sheets and cool PDF guides @ &amp;lt;a HREF=&amp;quot;http://www.makeuseof.com/makeuseof-downloads/&amp;quot;&amp;gt;www.makeuseof.com/makeuseof-downloads/
Related posts &amp;lt;a HREF=&amp;quot;http://www.makeuseof.com/tag/5-ways-to-do-a-site-specific-search-within-any-website/&amp;quot;&amp;gt;5 Ways To Do A Site-Specific Search Using Search Engines (12) &amp;lt;a HREF=&amp;quot;http://www.makeuseof.com/tag/3-forum-search-engines-to-search-40-000-message-boards/&amp;quot;&amp;gt;3 Forum Search Engines to Search 40.000&#43; Message Boards (9) &amp;lt;a HREF=&amp;quot;http://www.makeuseof.com/tag/welcome-to-the-future-of-online-search/&amp;quot;&amp;gt;Welcome To The Future Of Online Search (5) &amp;lt;a HREF=&amp;quot;http://www.makeuseof.com/tag/tineye-searching-for-images-with-image/&amp;quot;&amp;gt;TinEye – Searching For Images With An Image (19) &amp;lt;a HREF=&amp;quot;http://www.makeuseof.com/tag/how-to-search-images-by-color-3-tools-for-your-design-inspiration/&amp;quot;&amp;gt;The Best 3 Tools to Search for Images Online by Color (26) &amp;lt;a HREF=&amp;quot;http://feedads.g.doubleclick.net/~a/2xrfY9-ks6jXsUCfW3pmawvAwYs/0/da&amp;quot;&amp;gt;&amp;lt;img SRC=&amp;quot;http://blog.amit-agarwal.com/wp-content/uploads/amit-agarwal.co.in/~a/2xrfY9-ks6jXsUCfW3pmawvAwYs/0/di&amp;quot; ALIGN=&amp;quot;bottom&amp;quot; BORDER=&amp;quot;0&amp;quot;/&amp;gt;
&amp;lt;a HREF=&amp;quot;http://feedads.g.doubleclick.net/~a/2xrfY9-ks6jXsUCfW3pmawvAwYs/1/da&amp;quot;&amp;gt;&amp;lt;img SRC=&amp;quot;http://blog.amit-agarwal.com/wp-content/uploads/amit-agarwal.co.in/~a/2xrfY9-ks6jXsUCfW3pmawvAwYs/1/di&amp;quot; ALIGN=&amp;quot;bottom&amp;quot; BORDER=&amp;quot;0&amp;quot;/&amp;gt;
&amp;lt;a HREF=&amp;quot;http://feeds.feedburner.com/~ff/Makeuseof?a=IqfzzYQXTUE:wErS6ecA-FI:V_sGLiPBpWU&amp;quot;&amp;gt;&amp;lt;img SRC=&amp;quot;http://blog.amit-agarwal.com/wp-content/uploads/amit-agarwal.co.in/~ff/Makeuseof?i=IqfzzYQXTUE:wErS6ecA-FI:V_sGLiPBpWU&amp;quot; ALIGN=&amp;quot;bottom&amp;quot; BORDER=&amp;quot;0&amp;quot;/&amp;gt; &amp;lt;a HREF=&amp;quot;http://feeds.feedburner.com/~ff/Makeuseof?a=IqfzzYQXTUE:wErS6ecA-FI:gIN9vFwOqvQ&amp;quot;&amp;gt;&amp;lt;img SRC=&amp;quot;http://blog.amit-agarwal.com/wp-content/uploads/amit-agarwal.co.in/~ff/Makeuseof?i=IqfzzYQXTUE:wErS6ecA-FI:gIN9vFwOqvQ&amp;quot; ALIGN=&amp;quot;bottom&amp;quot; BORDER=&amp;quot;0&amp;quot;/&amp;gt; &amp;lt;a HREF=&amp;quot;http://feeds.feedburner.com/~ff/Makeuseof?a=IqfzzYQXTUE:wErS6ecA-FI:F7zBnMyn0Lo&amp;quot;&amp;gt;&amp;lt;img SRC=&amp;quot;http://blog.amit-agarwal.com/wp-content/uploads/amit-agarwal.co.in/~ff/Makeuseof?i=IqfzzYQXTUE:wErS6ecA-FI:F7zBnMyn0Lo&amp;quot; ALIGN=&amp;quot;bottom&amp;quot; BORDER=&amp;quot;0&amp;quot;/&amp;gt; &amp;lt;a HREF=&amp;quot;http://feeds.feedburner.com/~ff/Makeuseof?a=IqfzzYQXTUE:wErS6ecA-FI:I9og5sOYxJI&amp;quot;&amp;gt;&amp;lt;img SRC=&amp;quot;http://blog.amit-agarwal.com/wp-content/uploads/img.zemanta.com/~ff/Makeuseof?d=I9og5sOYxJI&amp;quot; ALIGN=&amp;quot;bottom&amp;quot; BORDER=&amp;quot;0&amp;quot;/&amp;gt; &amp;lt;a HREF=&amp;quot;http://feeds.feedburner.com/~ff/Makeuseof?a=IqfzzYQXTUE:wErS6ecA-FI:qj6IDK7rITs&amp;quot;&amp;gt;&amp;lt;img SRC=&amp;quot;http://blog.amit-agarwal.com/wp-content/uploads/img.zemanta.com/~ff/Makeuseof?d=qj6IDK7rITs&amp;quot; ALIGN=&amp;quot;bottom&amp;quot; BORDER=&amp;quot;0&amp;quot;/&amp;gt; &amp;lt;a HREF=&amp;quot;http://feeds.feedburner.com/~ff/Makeuseof?a=IqfzzYQXTUE:wErS6ecA-FI:yIl2AUoC8zA&amp;quot;&amp;gt;&amp;lt;img SRC=&amp;quot;http://blog.amit-agarwal.com/wp-content/uploads/img.zemanta.com/~ff/Makeuseof?d=yIl2AUoC8zA&amp;quot; ALIGN=&amp;quot;bottom&amp;quot; BORDER=&amp;quot;0&amp;quot;/&amp;gt; &amp;lt;a HREF=&amp;quot;http://feeds.feedburner.com/~ff/Makeuseof?a=IqfzzYQXTUE:wErS6ecA-FI:D7DqB2pKExk&amp;quot;&amp;gt;&amp;lt;img SRC=&amp;quot;http://blog.amit-agarwal.com/wp-content/uploads/amit-agarwal.co.in/~ff/Makeuseof?i=IqfzzYQXTUE:wErS6ecA-FI:D7DqB2pKExk&amp;quot; ALIGN=&amp;quot;bottom&amp;quot; BORDER=&amp;quot;0&amp;quot;/&amp;gt; &amp;lt;img SRC=&amp;quot;http://blog.amit-agarwal.com/wp-content/uploads/amit-agarwal.co.in/~r/Makeuseof/~4/IqfzzYQXTUE&amp;quot; WIDTH=&amp;quot;1&amp;quot; HEIGHT=&amp;quot;1&amp;quot; ALIGN=&amp;quot;bottom&amp;quot; BORDER=&amp;quot;0&amp;quot;/&amp;gt;
URL: &amp;lt;a HREF=&amp;quot;http://feedproxy.google.com/~r/Makeuseof/~3/IqfzzYQXTUE/&amp;quot;&amp;gt;http://feedproxy.google.com/~r/Makeuseof/~3/IqfzzYQXTUE/
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1222 ">
              <title>&lt;![CDATA[Page rank – google and alexa and indiblogger.in]]></title>
              <link>&lt;![CDATA[/2009/09/20/page-rank-google-and-alexa-and-indiblogger-in/]]></link>
              <pubDate>1253420682</pubDate>
              <content>&lt;![CDATA[ I was planning to put down my thougths on lot of other things but then one of the mails in my mailbox took my attention today. I had a mail from indiblogger.in stating that my page rank was 81. So, that was something good, for a person, who takes out time from family and office to blog. Not bad, huh.
Earlier I had not looked at Google ranking and Alexa ranking. I came to know that I have a google ranking of 3 and Alexa ranking of 1.87M, considered quite good by indiblogger. Looks good to me. What do you say.
Just found that Google pagerank can be seen at &amp;lt;a href=&amp;quot;http://www.googlerankings.com/prindex.php&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;http://www.googlerankings.com/prindex.php
or &amp;lt;a href=&amp;quot;http://www.prchecker.info&amp;quot;&amp;gt;Page Rank Checker
Alexa ranking at &amp;lt;a href=&amp;quot;http://www.alexa.com/&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;http://www.alexa.com/
My traffic rank in india is : 220,382
Only reason, I am still not getting good rankings is that I don&amp;amp;#8217;t have pages linking to my site, so request you to link to my blog, if you like my blog 🙂
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1223 ">
              <title>&lt;![CDATA[added mail and mail notification support on the blog.]]></title>
              <link>&lt;![CDATA[/2009/09/10/added-mail-and-mail-notification-support-on-the-blog/]]></link>
              <pubDate>1252596641</pubDate>
              <content>&lt;![CDATA[ I have been putting this off for quite some time, finally I added the mail support on my blog. You can subscribe to comments or new posts or newsletters. Just click on subscribe on the main page. On the confirmation page you can select your options for the subscription (newletters or otherwise). Be sure that your email ID will not be used by me or I will not sell them 🙂
While commenting you can also select the option to be notified on any more comments 🙂 Hope to make your experiece a better one.
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1224 ">
              <title>&lt;![CDATA[Database of vulnurability at milw0rm.com – udpate and makeindex with cron.]]></title>
              <link>&lt;![CDATA[/2009/09/08/database-of-vulnurability-at-milw0rm-com-udpate-and-makeindex-with-cron/]]></link>
              <pubDate>1252426013</pubDate>
              <content>&lt;![CDATA[ I am quite regular visitor of milw0rm and generally try to keep up with the vul&amp;amp;#8217;s. For doing this I wrote a small scripts rather set of scripts to keep myself update. Here&amp;amp;#8217;s what we are going to do:
Get the latest tar from the site.
Extract it.
Make the index
Have a shortcut to search the index.
Download the attached files for the first 2 points. &amp;lt;a href=&amp;quot;http://blog.amit-agarwal.co.in/wp-content/uploads/2009/09/makeindex-milw0rm.sh&amp;quot;&amp;gt;makeindex-milw0rm and &amp;lt;a href=&amp;quot;http://blog.amit-agarwal.co.in/wp-content/uploads/2009/09/udpate-milw0rm.sh&amp;quot;&amp;gt;udpate-milw0rm
Now open the update-milw0rm file with the directory paths, that is located in the starting of the file.
Once that is done, do the following on the terminal,
crontab -e
Add a entry like this:
@daily /home/amit/update-milw0rm.sh
So you are all set to automatically download and update the data everyday. Lets now create a alias to search the exploitlist from the terminal.
Put the following in your profile :
alias search_sploit=&amp;amp;#8221;cat $(cat ~/bin/update-milw0rm.sh|grep dir=|awk -F&amp;amp;#8217;=&amp;amp;#8217; &#39;{print $2}&amp;amp;#8217;|awk -F&amp;amp;#8217;&amp;amp;#8221;&amp;amp;#8217; &#39;{print $2}&amp;amp;#8217;)/milw0rm/sploitlist.txt|grep -i&amp;amp;#8221;
Now, when you want to search the database for the exploit you can simply type:
search_sploit ]]></content>
             </sphinx:document>
            
            <sphinx:document id="1225 ">
              <title>&lt;![CDATA[indiblogger submission accepted.]]></title>
              <link>&lt;![CDATA[/2009/09/01/indiblogger-submission-accepted/]]></link>
              <pubDate>1251774041</pubDate>
              <content>&lt;![CDATA[ I had submitted my blog to indiblogger.in some months ago and it was in waiting list. I had lost all hopes that it will get reviewed or approved and had long since stopped looking at the status also, but today morning I got a surprise mail that the submission is accepted. Here&amp;amp;#8217;s the link: http://www.indiblogger.in/blogger/7717/
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1226 ">
              <title>&lt;![CDATA[my blog more accessible from PDA and iPhone]]></title>
              <link>&lt;![CDATA[/2009/08/25/my-blog-more-accessible-from-pda-and-iphone/]]></link>
              <pubDate>1251214401</pubDate>
              <content>&lt;![CDATA[ I have installed a seperate theme for iPhone and PDA so that the bandwidth and download required is much less from these devices. So, now my blog should load much faster if you are using a PDA or iPhone to browse my blogs.
Happy Browsing.
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1227 ">
              <title>&lt;![CDATA[Complete makeover of the blog]]></title>
              <link>&lt;![CDATA[/2009/08/22/complete-makeover-of-the-blog/]]></link>
              <pubDate>1250952980</pubDate>
              <content>&lt;![CDATA[ I have been thinking about this for sometime. I have completed one year of the domain and thus on this occasion finally I am on a spree to do complete makeover of the blog.. Do visit the site to see the changes. There are couple of more planned which will be coming soon. So, keep looking out.
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1228 ">
              <title>&lt;![CDATA[Option to login with any provider.]]></title>
              <link>&lt;![CDATA[/2009/08/20/option-to-login-with-any-provider/]]></link>
              <pubDate>1250788563</pubDate>
              <content>&lt;![CDATA[ I have enabled the following logins on my site.
&amp;lt;a href=&amp;quot;http://blog.amit-agarwal.co.in/wp-content/uploads/2010/08/Amit-Agarwal-›-Log-In_1250790644706.png&amp;quot;&amp;gt;&amp;lt;img class=&amp;quot;size-full wp-image-942&amp;quot; title=&amp;quot;Amit Agarwal › Log In&amp;quot; src=&amp;quot;http://blog.amit-agarwal.co.in/wp-content/uploads/2010/08/Amit-Agarwal-›-Log-In_1250790644706.png&amp;quot; alt=&amp;quot;Amit Agarwal › Log In&amp;quot; width=&amp;quot;349&amp;quot; height=&amp;quot;185&amp;quot; /&amp;gt;
Hope you like it that you dont have to remember one more login 🙂
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1229 ">
              <title>&lt;![CDATA[Links exchange and new blogs.]]></title>
              <link>&lt;![CDATA[/2009/08/17/links-exchange-and-new-blogs/]]></link>
              <pubDate>1250472687</pubDate>
              <content>&lt;![CDATA[ I think one of the best ways to learn new things and also get some traffic to use blog is link exchange. For this, I am inviting all new and old blog owners to put their blog addresses in the comment and I will put them in the body of the post. Hows that 🙂
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1230 ">
              <title>&lt;![CDATA[Consider your account to be for you then use Linux]]></title>
              <link>&lt;![CDATA[/2009/08/12/consider-your-account-to-be-for-you-then-use-linux/]]></link>
              <pubDate>1250092691</pubDate>
              <content>&lt;![CDATA[ Found &amp;lt;a href=&amp;quot;http://www.esecurityplanet.com/features/article.php/51671_3834031_1/Consider-Linux-for-Secure-Online-Banking.htm&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;this nice article today, may be it will save someone his lifetime earning.
[[danscartoon]]
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1231 ">
              <title>&lt;![CDATA[Flash cookies making sure you have no privacy.]]></title>
              <link>&lt;![CDATA[/2009/08/11/flash-cookies-making-sure-you-have-no-privacy/]]></link>
              <pubDate>1250006858</pubDate>
              <content>&lt;![CDATA[ Every one thinks that if cookies are deleted then you are in good shape and that sites cannot access your data. Think again or read&amp;lt;a href=&amp;quot;http://www.gnashdev.org/?q=node/62&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt; here.
A very amazing article that list out the issues and what can be done to stop it. Worth reading.
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1232 ">
              <title>&lt;![CDATA[tagging enabled for subscribers on my gallery.]]></title>
              <link>&lt;![CDATA[/2009/08/05/tagging-enabled-for-subscribers-on-my-gallery/]]></link>
              <pubDate>1249425127</pubDate>
              <content>&lt;![CDATA[ I have enabled tagging of my photos on this blogs image gallery. Do tag the images, when you get time.
Also the tags with help others also to seach photos.
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1233 ">
              <title>&lt;![CDATA[India to create a microprossor of its own and use Linux on it :)]]></title>
              <link>&lt;![CDATA[/2009/07/20/india-to-create-a-microprossor-of-its-own-and-use-linux-on-it/]]></link>
              <pubDate>1248104177</pubDate>
              <content>&lt;![CDATA[ Read the article &amp;lt;a href=&amp;quot;http://www.computerworlduk.com/community/blogs/index.cfm?entryid=2362&amp;amp;blogid=14&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;here.
This is pretty good news, isn&amp;amp;#8217;t it.
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1234 ">
              <title>&lt;![CDATA[Scroggle — Google with privacy.]]></title>
              <link>&lt;![CDATA[/2009/07/08/scroggle-google-with-privacy/]]></link>
              <pubDate>1247067041</pubDate>
              <content>&lt;![CDATA[ If you do not like the google tracking, then scroggle is for you. Head to scroggle to see how it works, but if you are in hurry then you start searching &amp;lt;a title=&amp;quot;Scgoggle&amp;quot; href=&amp;quot;http://www.scroogle.org/cgi-bin/scraper.htm&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;here.
And you want a Firefox plugin then head &amp;lt;a href=&amp;quot;http://mycroft.mozdev.org/search-engines.html?name=scroogle&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;here.
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1235 ">
              <title>&lt;![CDATA[feedly– addon for firefox if you have a lot of subscriptions for Google reader.]]></title>
              <link>&lt;![CDATA[/2009/06/23/feedly-addon-for-firefox-if-you-have-a-lot-of-subscriptions-for-google-reader/]]></link>
              <pubDate>1245725393</pubDate>
              <content>&lt;![CDATA[ Download feedly &amp;lt;a href=&amp;quot;https://addons.mozilla.org/en-US/firefox/addon/8538&amp;quot;&amp;gt;here. Feedly is the way to go if you have lot of subscriptions or otherwise too if you would like to see some changes in the way the google reader looks. Here&amp;amp;#8217;s the description:
A magazine-like startpage. A fast and stylish way to read and share the content of your favorite sites and services. Provides seamless integration with Google Reader, Twitter, Frienfeed, Delicious and YouTube.
and a screenshot:
&amp;lt;a href=&amp;quot;http://blog.amit-agarwal.co.in/wp-content/uploads/2010/08/feedly-latest-p-1_1245726920079.jpg&amp;quot;&amp;gt;&amp;lt;img class=&amp;quot;size-full wp-image-841&amp;quot; title=&amp;quot;feedly&amp;quot; src=&amp;quot;http://blog.amit-agarwal.co.in/wp-content/uploads/2010/08/feedly-latest-p-1_1245726920079.jpg&amp;quot; alt=&amp;quot;feedly&amp;quot; width=&amp;quot;950&amp;quot; height=&amp;quot;706&amp;quot; /&amp;gt;
Well, this has definitely made my life easier.
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1236 ">
              <title>&lt;![CDATA[Managing your remote site locally – sitecopy.]]></title>
              <link>&lt;![CDATA[/2009/06/12/managing-your-remote-site-locally-sitecopy/]]></link>
              <pubDate>1244825374</pubDate>
              <content>&lt;![CDATA[ If you are managing a remote site, web server that you do not have direct access to (terminal or ssh) and you have to do it with cpanel, then I know how much pain it is. I had the same issue until recently when I discovered &amp;lt;a href=&amp;quot;http://http://www.manyfish.co.uk/sitecopy/&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;sitecopy.
Description of sitecopy:
sitecopy allows you to easily maintain remote Web sites. The program will upload files to the server which have changed locally, and delete files from the server which have been removed locally, to keep the remote site synchronized with the local site, with a single command. sitecopy will also optionally try to spot files you move locally, and move them remotely. FTP and WebDAV servers are supported.
Now that&amp;amp;#8217;s interesting. So how to use sitecopy. I will give you a step by step guide. If you are running Fedora, the package is in the Fedora repo.
So, Lets first install the package :
sudo yum install sitecopy
Once that is done, we need to create a rc file to direct the sites:
site amit –&amp;raquo; Just a name for sitecopy to recognize this site.
server amit-agarwal.co.in –&amp;raquo; The server
remote / -&amp;raquo; Path on the server to manage
local sitecopy –&amp;raquo; the local path for storage of the files.
username xxxx –&amp;raquo; the username for the site
password xxxx –&amp;raquo; the password for the site
url http://amit-agarwal.co.in –&amp;raquo; URL of the site
protocol ftp –&amp;gt; The protocol to use by sitecopy, webdav also can be used.
Put the above file in the home folder as .sitecopyrc. Then change the permission to 0600. Create a folder called .sitecopy and change the permission to 0700. That much for the configuration. Now create the destination storage folder specified in the local configuration above and change the folder permission to 0700. You are ready to go.
Initialize the site:
sitecopy -i
Then update the site:
sitecopy -s amit
This is supposed to synchronize the local folder with the remote folder but I found that the command did not create the directories recursively, so did a little hack and ran the below to do a complete copy:
sitecopy -s ; while [ $? == 1 ] do sitecopy -s amit; done;
This will complete the initial set of directories for you and then whenever you want to sync the local directory you can run
sitecopy -s amit
and when you make changes locally you can update the site with
sitecopy -u amit
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1237 ">
              <title>&lt;![CDATA[couple of changes to the site.]]></title>
              <link>&lt;![CDATA[/2009/06/08/couple-of-changes-to-the-site/]]></link>
              <pubDate>1244431427</pubDate>
              <content>&lt;![CDATA[ Spent the weekend on making some changes to the site..
Added intense debate to start with for the comments.. I kinda liked it. Though am still struggling to get Facebook added to it 🙂
Feejit and Friendconnect was added some time back.
Hope you like it 🙂
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1238 ">
              <title>&lt;![CDATA[bing versus google]]></title>
              <link>&lt;![CDATA[/2009/06/07/bing-versus-google/]]></link>
              <pubDate>1244346049</pubDate>
              <content>&lt;![CDATA[ I have been hearing a lot about the bing versus google search engine but the question is which is good. Can&amp;amp;#8217;t be sure, bing is good is some results and google is good in others. You too are confused then use &amp;lt;a href=&amp;quot;https://addons.mozilla.org/en-US/firefox/addon/12253&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;this addon on firefox. This is a nice addon which splits the firefox screen and then displays the result side by side. Here&amp;amp;#8217;s how it looks , great.
&amp;lt;a href=&amp;quot;http://blog.amit-agarwal.co.in/wp-content/uploads/2010/08/amit-agarwal-bing-vs-google_1244347530195.jpg&amp;quot;&amp;gt;&amp;lt;img class=&amp;quot;alignnone size-full wp-image-799&amp;quot; title=&amp;quot;amit-agarwal-bing-vs-google_1244347530195&amp;quot; src=&amp;quot;http://blog.amit-agarwal.co.in/wp-content/uploads/2010/08/amit-agarwal-bing-vs-google_1244347530195.jpg&amp;quot; alt=&amp;quot;amit-agarwal-bing-vs-google_1244347530195&amp;quot; width=&amp;quot;840&amp;quot; height=&amp;quot;408&amp;quot; /&amp;gt;
Happy Searching
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1239 ">
              <title>&lt;![CDATA[3/10 results in first page of bing for my site for search term \”amit agarwal\”.]]></title>
              <link>&lt;![CDATA[/2009/06/01/310-results-in-first-bing-for-my-site-for-search-term-amit-agarwal/]]></link>
              <pubDate>1243872479</pubDate>
              <content>&lt;![CDATA[ I was not planning on writing another blog on bing. But then bing lists my website 3/10 so &amp;lt;a href=&amp;quot;http://www.bing.com/search?q=amit&#43;agarwal&amp;amp;go=&amp;amp;form=QBLH&amp;amp;filt=all&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;here is the link to the search. Worth braggin when there is Amit Agarwal from labnol.
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1240 ">
              <title>&lt;![CDATA[Diary and Journal on your linux Desktop]]></title>
              <link>&lt;![CDATA[/2009/05/26/diary-and-journal-on-your-linux-desktop/]]></link>
              <pubDate>1243352044</pubDate>
              <content>&lt;![CDATA[ &amp;lt;a href=&amp;quot;http://digitaldump.wordpress.com/projects/rednotebook/&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;RedNotebook is a diary and journel for the *nix OS. This is a great software with some very good features.
This is available on fedora repo and hence to install you can just type:
sudo yum install rednotebook
Some features to note are:
Enter text for individual days and navigate using a fancy calendar Add Categories to days and fill them with small content Tag your entries Format your text bold, italic or &amp;lt;span style=&amp;quot;text-decoration: underline;&amp;quot;&amp;gt;underlined Insert Images, files and links to websites Links and mail addresses are recognized automatically (Live-) Search Automatic saving Backup to zip archive Word Clouds with most often used words and tags Create a template for each day Export the journal to HTML, Latex or plain text RedNotebook is Open Source Software, you are free to use and redistribute it under the terms of the GPL ]]></content>
             </sphinx:document>
            
            <sphinx:document id="1241 ">
              <title>&lt;![CDATA[RFC Reader – Elegnant way to read RFC and other text documents.]]></title>
              <link>&lt;![CDATA[/2009/05/25/rfc-reader-elegnant-way-to-read-rfc-and-other-text-documents/]]></link>
              <pubDate>1243219651</pubDate>
              <content>&lt;![CDATA[ You can find RFC Reader &amp;lt;a href=&amp;quot;http://download.cnet.com/RFC-Reader/3000-2383_4-10557406.html&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;here.
Description of the tool:
RFC Reader is a professional tool for reading RFC document. It can generate a section directory tree. And it provides lots of features to help you reading RFC documents, such as bookmark, highlight, search, and automatically record where you are reading. Version 3.2 is optimized and it is free now! You can use it without any limitation.
Another interesting tool is &amp;lt;a href=&amp;quot;http://grfc.sourceforge.net/&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;here.
It is minimal but quite good.
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1242 ">
              <title>&lt;![CDATA[Absolutely hilarious]]></title>
              <link>&lt;![CDATA[/2009/04/13/absolutely-hilarious/]]></link>
              <pubDate>1239591592</pubDate>
              <content>&lt;![CDATA[ &amp;lt;a target=&amp;quot;_blank&amp;quot; href=&amp;quot;http://www.geek24.com/g/2006/06/13/absolutely-hilarious-computer-quotes&amp;quot;&amp;gt;http://www.geek24.com/g/2006/06/13/absolutely-hilarious-computer-quotes
Some examples:
&amp;amp;#8221;unzip; strip; touch; finger; mount; fsck; more; yes; unmount; sleep&amp;amp;#8221; – my daily unix command list
&amp;amp;#8221;If brute force doesn&amp;amp;#8217;t solve your problems, then you aren&amp;amp;#8217;t using enough.&amp;amp;#8221;
&amp;amp;#8221;Unix is user-friendly. It&amp;amp;#8217;s just very selective about who its friends are.&amp;amp;#8221;
&amp;amp;#8221;1f u c4n r34d th1s u r34lly n33d t0 g37 l41d&amp;amp;#8221;
The nice thing about Windows – it does not just crash; it actually displays a dialogue box and lets you press OK first. &amp;lt;div class=&amp;quot;zemanta-pixie&amp;quot;&amp;gt;&amp;lt;img class=&amp;quot;zemanta-pixie-img&amp;quot; src=&amp;quot;http://blog.amit-agarwal.co.in/wp-content/uploads/2010/08/pixy5.gif&amp;quot; /&amp;gt;
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1243 ">
              <title>&lt;![CDATA[Nice articles to spend some time.]]></title>
              <link>&lt;![CDATA[/2009/03/14/nice-articles-to-spend-some-time/]]></link>
              <pubDate>1237028370</pubDate>
              <content>&lt;![CDATA[ Get intoxicated with all kind of crazy languages in the world of computers.
&amp;lt;a href=&amp;quot;http://www.tuxradar.com/content/programming-languages-melt-your-brain&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;http://www.tuxradar.com/content/programming-languages-melt-your-brain
A quite useful vim guide.
&amp;lt;a href=&amp;quot;http://www.terminally-incoherent.com/blog/2009/03/03/vim-cheatsheet-revisited/&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;http://www.terminally-incoherent.com/blog/2009/03/03/vim-cheatsheet-revisited/
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1244 ">
              <title>&lt;![CDATA[Happy Holi]]></title>
              <link>&lt;![CDATA[/2009/03/13/happy-holi/]]></link>
              <pubDate>1236911249</pubDate>
              <content>&lt;![CDATA[ &amp;lt;img src=&amp;quot;http://blog.amit-agarwal.co.in/wp-content/uploads/2010/08/dscf.jpg&amp;quot; alt=&amp;quot;Holi&amp;quot; title=&amp;quot;Holi&amp;quot; width=&amp;quot;872&amp;quot; height=&amp;quot;654&amp;quot; class=&amp;quot;size-full wp-image-695&amp;quot; /&amp;gt;
Wish you all happy holi.
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1245 ">
              <title>&lt;![CDATA[Feed burned on Feedburner.]]></title>
              <link>&lt;![CDATA[/2009/03/03/feed-burned-on-feedburner/]]></link>
              <pubDate>1236097403</pubDate>
              <content>&lt;![CDATA[ Finally my ads are now burned on feed burner. The immediate change that you will notice because of this is that now you can subscribe using Feedburner and second and important change is that now you can subsciber by email 🙂
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1246 ">
              <title>&lt;![CDATA[My photos on *looks with good download and rating :)]]></title>
              <link>&lt;![CDATA[/2009/02/16/my-photos-on-looks-with-good-download-and-rating/]]></link>
              <pubDate>1234754473</pubDate>
              <content>&lt;![CDATA[ Enjoy the free wallpapers
&amp;lt;img class=&amp;quot;size-full wp-image-612&amp;quot; title=&amp;quot;Linux Power&amp;quot; src=&amp;quot;http://amit-agarwal.co.in/wordpress/wp-content/uploads/2009/02/99448-1.jpg&amp;quot; alt=&amp;quot;Linux Power&amp;quot; width=&amp;quot;339&amp;quot; height=&amp;quot;271&amp;quot; /&amp;gt;
&amp;lt;a href=&amp;quot;http://gnome-look.org/content/show.php/Linux&#43;Power?content=99448&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;http://gnome-look.org/content/show.php/Linux&#43;Power?content=99448
&amp;lt;a href=&amp;quot;http://www.kde-look.org/content/show.php/Linux&#43;Power?content=99451&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;http://www.kde-look.org/content/show.php/Linux&#43;Power?content=99451
&amp;lt;img class=&amp;quot;size-full wp-image-613&amp;quot; title=&amp;quot;Dark Sky&amp;quot; src=&amp;quot;http://blog.amit-agarwal.co.in/wp-content/uploads/2010/08/1280x1024.jpg&amp;quot; alt=&amp;quot;Dark Sky&amp;quot; width=&amp;quot;526&amp;quot; height=&amp;quot;420&amp;quot; /&amp;gt;
&amp;lt;a href=&amp;quot;http://gnome-look.org/content/show.php/Dark&#43;Sky?content=99487&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;http://gnome-look.org/content/show.php/Dark&#43;Sky?content=99487
&amp;lt;a href=&amp;quot;http://www.kde-look.org/content/show.php/Dark&#43;Sky?content=99486&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;http://www.kde-look.org/content/show.php/Dark&#43;Sky?content=99486
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1247 ">
              <title>&lt;![CDATA[MinGW – compile windows software on Linux]]></title>
              <link>&lt;![CDATA[/2009/02/15/mingw-compile-windows-software-on-linux/]]></link>
              <pubDate>1234702357</pubDate>
              <content>&lt;![CDATA[ For all the windows developer out there, it is impossible to switch to Linux just because someone is looking for the Windows exe. Sooooooo bad. Not any more. There has been the MinGW compiler (and others) to compile the C programs on Linux box to run on Windows box. These cross compilers create windows exe and thus these can run on Windows natively without additional dll&amp;amp;#8217;s. That&amp;amp;#8217;s quite good, so how to do it.
Here&amp;amp;#8217;s how:
Fedora has decided to include the cross compiler in the repository . Login as root and do the following:
yum install mingw32-gcc mingw32-binutils mingw32-gtk2 mingw32-gtk-vnc mingw32-libvirt mingw32-libxml2 mingw32-nsis mingw32-nsiswrapper This will install the required rpms to get you started. Now the part about getting started and getting software to run on windows. To get the programs compiled for windows, you can follow the simple guide &amp;lt;a href=&amp;quot;http://camltastic.blogspot.com/2008/10/mingw-compile-software-for-windows.html&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;here. This guide talks about compiling the software when the configure script is available.
But otherwise if you have a simple C or cpp to compile you can simply use the mingw compiler to compile the program and you get the exe that you can try out with wine or run on windows machine. Happy coding.
Example of the coding and compiling:
cat &amp;laquo;EOF &amp;gt; a.c
#include &amp;lt;stdio.h&amp;gt;
int main()
{
printf(&amp;amp;#8221;Amit Agarwal \n&amp;amp;#8221;);
}
EOF
i686-pc-mingw32-gcc a.c
wine a.exe
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1248 ">
              <title>&lt;![CDATA[Free Gift on Valentine\’s Day.]]></title>
              <link>&lt;![CDATA[/2009/02/14/free-gift-on-valentines-day/]]></link>
              <pubDate>1234592696</pubDate>
              <content>&lt;![CDATA[I am giving free gift to my viewers on V&amp;amp;#8217;Day. All the users registered on my &amp;lt;a href=&amp;quot;http://shop.amit-agarwal.co.in&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;shop, can leave a comment in the post to get a free gift of their choice from my shop. You can leave the product id in the comments and checkout the product in the shop and I will make the product free for you. This is only for next 36 hours and only one product per user.
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1249 ">
              <title>&lt;![CDATA[Unix Flavors]]></title>
              <link>&lt;![CDATA[/2009/02/09/unix-flavors/]]></link>
              <pubDate>1234197312</pubDate>
              <content>&lt;![CDATA[ &amp;lt;a href=&amp;quot;http://linux.about.com/library/bl/bl_flavorlist.htm&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;http://linux.about.com/library/bl/bl_flavorlist.htm
List of unix flavors, though I am not sure if Linux can be considered as flavor of Unix 🙂
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1250 ">
              <title>&lt;![CDATA[New talking virus —  Computer Virus with Human Voice]]></title>
              <link>&lt;![CDATA[/2009/02/02/new-talking-virus-computer-virus-with-human-voice/]]></link>
              <pubDate>1233544773</pubDate>
              <content>&lt;![CDATA[ Last couple of days, I have been very busy but not too busy to note that KDE is available for windows and that there is a new Windows virus that can talk in human voice. Find the article &amp;lt;a href=&amp;quot;http://www.ethicalhackers.in/2009/01/computer-virus-with-human-voice/&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;here. Where is the world going with viruse&amp;amp;#8217;s. Dear BotVoice.A, I will miss you for being on Linux.
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1251 ">
              <title>&lt;![CDATA[12 Wallpapers in which linux criticizes windows.]]></title>
              <link>&lt;![CDATA[/2009/01/28/12-wallpapers-in-which-linux-criticizes-windows/]]></link>
              <pubDate>1233111794</pubDate>
              <content>&lt;![CDATA[ Just for FUN. Some cool wallpapers.
&amp;lt;a href=&amp;quot;http://www.bablotech.com/2009/01/26/12-wallpapers-in-which-linux-criticizes-windows/&amp;quot;&amp;gt;12 Wallpapers in which linux criticizes windows.
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1252 ">
              <title>&lt;![CDATA[Special discount on shop.amit-agarwal.co.in]]></title>
              <link>&lt;![CDATA[/2009/01/24/special-discount-on-shopamit-agarwalcoin/]]></link>
              <pubDate>1232818291</pubDate>
              <content>&lt;![CDATA[ There is a special discount on some products at &amp;lt;a href=&amp;quot;http://shop.amit-agarwal.co.in&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;shop.amit-agarwal.co.in.. check out until discout remains.
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1253 ">
              <title>&lt;![CDATA[sphere related content added.]]></title>
              <link>&lt;![CDATA[/2009/01/20/sphere-related-content-added/]]></link>
              <pubDate>1232422135</pubDate>
              <content>&lt;![CDATA[ Added sphere related content plugin to my blog. Pretty good plugin to display related contect on the blogs. If you wish to see related content just press the sphere related content on the bottom of the article and a pop up will show you related content.
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1254 ">
              <title>&lt;![CDATA[Web Thumbnails, create your account to upload your files for free, or send an ecard.]]></title>
              <link>&lt;![CDATA[/2008/12/12/web-thumbnails-create-your-account-to-upload-your-files-for-free-or-send-an-ecard/]]></link>
              <pubDate>1229051449</pubDate>
              <content>&lt;![CDATA[I just have the correct set of tools and the web application for your creativity. You can create your login and use your imagination to create your own eCrads. There&amp;amp;#8217;s a lot more things that you can do. I will leave those for your creativity.
Here is the link:
&amp;lt;a href=&amp;quot;http://amit.with-linux.com/gallery2/main.php&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;http://amit.with-linux.com/gallery2/main.php
Update 21/01/2009: When I was on vacation I took some photos which you can buy &amp;lt;a href=&amp;quot;http://shop.amit-agarwal.co.in&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;here. If you just want to send it to someone, you can go to &amp;lt;a href=&amp;quot;http://amit.themafia.info/gallery2&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;http://amit.themafia.info/gallery2. You would need to check the gallery called &amp;amp;#8221;Yash&amp;amp;#8221;
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1255 ">
              <title>&lt;![CDATA[Get you ip address like whatismyip.com]]></title>
              <link>&lt;![CDATA[/2008/12/01/get-you-ip-address-like-whatismyipcom/]]></link>
              <pubDate>1228070514</pubDate>
              <content>&lt;![CDATA[For last couple of days, I was thinking of putting this. I was thinking of some way to get the IP address of the client directly rather than going through some site or parsing the content. So &amp;lt;a href=&amp;quot;http://amit-agarwal.co.in/mystuff/getip.php&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;here it is.
Now the trick here is simple. There are two ways to get the IP address of the client in the php script and thus a simple script like the below would capture both of them.
&lt;?php $ip=@$REMOTE_ADDR; echo \&amp;#8221;IP Address= $ip
\&amp;#8221;; $ip1=$\_SERVER[\&amp;#8217;REMOTE\_ADDR\&amp;#8217;]; echo \&amp;#8221;IP Address= $ip1\&amp;#8221;; ?&gt; Now this can be used in scripts to get you IP address very quickly if only there were no html tags and no junk and only the IP address. So here is a direct &amp;lt;a href=&amp;quot;http://amit-agarwal.co.in/mystuff/getip_txt.php&amp;quot;&amp;gt;link to your IP alone.
This is a php which does not create any text and thus you can get the IP adress directly without parsing too. There are two lines in the file and both contain the IP address 🙂
Here is an example to use in bash scripts:
wget http://amit-agarwal.co.in/mystuff/getip_txt.php -O ak 2&amp;gt;/dev/null &amp;amp;&amp;amp; ip=`tail -1 ak`
After you have executed the above the IP address used by your client is put in the variable ip. You can check this with http://whatismyip.com for this first time to verify it is working fine. So enjoy scripting.
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1256 ">
              <title>&lt;![CDATA[Personal Page and space.]]></title>
              <link>&lt;![CDATA[/2008/11/30/personal-page-and-space/]]></link>
              <pubDate>1228049119</pubDate>
              <content>&lt;![CDATA[Now that my other &amp;lt;a href=&amp;quot;http://amit.themafia.info/&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;url is working, I can afford to share some space. If you want to try something on web programming or something else, mail me and I will personally try to see if I can arrange to make some permission chages for you. I am not launching anything for a free service, but for my readers, this is exclusive offer. I will try to arrange something.
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1257 ">
              <title>&lt;![CDATA[My HomeGrown Free web address with unlimited space for no charge.]]></title>
              <link>&lt;![CDATA[/2008/11/23/my-homegrown-free-web-address-with-unlimited-space-for-no-charge/]]></link>
              <pubDate>1227435874</pubDate>
              <content>&lt;![CDATA[I have a broadband connection and have been trying to do this for a while. I wanted to setup a URL that could link to my system at my home at &amp;amp;#8221;no extra cost&amp;amp;#8221;. To start with this is for fun and finally for profit. As you know, buying a space on the web now a days is costly and I believe saving money is earning money and thus did the setup so that I have a URL that can go directly to my system behind the ADSL router.
Check this out:
&amp;lt;a href=&amp;quot;http://amit.themafia.info/phpMan.php&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;amit.themafia.info
This is link for phpMan on my system so might not be available at all times, but will try to keep it up and running all the time. I have fixed most of the issues with my system wrt hardware and have been running it for 4 days without re-start before trying this. So do comment if you like it. Will soon write on how I did this.
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1258 ">
              <title>&lt;![CDATA[My Linux book posted on ethicalhackers.in]]></title>
              <link>&lt;![CDATA[/2008/11/20/my-linux-book-posted-on-ethicalhackersin/]]></link>
              <pubDate>1227149939</pubDate>
              <content>&lt;![CDATA[Today I found out that the Linux book I published sometime back is also linked on the following &amp;lt;a href=&amp;quot;http://www.ethicalhackers.in/2008/10/simple-linux-user-guide-amit-agarwal/&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;Link
Thanks Robin for putting this on.. And yes, ethicalhackers.in is definately quite good with contents on Hacking (Ethical).
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1259 ">
              <title>&lt;![CDATA[Feed URL changed.]]></title>
              <link>&lt;![CDATA[/2008/11/12/feed-url-changed/]]></link>
              <pubDate>1226462183</pubDate>
              <content>&lt;![CDATA[This post is to inform all my readers that I will be changing my Feed URL to &amp;lt;a href=&amp;quot;http://blog.amit-agarwal.co.in/feed&amp;quot;&amp;gt;http://blog.amit-agarwal.co.in/feed/ from http://amit-agarwal.co.in/wordpress/feed/. Please make the necessary changes in your readers.
I was testing these changes and thus my feed was unavailable for some time.
Thanks for understanding and co-operating.
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1260 ">
              <title>&lt;![CDATA[Create Custom Manufactured By Logo in System Properties]]></title>
              <link>&lt;![CDATA[/2008/11/10/create-custom-manufactured-by-logo-in-system-properties/]]></link>
              <pubDate>1226286960</pubDate>
              <content>&lt;![CDATA[Find the article &amp;lt;a href=&amp;quot;http://www.windowhaxor.net/2008/03/26/create-custom-manufactured-by-logo-in-system-properties/&amp;quot;&amp;gt;here.
Could not resist posting this, just because of the second image.
&amp;lt;a title=&amp;quot;Permanent Link: Create Custom Manufactured By Logo in System Properties&amp;quot; rel=&amp;quot;bookmark&amp;quot; href=&amp;quot;http://www.windowhaxor.net/2008/03/26/create-custom-manufactured-by-logo-in-system-properties/&amp;quot;&amp;gt;Create Custom Manufactured By Logo in System Properties&amp;lt;p class=&amp;quot;article-author&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;background-color: #ffffff; color: red;&amp;quot;&amp;gt; By Pavs on March 26th, 2008
*&amp;lt;p align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;a title=&amp;quot;1 by pavsma, on Flickr&amp;quot; href=&amp;quot;http://www.flickr.com/photos/10304942@N08/2365752180/&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;http://blog.amit-agarwal.co.in/wp-content/uploads/2008/11/2365752180_38b4051ca3_m.jpg&amp;quot; alt=&amp;quot;1&amp;quot; width=&amp;quot;214&amp;quot; height=&amp;quot;240&amp;quot; /&amp;gt;
The process of creating a custom “Manufactured and Supported by” logo involves two parts.
1) First you have to create a logo with the size not bigger than 180×114 pixels. Save it as a bitmap file with the name &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;oemlogo.bmp. Save the file inside &amp;lt;span style=&amp;quot;color: blue;&amp;quot;&amp;gt;C:WINDOWSsystem32 subfolder.
2) Create an configuration file with a text editor and save it as &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;oeminfo.ini. Save this file also inside &amp;lt;span style=&amp;quot;color: blue;&amp;quot;&amp;gt;C:WINDOWSsystem32 subfolder. My configuration file looks like this:
[general]
Manufacturer=blah
Model=
[Support Information]
Line1= Windows 2003 is better Than Windows Vista
Line2= Osx is better than Windows 2003
Line3= Ubuntu is better Than OSX
&amp;lt;a style=&amp;quot;color: brown;&amp;quot; title=&amp;quot;2 by pavsma, on Flickr&amp;quot; href=&amp;quot;http://www.flickr.com/photos/10304942@N08/2364948587/&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;http://blog.amit-agarwal.co.in/wp-content/uploads/2008/11/2364948587_ae7a71b16f.jpg&amp;quot; alt=&amp;quot;2&amp;quot; width=&amp;quot;500&amp;quot; height=&amp;quot;273&amp;quot; /&amp;gt;
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1261 ">
              <title>&lt;![CDATA[Types of DNS records]]></title>
              <link>&lt;![CDATA[/2008/11/03/types-of-dns-records/]]></link>
              <pubDate>1225678448</pubDate>
              <content>&lt;![CDATA[&amp;lt;span style=&amp;quot;font-family: verdana; font-size: x-small;&amp;quot;&amp;gt;Type: A – Point subdomain.domain.com to a hard coded IP Address. Most direct and straight forward option, also note any change you make in the FreeDNS program is reflected on the internet and made live immediately. The only way you will not see immediate results is if you have cached a query on your computer by looking it up PRIOR to configuring it in the FreeDNS program.
&amp;lt;span style=&amp;quot;font-family: verdana; font-size: x-small;&amp;quot;&amp;gt;Type: MX – Point subdomain.domain.com to a mail server. These type of records are special for just mail servers, they can co-exist with A records, and their only use is for routing mail to a different location. All mail implementations check for this record first before attempting to route an e-mail message. If a MX record does not exist for a host, an e-mail delivery would be attempted directly to the IP that the hostname resolves to.
&amp;lt;span style=&amp;quot;font-family: verdana; font-size: x-small;&amp;quot;&amp;gt;Type: AAAA – Point subdomain.domain.com to a IPv6 address. Useful for those who are using IPv6 on their personal networks or those who are using a &amp;lt;a onclick=&amp;quot;window.close()&amp;quot; href=&amp;quot;http://www.tunnelbroker.net/&amp;quot; target=&amp;quot;_new&amp;quot;&amp;gt;IPv4 to IPv6 tunnel at home.
&amp;lt;span style=&amp;quot;font-family: verdana; font-size: x-small;&amp;quot;&amp;gt;Type: CNAME – Point subdomain.domain.com to another hostname. Good for those who are using other dynamic DNS services. You can create a CNAME record to another host and whatever subdomain.domain.com you choose here will go to whatever IP address the CNAMEd host has.
&amp;lt;span style=&amp;quot;font-family: verdana; font-size: x-small;&amp;quot;&amp;gt;Type: NS – Point subdomain.domain.com to another NAMESERVER. If you choose this option, then whatever subdomain.domain.com address you choose using FreeDNS will have to be configured and setup on the destination ADDRESS (nameserver) that you choose. This option basically means you are delegating a FreeDNS host to another DNS server all together, so when you choose this option you are telling every computer on the internet to ask the &amp;amp;#8217;address&amp;amp;#8217; where subdomain.domain.com is located at. If the host you point an NS record to is not configured to answer for the subdomain.domain.com that you are using in FreeDNS then the subdomain.domain.com host will not resolve.
&amp;lt;span style=&amp;quot;font-family: verdana; font-size: x-small;&amp;quot;&amp;gt;Type: TXT – Requested by users of the system, used by SPF spam rejecting system, see &amp;lt;a onclick=&amp;quot;window.close()&amp;quot; href=&amp;quot;http://spf.pobox.com/wizard.html&amp;quot; target=&amp;quot;_new&amp;quot;&amp;gt;http://spf.pobox.com/wizard.html for more details.
&amp;lt;span style=&amp;quot;font-family: verdana; font-size: x-small;&amp;quot;&amp;gt;Type: LOC – A means for Expressing Location Information in the Domain Name System.
&amp;lt;a onclick=&amp;quot;window.close()&amp;quot; href=&amp;quot;http://www.faqs.org/rfcs/rfc1876.html&amp;quot; target=&amp;quot;_new&amp;quot;&amp;gt;RFC1876 has the complete explanation.
To find your latitude/longitude location, you may find &amp;lt;a onclick=&amp;quot;window.close()&amp;quot; href=&amp;quot;http://www.maporama.com/&amp;quot; target=&amp;quot;_new&amp;quot;&amp;gt;Map-O-Rama of use.
&amp;lt;span style=&amp;quot;font-family: verdana; font-size: x-small;&amp;quot;&amp;gt;Type: RP – The Responsible Person RR.
RP has the following format:
RP Both RDATA fields are required in all RP RRs.
The first field, , is a domain name that specifies the mailbox for the responsible person.
The second field, , is a domain name for which TXT RR&amp;amp;#8217;s exist. A subsequent query can be performed to retrieve the associated TXT resource records at .
&amp;lt;a onclick=&amp;quot;window.close()&amp;quot; href=&amp;quot;http://www.faqs.org/rfcs/rfc1183.html&amp;quot; target=&amp;quot;_new&amp;quot;&amp;gt;RFC1183 has the complete explanation. ]]></content>
             </sphinx:document>
            
            <sphinx:document id="1262 ">
              <title>&lt;![CDATA[Open-ID integration for login.]]></title>
              <link>&lt;![CDATA[/2008/11/02/open-id-integration-for-login/]]></link>
              <pubDate>1225635281</pubDate>
              <content>&lt;![CDATA[I have been thinking about this for quite sometime now. So here it is finally. I have integreted OpenID login for my blogs, what it would basically mean is that you would be able to see the stats for my site after logging into to my blog site with your OpenID. You are not bothered with captcha if you are logged in.
I think that should make leaving a comment more simpler. Comments please. 🙂
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1263 ">
              <title>&lt;![CDATA[Windows visitor more than Linux visitor :)]]></title>
              <link>&lt;![CDATA[/2008/10/30/windows-visitor-more-than-linux-visitor/]]></link>
              <pubDate>1225383229</pubDate>
              <content>&lt;![CDATA[I installed the StatPressCN plugin sometime back, just for fun and to see the stats on the visitors of my blog. Yesterday I was reading a blog entry(dont remember whose), who mentioned that the number of visits on his website was more from windows and thus I thought I will check out the stats on my site. Guess what 🙂
&amp;lt;a href=&amp;quot;http://blog.amit-agarwal.co.in/wp-content/uploads/2010/08/screenshot.jpg&amp;quot;&amp;gt;&amp;lt;img class=&amp;quot;size-full wp-image-234&amp;quot; title=&amp;quot;Stats for my visitors&amp;quot; src=&amp;quot;http://blog.amit-agarwal.co.in/wp-content/uploads/2010/08/screenshot.jpg&amp;quot; alt=&amp;quot;Stats for my visitors&amp;quot; width=&amp;quot;500&amp;quot; height=&amp;quot;297&amp;quot; /&amp;gt;
Check out the OS Section in the above.&amp;lt;table style=&amp;quot;margin: 0px; padding: 0px; width: 100%;&amp;quot; border=&amp;quot;0&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt; &amp;lt;tbody id=&amp;quot;the-list&amp;quot;&amp;gt;
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1264 ">
              <title>&lt;![CDATA[Myfreecopyright notice]]></title>
              <link>&lt;![CDATA[/2008/10/30/myfreecopyright-notice/]]></link>
              <pubDate>1225380199</pubDate>
              <content>&lt;![CDATA[I registered my blog with Myfreecopyright to put a copyright on my work. This is not to discourage people from using my work or refering to my work or blog but to ensure that you give the credit to me for my work.
Ideally I would appreciate people doing traceback or pingback to my blog when refering my work but just a reference to my blog should also suffice.
If you have any doubts on this, feel free to mail me.
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1265 ">
              <title>&lt;![CDATA[Sending SMS the cheaper way.]]></title>
              <link>&lt;![CDATA[/2008/10/25/sending-sms-the-cheaper-way/]]></link>
              <pubDate>1224940237</pubDate>
              <content>&lt;![CDATA[I have been working on finding ways to send SMS the cheapest way. Looked at couple of services and tried couple of softwares and gateways but finally found this to be the best way:
&amp;lt;a href=&amp;quot;wordpress/send-sms&amp;quot;&amp;gt;Send SMS (Only Indian Cell providers)
Some interesting links here:
&amp;lt;a href=&amp;quot;http://answers.yahoo.com/question/index?qid=20080104051242AAvvNni&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;http://www.ananthapuri.com/mobile.asp&amp;quot;&amp;gt;http://www.ananthapuri.com/mobile.asp
&amp;lt;a href=&amp;quot;http://www.mocolife.com&amp;quot;&amp;gt;http://www.mocolife.com
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1266 ">
              <title>&lt;![CDATA[Useful Links]]></title>
              <link>&lt;![CDATA[/2008/10/20/useful-links/]]></link>
              <pubDate>1224465929</pubDate>
              <content>&lt;![CDATA[Added a new addition to my website. &amp;lt;a title=&amp;quot;Links&amp;quot; href=&amp;quot;http://links.amit-agarwal.co.in&amp;quot;&amp;gt;Dew-NewPHPLinks
Looks quite promising for managing web links and sharing them. Hope to see submisssions from my readers too. 🙂
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1267 ">
              <title>&lt;![CDATA[jatss – nice utility for time tracking.]]></title>
              <link>&lt;![CDATA[/2008/10/14/jatss-nice-utility-for-time-tracking/]]></link>
              <pubDate>1223975757</pubDate>
              <content>&lt;![CDATA[Found a nice utility on sourceforge called jatss
URL: http://sourceforge.net/projects/jatss/
Description: JATSS Time Sheet is pile of Perl code hastily thrown together to provide a simple to use time tracking tool for small groups.
Pros: Simple Web UI.
Fast to setup and fix issues.
Cons: Not too many features.
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1268 ">
              <title>&lt;![CDATA[Scratch — Programming for kids]]></title>
              <link>&lt;![CDATA[/2008/10/13/scratch-programming-for-kids/]]></link>
              <pubDate>1223909587</pubDate>
              <content>&lt;![CDATA[Scratch &amp;lt;a href=&amp;quot;http://scratch.mit.edu/about&amp;quot;&amp;gt;website.
Description from their site:
Scratch is a new programming language that makes it easy to create your own interactive stories, animations, games, music, and art — and share your creations on the web.
Scratch is designed to help young people (ages 8 and up) develop 21st century learning skills. As they create Scratch projects, young people learn important mathematical and computational ideas, while also gaining a deeper understanding of the process of design.
Scratch is available free of charge, go to &amp;lt;a href=&amp;quot;http://scratch.mit.edu/download&amp;quot;&amp;gt; Download.
Currently available for Mac OSX and Windows (&amp;lt;a href=&amp;quot;http://scratch.mit.edu/forums/viewtopic.php?id=286&amp;quot;&amp;gt; system requirements)
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1269 ">
              <title>&lt;![CDATA[Flickr Link on the blog.]]></title>
              <link>&lt;![CDATA[/2008/09/19/flickr-link-on-the-blog/]]></link>
              <pubDate>1221796528</pubDate>
              <content>&lt;![CDATA[I have managed to install the plugin to display my flickr photos on the blog page. Link is &amp;lt;a href=&amp;quot;http://amit-agarwal.co.in/wordpress/flickr/album/72157601656654651/photo/1231634023/flowers-dscf1435jpg.html&amp;quot;&amp;gt;http://amit-agarwal.co.in/wordpress/flickr
]]></content>
             </sphinx:document>
            
            <sphinx:document id="1270 ">
              <title>&lt;![CDATA[wordpress upgraaded to latest version]]></title>
              <link>&lt;![CDATA[/2008/09/18/wordpress-upgraaded-to-latest-version/]]></link>
              <pubDate>1221751229</pubDate>
              <content>&lt;![CDATA[Upgraded wordpress to version 2.6.2 for some security fixes and new functionalities.
]]></content>
             </sphinx:document>
            
          
        </sphinx:docset>
