<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;DEEBSXw4cCp7ImA9WhRUFEQ.&quot;"><id>tag:blogger.com,1999:blog-219906058588294651</id><updated>2012-01-25T14:04:18.238+01:00</updated><category term="thuanr" /><category term="Python" /><category term="MixIn" /><category term="javascript" /><category term="html5" /><category term="synaptics" /><category term="Python Float" /><category term="Ubuntu 7.04" /><category term="Hotmail" /><category term="date" /><category term="design pattern" /><category term="borg" /><category term="ldap" /><category term="simple player" /><category term="plugin" /><category term="input method" /><category term="ORM" /><category term="Dell" /><category term="script" /><category term="code" /><category term="QThread" /><category term="Webmail" /><category term="zenity" /><category term="Howto" /><category term="QSettings" /><category term="snippet" /><category term="Power Point" /><category term="gnome-do" /><category term="Thunderbird" /><category term="Qt::Key" /><category term="Richtext" /><category term="licence" /><category term="eventFilter" /><category term="postr" /><category term="wmctrl" /><category term="jquery" /><category term="Firefox" /><category term="custom" /><category term="PostgreSQL" /><category term="Mouse" /><category term="FreezePython" /><category term="Django" /><category term="QTextBrowser" /><category term="flickr" /><category term="Linux" /><category term="Singleton" /><category term="devilspie" /><category term="archlinux" /><category term="pattern" /><category term="QRegExp.indexIn" /><category term="design" /><category term="PyQt4" /><category term="Bash" /><category term="Rxvt" /><category term="LaTeX" /><category term="QEvent::Type" /><category term="svn" /><title>Jay's Tech Notes</title><subtitle type="html" /><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://jay-notes.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://jay-notes.blogspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/219906058588294651/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Jay</name><uri>http://www.blogger.com/profile/07718065550458812883</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/-lyb2_oWKmws/TmQNtuu6DjI/AAAAAAAAAV0/mYFucl6sKGY/s220/drink.jpg" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>66</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/blogspot/SmCYn" /><feedburner:info uri="blogspot/smcyn" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;DUMDQ3c-fip7ImA9WhdWEUs.&quot;"><id>tag:blogger.com,1999:blog-219906058588294651.post-4262970670424094352</id><published>2011-09-04T22:17:00.000+02:00</published><updated>2011-09-04T22:17:52.956+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-04T22:17:52.956+02:00</app:edited><title>A Signal Slot Implementation for jQuery</title><content type="html">&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;b&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;What is Signal Slot?&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;Signals and slots is a language construct introduced in Qt, which makes it easy to implement the Observer pattern while avoiding boilerplate code. The concept is that controls (also known as widgets) can send signals containing event information (e.g. the text "toto" was selected, the scrollbar has been adjusted to value 37) which can be received by other controls using special functions known as slots. [&lt;a href="http://en.wikipedia.org/wiki/Signals_and_slots"&gt;wiki&lt;/a&gt;]&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;With this simple signal slot plugin for jQuery you can take this feature of Qt into your webapp.&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;This plugin was finished in 2008 and inspired by Qt and the another jQuery Plugin by &lt;a href="http://plugins.jquery.com/users/aj"&gt;AJ&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;b&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif; font-size: large;"&gt;Usage&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;Define your Signal&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;&lt;span style="color: black; font-family: 'Courier New'; font-size: x-small;"&gt;&lt;span style="color: blue;"&gt;var&lt;/span&gt; SIGNAL = &lt;span style="color: #a31515;"&gt;"A Signal"&lt;/span&gt;;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: blue;"&gt;var&lt;/span&gt; optionsForSignal = {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;evt: &lt;span style="color: #a31515;"&gt;'click'&lt;/span&gt;,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;prefunc: &lt;span style="color: blue;"&gt;function&lt;/span&gt;() {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green;"&gt;// conditions for emitting of this signal&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;},&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;callback: &lt;span style="color: blue;"&gt;function&lt;/span&gt;() {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: green;"&gt;// callback after the signal emitted&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
&lt;br /&gt;
$(&lt;span style="color: #a31515;"&gt;"#elementID"&lt;/span&gt;).signal(SIGNAL, &lt;span style="color: #a31515;"&gt;"Argument for Slot"&lt;/span&gt;, optionsForSignal);&lt;br /&gt;
$(&lt;span style="color: #a31515;"&gt;"#elementID"&lt;/span&gt;).signal(&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SIGNAL,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[&lt;span style="color: #a31515;"&gt;"Arg1"&lt;/span&gt;, &lt;span style="color: #a31515;"&gt;"#Arg2"&lt;/span&gt;], &lt;span style="color: green;"&gt;// If you have more than one arguments of Slot&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;optionsForSignal&lt;br /&gt;
);&lt;/span&gt;&lt;span class="Apple-style-span" style="color: grey; font-size: xx-small;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;Define your Slot&lt;br /&gt;
&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;&lt;span style="color: black; font-family: 'Courier New'; font-size: x-small;"&gt;&lt;span style="color: green;"&gt;// add slot method 1&lt;/span&gt;&lt;br /&gt;
$.slot.add(&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SIGNAL,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;function&lt;/span&gt;(arg1, args2, ...) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: green;"&gt;// what to do if this slot called&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;},&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;false&lt;/span&gt; &lt;span style="color: green;"&gt;// a boolean to indicate if this slot should repeated&lt;/span&gt;&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: green;"&gt;// add slot method 2&lt;/span&gt;&lt;br /&gt;
$(&lt;span style="color: #a31515;"&gt;".toggleme"&lt;/span&gt;).slot(&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SIGNAL,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;function&lt;/span&gt;(arg1, arg2, ... ) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: green;"&gt;// example &lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;if&lt;/span&gt; ($(&lt;span style="color: blue;"&gt;this&lt;/span&gt;).&lt;span style="color: blue;"&gt;is&lt;/span&gt;(&lt;span style="color: #a31515;"&gt;":hidden"&lt;/span&gt;)) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$(&lt;span style="color: blue;"&gt;this&lt;/span&gt;).slideDown();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;span style="color: blue;"&gt;else&lt;/span&gt; {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$(&lt;span style="color: blue;"&gt;this&lt;/span&gt;).slideUp();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
);&lt;/span&gt;&lt;span class="Apple-style-span" style="color: grey; font-size: xx-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div&gt;
&lt;b&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif; font-size: large;"&gt;Example&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;Check out the example:&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;a href="http://yuanhao.github.com/SignalSlot/"&gt;http://yuanhao.github.com/SignalSlot/&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
And the source of the example:&amp;nbsp;&lt;a href="https://github.com/yuanhao/SignalSlot/blob/gh-pages/index.html"&gt;https://github.com/yuanhao/SignalSlot/blob/gh-pages/index.html&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;
&lt;h4&gt;
&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif; font-size: large;"&gt;Latest Release&lt;/span&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/yuanhao/SignalSlot/raw/master/jquery.signalslot.js" style="color: #336699;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;latest version&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class="Apple-style-span" style="color: #336699; font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;a href="https://github.com/yuanhao/SignalSlot/raw/master/jquery.signalslot.min.js" style="color: #336699;"&gt;minified version&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h4&gt;
&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif; font-size: large;"&gt;Collaborate&lt;/span&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span class="Apple-style-span" style="color: #336699; font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;a href="https://github.com/yuanhao/SignalSlot" style="color: #336699;" target="_blank"&gt;Signal Slot on Github&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h4&gt;
&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;Signal Slot jQuery Plugin Licensed under the&amp;nbsp;&lt;a href="http://www.opensource.org/licenses/mit-license.php" style="color: #336699;" target="_blank"&gt;MIT&lt;/a&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;h4&gt;
&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;Enjoy. Let me know if you like.&amp;nbsp;&lt;a href="http://twitter.com/yuanhao" style="color: #336699;" target="_blank"&gt;@yuanhao&lt;/a&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/219906058588294651-4262970670424094352?l=jay-notes.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/nDzL9tTy_zONcrJmm-PDPdGS6SI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/nDzL9tTy_zONcrJmm-PDPdGS6SI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/nDzL9tTy_zONcrJmm-PDPdGS6SI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/nDzL9tTy_zONcrJmm-PDPdGS6SI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/SmCYn/~4/78HmnxxgISE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jay-notes.blogspot.com/feeds/4262970670424094352/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=219906058588294651&amp;postID=4262970670424094352" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/219906058588294651/posts/default/4262970670424094352?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/219906058588294651/posts/default/4262970670424094352?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/SmCYn/~3/78HmnxxgISE/signal-slot-implementation-for-jquery.html" title="A Signal Slot Implementation for jQuery" /><author><name>Jay</name><uri>http://www.blogger.com/profile/07718065550458812883</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/-lyb2_oWKmws/TmQNtuu6DjI/AAAAAAAAAV0/mYFucl6sKGY/s220/drink.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://jay-notes.blogspot.com/2011/09/signal-slot-implementation-for-jquery.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEEBQn0_fip7ImA9WxFbE0g.&quot;"><id>tag:blogger.com,1999:blog-219906058588294651.post-8750902798388171386</id><published>2010-07-05T21:04:00.000+02:00</published><updated>2010-07-05T21:04:13.346+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-07-05T21:04:13.346+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="snippet" /><category scheme="http://www.blogger.com/atom/ns#" term="design pattern" /><category scheme="http://www.blogger.com/atom/ns#" term="borg" /><category scheme="http://www.blogger.com/atom/ns#" term="pattern" /><category scheme="http://www.blogger.com/atom/ns#" term="design" /><category scheme="http://www.blogger.com/atom/ns#" term="code" /><category scheme="http://www.blogger.com/atom/ns#" term="Singleton" /><category scheme="http://www.blogger.com/atom/ns#" term="Python" /><title>Still use singleton? There's another choice in python: Borg design pattern</title><content type="html">Few months ago i implemented a db extension for my own python web framework, which supports different database backend. To prevent it from creating multiple instance of db-connection i have chosen singleton design pattern as usual. But after spent some time on google i found another interesting design pattern Borg. It's done this job as good as singleton. Let's take a look of this magical pattern: 


&lt;pre class="code"&gt;&lt;font face="monospace"&gt;
class Borg:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;__shared_state = {}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;def __init__(self):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.__dict__ = self.__shared_state
&lt;/font&gt;&lt;/pre&gt;


OK, that's it. Have fun.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/219906058588294651-8750902798388171386?l=jay-notes.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/LqTM_XV2ZdQKBn6ZDURTtkOfpcQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/LqTM_XV2ZdQKBn6ZDURTtkOfpcQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/LqTM_XV2ZdQKBn6ZDURTtkOfpcQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/LqTM_XV2ZdQKBn6ZDURTtkOfpcQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/SmCYn/~4/_quH9Xt7Ypc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jay-notes.blogspot.com/feeds/8750902798388171386/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=219906058588294651&amp;postID=8750902798388171386" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/219906058588294651/posts/default/8750902798388171386?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/219906058588294651/posts/default/8750902798388171386?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/SmCYn/~3/_quH9Xt7Ypc/still-use-singleton-theres-another.html" title="Still use singleton? There's another choice in python: Borg design pattern" /><author><name>Jay</name><uri>http://www.blogger.com/profile/07718065550458812883</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/-lyb2_oWKmws/TmQNtuu6DjI/AAAAAAAAAV0/mYFucl6sKGY/s220/drink.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://jay-notes.blogspot.com/2010/07/still-use-singleton-theres-another.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0UGQ3g6fSp7ImA9WxFUF0g.&quot;"><id>tag:blogger.com,1999:blog-219906058588294651.post-8063592662060186899</id><published>2010-06-28T22:00:00.000+02:00</published><updated>2010-06-28T22:00:22.615+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-06-28T22:00:22.615+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="snippet" /><category scheme="http://www.blogger.com/atom/ns#" term="javascript" /><category scheme="http://www.blogger.com/atom/ns#" term="date" /><title>How to generate a random date between two known dates in javascript?</title><content type="html">&lt;blockquote class="code"&gt;

&lt;font face="monospace"&gt;
function getRandomDate(from, to) {&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (!from) {&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;from = new Date(1900, 0, 1).getTime();&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} else {&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;from = from.getTime();&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (!to) {&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;to = new Date(2100, 0, 1).getTime();&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} else {&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;to = to.getTime();&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return new Date(from + Math.random() * (to - from));&lt;br&gt;
}&lt;br&gt;
&lt;/font&gt;

&lt;/blockquote&gt;

The Code above not tested yet, no guarantee it's runnable...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/219906058588294651-8063592662060186899?l=jay-notes.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/syEF0fjx5to54vOGfBg6xvvHRLg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/syEF0fjx5to54vOGfBg6xvvHRLg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/syEF0fjx5to54vOGfBg6xvvHRLg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/syEF0fjx5to54vOGfBg6xvvHRLg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/SmCYn/~4/h65n9guqH2A" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jay-notes.blogspot.com/feeds/8063592662060186899/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=219906058588294651&amp;postID=8063592662060186899" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/219906058588294651/posts/default/8063592662060186899?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/219906058588294651/posts/default/8063592662060186899?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/SmCYn/~3/h65n9guqH2A/how-to-generate-random-date-between-two.html" title="How to generate a random date between two known dates in javascript?" /><author><name>Jay</name><uri>http://www.blogger.com/profile/07718065550458812883</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/-lyb2_oWKmws/TmQNtuu6DjI/AAAAAAAAAV0/mYFucl6sKGY/s220/drink.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://jay-notes.blogspot.com/2010/06/how-to-generate-random-date-between-two.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0ICRn0zeCp7ImA9WxFUFE4.&quot;"><id>tag:blogger.com,1999:blog-219906058588294651.post-3316645280312912686</id><published>2010-06-25T06:01:00.001+02:00</published><updated>2010-06-25T06:19:27.380+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-06-25T06:19:27.380+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="plugin" /><category scheme="http://www.blogger.com/atom/ns#" term="jquery" /><category scheme="http://www.blogger.com/atom/ns#" term="html5" /><category scheme="http://www.blogger.com/atom/ns#" term="simple player" /><title>Simple Player - A very simple HTML5 audio player plugin for jQuery</title><content type="html">&lt;h4&gt;What is Simple Player&lt;/h4&gt;Simple Player is a jQuery plugin that allows web developers to control audio files on their webpage. Supports style up via CSS. All browsers that supports HTML5 audio tag that allow mp3 or ogg format supported by this plugin. &lt;br /&gt;
&lt;br /&gt;
&lt;img src="http://twitpic.com/show/full/1zp65o" /&gt;&lt;br /&gt;
&lt;br /&gt;
I wrote this simple player plugin to replace the traditional flash player. There is no need to use flash (load flash plugin consumes much more memory extra) in some cases if you want to play a simple audio file. &lt;br /&gt;
&lt;br /&gt;
&lt;h4&gt;Usage&lt;/h4&gt;The jquery.simpleplayer.min.js file should be added to the head section of the HTML file after the jQuery JavaScript file. Below is how to include the JavaScript file using an absolute path, relative to the server root.&lt;br /&gt;
&lt;pre class="code"&gt;&lt;font face="monospace"&gt;
&amp;lt;head&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;&lt;a href="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js"&gt;http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;/jquery.simpleplayer.min.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt
&amp;lt;/head&amp;gt;
&lt;/font&gt;
&lt;/pre&gt;&lt;br /&gt;
Then you should include the simpleplayer.css into your html.&lt;br /&gt;
&lt;pre class="code"&gt;&lt;font face="monospace"&gt;
&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;simpleplayer.css&amp;quot; type=&amp;quot;text/css&amp;quot;&amp;gt;
&lt;/font&gt;
&lt;/pre&gt;&lt;br /&gt;
The audio tag in your code looks like:&lt;br /&gt;
&lt;pre class="code"&gt;&lt;font face="monospace"&gt;
&amp;lt;audio class=&amp;quot;player&amp;quot; src=&amp;quot;path_to_your_audio_file&amp;quot;&amp;gt;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;Your browser does not support the &amp;lt;code&amp;gt;audio&amp;lt;/code&amp;gt; element.&amp;nbsp;&amp;nbsp;
&amp;lt;/audio&amp;gt;
&lt;/font&gt;
&lt;/pre&gt;&lt;br /&gt;
Final step we need some javascript to load our simple player&lt;br /&gt;
&lt;pre class="code"&gt;&lt;font face="monospace"&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$(document).ready(function() {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var settings = {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;progressbarWidth: '200px',
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;progressbarHeight: '5px',
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;progressbarColor: '#22ccff',
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;progressbarBGColor: '#eeeeee',
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;defaultVolume: 0.8
&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$(&amp;quot;.player&amp;quot;).player(settings);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;});
&amp;lt;/script&amp;gt;
&lt;/font&gt;
&lt;/pre&gt;&lt;br /&gt;
&lt;h4&gt;Simple Player Options&lt;/h4&gt;&lt;ul&gt;&lt;li&gt;progressbarWidth: the width of the progressbar&lt;/li&gt;
&lt;li&gt;progressbarHeight: the height of the progressbar&lt;/li&gt;
&lt;li&gt;progressbarColor: color of the progressbar&lt;/li&gt;
&lt;li&gt;progressbarBGColor: background color of the progressbar&lt;/li&gt;
&lt;li&gt;defaultVolume: volume as default&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;h4&gt;Latest Release&lt;/h4&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://github.com/yuanhao/Simple-Player/raw/master/jquery.simpleplayer.js"&gt;latest version&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://github.com/yuanhao/Simple-Player/raw/master/jquery.simpleplayer.min.js"&gt;minified version&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;h4&gt;Collaborate&lt;/h4&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://github.com/yuanhao/Simple-Player" target="_blank"&gt;Simple Player on Github&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;h4&gt;TODO List: &lt;/h4&gt;&lt;ul&gt;&lt;li&gt;Video Support&lt;/li&gt;
&lt;li&gt;Volume Adjust&lt;/li&gt;
&lt;li&gt;More Control of Media&lt;/li&gt;
&lt;li&gt;Theme&lt;/li&gt;
&lt;li&gt;A befault html5 &amp; css 3 demo page&lt;/li&gt;
&lt;li&gt;...&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;h4&gt;Simple Player jQuery Plugin Licensed under the &lt;a href="http://www.opensource.org/licenses/mit-license.php" target="_blank"&gt;MIT&lt;/a&gt;&lt;/h4&gt;&lt;br /&gt;
&lt;h4&gt;Enjoy. Let me know if you like this simple player. &lt;a target="_blank" href="http://twitter.com/yuanhao"&gt;@yuanhao&lt;/a&gt;&lt;/h4&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/219906058588294651-3316645280312912686?l=jay-notes.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/tb8BmXtXkKsqscTDJ3HLHzSnm2Q/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/tb8BmXtXkKsqscTDJ3HLHzSnm2Q/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/tb8BmXtXkKsqscTDJ3HLHzSnm2Q/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/tb8BmXtXkKsqscTDJ3HLHzSnm2Q/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/SmCYn/~4/OvDBWQxJEuE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jay-notes.blogspot.com/feeds/3316645280312912686/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=219906058588294651&amp;postID=3316645280312912686" title="16 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/219906058588294651/posts/default/3316645280312912686?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/219906058588294651/posts/default/3316645280312912686?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/SmCYn/~3/OvDBWQxJEuE/simple-player-very-simple-html5-audio.html" title="Simple Player - A very simple HTML5 audio player plugin for jQuery" /><author><name>Jay</name><uri>http://www.blogger.com/profile/07718065550458812883</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/-lyb2_oWKmws/TmQNtuu6DjI/AAAAAAAAAV0/mYFucl6sKGY/s220/drink.jpg" /></author><thr:total>16</thr:total><feedburner:origLink>http://jay-notes.blogspot.com/2010/06/simple-player-very-simple-html5-audio.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0EMQ38zcSp7ImA9WxRTE08.&quot;"><id>tag:blogger.com,1999:blog-219906058588294651.post-6587944013691674962</id><published>2008-09-02T04:11:00.000+02:00</published><updated>2008-09-02T04:14:42.189+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-09-02T04:14:42.189+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="archlinux" /><category scheme="http://www.blogger.com/atom/ns#" term="custom" /><category scheme="http://www.blogger.com/atom/ns#" term="flickr" /><category scheme="http://www.blogger.com/atom/ns#" term="postr" /><category scheme="http://www.blogger.com/atom/ns#" term="Linux" /><category scheme="http://www.blogger.com/atom/ns#" term="thuanr" /><title>Send pictures to flickr with thunar file manager</title><content type="html">1. install postr (under archlinux use: yaourt -S postr)&lt;br /&gt;2. create a file under ~/.local/share/Thunar/sendto/postr.desktop (if directory not exist, create it):&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;[Desktop Entry]&lt;br /&gt;Type=Application&lt;br /&gt;Version=1.0&lt;br /&gt;Encoding=UTF-8&lt;br /&gt;TryExec=postr&lt;br /&gt;Exec=postr %F&lt;br /&gt;Icon=postr&lt;br /&gt;Name=Flickr&lt;br /&gt;MimeType=image/jpeg;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;3. open thunar and select a picture for upload. (right click -&gt; sendto -&gt; flicr) . multiple pictures supported.&lt;br /&gt;&lt;br /&gt;4. authorise postr.&lt;br /&gt;&lt;br /&gt;5. enjoy it~~&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/219906058588294651-6587944013691674962?l=jay-notes.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/tmULEHMTIqgp3hUbH90Ulo0N7gk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/tmULEHMTIqgp3hUbH90Ulo0N7gk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/tmULEHMTIqgp3hUbH90Ulo0N7gk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/tmULEHMTIqgp3hUbH90Ulo0N7gk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/SmCYn/~4/xpMXUd6Cquw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jay-notes.blogspot.com/feeds/6587944013691674962/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=219906058588294651&amp;postID=6587944013691674962" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/219906058588294651/posts/default/6587944013691674962?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/219906058588294651/posts/default/6587944013691674962?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/SmCYn/~3/xpMXUd6Cquw/send-pictures-to-flickr-with-thunar.html" title="Send pictures to flickr with thunar file manager" /><author><name>Jay</name><uri>http://www.blogger.com/profile/07718065550458812883</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/-lyb2_oWKmws/TmQNtuu6DjI/AAAAAAAAAV0/mYFucl6sKGY/s220/drink.jpg" /></author><thr:total>1</thr:total><feedburner:origLink>http://jay-notes.blogspot.com/2008/09/send-pictures-to-flickr-with-thunar.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A04ASXg4eyp7ImA9WxdSGUo.&quot;"><id>tag:blogger.com,1999:blog-219906058588294651.post-8491068888707243426</id><published>2008-05-28T15:02:00.000+02:00</published><updated>2008-05-28T15:05:48.633+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-05-28T15:05:48.633+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Ubuntu 7.04" /><category scheme="http://www.blogger.com/atom/ns#" term="LaTeX" /><title>generate html with tex4ht</title><content type="html">sudo texhash&lt;br /&gt;&lt;br /&gt;htlatex xxxxxxxx.tex&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/219906058588294651-8491068888707243426?l=jay-notes.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/2LC50JomTPcjLDJ3NPmMC0et8Rw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/2LC50JomTPcjLDJ3NPmMC0et8Rw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/2LC50JomTPcjLDJ3NPmMC0et8Rw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/2LC50JomTPcjLDJ3NPmMC0et8Rw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/SmCYn/~4/wITfkL8UwEA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jay-notes.blogspot.com/feeds/8491068888707243426/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=219906058588294651&amp;postID=8491068888707243426" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/219906058588294651/posts/default/8491068888707243426?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/219906058588294651/posts/default/8491068888707243426?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/SmCYn/~3/wITfkL8UwEA/generate-html-with-tex4ht.html" title="generate html with tex4ht" /><author><name>Jay</name><uri>http://www.blogger.com/profile/07718065550458812883</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/-lyb2_oWKmws/TmQNtuu6DjI/AAAAAAAAAV0/mYFucl6sKGY/s220/drink.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://jay-notes.blogspot.com/2008/05/generate-html-with-tex4ht.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEMCRXo9fyp7ImA9WxdSF0s.&quot;"><id>tag:blogger.com,1999:blog-219906058588294651.post-2455132031528046199</id><published>2008-05-26T03:46:00.000+02:00</published><updated>2008-05-26T03:47:44.467+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-05-26T03:47:44.467+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Linux" /><category scheme="http://www.blogger.com/atom/ns#" term="Power Point" /><category scheme="http://www.blogger.com/atom/ns#" term="Ubuntu 7.04" /><title>How to view a PPT file under ubuntu?</title><content type="html">&lt;a href="http://linuxappfinder.com/package/pptview"&gt;PPT View&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/219906058588294651-2455132031528046199?l=jay-notes.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/wYpFaKMlgvGH_2uuEufPu4p6sVg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/wYpFaKMlgvGH_2uuEufPu4p6sVg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/wYpFaKMlgvGH_2uuEufPu4p6sVg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/wYpFaKMlgvGH_2uuEufPu4p6sVg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/SmCYn/~4/QyouRuiHcJs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jay-notes.blogspot.com/feeds/2455132031528046199/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=219906058588294651&amp;postID=2455132031528046199" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/219906058588294651/posts/default/2455132031528046199?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/219906058588294651/posts/default/2455132031528046199?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/SmCYn/~3/QyouRuiHcJs/how-to-view-ppt-file-under-ubuntu.html" title="How to view a PPT file under ubuntu?" /><author><name>Jay</name><uri>http://www.blogger.com/profile/07718065550458812883</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/-lyb2_oWKmws/TmQNtuu6DjI/AAAAAAAAAV0/mYFucl6sKGY/s220/drink.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://jay-notes.blogspot.com/2008/05/how-to-view-ppt-file-under-ubuntu.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkAARng6fSp7ImA9WxZSF0U.&quot;"><id>tag:blogger.com,1999:blog-219906058588294651.post-9149468682213696856</id><published>2008-01-31T14:02:00.001+01:00</published><updated>2008-01-31T14:05:47.615+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-01-31T14:05:47.615+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Howto" /><category scheme="http://www.blogger.com/atom/ns#" term="LaTeX" /><title>Make glossary for your LaTeX work.</title><content type="html">&lt;pre class="code"&gt;&lt;br /&gt;&lt;span class="Comment"&gt;% At first add these two lines in your preamble to load the glossary package and create refence.&lt;/span&gt;&lt;br /&gt;&lt;span class="Statement"&gt;\usepackage&lt;/span&gt;&lt;span class="Special"&gt;{&lt;/span&gt;&lt;span class="Special"&gt;glossary&lt;/span&gt;&lt;span class="Special"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class="Statement"&gt;\makeglossary&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Comment"&gt;% This line is for your output.&lt;/span&gt;&lt;br /&gt;&lt;span class="Statement"&gt;\printglossary&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Comment"&gt;% In document you can create your glossary entry like this:&lt;/span&gt;&lt;br /&gt;GPL&lt;span class="Statement"&gt;\glossary&lt;/span&gt;&lt;span class="Special"&gt;{&lt;/span&gt;name=&lt;span class="Special"&gt;{&lt;/span&gt;GPL&lt;span class="Special"&gt;}&lt;/span&gt;, description=&lt;span class="Special"&gt;{&lt;/span&gt;General Public License&lt;span class="Special"&gt;}}&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;At last, you must run this command in your terminal:&lt;br /&gt;&lt;pre class="code"&gt;&lt;br /&gt;&lt;span class="Statement"&gt;&lt;br /&gt;makeindex -s yourfile.ist -t yourfile.glg -o yourfile.gls yourfile.glo&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/219906058588294651-9149468682213696856?l=jay-notes.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/QImxbuQM6i1vLWv1gQWBPdKY5b8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/QImxbuQM6i1vLWv1gQWBPdKY5b8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/QImxbuQM6i1vLWv1gQWBPdKY5b8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/QImxbuQM6i1vLWv1gQWBPdKY5b8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/SmCYn/~4/yuRRmYPLUoc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jay-notes.blogspot.com/feeds/9149468682213696856/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=219906058588294651&amp;postID=9149468682213696856" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/219906058588294651/posts/default/9149468682213696856?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/219906058588294651/posts/default/9149468682213696856?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/SmCYn/~3/yuRRmYPLUoc/make-glossary-for-your-latex-work.html" title="Make glossary for your LaTeX work." /><author><name>Jay</name><uri>http://www.blogger.com/profile/07718065550458812883</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/-lyb2_oWKmws/TmQNtuu6DjI/AAAAAAAAAV0/mYFucl6sKGY/s220/drink.jpg" /></author><thr:total>1</thr:total><feedburner:origLink>http://jay-notes.blogspot.com/2008/01/make-glossary-for-your-latex-work.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEYASXwzeip7ImA9WxZSFEg.&quot;"><id>tag:blogger.com,1999:blog-219906058588294651.post-3523648273918722951</id><published>2008-01-27T17:39:00.001+01:00</published><updated>2008-01-27T17:42:28.282+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-01-27T17:42:28.282+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Hotmail" /><category scheme="http://www.blogger.com/atom/ns#" term="Thunderbird" /><category scheme="http://www.blogger.com/atom/ns#" term="Linux" /><category scheme="http://www.blogger.com/atom/ns#" term="Webmail" /><category scheme="http://www.blogger.com/atom/ns#" term="Ubuntu 7.04" /><category scheme="http://www.blogger.com/atom/ns#" term="Firefox" /><title>Setup hotmail in your thunderbird under UBUNTU</title><content type="html">&lt;span class="lnr"&gt; &lt;/span&gt;You needn't login hotmail to check your new mails (maybe spam) now. Webmail extension is born for it. Webmail supported not only for hotmail, even more, check here: &lt;a href="http://webmail.mozdev.com/"&gt;http://webmail.mozdev.com&lt;/a&gt;.&lt;br /&gt;&lt;span class="lnr"&gt;  &lt;/span&gt;&lt;br /&gt;Under ubuntu to setup webmail is so simple. Go to the homepage of webmail, download the extension of webmail, and the component for hotmail. Then install them into your thunderbird.&lt;br /&gt;&lt;span class="lnr"&gt;  &lt;/span&gt;&lt;br /&gt;Restart your thunderbird, what for? You knows it ;)&lt;br /&gt;&lt;span class="lnr"&gt;  &lt;/span&gt;&lt;br /&gt;Go to the preference and change all of port number here bigger than 1024. Restart thunderbird again...&lt;br /&gt;&lt;span class="lnr"&gt; &lt;/span&gt;&lt;br /&gt;Now, open the menu: File-&amp;gt;New-&amp;gt;Account, Select "Web Mail" to continue. Follow the wizard and supply what it wants. Don't forget that, your incoming name is your full domain email address.&lt;br /&gt;&lt;span class="lnr"&gt; &lt;/span&gt;&lt;br /&gt;After that, open the preference of "hotmail component" in your addons. You can see your fresh new account here. Check on the "WebDAV", then everything should be fine. Fetch your mails and have fun.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/219906058588294651-3523648273918722951?l=jay-notes.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/AsKlPH5rsPT0CU-Ks0MumBPB-YE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/AsKlPH5rsPT0CU-Ks0MumBPB-YE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/AsKlPH5rsPT0CU-Ks0MumBPB-YE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/AsKlPH5rsPT0CU-Ks0MumBPB-YE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/SmCYn/~4/cjm52PdK9-Y" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jay-notes.blogspot.com/feeds/3523648273918722951/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=219906058588294651&amp;postID=3523648273918722951" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/219906058588294651/posts/default/3523648273918722951?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/219906058588294651/posts/default/3523648273918722951?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/SmCYn/~3/cjm52PdK9-Y/1-setup-hotmail-in-your-thunderbird.html" title="Setup hotmail in your thunderbird under UBUNTU" /><author><name>Jay</name><uri>http://www.blogger.com/profile/07718065550458812883</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/-lyb2_oWKmws/TmQNtuu6DjI/AAAAAAAAAV0/mYFucl6sKGY/s220/drink.jpg" /></author><thr:total>1</thr:total><feedburner:origLink>http://jay-notes.blogspot.com/2008/01/1-setup-hotmail-in-your-thunderbird.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUIMSXY6eCp7ImA9WxZSEEU.&quot;"><id>tag:blogger.com,1999:blog-219906058588294651.post-1946172035530035828</id><published>2008-01-23T06:28:00.001+01:00</published><updated>2008-01-23T11:19:48.810+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-01-23T11:19:48.810+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Linux" /><category scheme="http://www.blogger.com/atom/ns#" term="gnome-do" /><category scheme="http://www.blogger.com/atom/ns#" term="script" /><title>Restart Gnome-Do with Gnome-Do</title><content type="html">&lt;span style="font-weight:bold;"&gt;UPDATE: Now we can by setting the /apps/gnome-do/preferences/enable_updating gconf key to true to resolve this. Thanks Christopher~~&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Like the most applications, Gnome-Do can not load the most recent changes you made after you have already launched Gnome-Do. So I wrote this script to resolve this problem. Stupid way, but works, :)&lt;br /&gt;&lt;br /&gt;Copy the source code below and save a file named restartdo in /home/[uid]/bin or you wished destination. Then run chmod + x /home/[uid]/bin/restartdo to give this script the ability to execute. Don't forget to replace the [uid] with your user name.&lt;br /&gt;&lt;br /&gt;Now, check if your directory already in ~/.do/FileItemSource.config. If not, add in it. Restart your Gnome-Do, try this script, have fun with Gnome-Do.&lt;br /&gt;&lt;br /&gt;&lt;pre class="code"&gt;&lt;br /&gt;&lt;span class="Comment"&gt;#!/bin/bash&lt;/span&gt;&lt;br /&gt;&lt;span class="Comment"&gt;# vim:sts=4:ai:et:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Identifier"&gt;x&lt;/span&gt;=&lt;span class="Constant"&gt;3&lt;/span&gt;&lt;br /&gt;&lt;span class="Statement"&gt;while&lt;/span&gt;&lt;span class="Statement"&gt; &lt;/span&gt;&lt;span class="Special"&gt;((&lt;/span&gt; x-- &lt;span class="Statement"&gt;&amp;gt;&lt;/span&gt; &lt;span class="Constant"&gt;0&lt;/span&gt; &lt;span class="Special"&gt;))&lt;/span&gt;&lt;span class="Statement"&gt; &lt;/span&gt;&lt;span class="Statement"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="Statement"&gt; &lt;/span&gt;&lt;span class="Special"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span class="Statement"&gt;        &lt;/span&gt;&lt;span class="Statement"&gt;killall&lt;/span&gt;&lt;span class="Statement"&gt; gnome-&lt;/span&gt;&lt;span class="Statement"&gt;do&lt;/span&gt;&lt;span class="Statement"&gt; &lt;/span&gt;&lt;span class="Statement"&gt;&amp;gt;&lt;/span&gt;&lt;span class="Statement"&gt;/dev/null &lt;/span&gt;&lt;span class="Constant"&gt;2&lt;/span&gt;&lt;span class="Statement"&gt;&amp;gt;&lt;/span&gt;&lt;span class="Statement"&gt;&amp;amp;&lt;/span&gt;&lt;span class="Constant"&gt;1&lt;/span&gt;&lt;br /&gt;&lt;span class="Statement"&gt;        ps x &lt;/span&gt;&lt;span class="Statement"&gt;|&lt;/span&gt;&lt;span class="Statement"&gt; &lt;/span&gt;&lt;span class="Statement"&gt;grep&lt;/span&gt;&lt;span class="Statement"&gt; Do &lt;/span&gt;&lt;span class="Statement"&gt;|&lt;/span&gt;&lt;span class="Statement"&gt; &lt;/span&gt;&lt;span class="Statement"&gt;grep&lt;/span&gt;&lt;span class="Statement"&gt; &lt;/span&gt;&lt;span class="Statement"&gt;-v&lt;/span&gt;&lt;span class="Statement"&gt; &lt;/span&gt;&lt;span class="Statement"&gt;grep&lt;/span&gt;&lt;span class="Statement"&gt; &lt;/span&gt;&lt;span class="Statement"&gt;&amp;gt;&lt;/span&gt;&lt;span class="Statement"&gt;/dev/null &lt;/span&gt;&lt;span class="Constant"&gt;2&lt;/span&gt;&lt;span class="Statement"&gt;&amp;gt;&lt;/span&gt;&lt;span class="Statement"&gt;&amp;amp;&lt;/span&gt;&lt;span class="Constant"&gt;1&lt;/span&gt;&lt;br /&gt;&lt;span class="Statement"&gt;    }&lt;/span&gt;&lt;br /&gt;&lt;span class="Statement"&gt;do&lt;/span&gt;&lt;br /&gt;&lt;span class="Statement"&gt;    &lt;/span&gt;&lt;span class="Statement"&gt;sleep&lt;/span&gt;&lt;span class="Statement"&gt; &lt;/span&gt;&lt;span class="Constant"&gt;3&lt;/span&gt;&lt;br /&gt;&lt;span class="Statement"&gt;done&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Statement"&gt;if&lt;/span&gt;&lt;span class="Statement"&gt; &lt;/span&gt;&lt;span class="Special"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span class="Statement"&gt;        ps x &lt;/span&gt;&lt;span class="Statement"&gt;|&lt;/span&gt;&lt;span class="Statement"&gt; &lt;/span&gt;&lt;span class="Statement"&gt;grep&lt;/span&gt;&lt;span class="Statement"&gt; Do &lt;/span&gt;&lt;span class="Statement"&gt;|&lt;/span&gt;&lt;span class="Statement"&gt; &lt;/span&gt;&lt;span class="Statement"&gt;grep&lt;/span&gt;&lt;span class="Statement"&gt; -v &lt;/span&gt;&lt;span class="Statement"&gt;grep&lt;/span&gt;&lt;span class="Statement"&gt; &lt;/span&gt;&lt;span class="Statement"&gt;&amp;gt;&lt;/span&gt;&lt;span class="Statement"&gt;/dev/null &lt;/span&gt;&lt;span class="Constant"&gt;2&lt;/span&gt;&lt;span class="Statement"&gt;&amp;gt;&amp;amp;1&lt;/span&gt;&lt;br /&gt;&lt;span class="Statement"&gt;   &lt;/span&gt;&lt;span class="Special"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class="Statement"&gt;then&lt;/span&gt;&lt;br /&gt;&lt;span class="Statement"&gt;    &lt;/span&gt;&lt;span class="Statement"&gt;echo&lt;/span&gt;&lt;span class="String"&gt; &lt;/span&gt;&lt;span class="Statement"&gt;'&lt;/span&gt;&lt;span class="String"&gt;Failed to stop Gnome-Do&lt;/span&gt;&lt;span class="Statement"&gt;'&lt;/span&gt;&lt;br /&gt;&lt;span class="Statement"&gt;    &lt;/span&gt;&lt;span class="Statement"&gt;return&lt;/span&gt;&lt;span class="Statement"&gt; &lt;/span&gt;&lt;span class="Constant"&gt;-1&lt;/span&gt;&lt;br /&gt;&lt;span class="Statement"&gt;fi&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Statement"&gt;echo&lt;/span&gt;&lt;span class="String"&gt; &lt;/span&gt;&lt;span class="Statement"&gt;'&lt;/span&gt;&lt;span class="String"&gt;Gnome-Do stopped&lt;/span&gt;&lt;span class="Statement"&gt;'&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Statement"&gt;while&lt;/span&gt;&lt;span class="Statement"&gt; &lt;/span&gt;&lt;span class="Statement"&gt;!&lt;/span&gt;&lt;span class="Statement"&gt; &lt;/span&gt;&lt;span class="Special"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span class="Statement"&gt;    ps x &lt;/span&gt;&lt;span class="Statement"&gt;|&lt;/span&gt;&lt;span class="Statement"&gt; &lt;/span&gt;&lt;span class="Statement"&gt;grep&lt;/span&gt;&lt;span class="Statement"&gt; compiz &lt;/span&gt;&lt;span class="Statement"&gt;|&lt;/span&gt;&lt;span class="Statement"&gt; &lt;/span&gt;&lt;span class="Statement"&gt;grep&lt;/span&gt;&lt;span class="Statement"&gt; -v &lt;/span&gt;&lt;span class="Statement"&gt;grep&lt;/span&gt;&lt;span class="Statement"&gt; &lt;/span&gt;&lt;span class="Statement"&gt;&amp;gt;&lt;/span&gt;&lt;span class="Statement"&gt;/dev/null &lt;/span&gt;&lt;span class="Constant"&gt;2&lt;/span&gt;&lt;span class="Statement"&gt;&amp;gt;&amp;amp;1&lt;/span&gt;&lt;br /&gt;&lt;span class="Special"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class="Statement"&gt;do&lt;/span&gt;&lt;br /&gt;&lt;span class="Statement"&gt;    &lt;/span&gt;&lt;span class="Statement"&gt;sleep&lt;/span&gt;&lt;span class="Statement"&gt; &lt;/span&gt;&lt;span class="Constant"&gt;3&lt;/span&gt;&lt;br /&gt;&lt;span class="Statement"&gt;done&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Statement"&gt;exec&lt;/span&gt;&lt;span class="Statement"&gt; gnome-&lt;/span&gt;&lt;span class="Statement"&gt;do&lt;/span&gt;&lt;span class="Statement"&gt; &lt;/span&gt;&lt;span class="Statement"&gt;&amp;gt;&lt;/span&gt;&lt;span class="Statement"&gt;/dev/null &lt;/span&gt;&lt;span class="Constant"&gt;2&lt;/span&gt;&lt;span class="Statement"&gt;&amp;gt;&lt;/span&gt;&lt;span class="Statement"&gt;&amp;amp;&lt;/span&gt;&lt;span class="Constant"&gt;1&lt;/span&gt;&lt;span class="Statement"&gt; &lt;/span&gt;&lt;span class="Statement"&gt;&amp;amp;&lt;/span&gt;&lt;br /&gt;&lt;span class="Statement"&gt;echo&lt;/span&gt;&lt;span class="String"&gt; &lt;/span&gt;&lt;span class="Statement"&gt;&amp;quot;&lt;/span&gt;&lt;span class="String"&gt;Gnome-Do started&lt;/span&gt;&lt;span class="Statement"&gt;&amp;quot;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/219906058588294651-1946172035530035828?l=jay-notes.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/szEnU8bHs67yQChv9NFhpLKs9AA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/szEnU8bHs67yQChv9NFhpLKs9AA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/szEnU8bHs67yQChv9NFhpLKs9AA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/szEnU8bHs67yQChv9NFhpLKs9AA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/SmCYn/~4/N__-tJ8jRRI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jay-notes.blogspot.com/feeds/1946172035530035828/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=219906058588294651&amp;postID=1946172035530035828" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/219906058588294651/posts/default/1946172035530035828?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/219906058588294651/posts/default/1946172035530035828?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/SmCYn/~3/N__-tJ8jRRI/restart-gnome-do-with-gnome-do.html" title="Restart Gnome-Do with Gnome-Do" /><author><name>Jay</name><uri>http://www.blogger.com/profile/07718065550458812883</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/-lyb2_oWKmws/TmQNtuu6DjI/AAAAAAAAAV0/mYFucl6sKGY/s220/drink.jpg" /></author><thr:total>2</thr:total><feedburner:origLink>http://jay-notes.blogspot.com/2008/01/restart-gnome-do-with-gnome-do.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkABQHs6fCp7ImA9WxZTGUs.&quot;"><id>tag:blogger.com,1999:blog-219906058588294651.post-32085787100811729</id><published>2008-01-21T22:27:00.000+01:00</published><updated>2008-01-22T03:25:51.514+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-01-22T03:25:51.514+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Linux" /><category scheme="http://www.blogger.com/atom/ns#" term="synaptics" /><title>Touchpad rocks</title><content type="html">本来想写英文的 blog，可考虑到好像还没有特别详细的介绍配置 触摸板 的中文文章，还是用中文算了，一是可以给我 so poor 的英文语法遮羞，二来可以丰富一下中文的 Linux资源，三来一会还要继续我的 LaTex work，节省点查字典的时间。&lt;br /&gt;&lt;br /&gt;不知道是不是大家都像我一样忽略了配置笔记本的触摸板，我似乎这些年都一直在用笔记本工作，学习，娱乐，一直都额外再配个鼠标，一直忽略了强大的触摸板。最近看了 Apple 刚出的 Macbook Air 的多功能触摸板，心血来潮，研究了一下 Linux 下面 X&lt;br /&gt; 的触摸板的驱动的配置，发现其强大无比，如果你早知道了，莫要笑话我，哈哈，let's go。&lt;br /&gt;&lt;br /&gt;如果你装的是 Ubuntu 发行版，那么基本上你的 X 的配置文件里面已经设置好了相关的驱动，是默认设置，你只需要添加些相关的参数就 ok 了。下面的 ubuntu 默认的触摸板的配置：&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Section "InputDevice"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Identifier      "Synaptics Touchpad"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;    Driver          "synaptics"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;    Option          "SendCoreEvents"        "true"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;    Option          "Device"                "/dev/psaux"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;    Option          "Protocol"              "auto-dev"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;    Option          "HorizScrollDelta"      "0"&lt;br /&gt;EndSection&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;先让我们来使我们之后的修改不需要重启 X 就能生效，在上面的里面添加：&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;    Option      "SHMConfig"     "on"&lt;br /&gt;&lt;br /&gt;然后重启一下 X，这样你就可以动态的通过 synclient 命令来修改你的触摸板的参数，当然也有 Gui 的程序，比如 qsynaptics。看你习惯吧，推荐用 synclient，只有命令行才最强大，不是么，哈。比如 synclient Var1=value1 Var2=value2 ....&lt;br /&gt;&lt;br /&gt;因为各位的显示器的分辨率都不一样，所以默认的设置可能会让你觉得使用触摸板移动指针太慢了，没关系，let's correct this：&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;    Option      "MinSpeed"      "0.9"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;    Option      "MaxSpeed"      "1.5"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;    Option      "AccelFactor"   "0.0750"&lt;br /&gt;&lt;br /&gt;这是我的设置，我的分辨率是 1920 x 1200， 所以你们酌情修改。。。一般来讲 MinSpeed 0.5, MaxSpeed 0.9, AccelFactor 0.0350 就 OK 了。&lt;br /&gt;&lt;br /&gt;很多电脑上面的触摸板下面只有两个 Pads， 没有中键这怎么办？ok，这么办：&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Option    "RBCornerButton" "3"&lt;br /&gt;&lt;br /&gt;现在你点击你的触摸板的右上角就是中键了，帅吧。 一般触摸板的右下角是右键，右上角是中键，然后右面边缘是上下 scroll， 下面边缘是 左右 scroll，这些是默认设置，可以通过 synclient -l 来查看你机器上面的默认设置。&lt;br /&gt;&lt;br /&gt;如果上面的一些和边边角角有关的设置不起作用的话，肯定是默认的 edge 的设置不对，你可以设置一下 LeftEdge，RightEdge，TopEdge，BottomEdge 来适应你的需要。&lt;br /&gt;&lt;br /&gt;如果你的触摸板支持多点的话，你也可以设置成类似 MacBook 那样用两只手指 scroll 哦。&lt;br /&gt;&lt;br /&gt;最后再推荐一个小程序，可以模拟测试你的输入设备的行为，xev。&lt;br /&gt;&lt;br /&gt;还有很多微调的参数，man synaptics 自己去研究吧。&lt;br /&gt;&lt;br /&gt;通过 synclient 只能即时的测试效果，如果想每次开机都有效的话，记得把合适的配置添加到你的 xorg.conf  里面，路径一般是 /etc/X11/xorg.conf。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/219906058588294651-32085787100811729?l=jay-notes.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/LGUvQ1qU-NHnv-IMraa1bxm36ZI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/LGUvQ1qU-NHnv-IMraa1bxm36ZI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/LGUvQ1qU-NHnv-IMraa1bxm36ZI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/LGUvQ1qU-NHnv-IMraa1bxm36ZI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/SmCYn/~4/SXRJa4F-1Lo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jay-notes.blogspot.com/feeds/32085787100811729/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=219906058588294651&amp;postID=32085787100811729" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/219906058588294651/posts/default/32085787100811729?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/219906058588294651/posts/default/32085787100811729?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/SmCYn/~3/SXRJa4F-1Lo/touchpad-rocks.html" title="Touchpad rocks" /><author><name>Jay</name><uri>http://www.blogger.com/profile/07718065550458812883</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/-lyb2_oWKmws/TmQNtuu6DjI/AAAAAAAAAV0/mYFucl6sKGY/s220/drink.jpg" /></author><thr:total>1</thr:total><feedburner:origLink>http://jay-notes.blogspot.com/2008/01/touchpad-rocks.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkIHSXo9fCp7ImA9WxZTGUk.&quot;"><id>tag:blogger.com,1999:blog-219906058588294651.post-3717056845441721444</id><published>2008-01-21T21:42:00.000+01:00</published><updated>2008-01-21T21:48:58.464+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-01-21T21:48:58.464+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Linux" /><category scheme="http://www.blogger.com/atom/ns#" term="gnome-do" /><title>Gnome-Do startup script</title><content type="html">Gnome-do 是非常酷的一个 Linux 下的应用程序。最近更新了版本，插件的功能有所增强，现在已经是我不可或缺的日常应用了。我可以随便敲几个键就呼出想用的应用程序，可以随便敲入几个键就 播放我想听的专辑，可以随便敲入几个键就搜索出我想回顾的笔记，可以随便敲入几个键就和某个朋友聊天或者发送电子邮件，可以随便。。。very awesome。。。基本不用动鼠标了。。。如果你对 mac 下面的 Quicksilver 有所了解的话，就不难理解 Gnome－do 是干嘛的了，我只希望Gnome－do 的作者多多努力，早日赶超 Quicksilver，哈。&lt;br /&gt;&lt;br /&gt;如果你也在使用 Linux，如果你也对键盘有特殊偏爱，那么我强烈想你推荐 Gnome－do，官方主页在这里：http://do.davebsd.com/ 去折腾吧。。。&lt;br /&gt;&lt;br /&gt;现在的 Gnome－do 版本在启动的时候如果同时启动 Compiz 就有可能会出现 Conflict，导致背景变透明，这样在某些白色背景的应用程序上面可能就看不清楚字母了，没关系，写了一个 script 来解决这个问题，和解决 avant window navigator 类似问题的方法一样。&lt;br /&gt;&lt;br /&gt;1. sudo vim /usr/local/bin/startdo&lt;br /&gt;2. 输入下面的代码&lt;br /&gt;&lt;br /&gt;#!/bin/bash&lt;br /&gt;# vim:sts=4:ai:et:&lt;br /&gt;&lt;br /&gt;while ! {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ps x | grep compiz | grep -v grep &gt;/dev/null 2&gt;&amp;amp;1&lt;br /&gt;}&lt;br /&gt;do&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   sleep 3&lt;br /&gt;done&lt;br /&gt;&lt;br /&gt;exec gnome-do -quiet &gt;/dev/null 2&gt;&amp;amp;1 &amp;amp;&lt;br /&gt;echo "Gnome-Do started"&lt;br /&gt;&lt;br /&gt;3. :wq! 存盘退出 vim&lt;br /&gt;4. sudo chmod +x /usr/local/bin/startdo&lt;br /&gt;5. 在你开机启动 gnome－do 的地方换成 startdo&lt;br /&gt;&lt;br /&gt;enjoy it, 哈。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/219906058588294651-3717056845441721444?l=jay-notes.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/e5wQomaAkWzzIf3sag6kQ9AhQxM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/e5wQomaAkWzzIf3sag6kQ9AhQxM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/e5wQomaAkWzzIf3sag6kQ9AhQxM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/e5wQomaAkWzzIf3sag6kQ9AhQxM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/SmCYn/~4/GknmGNzMHZY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jay-notes.blogspot.com/feeds/3717056845441721444/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=219906058588294651&amp;postID=3717056845441721444" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/219906058588294651/posts/default/3717056845441721444?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/219906058588294651/posts/default/3717056845441721444?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/SmCYn/~3/GknmGNzMHZY/gnome-do-startup-script.html" title="Gnome-Do startup script" /><author><name>Jay</name><uri>http://www.blogger.com/profile/07718065550458812883</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/-lyb2_oWKmws/TmQNtuu6DjI/AAAAAAAAAV0/mYFucl6sKGY/s220/drink.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://jay-notes.blogspot.com/2008/01/gnome-do-startup-script.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkEMSXw6eSp7ImA9WxZTGUk.&quot;"><id>tag:blogger.com,1999:blog-219906058588294651.post-1171163924305609201</id><published>2007-11-15T04:56:00.001+01:00</published><updated>2008-01-21T21:51:28.211+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-01-21T21:51:28.211+01:00</app:edited><title>how to override google default font-family in firefox</title><content type="html">At your /path/to/your/firefox/config/path/chrome/userContent.css file to add this:&lt;br /&gt;&lt;br /&gt;@-moz-document domain(google.com)&lt;br /&gt;{&lt;br /&gt;    body, td, input, textarea, select {&lt;br /&gt;        font-family: sans-serif;&lt;br /&gt;    }&lt;br /&gt;}&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/219906058588294651-1171163924305609201?l=jay-notes.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/jQyX9-kSXG9xQDbobtzGHnCqyLM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/jQyX9-kSXG9xQDbobtzGHnCqyLM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/jQyX9-kSXG9xQDbobtzGHnCqyLM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/jQyX9-kSXG9xQDbobtzGHnCqyLM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/SmCYn/~4/mwH0YkqrPS8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jay-notes.blogspot.com/feeds/1171163924305609201/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=219906058588294651&amp;postID=1171163924305609201" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/219906058588294651/posts/default/1171163924305609201?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/219906058588294651/posts/default/1171163924305609201?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/SmCYn/~3/mwH0YkqrPS8/how-to-override-google-default-font.html" title="how to override google default font-family in firefox" /><author><name>Jay</name><uri>http://www.blogger.com/profile/07718065550458812883</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/-lyb2_oWKmws/TmQNtuu6DjI/AAAAAAAAAV0/mYFucl6sKGY/s220/drink.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://jay-notes.blogspot.com/2007/11/how-to-override-google-default-font.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0IARng7fyp7ImA9WB5UFUw.&quot;"><id>tag:blogger.com,1999:blog-219906058588294651.post-2593267268843819175</id><published>2007-08-19T10:17:00.000+02:00</published><updated>2007-08-19T10:19:07.607+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2007-08-19T10:19:07.607+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Linux" /><title>Better linux use</title><content type="html">$ info coreutils&lt;br /&gt;&lt;br /&gt;see, how many command you have known?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/219906058588294651-2593267268843819175?l=jay-notes.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/tfVRhesWZydLTpYnFKrbdFdIwJQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/tfVRhesWZydLTpYnFKrbdFdIwJQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/tfVRhesWZydLTpYnFKrbdFdIwJQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/tfVRhesWZydLTpYnFKrbdFdIwJQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/SmCYn/~4/IJtz9pXgofk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jay-notes.blogspot.com/feeds/2593267268843819175/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=219906058588294651&amp;postID=2593267268843819175" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/219906058588294651/posts/default/2593267268843819175?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/219906058588294651/posts/default/2593267268843819175?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/SmCYn/~3/IJtz9pXgofk/better-linux-use.html" title="Better linux use" /><author><name>Jay</name><uri>http://www.blogger.com/profile/07718065550458812883</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/-lyb2_oWKmws/TmQNtuu6DjI/AAAAAAAAAV0/mYFucl6sKGY/s220/drink.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://jay-notes.blogspot.com/2007/08/better-linux-use.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkANR3c9cCp7ImA9WB5VF0k.&quot;"><id>tag:blogger.com,1999:blog-219906058588294651.post-1839885032507462939</id><published>2007-08-10T12:10:00.000+02:00</published><updated>2007-08-10T12:13:16.968+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2007-08-10T12:13:16.968+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Django" /><title>Use a Django project in a standalone script</title><content type="html">&lt;pre&gt;simple in project directory~~&lt;br /&gt;&lt;code&gt;&lt;/code&gt;&lt;blockquote&gt;from django.core.management import setup_environ&lt;br /&gt;import settings&lt;br /&gt;setup_environ(settings)&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;but this didn't work with python console or ipython with error "&lt;type&gt;: Empty module name"&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/219906058588294651-1839885032507462939?l=jay-notes.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/4N2OipdYy-uguR6kiir0R23eQb0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/4N2OipdYy-uguR6kiir0R23eQb0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/4N2OipdYy-uguR6kiir0R23eQb0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/4N2OipdYy-uguR6kiir0R23eQb0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/SmCYn/~4/vbdGsWf-uA0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jay-notes.blogspot.com/feeds/1839885032507462939/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=219906058588294651&amp;postID=1839885032507462939" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/219906058588294651/posts/default/1839885032507462939?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/219906058588294651/posts/default/1839885032507462939?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/SmCYn/~3/vbdGsWf-uA0/use-django-project-in-standalone-script.html" title="Use a Django project in a standalone script" /><author><name>Jay</name><uri>http://www.blogger.com/profile/07718065550458812883</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/-lyb2_oWKmws/TmQNtuu6DjI/AAAAAAAAAV0/mYFucl6sKGY/s220/drink.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://jay-notes.blogspot.com/2007/08/use-django-project-in-standalone-script.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkUERn4yeSp7ImA9WB5XF0g.&quot;"><id>tag:blogger.com,1999:blog-219906058588294651.post-4414215303847923623</id><published>2007-07-18T13:25:00.000+02:00</published><updated>2007-07-18T13:30:07.091+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2007-07-18T13:30:07.091+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Linux" /><category scheme="http://www.blogger.com/atom/ns#" term="ldap" /><title>Howto: Install and configure LDAP Server (slapd) with TLS in Gentoo</title><content type="html">&lt;p class="line867"&gt; &lt;/p&gt;&lt;h2 id="head-b0f3ed91a67b60d69bd47edd8c3d0ee3cc96f4f3"&gt;&lt;span style="font-size:100%;"&gt;1.1. Install openldap on gentoo&lt;/span&gt;&lt;/h2&gt; &lt;span class="anchor" id="line-13"&gt;&lt;/span&gt;&lt;p class="line867"&gt;&lt;span class="anchor" id="line-14"&gt;&lt;/span&gt;&lt;/p&gt;&lt;pre&gt;# emerge openldap pam_ldap nss_ldap&lt;br /&gt;&lt;span class="anchor" id="line-15"&gt;&lt;/span&gt;# chown ldap:ldap /var/lib/openldap-ldbm /var/lib/openldap-data /var/lib/openldap-slurp&lt;br /&gt;&lt;span class="anchor" id="line-16"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;span class="anchor" id="line-17"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-18"&gt;&lt;/span&gt;&lt;p class="line867"&gt; &lt;/p&gt;&lt;h2 id="head-1a43761e7b9ffcf1d5d720437283d8cd8a8d65a0"&gt;&lt;span style="font-size:100%;"&gt;1.2. /etc/openldap/slapd.conf&lt;/span&gt;&lt;/h2&gt; &lt;span class="anchor" id="line-19"&gt;&lt;/span&gt;&lt;p class="line867"&gt;&lt;span class="anchor" id="line-20"&gt;&lt;/span&gt;&lt;/p&gt;&lt;pre&gt;include /etc/ldap/schema/core.schema&lt;br /&gt;&lt;span class="anchor" id="line-21"&gt;&lt;/span&gt;include /etc/ldap/schema/cosine.schema&lt;br /&gt;&lt;span class="anchor" id="line-22"&gt;&lt;/span&gt;include /etc/ldap/schema/nis.schema&lt;br /&gt;&lt;span class="anchor" id="line-23"&gt;&lt;/span&gt;include /etc/ldap/schema/inetorgperson.schema&lt;br /&gt;&lt;span class="anchor" id="line-24"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="anchor" id="line-25"&gt;&lt;/span&gt;### "#echo rootpw  `slappasswd -h {SSHA}` &gt;&gt; /etc/openldap/slapd.conf" to generate a password with SSHA crypt&lt;br /&gt;&lt;span class="anchor" id="line-26"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="anchor" id="line-27"&gt;&lt;/span&gt;password-hash {SSHA}&lt;br /&gt;&lt;span class="anchor" id="line-28"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="anchor" id="line-29"&gt;&lt;/span&gt;# Define SSL and TLS properties&lt;br /&gt;&lt;span class="anchor" id="line-30"&gt;&lt;/span&gt;TLSCertificateFile /etc/ssl/ldap.pem&lt;br /&gt;&lt;span class="anchor" id="line-31"&gt;&lt;/span&gt;TLSCertificateKeyFile /etc/openldap/ssl/ldap-key.pem&lt;br /&gt;&lt;span class="anchor" id="line-32"&gt;&lt;/span&gt;TLSCACertificateFile /etc/ssl/ldap.pem&lt;br /&gt;&lt;span class="anchor" id="line-33"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="anchor" id="line-34"&gt;&lt;/span&gt;database bdb # use bdb as backend database&lt;br /&gt;&lt;span class="anchor" id="line-35"&gt;&lt;/span&gt;suffix "dc=example, dc=com"&lt;br /&gt;&lt;span class="anchor" id="line-36"&gt;&lt;/span&gt;directory /var/lib/openldap-data&lt;br /&gt;&lt;span class="anchor" id="line-37"&gt;&lt;/span&gt;rootdn "cn=Manager, dc=example, dc=com"&lt;br /&gt;&lt;span class="anchor" id="line-38"&gt;&lt;/span&gt;rootpw {SSHA}ksjdlfjsdlfjslfkjsdlfjl&lt;br /&gt;&lt;span class="anchor" id="line-39"&gt;&lt;/span&gt;checkpoint 1024 5&lt;br /&gt;&lt;span class="anchor" id="line-40"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="anchor" id="line-41"&gt;&lt;/span&gt;# index&lt;br /&gt;&lt;span class="anchor" id="line-42"&gt;&lt;/span&gt;index  cn,sn,uid pres,eq,approx,sub&lt;br /&gt;&lt;span class="anchor" id="line-43"&gt;&lt;/span&gt;index  objectClass      eq&lt;br /&gt;&lt;span class="anchor" id="line-44"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="anchor" id="line-45"&gt;&lt;/span&gt;# then setup access rules...:&lt;br /&gt;&lt;span class="anchor" id="line-46"&gt;&lt;/span&gt;access to attrs=userPassword&lt;br /&gt;&lt;span class="anchor" id="line-47"&gt;&lt;/span&gt;       by self write&lt;br /&gt;&lt;span class="anchor" id="line-48"&gt;&lt;/span&gt;       by anonymous auth&lt;br /&gt;&lt;span class="anchor" id="line-49"&gt;&lt;/span&gt;       by dn.base="cn=Manager,dc=example, dc=com" write&lt;br /&gt;&lt;span class="anchor" id="line-50"&gt;&lt;/span&gt;       by * none&lt;br /&gt;&lt;span class="anchor" id="line-51"&gt;&lt;/span&gt;access to *&lt;br /&gt;&lt;span class="anchor" id="line-52"&gt;&lt;/span&gt;       by self write&lt;br /&gt;&lt;span class="anchor" id="line-53"&gt;&lt;/span&gt;       by dn.base="cn=Manager,dc=example,dc=com" write&lt;br /&gt;&lt;span class="anchor" id="line-54"&gt;&lt;/span&gt;       by * read&lt;br /&gt;&lt;span class="anchor" id="line-55"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;span class="anchor" id="line-56"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-57"&gt;&lt;/span&gt;&lt;p class="line867"&gt; &lt;/p&gt;&lt;h2 id="head-ee788804e7666fac874b7d69a7beff914744b379"&gt;&lt;span style="font-size:100%;"&gt;1.3. /etc/openldap/ldap.conf&lt;/span&gt;&lt;/h2&gt; &lt;span class="anchor" id="line-58"&gt;&lt;/span&gt;&lt;p class="line867"&gt;&lt;span class="anchor" id="line-59"&gt;&lt;/span&gt;&lt;/p&gt;&lt;pre&gt;BASE         dc=example, dc=com&lt;br /&gt;&lt;span class="anchor" id="line-60"&gt;&lt;/span&gt;URI          ldaps://server_host[change it to server]:636/&lt;br /&gt;&lt;span class="anchor" id="line-61"&gt;&lt;/span&gt;TLS_REQCERT  allow&lt;br /&gt;&lt;span class="anchor" id="line-62"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;span class="anchor" id="line-63"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-64"&gt;&lt;/span&gt;&lt;p class="line867"&gt; &lt;/p&gt;&lt;h2 id="head-43509aae748e2f2e298a32f6f43e30373357ef79"&gt;&lt;span style="font-size:100%;"&gt;1.4. Genertate SSL certificate&lt;/span&gt;&lt;/h2&gt; &lt;span class="anchor" id="line-65"&gt;&lt;/span&gt;&lt;p class="line867"&gt;&lt;span class="anchor" id="line-66"&gt;&lt;/span&gt;&lt;/p&gt;&lt;pre&gt;# cd /etc/ssl&lt;br /&gt;&lt;span class="anchor" id="line-67"&gt;&lt;/span&gt;# openssl req -config /etc/ssl/openssl.cnf -new -x509 -nodes -out ldap.pem -keyout /etc/openldap/ssl/ldap-key.pem -days 999999&lt;br /&gt;&lt;span class="anchor" id="line-68"&gt;&lt;/span&gt;# chown ldap:ldap /etc/openldap/ssl/ldap.pem&lt;br /&gt;&lt;span class="anchor" id="line-69"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;span class="anchor" id="line-70"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-71"&gt;&lt;/span&gt;&lt;p class="line867"&gt; &lt;/p&gt;&lt;h2 id="head-d44b0d0ad8001efbb5465ee42e2ba212ac39ec2a"&gt;&lt;span style="font-size:100%;"&gt;1.5. Modify /etc/conf.d/slapd&lt;/span&gt;&lt;/h2&gt; &lt;span class="anchor" id="line-72"&gt;&lt;/span&gt;&lt;p class="line867"&gt;&lt;span class="anchor" id="line-73"&gt;&lt;/span&gt;&lt;/p&gt;&lt;pre&gt;OPTS="-h 'ldaps:// ldapi://%2fvar%2frun%2fopenldap%2fslapd.sock'"&lt;br /&gt;&lt;span class="anchor" id="line-74"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;span class="anchor" id="line-75"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-76"&gt;&lt;/span&gt;&lt;p class="line867"&gt; &lt;/p&gt;&lt;h2 id="head-63274ceda904389f867e3634fa77c0b44d7dc221"&gt;&lt;span style="font-size:100%;"&gt;1.6. Start slapd&lt;/span&gt;&lt;/h2&gt; &lt;span class="anchor" id="line-77"&gt;&lt;/span&gt;&lt;p class="line867"&gt;&lt;span class="anchor" id="line-78"&gt;&lt;/span&gt;&lt;/p&gt;&lt;pre&gt;/etc/init.d/slapd start&lt;br /&gt;&lt;span class="anchor" id="line-79"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;span class="anchor" id="line-80"&gt;&lt;/span&gt;&lt;p class="line874"&gt;If success, with this command to test connection, "-d 5" is for debug: &lt;span class="anchor" id="line-81"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-82"&gt;&lt;/span&gt;&lt;/p&gt;&lt;pre&gt;ldapsearch -D "cn=Manager,dc=example,dc=com" -W -d 5&lt;br /&gt;&lt;span class="anchor" id="line-83"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;span class="anchor" id="line-84"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-85"&gt;&lt;/span&gt;&lt;p class="line867"&gt; &lt;/p&gt;&lt;h2 id="head-c1102c0370a2cd1c4443972c3e00a16c235d0304"&gt;&lt;span style="font-size:100%;"&gt;1.7. Autostart slapd service at Systemstart&lt;/span&gt;&lt;/h2&gt; &lt;span class="anchor" id="line-86"&gt;&lt;/span&gt;&lt;p class="line867"&gt;&lt;span class="anchor" id="line-87"&gt;&lt;/span&gt;&lt;/p&gt;&lt;pre&gt;rc-update slapd default add&lt;br /&gt;&lt;span class="anchor" id="line-88"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;span class="anchor" id="line-89"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-90"&gt;&lt;/span&gt;&lt;p class="line867"&gt; &lt;/p&gt;&lt;h2 id="head-4ddd9b46c5e4ffbf8b6327c4a9f098cf778cbef5"&gt;&lt;span style="font-size:100%;"&gt;1.8. Some issues&lt;/span&gt;&lt;/h2&gt; &lt;span class="anchor" id="line-91"&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;command "slaptest" for verify slapd.conf  &lt;span class="anchor" id="line-92"&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;if id3entry.bdb not found, try "slapadd" &lt;span class="anchor" id="line-93"&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;recover DB: db4.3_recover -h . &lt;span class="anchor" id="line-94"&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;useful log: /var/log/messages&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/219906058588294651-4414215303847923623?l=jay-notes.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/9ZU-9qzuOKJ9mOClVaIDwYTA0LU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/9ZU-9qzuOKJ9mOClVaIDwYTA0LU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/9ZU-9qzuOKJ9mOClVaIDwYTA0LU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/9ZU-9qzuOKJ9mOClVaIDwYTA0LU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/SmCYn/~4/zzKjAwItFK0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jay-notes.blogspot.com/feeds/4414215303847923623/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=219906058588294651&amp;postID=4414215303847923623" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/219906058588294651/posts/default/4414215303847923623?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/219906058588294651/posts/default/4414215303847923623?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/SmCYn/~3/zzKjAwItFK0/howto-install-and-configure-ldap-server.html" title="Howto: Install and configure LDAP Server (slapd) with TLS in Gentoo" /><author><name>Jay</name><uri>http://www.blogger.com/profile/07718065550458812883</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/-lyb2_oWKmws/TmQNtuu6DjI/AAAAAAAAAV0/mYFucl6sKGY/s220/drink.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://jay-notes.blogspot.com/2007/07/howto-install-and-configure-ldap-server.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkIFRnY_fCp7ImA9WB5XFkw.&quot;"><id>tag:blogger.com,1999:blog-219906058588294651.post-6327111395429051350</id><published>2007-07-16T22:41:00.001+02:00</published><updated>2007-07-16T22:41:57.844+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2007-07-16T22:41:57.844+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Linux" /><category scheme="http://www.blogger.com/atom/ns#" term="wmctrl" /><title>wmctrl</title><content type="html">The wmctrl program is a UNIX/Linux command line tool to interact with an              EWMH/NetWM compatible X Window Manager.&lt;br /&gt;&lt;br /&gt;http://sweb.cz/tripie/utils/wmctrl/&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/219906058588294651-6327111395429051350?l=jay-notes.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/NPoHoU1s6ClDMUdEpibqSOs3-RU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/NPoHoU1s6ClDMUdEpibqSOs3-RU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/NPoHoU1s6ClDMUdEpibqSOs3-RU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/NPoHoU1s6ClDMUdEpibqSOs3-RU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/SmCYn/~4/udeMWYRYc4o" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jay-notes.blogspot.com/feeds/6327111395429051350/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=219906058588294651&amp;postID=6327111395429051350" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/219906058588294651/posts/default/6327111395429051350?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/219906058588294651/posts/default/6327111395429051350?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/SmCYn/~3/udeMWYRYc4o/wmctrl.html" title="wmctrl" /><author><name>Jay</name><uri>http://www.blogger.com/profile/07718065550458812883</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/-lyb2_oWKmws/TmQNtuu6DjI/AAAAAAAAAV0/mYFucl6sKGY/s220/drink.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://jay-notes.blogspot.com/2007/07/wmctrl.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkMCQ3o6eip7ImA9WB5XFkw.&quot;"><id>tag:blogger.com,1999:blog-219906058588294651.post-2663855895866431505</id><published>2007-07-16T22:40:00.000+02:00</published><updated>2007-07-16T22:41:02.412+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2007-07-16T22:41:02.412+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Linux" /><category scheme="http://www.blogger.com/atom/ns#" term="zenity" /><title>zenity - display GTK+ dialogs</title><content type="html">&lt;a name="lbAC"&gt;&lt;b&gt;zenity&lt;/b&gt; is a program that will display GTK+ dialogs, and return (either in the return code, or on standard output) the users input. This allows you to present information, and ask for information from the user, from all manner of shell scripts. &lt;/a&gt;&lt;p&gt;  For example, &lt;b&gt;zenity --question&lt;/b&gt; will return either 0 or 1, depending on whether the user pressed &lt;i&gt;OK&lt;/i&gt; or &lt;i&gt;Cancel&lt;/i&gt;. &lt;b&gt;zenity --entry&lt;/b&gt; will output on standard output what the user typed into the text entry field. &lt;/p&gt;&lt;p&gt;  Comprehensive documentation is available in the GNOME Help Browser, under &lt;i&gt;GNOME/Utilities&lt;/i&gt;.  &lt;a name="lbAE"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a name="lbAE"&gt;&lt;/a&gt;&lt;/p&gt;&lt;h2&gt;EXAMPLES&lt;/h2&gt;  &lt;p&gt; Display a file selector with the title &lt;i&gt;Select a file to remove&lt;/i&gt;. The file selected is returned on standard output. &lt;/p&gt;&lt;dl compact="compact"&gt;&lt;dt&gt;&lt;br /&gt;&lt;/dt&gt;&lt;dd&gt; zenity  --title="Select a file to remove" --file-selection &lt;/dd&gt;&lt;/dl&gt; &lt;p&gt;  Display a text entry dialog with the title &lt;i&gt;Select Host&lt;/i&gt; and the text &lt;i&gt;Select the host you would like to flood-ping&lt;/i&gt;. The entered text is returned on standard output. &lt;/p&gt;&lt;dl compact="compact"&gt;&lt;dt&gt;&lt;br /&gt;&lt;/dt&gt;&lt;dd&gt; zenity  --title "Select Host" --entry --text "Select the host you would like to flood-ping" &lt;/dd&gt;&lt;/dl&gt; &lt;p&gt;  Display a dialog, asking &lt;i&gt;Microsoft Windows has been found! Would you like to remove it?&lt;/i&gt;. The return code will be 0 (true in shell) if &lt;i&gt;OK&lt;/i&gt; is selected, and 1 (false) if &lt;i&gt;Cancel&lt;/i&gt; is selected. &lt;/p&gt;&lt;dl compact="compact"&gt;&lt;dt&gt;&lt;br /&gt;&lt;/dt&gt;&lt;dd&gt; zenity  --question --title "Alert"  --text "Microsoft Windows has been found! Would you like to remove it?" &lt;/dd&gt;&lt;/dl&gt; &lt;p&gt;  Show the search results in a list dialog with the title &lt;i&gt;Search Results&lt;/i&gt; and the text &lt;i&gt;Finding all header files...&lt;/i&gt;. &lt;/p&gt;&lt;dl compact="compact"&gt;&lt;dt&gt;&lt;br /&gt;&lt;/dt&gt;&lt;dd&gt; find . -name '*.h' | zenity --title "Search Results" --text "Finding all header files.." --column "Files" &lt;/dd&gt;&lt;/dl&gt; &lt;p&gt;  Display a weekly shopping list in a check list dialog with &lt;i&gt;Apples&lt;/i&gt; and &lt;i&gt;Oranges&lt;/i&gt; pre selected &lt;/p&gt;&lt;dl compact="compact"&gt;&lt;dt&gt;&lt;br /&gt;&lt;/dt&gt;&lt;dd&gt; zenity --list --checklist --column "Buy" --column "Item" TRUE Apples TRUE Oranges FALSE Pears FALSE Toothpaste &lt;/dd&gt;&lt;/dl&gt; &lt;p&gt;  Display a progress dialog while searching for all the postscript files in your home directory  find `echo $HOME` '*.ps' | zenity --progress --pulsate  &lt;a name="lbAG"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a name="lbAG"&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a name="lbAG"&gt;http://www.linuxmanpages.com/man1/zenity.1.php&lt;br /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&lt;a name="lbAE"&gt;&lt;/a&gt; &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/219906058588294651-2663855895866431505?l=jay-notes.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/MPFqQ6oKzEnaa4RueaWKOi4JOTw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/MPFqQ6oKzEnaa4RueaWKOi4JOTw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/MPFqQ6oKzEnaa4RueaWKOi4JOTw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/MPFqQ6oKzEnaa4RueaWKOi4JOTw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/SmCYn/~4/Qfk2OuFLSQM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jay-notes.blogspot.com/feeds/2663855895866431505/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=219906058588294651&amp;postID=2663855895866431505" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/219906058588294651/posts/default/2663855895866431505?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/219906058588294651/posts/default/2663855895866431505?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/SmCYn/~3/Qfk2OuFLSQM/zenity-display-gtk-dialogs.html" title="zenity - display GTK+ dialogs" /><author><name>Jay</name><uri>http://www.blogger.com/profile/07718065550458812883</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/-lyb2_oWKmws/TmQNtuu6DjI/AAAAAAAAAV0/mYFucl6sKGY/s220/drink.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://jay-notes.blogspot.com/2007/07/zenity-display-gtk-dialogs.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkQFSHg4eyp7ImA9WB5XFkw.&quot;"><id>tag:blogger.com,1999:blog-219906058588294651.post-4987254580990203517</id><published>2007-07-16T21:26:00.000+02:00</published><updated>2007-07-16T21:31:59.633+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2007-07-16T21:31:59.633+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Linux" /><category scheme="http://www.blogger.com/atom/ns#" term="devilspie" /><title>devilspie</title><content type="html">&lt;span style="color: rgb(0, 102, 0);"&gt;Devil’s Pie can be configured to detect windows as they are created, and match the window to a set of rules. If the window matches the rules, it can perform a series of actions on that window.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;configuration files are in .devilspie folder, like firefox.ds. Code example:&lt;br /&gt;&lt;pre&gt;&lt;blockquote&gt;(if&lt;br /&gt; (is (application_name) "Firefox")&lt;br /&gt; (set_workspace 2)&lt;br /&gt;)&lt;/blockquote&gt;Detail description and syntax here: http://wiki.foosel.net/linux/devilspie&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/219906058588294651-4987254580990203517?l=jay-notes.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/2ASczrIi3pvAfWkgvRiBAIFK6MI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/2ASczrIi3pvAfWkgvRiBAIFK6MI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/2ASczrIi3pvAfWkgvRiBAIFK6MI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/2ASczrIi3pvAfWkgvRiBAIFK6MI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/SmCYn/~4/hWKnDQtiuxg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jay-notes.blogspot.com/feeds/4987254580990203517/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=219906058588294651&amp;postID=4987254580990203517" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/219906058588294651/posts/default/4987254580990203517?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/219906058588294651/posts/default/4987254580990203517?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/SmCYn/~3/hWKnDQtiuxg/devilspie.html" title="devilspie" /><author><name>Jay</name><uri>http://www.blogger.com/profile/07718065550458812883</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/-lyb2_oWKmws/TmQNtuu6DjI/AAAAAAAAAV0/mYFucl6sKGY/s220/drink.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://jay-notes.blogspot.com/2007/07/devilspie.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D08DRHo8fyp7ImA9WB5XFUQ.&quot;"><id>tag:blogger.com,1999:blog-219906058588294651.post-1231367197673705203</id><published>2007-07-16T16:22:00.000+02:00</published><updated>2007-07-16T16:24:35.477+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2007-07-16T16:24:35.477+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Linux" /><category scheme="http://www.blogger.com/atom/ns#" term="Rxvt" /><title>Tabbed rxvt</title><content type="html">URxvt.perl-ext-common: default,tabbed&lt;br /&gt; URxvt.tabbed.tab-fg: 12&lt;br /&gt; URxvt.tabbed.tab-bg: 0&lt;br /&gt; URxvt.tabbed.tabbar-fg: 4&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/219906058588294651-1231367197673705203?l=jay-notes.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/mj89KMho_3--_mvzlxR7o3w5u6c/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/mj89KMho_3--_mvzlxR7o3w5u6c/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/mj89KMho_3--_mvzlxR7o3w5u6c/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/mj89KMho_3--_mvzlxR7o3w5u6c/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/SmCYn/~4/G_6V7k09_NU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jay-notes.blogspot.com/feeds/1231367197673705203/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=219906058588294651&amp;postID=1231367197673705203" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/219906058588294651/posts/default/1231367197673705203?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/219906058588294651/posts/default/1231367197673705203?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/SmCYn/~3/G_6V7k09_NU/tabbed-rxvt.html" title="Tabbed rxvt" /><author><name>Jay</name><uri>http://www.blogger.com/profile/07718065550458812883</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/-lyb2_oWKmws/TmQNtuu6DjI/AAAAAAAAAV0/mYFucl6sKGY/s220/drink.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://jay-notes.blogspot.com/2007/07/tabbed-rxvt.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUIFQHk5eyp7ImA9WB5XFEg.&quot;"><id>tag:blogger.com,1999:blog-219906058588294651.post-2508733481026254835</id><published>2007-07-14T23:44:00.001+02:00</published><updated>2007-07-15T00:51:51.723+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2007-07-15T00:51:51.723+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Linux" /><category scheme="http://www.blogger.com/atom/ns#" term="Bash" /><title>Bash tricks</title><content type="html">&lt;span style="font-weight: bold;"&gt;bash vi keybind&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;: &lt;/span&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;blockquote&gt;set -o vi in .bashrc&lt;/blockquote&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;chinese locale but english console&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;:&lt;/span&gt;&lt;br /&gt;&lt;blockquote&gt;LANG="en_US.UTF-8"&lt;br /&gt;LC_CTYPE="zh_CN.UTF-8"        &lt;br /&gt;in /etc/environment&lt;/blockquote&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;custom bash prompt with color:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;blockquote&gt;export TERM=xterm-color&lt;br /&gt;&lt;br /&gt;PS1='${debian_chroot:+($debian_chroot)}\[\033[0;35m\]\d - \u@\h:\w\[\033[0;33m\] :: '       &lt;br /&gt;&lt;br /&gt;in .bashrc&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/219906058588294651-2508733481026254835?l=jay-notes.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/NRiKpTk0tvweyKDWkmJU67jFsls/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/NRiKpTk0tvweyKDWkmJU67jFsls/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/NRiKpTk0tvweyKDWkmJU67jFsls/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/NRiKpTk0tvweyKDWkmJU67jFsls/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/SmCYn/~4/vwvJqB8x51g" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jay-notes.blogspot.com/feeds/2508733481026254835/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=219906058588294651&amp;postID=2508733481026254835" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/219906058588294651/posts/default/2508733481026254835?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/219906058588294651/posts/default/2508733481026254835?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/SmCYn/~3/vwvJqB8x51g/bash-tricks.html" title="Bash tricks" /><author><name>Jay</name><uri>http://www.blogger.com/profile/07718065550458812883</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/-lyb2_oWKmws/TmQNtuu6DjI/AAAAAAAAAV0/mYFucl6sKGY/s220/drink.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://jay-notes.blogspot.com/2007/07/bash-tricks.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUEFQnwycSp7ImA9WB5XEUs.&quot;"><id>tag:blogger.com,1999:blog-219906058588294651.post-8608513193309004069</id><published>2007-07-11T17:25:00.000+02:00</published><updated>2007-07-11T17:26:53.299+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2007-07-11T17:26:53.299+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Python" /><category scheme="http://www.blogger.com/atom/ns#" term="ORM" /><title>Storm</title><content type="html">&lt;a href="https://storm.canonical.com/Tutorial"&gt;https://storm.canonical.com/Tutorial&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Python ORM from Canonical&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/219906058588294651-8608513193309004069?l=jay-notes.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/fSibOz5Z6ugKTUg0Z5aMmZmTYKc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/fSibOz5Z6ugKTUg0Z5aMmZmTYKc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/fSibOz5Z6ugKTUg0Z5aMmZmTYKc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/fSibOz5Z6ugKTUg0Z5aMmZmTYKc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/SmCYn/~4/p23ZaPPc0YA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jay-notes.blogspot.com/feeds/8608513193309004069/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=219906058588294651&amp;postID=8608513193309004069" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/219906058588294651/posts/default/8608513193309004069?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/219906058588294651/posts/default/8608513193309004069?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/SmCYn/~3/p23ZaPPc0YA/storm.html" title="Storm" /><author><name>Jay</name><uri>http://www.blogger.com/profile/07718065550458812883</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/-lyb2_oWKmws/TmQNtuu6DjI/AAAAAAAAAV0/mYFucl6sKGY/s220/drink.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://jay-notes.blogspot.com/2007/07/storm.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DE4MQnYyeCp7ImA9WB5QFUg.&quot;"><id>tag:blogger.com,1999:blog-219906058588294651.post-8773143349521213722</id><published>2007-07-04T15:48:00.000+02:00</published><updated>2007-07-04T15:49:43.890+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2007-07-04T15:49:43.890+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Python" /><title>Determining Current Function Name</title><content type="html">&lt;pre class="code"&gt;&lt;span class="syntaxcomment"&gt;# use sys._getframe() -- it returns a frame object, whose attribute&lt;/span&gt;&lt;br /&gt;&lt;span class="syntaxcomment"&gt;# f_code is a code object, whose attribute co_name is the &lt;span style="color: rgb(51, 204, 0);"&gt;name&lt;/span&gt;:&lt;/span&gt;&lt;br /&gt;&lt;span class="syntaxkeyword"&gt;import&lt;/span&gt; sys&lt;br /&gt;this_function_name = sys._getframe().f_code.co_name&lt;br /&gt;&lt;br /&gt;&lt;span class="syntaxcomment"&gt;# the frame and code objects also offer other useful information:&lt;/span&gt;&lt;br /&gt;this_line_number = sys._getframe().f_lineno&lt;br /&gt;this_filename = sys._getframe().f_code.co_filename&lt;br /&gt;&lt;br /&gt;&lt;span class="syntaxcomment"&gt;# also, by calling sys._getframe(1), you can get this information&lt;/span&gt;&lt;br /&gt;&lt;span class="syntaxcomment"&gt;# for the &lt;span style="color: rgb(51, 204, 0);"&gt;*caller*&lt;/span&gt; of the current function.  So you can package&lt;/span&gt;&lt;br /&gt;&lt;span class="syntaxcomment"&gt;# this functionality up into your own handy functions:&lt;/span&gt;&lt;br /&gt;&lt;span class="syntaxkeyword"&gt;def&lt;/span&gt; whoami():&lt;br /&gt;   &lt;span class="syntaxkeyword"&gt;import&lt;/span&gt; sys&lt;br /&gt;   &lt;span class="syntaxkeyword"&gt;return&lt;/span&gt; sys._getframe(1).f_code.co_name&lt;br /&gt;&lt;br /&gt;me  = whoami()&lt;br /&gt;&lt;br /&gt;&lt;span class="syntaxcomment"&gt;# this uses argument 1, because the call to whoami is now frame 0.&lt;/span&gt;&lt;br /&gt;&lt;span class="syntaxcomment"&gt;# and similarly:&lt;/span&gt;&lt;br /&gt;&lt;span class="syntaxkeyword"&gt;def&lt;/span&gt; callersname():&lt;br /&gt;   &lt;span class="syntaxkeyword"&gt;import&lt;/span&gt; sys&lt;br /&gt;   &lt;span class="syntaxkeyword"&gt;return&lt;/span&gt; sys._getframe(2).f_code.co_name&lt;br /&gt;&lt;br /&gt;him = callersname()&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/219906058588294651-8773143349521213722?l=jay-notes.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/jcL9C2RhDclkx3ewRg0EY0Tss7c/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/jcL9C2RhDclkx3ewRg0EY0Tss7c/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/jcL9C2RhDclkx3ewRg0EY0Tss7c/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/jcL9C2RhDclkx3ewRg0EY0Tss7c/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/SmCYn/~4/L8SlS_cGt38" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jay-notes.blogspot.com/feeds/8773143349521213722/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=219906058588294651&amp;postID=8773143349521213722" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/219906058588294651/posts/default/8773143349521213722?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/219906058588294651/posts/default/8773143349521213722?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/SmCYn/~3/L8SlS_cGt38/determining-current-function-name.html" title="Determining Current Function Name" /><author><name>Jay</name><uri>http://www.blogger.com/profile/07718065550458812883</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/-lyb2_oWKmws/TmQNtuu6DjI/AAAAAAAAAV0/mYFucl6sKGY/s220/drink.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://jay-notes.blogspot.com/2007/07/determining-current-function-name.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C08DQnsycSp7ImA9WB5QFEs.&quot;"><id>tag:blogger.com,1999:blog-219906058588294651.post-1772853655396394002</id><published>2007-07-03T13:23:00.000+02:00</published><updated>2007-07-03T13:24:33.599+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2007-07-03T13:24:33.599+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Django" /><title>RequestContext in Template</title><content type="html">&lt;pre class="last literal-block"&gt;def some_view(request):&lt;br /&gt;   # ...&lt;br /&gt;   return render_to_response('my_template.html',&lt;br /&gt;                             my_data_dictionary,&lt;br /&gt;                             context_instance=RequestContext(request))&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;Here’s what each of the default processors does:&lt;/p&gt; &lt;div class="section"&gt; &lt;h4&gt;&lt;a id="django-core-context-processors-auth"&gt;django.core.context_processors.auth&lt;/a&gt;&lt;/h4&gt; &lt;p&gt;If &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;TEMPLATE_CONTEXT_PROCESSORS&lt;/span&gt;&lt;/tt&gt; contains this processor, every &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;RequestContext&lt;/span&gt;&lt;/tt&gt; will contain these three variables:&lt;/p&gt; &lt;ul&gt;&lt;li&gt;&lt;p class="first"&gt;&lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;user&lt;/span&gt;&lt;/tt&gt; — An &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;auth.User&lt;/span&gt;&lt;/tt&gt; instance representing the currently logged-in user (or an &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;AnonymousUser&lt;/span&gt;&lt;/tt&gt; instance, if the client isn’t logged in). See the &lt;a class="reference" href="http://www.djangoproject.com/documentation/authentication/#users"&gt;user authentication docs&lt;/a&gt;.&lt;/p&gt; &lt;/li&gt;&lt;li&gt;&lt;p class="first"&gt;&lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;messages&lt;/span&gt;&lt;/tt&gt; — A list of messages (as strings) for the currently logged-in user. Behind the scenes, this calls &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;request.user.get_and_delete_messages()&lt;/span&gt;&lt;/tt&gt; for every request. That method collects the user’s messages and deletes them from the database.&lt;/p&gt; &lt;p&gt;Note that messages are set with &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;user.message_set.create&lt;/span&gt;&lt;/tt&gt;. See the &lt;a class="reference" href="http://www.djangoproject.com/documentation/authentication/#messages"&gt;message docs&lt;/a&gt; for more.&lt;/p&gt; &lt;/li&gt;&lt;li&gt;&lt;p class="first"&gt;&lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;perms&lt;/span&gt;&lt;/tt&gt; — An instance of &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;django.core.context_processors.PermWrapper&lt;/span&gt;&lt;/tt&gt;, representing the permissions that the currently logged-in user has. See the &lt;a class="reference" href="http://www.djangoproject.com/documentation/authentication/#permissions"&gt;permissions docs&lt;/a&gt;.&lt;/p&gt; &lt;/li&gt;&lt;/ul&gt; &lt;/div&gt; &lt;div class="section"&gt; &lt;h4&gt;&lt;a id="django-core-context-processors-debug"&gt;django.core.context_processors.debug&lt;/a&gt;&lt;/h4&gt; &lt;p&gt;If &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;TEMPLATE_CONTEXT_PROCESSORS&lt;/span&gt;&lt;/tt&gt; contains this processor, every &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;RequestContext&lt;/span&gt;&lt;/tt&gt; will contain these two variables — but only if your &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;DEBUG&lt;/span&gt;&lt;/tt&gt; setting is set to &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;True&lt;/span&gt;&lt;/tt&gt; and the request’s IP address (&lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;request.META['REMOTE_ADDR']&lt;/span&gt;&lt;/tt&gt;) is in the &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;INTERNAL_IPS&lt;/span&gt;&lt;/tt&gt; setting:&lt;/p&gt; &lt;ul class="simple"&gt;&lt;li&gt;&lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;debug&lt;/span&gt;&lt;/tt&gt; — &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;True&lt;/span&gt;&lt;/tt&gt;. You can use this in templates to test whether you’re in &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;DEBUG&lt;/span&gt;&lt;/tt&gt; mode.&lt;/li&gt;&lt;li&gt;&lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;sql_queries&lt;/span&gt;&lt;/tt&gt; — A list of &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;{'sql':&lt;/span&gt; &lt;span class="pre"&gt;...,&lt;/span&gt; &lt;span class="pre"&gt;'time':&lt;/span&gt; &lt;span class="pre"&gt;...}&lt;/span&gt;&lt;/tt&gt; dictionaries, representing every SQL query that has happened so far during the request and how long it took. The list is in order by query.&lt;/li&gt;&lt;/ul&gt; &lt;/div&gt; &lt;div class="section"&gt; &lt;h4&gt;&lt;a id="django-core-context-processors-i18n"&gt;django.core.context_processors.i18n&lt;/a&gt;&lt;/h4&gt; &lt;p&gt;If &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;TEMPLATE_CONTEXT_PROCESSORS&lt;/span&gt;&lt;/tt&gt; contains this processor, every &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;RequestContext&lt;/span&gt;&lt;/tt&gt; will contain these two variables:&lt;/p&gt; &lt;ul class="simple"&gt;&lt;li&gt;&lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;LANGUAGES&lt;/span&gt;&lt;/tt&gt; — The value of the &lt;a class="reference" href="http://www.djangoproject.com/documentation/settings/#languages"&gt;LANGUAGES setting&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;&lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;LANGUAGE_CODE&lt;/span&gt;&lt;/tt&gt; — &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;request.LANGUAGE_CODE&lt;/span&gt;&lt;/tt&gt;, if it exists. Otherwise, the value of the &lt;a class="reference" href="http://www.djangoproject.com/documentation/settings/#language-code"&gt;LANGUAGE_CODE setting&lt;/a&gt;.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;See the &lt;a class="reference" href="http://www.djangoproject.com/documentation/i18n/"&gt;internationalization docs&lt;/a&gt; for more.&lt;/p&gt; &lt;/div&gt; &lt;div class="section"&gt; &lt;h4&gt;&lt;a id="django-core-context-processors-media"&gt;django.core.context_processors.media&lt;/a&gt;&lt;/h4&gt; &lt;p&gt;If &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;TEMPLATE_CONTEXT_PROCESSORS&lt;/span&gt;&lt;/tt&gt; contains this processor, every &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;RequestContext&lt;/span&gt;&lt;/tt&gt; will contain a variable &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;MEDIA_URL&lt;/span&gt;&lt;/tt&gt;, providing the value of the &lt;a class="reference" href="http://www.djangoproject.com/documentation/settings/#media-url"&gt;MEDIA_URL setting&lt;/a&gt;.&lt;/p&gt; &lt;/div&gt; &lt;div class="section"&gt; &lt;h4&gt;&lt;a id="django-core-context-processors-request"&gt;django.core.context_processors.request&lt;/a&gt;&lt;/h4&gt; &lt;p&gt;If &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;TEMPLATE_CONTEXT_PROCESSORS&lt;/span&gt;&lt;/tt&gt; contains this processor, every &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;RequestContext&lt;/span&gt;&lt;/tt&gt; will contain a variable &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;request&lt;/span&gt;&lt;/tt&gt;, which is the current &lt;a class="reference" href="http://www.djangoproject.com/documentation/request_response/#httprequest-objects"&gt;HttpRequest object&lt;/a&gt;. Note that this processor is not enabled by default; you’ll have to activate it.&lt;/p&gt; &lt;/div&gt; &lt;div class="section"&gt; &lt;h4&gt;&lt;a id="writing-your-own-context-processors"&gt;Writing your own context processors&lt;/a&gt;&lt;/h4&gt; &lt;p&gt;A context processor has a very simple interface: It’s just a Python function that takes one argument, an &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;HttpRequest&lt;/span&gt;&lt;/tt&gt; object, and returns a dictionary that gets added to the template context. Each context processor &lt;em&gt;must&lt;/em&gt; return a dictionary.&lt;/p&gt; &lt;p&gt;Custom context processors can live anywhere in your code base. All Django cares about is that your custom context processors are pointed-to by your &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;TEMPLATE_CONTEXT_PROCESSORS&lt;/span&gt;&lt;/tt&gt; setting.&lt;/p&gt; &lt;/div&gt;&lt;pre class="last literal-block"&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/219906058588294651-1772853655396394002?l=jay-notes.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/MV40qHVASH0UJOi2XNVcJ2MM4hA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/MV40qHVASH0UJOi2XNVcJ2MM4hA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/MV40qHVASH0UJOi2XNVcJ2MM4hA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/MV40qHVASH0UJOi2XNVcJ2MM4hA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/SmCYn/~4/SjYjSc8y9g4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jay-notes.blogspot.com/feeds/1772853655396394002/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=219906058588294651&amp;postID=1772853655396394002" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/219906058588294651/posts/default/1772853655396394002?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/219906058588294651/posts/default/1772853655396394002?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/SmCYn/~3/SjYjSc8y9g4/requestcontext-in-template.html" title="RequestContext in Template" /><author><name>Jay</name><uri>http://www.blogger.com/profile/07718065550458812883</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/-lyb2_oWKmws/TmQNtuu6DjI/AAAAAAAAAV0/mYFucl6sKGY/s220/drink.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://jay-notes.blogspot.com/2007/07/requestcontext-in-template.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEEFRnc7cCp7ImA9WB5QFEg.&quot;"><id>tag:blogger.com,1999:blog-219906058588294651.post-4016422043424678159</id><published>2007-07-03T11:56:00.001+02:00</published><updated>2007-07-03T11:56:57.908+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2007-07-03T11:56:57.908+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="MixIn" /><title>Mixin 和 Plugin</title><content type="html">&lt;pre&gt;mixin 是统称，我又区分为Mixin和Plugin两种。&lt;br /&gt;&lt;br /&gt;Mixin 是增加新东西或与原有的东西合并。比如向一个类增加属性或方法。&lt;br /&gt;Plugin 相当于一个回调函数的扩展，它的调用入口一定是存在于某个方法中。举例来说：&lt;br /&gt;&lt;br /&gt;class A(Mixin):&lt;br /&gt;   __mixinname__ = 'a'&lt;br /&gt;&lt;br /&gt;   def __init__(self):&lt;br /&gt;       self.initmixin()&lt;br /&gt;       #code&lt;br /&gt;       self.callplugin('plugin1', args1, args2)&lt;br /&gt;       #code&lt;br /&gt;       obj = self.execplugin('plugin2', args1, args2, args3)&lt;br /&gt;&lt;br /&gt;上面的代码是一个slot class的例子，其中self.callplugin()和self.execplugin()是对于两种不同的Plugin的调用点。&lt;br /&gt;&lt;br /&gt;为什么有这个东西的想法就是，我可以使用Mixin的方式将__init__方法替换掉，但可能我的处理代码为了不影响以前的东西仍然要保存许多的原始代码，这样程序看上去很乱。比如，不使用Plugin的方式，类可能为：&lt;br /&gt;&lt;br /&gt;class A:&lt;br /&gt;   def __init__(self):&lt;br /&gt;       code1&lt;br /&gt;       code2&lt;br /&gt;&lt;br /&gt;这时我发现A需要修改，那么可能需要在code1和code2之间加入一些代码，不使用mixin技术，你一定是要么直接修改A的代码，要么从A派生，不管怎能么样，__init__的代码都会为:&lt;br /&gt;&lt;br /&gt;def __init__(self):&lt;br /&gt;   code1&lt;br /&gt;   newcode&lt;br /&gt;   code2&lt;br /&gt;&lt;br /&gt;这样code1和code2就需要保留。如果再需要在code1和code2之间加入代码，你又要做这样的工作，要么修改A，要么从A派生，然后保留以前的代码。而采用mixin技术，你只需要在code1与code2之间加入一个插入点，那么A类就基本上不需要修改了。新的代码就使用一个新的Plugin来实现，再增加新的代码就再写一个Plugin就行了。能过Mixin模块将其合成一个Plugin的链。&lt;br /&gt;&lt;br /&gt;因为Plugin是处于代码中间的，因此叫这个名字，这与插件的工作方式是一样的。而callplugin和execplugin的调用就是Plugin的接口定义。第一个参数是这个plugin接口的名字，后面是它的参数。而定义Plugin方法时需要按调用接口来定义参数，如上面的plugin1有两个参数，它的某个Plugin定义为：&lt;br /&gt;&lt;br /&gt;def myplugin1(a, b):&lt;br /&gt;   print a, b&lt;br /&gt;Mixin.setPlugin('a', 'plugin1', myyplugin1)&lt;br /&gt;&lt;br /&gt;这样就通过Mixin模块的setPlugin方法将myplugin1与__mixinname__为'a'的plugin调用点为'plugin1'的接口关联起来了。&lt;br /&gt;&lt;br /&gt;在执行callplugin和execplugin时不需要传入slot class&lt;br /&gt;的__mixinname__，因为自已知道在调用Plugin时使用哪个slot class的Plugins。&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/219906058588294651-4016422043424678159?l=jay-notes.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/GVQhrDLFhrghM7uLqDLjt7EDbKI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/GVQhrDLFhrghM7uLqDLjt7EDbKI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/GVQhrDLFhrghM7uLqDLjt7EDbKI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/GVQhrDLFhrghM7uLqDLjt7EDbKI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/SmCYn/~4/5dJoNFUt5PQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jay-notes.blogspot.com/feeds/4016422043424678159/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=219906058588294651&amp;postID=4016422043424678159" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/219906058588294651/posts/default/4016422043424678159?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/219906058588294651/posts/default/4016422043424678159?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/SmCYn/~3/5dJoNFUt5PQ/mixin-plugin.html" title="Mixin 和 Plugin" /><author><name>Jay</name><uri>http://www.blogger.com/profile/07718065550458812883</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/-lyb2_oWKmws/TmQNtuu6DjI/AAAAAAAAAV0/mYFucl6sKGY/s220/drink.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://jay-notes.blogspot.com/2007/07/mixin-plugin.html</feedburner:origLink></entry></feed>

