<?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;C0ADRn8-cCp7ImA9WhVTE0k.&quot;"><id>tag:blogger.com,1999:blog-3803541356848955053</id><updated>2012-02-27T03:22:57.158-08:00</updated><category term="drug" /><category term="GNU/Hurd" /><category term="bug" /><category term="free" /><category term="Ustream.Tv" /><category term="expose" /><category term="proposal" /><category term="sed" /><category term="ASP.NET" /><category term="The IT Crowd" /><category term="iBus" /><category term="Rihanna" /><category term="scheduler" /><category term="BSG" /><category term="Kubuntu" /><category term="message" /><category term="Lady Gaga" /><category term="nForce" /><category term="GIMP" /><category term="searching" /><category term="SHMConfig" /><category term="Time Machine Band" /><category term="XDM" /><category term="posting" /><category term="5617" /><category term="sort" /><category term="Bourne shell" /><category term="Google+" /><category term="New York" /><category term="shooting" /><category term="Thai" /><category term="Modernizr" /><category term="Blue Marble" /><category term="slots" /><category term="control code" /><category term="Brokwn Lullabies" /><category term="about:home" /><category term="Firefox" /><category term="darkness" /><category term="CD" /><category term="stock" /><category term="Internet Explorer" /><category term="transset" /><category term="XBOX" /><category term="Rebecca Black" /><category term="matplotlib" /><category term="sky" /><category term="x11grab" /><category term="silly" /><category term="mail" /><category term="Video4Linux" /><category term="popular post" /><category term="fruit" /><category term="radix" /><category term="introduction" /><category term="list" /><category term="environment variable" /><category term="notetaking" /><category term="tmux" /><category term="binary package" /><category term="LCD" /><category term="Unbroken" /><category term="OldBlogmakeYJL" /><category term="IP address" /><category term="FX" /><category term="BSD" /><category term="ASCII art" /><category term="blocking" /><category term="creativity" /><category term="protest" /><category term="announcement" /><category term="Penguin" /><category term="fglrx" /><category term="amd64" /><category term="Glade" /><category term="v4l2" /><category term="dumb" /><category term="course" /><category term="tester" /><category term="pyratemp" /><category term="Paint" /><category term="JPype" /><category term="code" /><category term="ISO 8859-1" /><category term="tomato" /><category term="VASCO" /><category term="social network" /><category term="headphone" /><category term="customization" /><category term="Backupify" /><category term="statusline" /><category term="giving" /><category term="Metal Gear Solid" /><category term="awareness" /><category term="PyQuery" /><category term="nameserver" /><category term="CFLAGS" /><category term="Flickr" /><category term="investment" /><category term="index" /><category term="pasta" /><category term="Dollhouse" /><category term="Delicious.com" /><category term="vocal" /><category term="webpage" /><category term="mkisofs" /><category term="Red Hat" /><category term="Katharine McPhee" /><category term="public key" /><category term="spaghetti" /><category term="finance" /><category term="funny" /><category term="ICQ" /><category term="VP8" /><category term="lobster" /><category term="video game" /><category term="LOLGitHub" /><category term="WebKit" /><category term="goal" /><category term="rumor" /><category term="boilerplate" /><category term="noodles" /><category term="HTTP" /><category term="bad mood" /><category term="density" /><category term="Flash" /><category term="Poker Face" /><category term="favicon" /><category term="function" /><category term="GPG" /><category term="grepsort" /><category term="wide character" /><category term="tv" /><category term="multilib" /><category term="Improv Everywhere" /><category term="Ukraine" /><category term="Blog List gadget" /><category term="fireworks" /><category term="attribute" /><category term="transition" /><category term="ts" /><category term="parody" /><category term="World Vision" /><category term="Digital Domain" /><category term="filter" /><category term="exec" /><category term="Vim" /><category term="WordGrinder" /><category term="fake" /><category term="negative" /><category term="transparency" /><category term="flowchart" /><category term="Road to Nowhere" /><category term="OldBlogBlogarbage" /><category term="web browser" /><category term="release" /><category term="Fus Ro Dah" /><category term="MathML" /><category term="highlight.js" /><category term="kindergarten" /><category term="security breach" /><category term="timeit" /><category term="2011" /><category term="timeline" /><category term="blood" /><category term="exitcode" /><category term="Google Sites" /><category term="Gentoo" /><category term="Santa Claus" /><category term="Ke$ha" /><category term="Google Earth" /><category term="creative writing" /><category term="2D" /><category term="script" /><category term="flu" /><category term="nose" /><category term="catdom" /><category term="string quartet" /><category term="Assignment Game" /><category term="PS1" /><category term="atheist" /><category term="inline markup" /><category term="key" /><category term="Stellarium" /><category term="theme song" /><category term="speech recognization" /><category term="Panorama" /><category term="GAE" /><category term="2010" /><category term="YouTube API" /><category term="card" /><category term="JRE" /><category term="kid" /><category term="monitoring" /><category term="website" /><category term="font" /><category term="FireBug" /><category term="VLC" /><category term="emerge" /><category term="pickle" /><category term="Donald" /><category term="lunch" /><category term="source" /><category term="singer-songwriter" /><category term="I Thank" /><category term="Markdown" /><category term="dict" /><category term="Font Squirrel" /><category term="certificate authority" /><category term="ncurses" /><category term="interactive shell" /><category term="OpenCDE" /><category term="abcdefghijklmnopqrstuvwxyz" /><category term="inotifywait" /><category term="2009" /><category term="i386" /><category term="data URI scheme" /><category term="death" /><category term="Google Font Directory" /><category term="KRAFT" /><category term="parsing" /><category term="Windows" /><category term="SQLite" /><category term="Stars" /><category term="GeoLite City" /><category term="scrobbler" /><category term="I Don't Know" /><category term="timer" /><category term="PV" /><category term="Revolverheld" /><category term="md5sum" /><category term="flaw" /><category term="bookmarklet" /><category term="falling hearts" /><category term="feh" /><category term="thought" /><category term="Josh Peterson" /><category term="capcha" /><category term="crontab" /><category term="2008" /><category term="App Tab" /><category term="eselect" /><category term="drama" /><category term="word frequency" /><category term="font-face" /><category term="grey" /><category term="Opera" /><category term="OpenOffice" /><category term="title" /><category term="ffmpeg" /><category term="oldest" /><category term="battery" /><category term="Perl" /><category term="record" /><category term="Ox" /><category term="execution" /><category term="Google Plus" /><category term="cross-domain" /><category term="text" /><category term="file management" /><category term="disease" /><category term="Race to Witch Mountain" /><category term="error" /><category term="BRPS Featured" /><category term="xsnow" /><category term="Python" /><category term="Pop" /><category term="education" /><category term="XScreenSaver" /><category term="packaging" /><category term="milestone" /><category term="SRPM" /><category term="Znurt" /><category term="rpmbuild" /><category term="transparent" /><category term="flat" /><category term="github" /><category term="bullshit" /><category term="eyecandy" /><category term="Oracle" /><category term="police" /><category term="lifestyle" /><category term="sleep" /><category term="ISP" /><category term="ItchApe" /><category term="TagCloud" /><category term="voice" /><category term="feedparser" /><category term="Kraken" /><category term="country code" /><category term="Stargate Universe" /><category term="repository" /><category term="anchor" /><category term="KDE" /><category term="soup" /><category term="The Irish Rovers" /><category term="The Incredibles" /><category term="Minecraft" /><category term="election" /><category term="error code" /><category term="photography" /><category term="Google Gadget API" /><category term="unhealthy" /><category term="Portage" /><category term="standard input" /><category term="PAM" /><category term="loading" /><category term="pee" /><category term="Google" /><category term="keep" /><category term="scrapper" /><category term="TiMidity++" /><category term="package management" /><category term="calculator" /><category term="furry" /><category term="cancer" /><category term="DNS" /><category term="Novell" /><category term="one-liner" /><category term="YQL" /><category term="TTS" /><category term="GAEUnit" /><category term="indicator" /><category term="list comprehension" /><category term="string format" /><category term="Brainfuck" /><category term="Keep Last Two Tabs" /><category term="PYTHONSTARTUP" /><category term="grep" /><category term="drink" /><category term="Twimonial" /><category term="Canada" /><category term="laptop" /><category term="alphabet" /><category term="hsandbox" /><category term="Soba" /><category term="shell scripting" /><category term="security" /><category term="object" /><category term="genlop" /><category term="Dial-up Network" /><category term="school" /><category term="Soviet" /><category term="Streaming API" /><category term="Blogger" /><category term="random post" /><category term="billing" /><category term="wmctrl" /><category term="Hinet" /><category term="Fortran" /><category term="Leah Daniels" /><category term="xmllint" /><category term="photo" /><category term="Reamonn" /><category term="Midnight Commander" /><category term="Skyrim" /><category term="Detroit 1-8-7" /><category term="linking" /><category term="Magpie" /><category term="HTML" /><category term="Taiwanese" /><category term="CenterIM" /><category term="PyQt4" /><category term="JavaScript" /><category term="Twitch.tv" /><category term="Tux" /><category term="sitemap" /><category term="MGS1" /><category term="jackd" /><category term="navbar" /><category term="PPAPI" /><category term="debugging" /><category term="evil walrus" /><category term="environment" /><category term="8-bit" /><category term="Get Satisfaction" /><category term="Christian" /><category term="Let Secrets Out" /><category term="meow" /><category term="SystemTap" /><category term="feedback" /><category term="xset" /><category term="32-bit" /><category term="snowing" /><category term="Export API" /><category term="top post" /><category term="layout" /><category term="Google Instant" /><category term="application.program" /><category term="depencency" /><category term="HTML5" /><category term="DosBox" /><category term="gstreamer" /><category term="Legend of the Seeker" /><category term="Olympics" /><category term="Adobe Flash" /><category term="programming" /><category term="mount" /><category term="CPU utilization" /><category term="Visual" /><category term="World AIDS Day" /><category term="thriller" /><category term="Pentadactyl" /><category term="spicy" /><category term="Guppy" /><category term="FuseFS" /><category term="Fallout" /><category term="Boom De YaDa" /><category term="Valentine's Day" /><category term="Iran" /><category term="file manager" /><category term="FPS" /><category term="clock" /><category term="line feed" /><category term="two" /><category term="input device" /><category term="snow" /><category term="progress" /><category term="NASA" /><category term="medicine" /><category term="dark" /><category term="prompt" /><category term="Haiku" /><category term="Fedora" /><category term="Ustream" /><category term="quota" /><category term="death sentence" /><category term="DigiNotar" /><category term="Web Storage" /><category term="postive thought" /><category term="final meal" /><category term="inotify" /><category term="cup" /><category term="awk" /><category term="wall" /><category term="mouse" /><category term="MPlayer" /><category term="Compiz" /><category term="Chef John" /><category term="ccTLD" /><category term="email" /><category term="OOo" /><category term="Site Explorer" /><category term="iradio" /><category term="username" /><category term="MGS" /><category term="next" /><category term="pyalsaaudio" /><category term="Calling Wendy" /><category term="navigation bar" /><category term="Google AJAX Search API" /><category term="Conky" /><category term="CSS" /><category term="peace" /><category term="Subversion" /><category term="Envy Code R" /><category term="Christmas" /><category term="nickname" /><category term="formatting" /><category term="government" /><category term="page" /><category term="SDK" /><category term="WebM" /><category term="JACK" /><category term="socket" /><category term="adventure" /><category term="The Matrix" /><category term="disc" /><category term="pain killer" /><category term="CIA" /><category term="MIDI" /><category term="touchpad" /><category term="space" /><category term="compilation error" /><category term="heading style" /><category term="technology" /><category term="Microsoft" /><category term="LessTif" /><category term="CDM" /><category term="spammer" /><category term="quote" /><category term="I18N" /><category term="profile page" /><category term="Synecdoche" /><category term="Browsers" /><category term="PC-BSD" /><category term="spiral pasta" /><category term="Tetris" /><category term="opensource" /><category term="compilation" /><category term="SDL" /><category term="umount" /><category term="IRC" /><category term="maintenance" /><category term="related post" /><category term="SSL" /><category term="minor" /><category term="image" /><category term="qlop" /><category term="traversing" /><category term="Japanese" /><category term="update" /><category term="Can You Save Me" /><category term="Boom De Ya Da" /><category term="howto" /><category term="toes" /><category term="ASCII" /><category term="world" /><category term="music" /><category term="embedding" /><category term="death penalty" /><category term="Arch Linux" /><category term="imagination" /><category term="Pascal's triangle" /><category term="button" /><category term="tar" /><category term="urxvtc" /><category term="Yahoo Finance" /><category term="tty-clock" /><category term="category" /><category term="pyaudio" /><category term="phishing" /><category term="Google Chrome" /><category term="promo video" /><category term="Page Speed" /><category term="trick" /><category term="bookmark" /><category term="ATI" /><category term="gh-pages" /><category term="reCAPCHA" /><category term="mathematics" /><category term="cross-post" /><category term="coffee" /><category term="tea" /><category term="monologue" /><category term="writing" /><category term="Silverlight" /><category term="DOS" /><category term="appreciation" /><category term="predicament" /><category term="Heirloom" /><category term="for loop" /><category term="documentation" /><category term="Rechargeable Alkaline battery" /><category term="RPG" /><category term="C" /><category term="commercial" /><category term="avatar" /><category term="Food Wishes" /><category term="Blogger Related Posts Service" /><category term="Bastard Tetris" /><category term="gray" /><category term="nmaster" /><category term="shower" /><category term="Leverage" /><category term="eix" /><category term="puzzle" /><category term="unitest" /><category term="pipe" /><category term="phone" /><category term="upgrading" /><category term="Webmaster Tools" /><category term="Discovery" /><category term="On The Rocks" /><category term="fantasy" /><category term="app" /><category term="OpenTTD" /><category term="review" /><category term="synclient" /><category term="shared library" /><category term="binary-based" /><category term="Arena" /><category term="screen resolution" /><category term="dungeon" /><category term="seven" /><category term="scrot" /><category term="tracking" /><category term="revamp" /><category term="Sea Sew" /><category term="CMatrix" /><category term="Amarok" /><category term="The Worst Day Since Yesterday" /><category term="libvpx" /><category term="scary" /><category term="The Big C" /><category term="rule" /><category term="alcohol" /><category term="ImageMagick" /><category term="Sheldon Ross" /><category term="tweet" /><category term="slide" /><category term="AVLD" /><category term="access log" /><category term="utimer" /><category term="Elder Scrolls" /><category term="widget" /><category term="exploit" /><category term="paper clip" /><category term="pet" /><category term="filename" /><category term="Analytics" /><category term="time capsule" /><category term="pylint" /><category term="WebP" /><category term="PyGTK" /><category term="RAM" /><category term="GNOME" /><category term="console" /><category term="sex" /><category term="listing" /><category term="checker" /><category term="delete" /><category term="CDE" /><category term="CIM" /><category term="Urwid" /><category term="crime" /><category term="browser" /><category term="blanket" /><category term="CrossOver" /><category term="wave" /><category term="sexy" /><category term="operating system" /><category term="crash" /><category term="musical" /><category term="rainy" /><category term="dock" /><category term="random" /><category term="experience" /><category term="The Elder Scrolls" /><category term="YouTube" /><category term="rocket" /><category term="API" /><category term="Blavatar" /><category term="proof" /><category term="rotation" /><category term="season" /><category term="ALSA" /><category term="RegExp" /><category term="Mononono" /><category term="Fusion" /><category term="radar chart" /><category term="upload" /><category term="runtime" /><category term="history" /><category term="referrer" /><category term="search" /><category term="ClientLogin" /><category term="OpenDNS" /><category term="boolean" /><category term="performance test" /><category term="Viva Peace" /><category term="dtpanel" /><category term="development" /><category term="robot" /><category term="hosting" /><category term="updates" /><category term="RPM" /><category term="thousands separator" /><category term="cute" /><category term="webserver" /><category term="rickrolling" /><category term="Mecurial" /><category term="player" /><category term="spam" /><category term="video" /><category term="LanguageTool" /><category term="NXDOMAIN" /><category term="tab" /><category term="Russian Roulette" /><category term="template.sh" /><category term="Vimperator" /><category term="Gnash" /><category term="jknav" /><category term="theme" /><category term="The One-Minute Writer" /><category term="cougar" /><category term="TUI" /><category term="luck" /><category term="janitor" /><category term="Apple Tree and Tangerines" /><category term="OpenSolaris" /><category term="Battlestar Galatica" /><category term="OpenPGP" /><category term="Django" /><category term="insurance" /><category term="window control" /><category term="old man" /><category term="udev" /><category term="window manager" /><category term="OldBlogTuxWearsFedora" /><category term="Star Trek" /><category term="label" /><category term="Cheese" /><category term="locale" /><category term="Thanksgiving" /><category term="music video" /><category term="event" /><category term="tag" /><category term="gadget" /><category term="capability" /><category term="command" /><category term="Supergirl" /><category term="Disqus" /><category term="stopwatch" /><category term="Google Search" /><category term="vte" /><category term="licensing" /><category term="Law and Order: UK" /><category term="Python 2.5" /><category term="call stack" /><category term="menu" /><category term="comments" /><category term="funeral" /><category term="sticky" /><category term="OldBlogGetCtrlBack" /><category term="speed" /><category term="Pink" /><category term="Google Webmaster Tools" /><category term="Tinycon" /><category term="fadeout" /><category term="highlight" /><category term="blocklist" /><category term="migration" /><category term="mouse event" /><category term="file system" /><category term="concentration" /><category term="Synpatics" /><category term="ticker" /><category term="I Love Lunch" /><category term="odt2txt" /><category term="Linux" /><category term="swap" /><category term="woods" /><category term="gender" /><category term="Ubuntu" /><category term="timeout" /><category term="Allrecipes" /><category term="dropping ball" /><category term="Enoch Linux" /><category term="HTTPS" /><category term="libv4l" /><category term="Gaussian" /><category term="light" /><category term="Clive Owen" /><category term="comic" /><category term="word" /><category term="xterm" /><category term="content thief" /><category term="fading" /><category term="stupidity" /><category term="Bon Jovi" /><category term="DOM" /><category term="RSS" /><category term="favorite" /><category term="treemap" /><category term="screenFetch" /><category term="PC" /><category term="macro" /><category term="Googlebot" /><category term="Last.fm" /><category term="normal random variable" /><category term="future" /><category term="Incognito" /><category term="walking" /><category term="International Day of Peace" /><category term="screen name" /><category term="64-bit" /><category term="mushroom" /><category term="pingpong mechanism" /><category term="soybean" /><category term="efficient" /><category term="Gmail" /><category term="copying" /><category term="pill" /><category term="The Line" /><category term="Eurovision" /><category term="geek" /><category term="gratitude" /><category term="sendmail" /><category term="retweet" /><category term="View" /><category term="root privilege" /><category term="bottombar" /><category term="KMS" /><category term="coding" /><category term="dependency" /><category term="selector" /><category term="fun" /><category term="youtube-dl" /><category term="screenshot" /><category term="Special Effects" /><category term="24" /><category term="jquery-lifestream" /><category term="screencast" /><category term="sandbox" /><category term="pricing" /><category term="rules" /><category term="Twitterank" /><category term="cross-site" /><category term="cache" /><category term="FileReader" /><category term="nipple" /><category term="no-multilib" /><category term="return value" /><category term="graph" /><category term="PyXSS" /><category term="German show" /><category term="libav" /><category term="random thought" /><category term="GTK" /><category term="lucky" /><category term="cheating" /><category term="wchar_t" /><category term="physics engine" /><category term="nomodeset" /><category term="Flogging Molly" /><category term="qt4" /><category term="graphing" /><category term="setting" /><category term="Blogger.com" /><category term="Turkish" /><category term="eyes" /><category term="geoip" /><category term="CLI" /><category term="feline" /><category term="vidir" /><category term="spoon" /><category term="birthday" /><category term="tutorial" /><category term="streaming" /><category term="Jack Nicholson" /><category term="falling snow" /><category term="pipeline" /><category term="standout" /><category term="book" /><category term="caption" /><category term="viewer" /><category term="color blindness" /><category term="falling" /><category term="Sun" /><category term="criticism" /><category term="peach" /><category term="Google Talk" /><category term="food" /><category term="X Server" /><category term="OpenOffice.org" /><category term="joke" /><category term="less" /><category term="profile" /><category term="Pin Tab" /><category term="X Window" /><category term="Google Groups" /><category term="Jamendo" /><category term="April Fools' Day" /><category term="power management" /><category term="time duration" /><category term="Ted Williams" /><category term="combine" /><category term="Quartet San Francisco" /><category term="cold food" /><category term="upgrade" /><category term="make" /><category term="The Bucket List" /><category term="Speech Dispatcher" /><category term="extension" /><category term="mystery" /><category term="morning" /><category term="probability" /><category term="LabelCloud" /><category term="kitten" /><category term="Blogger API" /><category term="Fedora 12" /><category term="Desktop Effects" /><category term="tiling window manager" /><category term="effect" /><category term="Winter" /><category term="property" /><category term="FOSS" /><category term="Blogger Stats" /><category term="Bzip2" /><category term="Crafty Girls" /><category term="heart" /><category term="Chinese New Year" /><category term="Widelands" /><category term="preview" /><category term="Nicolas Cage" /><category term="Windows Phone 7" /><category term="rain" /><category term="Unicode" /><category term="man-in-the-middle" /><category term="command-line" /><category term="wheel" /><category term="design" /><category term="lightweight" /><category term="REE" /><category term="Bash" /><category term="builtin" /><category term="equation" /><category term="stupid" /><category term="cooking" /><category term="source-based" /><category term="Dead Hearts" /><category term="cal" /><category term="WordPress.com" /><category term="messaging" /><category term="search engine" /><category term="FriendFeed" /><category term="StarCraft II" /><category term="hacking" /><category term="jQuery UI" /><category term="Sobaudon" /><category term="logo" /><category term="sponge" /><category term="spy" /><category term="typography" /><category term="sound" /><category term="plugin" /><category term="charity" /><category term="relative import" /><category term="bread" /><category term="LiveJournal" /><category term="computer" /><category term="concept" /><category term="Chrome Frame" /><category term="head" /><category term="maple leaf" /><category term="follower" /><category term="focus" /><category term="Live Like a Cat Day" /><category term="Motif" /><category term="Picasa Web Albums" /><category term="XIne" /><category term="counting" /><category term="Alyssa Suede" /><category term="fake referrer" /><category term="multiplexer" /><category term="optparse" /><category term="Annotated Time Line" /><category term="bullet points" /><category term="deletion" /><category term="Google News" /><category term="alien" /><category term="pond" /><category term="lactarian" /><category term="Internet radio" /><category term="Google Dictionary" /><category term="BRPS" /><category term="click" /><category term="IA32_EMULATION" /><category term="DoD" /><category term="booting" /><category term="CSS3" /><category term="Moonlight" /><category term="Taiwan" /><category term="screen recording" /><category term="3-column" /><category term="Google New" /><category term="film" /><category term="health" /><category term="macaroni" /><category term="CMU Sphinx" /><category term="calendar" /><category term="libnotify" /><category term="pitfall" /><category term="encoding" /><category term="Chuck" /><category term="Brobdingnagian Bards" /><category term="backlight" /><category term="Google Docs" /><category term="selfish" /><category term="burning" /><category term="cups" /><category term="Katy Perry" /><category term="chronic" /><category term="encryption" /><category term="cascading profile" /><category term="six" /><category term="sudoers" /><category term="stdin" /><category term="Universal Feed Parser" /><category term="dynamic content" /><category term="flip clock" /><category term="KeepNote" /><category term="On This Day" /><category term="performance" /><category term="pronoun" /><category term="blackout" /><category term="NetworkManager" /><category term="limit" /><category term="reverse" /><category term="utility" /><category term="generator" /><category term="xplanet" /><category term="offset" /><category term="jQuery" /><category term="Google Reader" /><category term="userChrome.css" /><category term="human readable" /><category term="camera" /><category term="footnote" /><category term="parameters" /><category term="moderation" /><category term="about:blank" /><category term="Ksplice" /><category term="playcount" /><category term="focus thief" /><category term="TSCC" /><category term="style" /><category term="CAPS" /><category term="dzen" /><category term="vbetool" /><category term="software" /><category term="Internationalization" /><category term="editing" /><category term="X-UA-Compatible" /><category term="cat" /><category term="chess" /><category term="recognization" /><category term="exclusion" /><category term="headache" /><category term="Justin.tv" /><category term="auto-reload" /><category term="distro" /><category term="grub" /><category term="43 Things" /><category term="Didi Benami" /><category term="New Year" /><category term="gun" /><category term="night" /><category term="map" /><category term="CFS" /><category term="benchmark" /><category term="clockywock" /><category term="Fortran 77" /><category term="forum" /><category term="help" /><category term="inputrc" /><category term="My Favorite Thing" /><category term="download" /><category term="Geeqie" /><category term="Flash Player" /><category term="GLSA" /><category term="October Sky" /><category term="OpenSUSE" /><category term="monitor" /><category term="Billy Connolly" /><category term="background" /><category term="Taylor Swift" /><category term="grocery" /><category term="timestamp" /><category term="file" /><category term="humanize" /><category term="addon" /><category term="Yahoo" /><category term="man" /><category term="sharing" /><category term="FlickrFS" /><category term="old" /><category term="ReactOS" /><category term="process" /><category term="arithmetic expansion" /><category term="Epiphany" /><category term="acoustic" /><category term="TNT" /><category term="Linus Torvalds" /><category term="geographic location" /><category term="instant messaging" /><category term="chart" /><category term="Google App Engine" /><category term="X" /><category term="BBC America" /><category term="life" /><category term="face" /><category term="Luxuslärm" /><category term="Friday" /><category term="cachebuster" /><category term="word processor" /><category term="flame" /><category term="FFT" /><category term="smiley" /><category term="FIGlet" /><category term="model" /><category term="failure" /><category term="spped" /><category term="binding" /><category term="tv show" /><category term="page navigation" /><category term="Google AdSense" /><category term="XOAuth" /><category term="flower" /><category term="Masterbranch" /><category term="world clock" /><category term="RPMFusion" /><category term="audio" /><category term="module" /><category term="git" /><category term="Halloween" /><category term="Bible" /><category term="gdata" /><category term="jQuery TextFill" /><category term="PyDNS" /><category term="wish" /><category term="Bashrun" /><category term="tiv" /><category term="gradient" /><category term="OCR" /><category term="QT3" /><category term="querying" /><category term="encrypted post" /><category term="js-jquery-jknav" /><category term="StackOverflow" /><category term="system" /><category term="Wakoopa" /><category term="PDF" /><category term="Google Code" /><category term="Xorg" /><category term="God" /><category term="The International" /><category term="Pipes" /><category term="example" /><category term="store" /><category term="GNU gcal" /><category term="Bad Romance" /><category term="Jason Bourne" /><category term="beta" /><category term="greeting" /><category term="report" /><category term="national flag" /><category term="unwrapper" /><category term="terms" /><category term="modeset" /><category term="OOP" /><category term="clip" /><category term="network" /><category term="Wordle" /><category term="project" /><category term="escape code" /><category term="tree" /><category term="account" /><category term="Cylon" /><category term="comment" /><category term="nss" /><category term="eval" /><category term="Dead key" /><category term="Google Code Hosting" /><category term="URI" /><category term="GNU" /><category term="twmn" /><category term="length" /><category term="AIDS" /><category term="GUI" /><category term="lilbtn" /><category term="Google Profile" /><category term="Weave" /><category term="bell pepper" /><category term="Your Love Is My Drug" /><category term="garlic" /><category term="glsa-check" /><category term="Skribit" /><category term="bc" /><category term="infinity" /><category term="Google Gears" /><category term="Facebook" /><category term="Friday the 13th" /><category term="feeling" /><category term="TroopTube" /><category term="puma" /><category term="potato" /><category term="Office" /><category term="number" /><category term="Flot" /><category term="tip" /><category term="LZMA" /><category term="coercion" /><category term="Bing" /><category term="mwm" /><category term="copyright" /><category term="Mogan Freeman" /><category term="clis" /><category term="carrot" /><category term="eggless" /><category term="Deadliest Catch" /><category term="kernel" /><category term="Google Pages" /><category term="chance" /><category term="weird" /><category term="intra-package import" /><category term="Taipei" /><category term="numbers" /><category term="Linux kernel" /><category term="human" /><category term="Markup Language" /><category term="Vulcan" /><category term="ampersand" /><category term="comedy" /><category term="IE9" /><category term="audio processing" /><category term="branch" /><category term="Google Visualization API" /><category term="Sweet Jesus" /><category term="evening" /><category term="poker" /><category term="gnome-keyring" /><category term="date" /><category term="Inconsolata" /><category term="Form" /><category term="typhoon" /><category term="validation" /><category term="nuclear" /><category term="Security Policies" /><category term="cursor" /><category term="DSL" /><category term="KDE4" /><category term="keyboard" /><category term="Wgasa" /><category term="idle" /><category term="WINE" /><category term="link" /><category term="recordMyDesktop" /><category term="Jesus" /><category term="file IO" /><category term="language code" /><category term="stove" /><category term="promise" /><category term="SHM" /><category term="ice cream" /><category term="wrapper" /><category term="verification" /><category term="breakfast" /><category term="gameplay" /><category term="Screen" /><category term="badge" /><category term="datastore" /><category term="Watchmen" /><category term="Adobe AIR" /><category term="W3C Validator" /><category term="game" /><category term="printf" /><category term="reStructuredText" /><category term="Matt Damon" /><category term="Food Porn" /><category term="movie" /><category term="list.js" /><category term="Say" /><category term="Lisa Hannigan" /><category term="g-yt-embed" /><category term="hand" /><category term="escape" /><category term="dawn" /><category term="IE8" /><category term="color" /><category term="base" /><category term="Damien Rice" /><category term="bastet" /><category term="Barack Obama" /><category term="capture" /><category term="Summer" /><category term="Atom" /><category term="wiki" /><category term="Lobster Wars" /><category term="box" /><category term="lacto vegetarian" /><category term="salad" /><category term="mock" /><category term="collection" /><category term="cover art" /><category term="web terminology" /><category term="Debra" /><category term="Labels" /><category term="keyframes" /><category term="relativeness" /><category term="Christina Stürmer" /><category term="Polydactyly" /><category term="I Wanna Dance With Somebody" /><category term="NDT" /><category term="Spring" /><category term="inconsistent" /><category term="Ian Murdock" /><category term="Marshall University" /><category term="Clip Smile" /><category term="cabin" /><category term="cairo-dock" /><category term="science" /><category term="Woopra" /><category term="log.sh" /><category term="security exception" /><category term="guide" /><category term="arithmetic evaluation" /><category term="nVidia" /><category term="counter" /><category term="Catoween" /><category term="cop" /><category term="IMAP" /><category term="Chrome Extension" /><category term="rename" /><category term="Fox" /><category term="Hawaii Five-0" /><category term="Graphviz" /><category term="Shell.FM" /><category term="developer tools" /><category term="transliteration" /><category term="conflict" /><category term="EncFS" /><category term="terminal" /><category term="Percent-encoding" /><category term="system monitoring" /><category term="US" /><category term="series" /><category term="hill" /><category term="singer" /><category term="loading time" /><category term="data" /><category term="fiction" /><category term="LaTeX" /><category term="password" /><category term="Naomi Watts" /><category term="profiling" /><category term="thief" /><category term="Square" /><category term="logging" /><category term="sox" /><category term="dinner" /><category term="blip" /><category term="Fast Flip" /><category term="UI" /><category term="new" /><category term="mencoder" /><category term="privacy" /><category term="Apple" /><category term="cookie" /><category term="Django template" /><category term="escaping" /><category term="caffeine" /><category term="action" /><category term="grandparents" /><category term="plaintext" /><category term="dragon" /><category term="Solaris" /><category term="JDIC" /><category term="XChat" /><category term="romance" /><category term="IPv6" /><category term="livibetter.mp" /><category term="visualization" /><category term="attack" /><category term="RFC" /><category term="Google Spreadsheet" /><category term="type" /><category term="MSN" /><category term="Terrified" /><category term="waste" /><category term="traceback" /><category term="charger" /><category term="volume" /><category term="gnuclad" /><category term="sci-fi" /><category term="Lille" /><category term="bleeding" /><category term="nap" /><category term="Compose key" /><category term="Anaconda" /><category term="UK" /><category term="Dash" /><category term="Access-Control-Allow-Origin" /><category term="Public Domain" /><category term="fire" /><category term="Fedora Classroom" /><category term="cURL" /><category term="URxvt" /><category term="stair" /><category term="MPD" /><category term="No Ordinary Family" /><category term="direction" /><category term="statistics" /><category term="notification" /><category term="blogging" /><category term="circo" /><category term="SOPA" /><category term="Knowing" /><category term="svn" /><category term=".NET" /><category term="koala" /><category term="LOL" /><category term="LibreOffice" /><category term="Moskau" /><category term="super power" /><category term="Visual Effect" /><category term="flexibility" /><category term="interestingness" /><category term="template" /><category term="band" /><category term="snowman" /><category term="Gsource" /><category term="Steve Jobs" /><category term="ctypes" /><category term="locate" /><category term="word cloud" /><category term="Blackberry" /><category term="response" /><category term="animation" /><category term="lookup" /><category term="mom" /><category term="Friend Connect" /><category term="BFS" /><category term="FeedBurner" /><category term="Covert Affairs" /><category term="driver" /><category term="navigation" /><category term="IE6" /><category term="XZ" /><category term="wallpaper" /><category term="Debian" /><category term="note" /><category term="cook" /><category term="program" /><category term="size" /><category term="Crafty" /><category term="SimpleHTTPServer" /><category term="webfont" /><category term="sudo" /><category term="moreutils" /><category term="TES" /><category term="datatype" /><category term="songwriter" /><category term="Arch Hurd" /><category term="classic" /><category term="parseInt" /><category term="pymunk" /><category term="related posts" /><category term="xinput" /><category term="twopi" /><category term="Yum" /><category term="detective" /><category term="instant noodles" /><category term="alignment" /><category term="art" /><category term="Fox In Socks" /><category term="display manager" /><category term="quotation marks" /><category term="library" /><category term="widescreen" /><category term="four" /><category term="smile" /><category term="The Beast" /><category term="The X Files" /><category term="laundry" /><category term="teacher" /><category term="X.Org" /><category term="Lua" /><category term="Mono" /><category term="cron" /><category term="OldBlogTheBThing" /><category term="backup" /><category term="Adobe" /><category term="simulation" /><category term="big cat" /><category term="multiprocessing" /><category term="bad" /><category term="IO" /><category term="local" /><category term="wprintf" /><category term="webcam" /><category term="XML" /><category term="language" /><category term="regular expression" /><category term="fetching" /><category term="gaming" /><category term="adult" /><category term="devil" /><category term="interpreter" /><category term="subscription" /><category term="Google Analytics" /><category term="VCS" /><category term="speech" /><category term="xlock" /><category term="100" /><category term="tarball" /><category term="Stargate" /><category term="progress bar" /><category term="skeleton" /><category term="recursion" /><category term="Gzip" /><category term="blit" /><category term="visits" /><category term="Selah" /><category term="Twitter" /><category term="center" /><category term="BashPad" /><category term="signature" /><category term="Chase" /><category term="primitive value" /><category term="PNG" /><category term="change" /><category term="launcher" /><category term="Chi.mp" /><category term="fried rice" /><category term="espionage" /><category term="Blooger" /><category term="localStorage" /><category term="social networking" /><category term="dwm" /><category term="Daniel Robbins" /><category term="Food Court Musical" /><category term="class" /><category term="simplejson" /><category term="happiness" /><category term="SMPlayer" /><category term="linuxwacom" /><category term="nudity" /><category term="recommendation" /><category term="idea" /><category term="watermelon" /><category term="snippet" /><category term="feed" /><category term="Internet" /><category term="util" /><category term="Fluxbox" /><category term="HAL" /><category term="tool" /><category term="maze" /><category term="webdesign" /><category term="sketch" /><category term="GNU/Screen" /><category term="microwave" /><category term="personalized results" /><category term="Blogspot" /><category term="Java" /><category term="bacon" /><category term="time" /><category term="broadcast" /><category term="manpage" /><category term="j.mp" /><category term="tab control" /><category term="call" /><category term="MODEM" /><category term="microphone" /><category term="traffic" /><category term="Google Docs Viewer" /><category term="tomorrow" /><category term="Google Buzz" /><category term="bzen2" /><category term="F1" /><category term="rst" /><category term="x11grabr" /><category term="package" /><category term="live" /><category term="movie-game" /><category term="shopping" /><category term="hash" /><category term="jQuery plugin" /><category term="Mozilla Firefox" /><category term="Hey Jude" /><category term="fullscreen" /><category term="resolution" /><category term="service" /><category term="bottle" /><category term="key function" /><category term="Skype" /><category term="John Mayer" /><category term="array" /><category term="indication" /><category term="homepage" /><category term="writing practice" /><category term="lsof" /><category term="PostRank" /><category term="configuration" /><category term="eix-sync" /><category term="dynamic loading" /><category term="xsnap" /><category term="Terminator" /><category term="indentation" /><category term="mother" /><category term="transform" /><category term="emoticon" /><category term="len" /><category term="authentication" /><category term="Completely Fair Scheduler" /><category term="crush" /><category term="Kara Dioguardi" /><category term="ON AIR" /><category term="violence" /><category term="baked" /><category term="Ishihara color test" /><category term="memory" /><category term="search box" /><category term="chroot" /><category term="letter" /><category term="German music" /><category term="cold" /><category term="Synaptics" /><category term="belief" /><category term="persimmon" /><category term="Super Simple" /><category term="Gentoo Portage" /><category term="memcache bug" /><category term="Hg" /><category term="leap second" /><category term="Boost" /><category term="love" /><category term="NiMH" /><category term="server down" /><category term="Fantastic Four" /><category term="OAuth" /><category term="client" /><category term="ACPI" /><category term="import" /><category term="song" /><category term="signal" /><category term="Basic Auth" /><category term="Dschinghis Khan" /><category term="Chromium" /><category term="Busted" /><category term="green" /><category term="results" /><category term="shell" /><category term="kat" /><category term="pastebinit" /><category term="cross-origin" /><category term="x86_64" /><category term="JSON" /><category term="The Company" /><category term="IM" /><category term="math" /><category term="QT" /><category term="Live Webmaster Tools" /><category term="binclock" /><category term="radio" /><category term="spamming" /><category term="drawing" /><category term="PEP 328" /><category term="lmgtfy.com" /><category term="login" /><category term="OpenDocument" /><category term="SSMTP" /><category term="Phil" /><category term="reverse video" /><category term="MP3" /><category term="version" /><category term="Autumn" /><category term="donation" /><category term="issue" /><category term="i8042" /><category term="bubble" /><category term="Breaking Bad" /><category term="SXSW" /><category term="status code" /><category term="skin" /><category term="task" /><category term="vegetarian" /><category term="server" /><category term="advertisment" /><category term="Jason Reeves" /><category term="md5" /><category term="onion rings" /><category term="SunOS" /><category term="beer" /><category term="SQL" /><category term="stereomood" /><category term="lottery" /><category term="ads" /><category term="Alkaline" /><category term="3am" /><category term="type conversion" /><category term="reverse lens" /><category term="settings" /><category term="syntax" /><category term="xcompmgr" /><category term="microblogging" /><category term="binary" /><category term="pppoe" /><category term="dtwm" /><category term="Google Chart API" /><category term="travel" /><category term="popup" /><category term="egg" /><category term="desktop environment" /><category term="Compiz Fusion" /><category term="scrabble" /><category term="pillow" /><category term="webdev" /><category term="twitter_client" /><category term="roe" /><category term="humor" /><category term="Peace In Our Lifetime" /><category term="The Beatles" /><category term="interactive" /><category term="XSLT" /><category term="slow" /><category term="kitteh" /><category term="dream" /><category term="FreeBSD" /><category term="cloud" /><category term="Chrome Web Store" /><category term="Brain Fuck Scheduler" /><category term="follow" /><category term="pen pal" /><category term="Bill Gates" /><category term="MaxMind" /><category term="Japan" /><category term="certificate" /><category term="url" /><category term="Scrabb.ly" /><category term="command-line options" /><category term="width" /><category term="asynchronous" /><category term="pastebin" /><category term="Pandora" /><category term="Blip.fm" /><category term="mpc" /><category term="converter" /><category term="rm" /><category term="tablet" /><category term="mirror" /><category term="Ubuntu 9.10" /><category term="cdrecord" /><category term="USA" /><category term="compression" /><category term="SMTP" /><category term="desire" /><category term="Mozilla" /><category term="comparison" /><category term="telnet" /><category term="Kesha" /><category term="SoftMaker" /><category term="Matt Daemon" /><category term="tweak" /><category term="Wacom" /><category term="port" /><category term="In Bruges" /><category term="LabelX" /><category term="authorization" /><category term="database" /><category term="key binding" /><category term="Windows 7" /><category term="docutils" /><category term="meme" /><category term="French Fries" /><category term="name" /><category term="communication" /><category term="Jimmy's Food Factory" /><category term="blog" /><category term="Fedora 11" /><category term="pagination" /><category term="Fedora 10" /><category term="3D" /><category term="xlockmore" /><category term="icon" /><category term="religion" /><category term="Envy Code" /><category term="file conversion" /><category term="IE" /><category term="constellation" /><title>YJL --verbose</title><subtitle type="html">Outputs directly from me &amp;lt;del&amp;gt;about almost everything&amp;lt;/del&amp;gt;...</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://blog.yjl.im/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://blog.yjl.im/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/3803541356848955053/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Yu-Jie Lin</name><uri>https://profiles.google.com/115422682039760465813</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-e-i3n52TFPI/AAAAAAAAAAI/AAAAAAAAAAA/N3NefrEGlxM/s512-c/photo.jpg" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>779</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/YJLv" /><feedburner:info uri="yjlv" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;CU4BQ3Y8fyp7ImA9WhVTEkw.&quot;"><id>tag:blogger.com,1999:blog-3803541356848955053.post-645868936785500215</id><published>2012-02-25T15:48:00.000-08:00</published><updated>2012-02-25T15:52:32.877-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-25T15:52:32.877-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Blogger" /><category scheme="http://www.blogger.com/atom/ns#" term="Google Analytics" /><category scheme="http://www.blogger.com/atom/ns#" term="ads" /><category scheme="http://www.blogger.com/atom/ns#" term="View" /><category scheme="http://www.blogger.com/atom/ns#" term="tracking" /><category scheme="http://www.blogger.com/atom/ns#" term="Google AdSense" /><title>Using Blogger builtin Google Analytics support</title><content type="html">I was wandering around the settings section and found out I can not only turn off sharing on Google+ but also have Google Analytics support from Blogger. I recall I had read it long time ago on &lt;a href="http://buzz.blogger.com/2011/10/google-analytics-support-in-blogger.html"&gt;Blogger Buzz&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
I want it because the pageviews from &lt;a href="http://blog.yjl.im/view/"&gt;View&lt;/a&gt; will be also tracked. I can not touch the code of View, so this option is very helpful if I want to have complete tracking statistics. I have put View link on top of navigation bar for really long time and I probably lost some data.&lt;br /&gt;
&lt;br /&gt;
I wrote my own Layout template, so it won't work by default in my own layout. It is actually very simple to have it, add the following line before &lt;code&gt;&amp;lt;/body&amp;gt;&lt;/code&gt;, e.g.&lt;br /&gt;
&lt;pre&gt;&lt;code&gt;  &amp;lt;b:include data='blog' name='google-analytics'/&amp;gt;
&amp;lt;/body&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
I also &lt;a href="http://code.google.com/p/yjl/source/detail?r=cd6665eec52b5ffb5a74131c8b447b30baac9e25"&gt;removed the tracking code&lt;/a&gt; from my main JavaScript script, so I wouldn't have duplicate data.&lt;br /&gt;
&lt;br /&gt;
This is probably the second of third time I use View mode on Blogger, not only on my blog but entire Blogger blogs. I don't really like View, it looks good and nice, but I am just not a fan of it.&lt;br /&gt;
&lt;br /&gt;
Maybe because it create unique style over different blogs. I like variety, diversity of styles or layouts or designs. Pretty or ugly, doesn't matter. The important thing is the style of the blog's owner. With View, it doesn't reveal of that much.&lt;br /&gt;
&lt;br /&gt;
Since I hardly check the View of my blog. I just realize there are two ads units. One at right side, the other at bottom. I roughly check with FireBug Net tab, I think they are belong to me, my Google AdSense Publisher ID, I believe. (It's long ID, but looks like mine)&lt;br /&gt;
&lt;br /&gt;
As you may know, I put two ad units in my template, so I don't object for the such convenience. Just I don't see any setting options I can adjust size or location for my View. So it probably also a unique setting all over the views, I guess.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3803541356848955053-645868936785500215?l=blog.yjl.im' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/P_LjYjcyX8ghvCky8A0pBq3kC9M/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/P_LjYjcyX8ghvCky8A0pBq3kC9M/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/P_LjYjcyX8ghvCky8A0pBq3kC9M/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/P_LjYjcyX8ghvCky8A0pBq3kC9M/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/YJLv?a=vfzYxuWJuTQ:DqtavITqBu8:AOzAX-4I-Ts"&gt;&lt;img src="http://feeds.feedburner.com/~ff/YJLv?i=vfzYxuWJuTQ:DqtavITqBu8:AOzAX-4I-Ts" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/YJLv/~4/vfzYxuWJuTQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.yjl.im/feeds/645868936785500215/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.yjl.im/2012/02/using-blogger-builtin-google-analytics.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3803541356848955053/posts/default/645868936785500215?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3803541356848955053/posts/default/645868936785500215?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/YJLv/~3/vfzYxuWJuTQ/using-blogger-builtin-google-analytics.html" title="Using Blogger builtin Google Analytics support" /><author><name>Yu-Jie Lin</name><uri>https://profiles.google.com/115422682039760465813</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-e-i3n52TFPI/AAAAAAAAAAI/AAAAAAAAAAA/N3NefrEGlxM/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.yjl.im/2012/02/using-blogger-builtin-google-analytics.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0IDQn48fyp7ImA9WhVTEkw.&quot;"><id>tag:blogger.com,1999:blog-3803541356848955053.post-7261882876303621166</id><published>2012-02-25T14:35:00.000-08:00</published><updated>2012-02-25T15:12:53.077-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-25T15:12:53.077-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="statistics" /><category scheme="http://www.blogger.com/atom/ns#" term="Blogger" /><category scheme="http://www.blogger.com/atom/ns#" term="Google Analytics" /><category scheme="http://www.blogger.com/atom/ns#" term="preview" /><title>Blogger new post preview with Google Analytics?</title><content type="html">&lt;i&gt;Updated at 2012-02-25T23:08:40Z: This has nothing to do with Blogger. It seems Google Analytics' tracking script will detect if you hold the account. If you do, then it shows you the interface. Here is a screenshot when I view the homepage of my blog:&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;br /&gt;
&lt;/i&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-JceSM40NPgQ/T0lqk2pcpQI/AAAAAAAADA8/i-jHX0P-BIY/s1600/2012-02-26--07:10:38.png" imageanchor="1"&gt;&lt;img border="0" class="no-autoresize" height="640" src="http://2.bp.blogspot.com/-JceSM40NPgQ/T0lqk2pcpQI/AAAAAAAADA8/i-jHX0P-BIY/s640/2012-02-26--07:10:38.png" width="572" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;hr /&gt;
&lt;br /&gt;
When I was writing my previous post, I saw this after I hit preview button:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-ihQ58co3-SA/T0lgFTS_SAI/AAAAAAAADA0/0rz0m05YVfg/s1600/2012-02-26--06:23:06.png" imageanchor="1"&gt;&lt;img border="0" height="392" src="http://4.bp.blogspot.com/-ihQ58co3-SA/T0lgFTS_SAI/AAAAAAAADA0/0rz0m05YVfg/s640/2012-02-26--06:23:06.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;
We found no clickthroughs for this page. Try adjusting the date range or select another page.&lt;/blockquote&gt;
&lt;br /&gt;
You got it perfectly right, Google Analytics! Because it's totally new post, how could you find click? If you do, either your are a fortune teller or something gone haywire.&lt;br /&gt;
&lt;br /&gt;
But I don't mind this show up when I edit my old posts. It would be nice to know some statistics. Only it takes a few seconds to load the Google Analytics frame every time you hit preview button.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3803541356848955053-7261882876303621166?l=blog.yjl.im' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/PMz09J6U-tLMwBz72b6mciwMLPI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/PMz09J6U-tLMwBz72b6mciwMLPI/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/PMz09J6U-tLMwBz72b6mciwMLPI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/PMz09J6U-tLMwBz72b6mciwMLPI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/YJLv?a=ICJWQhGBbjo:lg3qh-_qux0:AOzAX-4I-Ts"&gt;&lt;img src="http://feeds.feedburner.com/~ff/YJLv?i=ICJWQhGBbjo:lg3qh-_qux0:AOzAX-4I-Ts" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/YJLv/~4/ICJWQhGBbjo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.yjl.im/feeds/7261882876303621166/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.yjl.im/2012/02/blogger-new-post-preview-with-google.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3803541356848955053/posts/default/7261882876303621166?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3803541356848955053/posts/default/7261882876303621166?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/YJLv/~3/ICJWQhGBbjo/blogger-new-post-preview-with-google.html" title="Blogger new post preview with Google Analytics?" /><author><name>Yu-Jie Lin</name><uri>https://profiles.google.com/115422682039760465813</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-e-i3n52TFPI/AAAAAAAAAAI/AAAAAAAAAAA/N3NefrEGlxM/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-JceSM40NPgQ/T0lqk2pcpQI/AAAAAAAADA8/i-jHX0P-BIY/s72-c/2012-02-26--07:10:38.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.yjl.im/2012/02/blogger-new-post-preview-with-google.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkENRX09eip7ImA9WhVTEk0.&quot;"><id>tag:blogger.com,1999:blog-3803541356848955053.post-3146843495938694672</id><published>2012-02-25T14:24:00.000-08:00</published><updated>2012-02-25T14:24:54.362-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-25T14:24:54.362-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="geoip" /><category scheme="http://www.blogger.com/atom/ns#" term="Google App Engine" /><category scheme="http://www.blogger.com/atom/ns#" term="MaxMind" /><category scheme="http://www.blogger.com/atom/ns#" term="IPv6" /><category scheme="http://www.blogger.com/atom/ns#" term="Python" /><category scheme="http://www.blogger.com/atom/ns#" term="access log" /><category scheme="http://www.blogger.com/atom/ns#" term="GeoLite City" /><category scheme="http://www.blogger.com/atom/ns#" term="geographic location" /><title>Download GAE access log and check geographic location of IPs using MaxMind geoip-python</title><content type="html">&lt;p&gt;I need to find an IP whose geographic location is already known from other source. Normally, it&amp;#8217;s the other way around, but this situation is different. I will explain in later post.&lt;/p&gt;
&lt;p&gt;First, downloading the access log from GAE. It is simple, this is the command I ran:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
python google_appengine/appcfg.py --num_days=3 request_logs project/ access.txt
&lt;/pre&gt;
&lt;p&gt;&lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;&amp;#45;-num_days&lt;/span&gt;&lt;/tt&gt; specified 3 days of logs, the default is the logs of current calendar date, according to the &lt;a class="reference external" href="http://code.google.com/appengine/docs/python/tools/uploadinganapp.html#Downloading_Logs"&gt;documentation&lt;/a&gt;, options of &lt;tt class="docutils literal"&gt;request_logs&lt;/tt&gt; can be found below in that page.&lt;/p&gt;
&lt;p&gt;Next is to find the geographic location by IP address. You need to install MaxMind Python binding with C core on your system. Here is the core snippet I use to generate results:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;import GeoIP

#gi = GeoIP.new(GeoIP.GEOIP_MEMORY_CACHE)
gi = GeoIP.open("/usr/share/GeoIP/GeoLiteCity.dat",GeoIP.GEOIP_STANDARD)
gi6 = GeoIP.open("GeoLiteCityv6.dat",GeoIP.GEOIP_STANDARD)

with open('ips.txt') as f:
  for IP in f:
    IP = IP.rstrip('\n')
    if ':' in IP:
      gir = gi6.record_by_addr_v6(IP)
    else:
      gir = gi.record_by_addr(IP)
    print '%s: %s, %s, %s' % (IP, gir['city'], gir['region_name'], gir['country_name'])&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;GAE accepts both IPv4 and IPv6 connection, so you may want to also to look up for IPv6 address, or you will need to filter out IPv6 addresses and drop them. You can download free city database for &lt;a class="reference external" href="http://www.maxmind.com/app/geolitecity"&gt;IPv6&lt;/a&gt;. Note that Python binding version may need to be 1.2.7 for IPv6, I know 1.2.4 does not support IPv6.&lt;/p&gt;
&lt;p&gt;Before you run this snippet, you need to process &lt;tt class="docutils literal"&gt;access.txt&lt;/tt&gt; to have unique IPs:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;cut -f 1 -d ' ' access.txt| sort | uniq &amp;gt; ips.txt&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;On Linux, it&amp;#8217;s simple as that, or you can process in Python, I think it&amp;#8217;s only need one line.&lt;/p&gt;
&lt;p&gt;So, I ran:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
script.py | grep '&amp;lt;CITY NAME&amp;gt;'
&lt;/pre&gt;
&lt;p&gt;I got no results, I am sure if the requests were made, it must lies within 3 days. Something is really fishy.&lt;/p&gt;
&lt;p&gt;Although I didn&amp;#8217;t find that IP, but I wrote this post.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3803541356848955053-3146843495938694672?l=blog.yjl.im' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/pBZNdUxrrP0h1dLFm11BH_0oCZE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/pBZNdUxrrP0h1dLFm11BH_0oCZE/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/pBZNdUxrrP0h1dLFm11BH_0oCZE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/pBZNdUxrrP0h1dLFm11BH_0oCZE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/YJLv?a=jGMp27VbqBc:kuVhs6dkT8g:AOzAX-4I-Ts"&gt;&lt;img src="http://feeds.feedburner.com/~ff/YJLv?i=jGMp27VbqBc:kuVhs6dkT8g:AOzAX-4I-Ts" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/YJLv/~4/jGMp27VbqBc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.yjl.im/feeds/3146843495938694672/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.yjl.im/2012/02/download-gae-access-log-and-check.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3803541356848955053/posts/default/3146843495938694672?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3803541356848955053/posts/default/3146843495938694672?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/YJLv/~3/jGMp27VbqBc/download-gae-access-log-and-check.html" title="Download GAE access log and check geographic location of IPs using MaxMind geoip-python" /><author><name>Yu-Jie Lin</name><uri>https://profiles.google.com/115422682039760465813</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-e-i3n52TFPI/AAAAAAAAAAI/AAAAAAAAAAA/N3NefrEGlxM/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.yjl.im/2012/02/download-gae-access-log-and-check.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUABQ3g6eCp7ImA9WhVTEU4.&quot;"><id>tag:blogger.com,1999:blog-3803541356848955053.post-2329908007808557385</id><published>2012-02-24T18:40:00.002-08:00</published><updated>2012-02-24T18:42:32.610-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-24T18:42:32.610-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Google+" /><category scheme="http://www.blogger.com/atom/ns#" term="thought" /><category scheme="http://www.blogger.com/atom/ns#" term="Google" /><category scheme="http://www.blogger.com/atom/ns#" term="Google Reader" /><category scheme="http://www.blogger.com/atom/ns#" term="Gmail" /><title>Sigh, it used to be Google Reader...</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-hB53s0BJiL8/T0hJcEbPf-I/AAAAAAAADAs/ffQOhRpNXuo/s1600/Inbox+-+livibetter%2540gmail.com+-+Gmail_1330137410895.png" imageanchor="1"&gt;&lt;img border="0" height="364" src="http://3.bp.blogspot.com/-hB53s0BJiL8/T0hJcEbPf-I/AAAAAAAADAs/ffQOhRpNXuo/s640/Inbox+-+livibetter%2540gmail.com+-+Gmail_1330137410895.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
This is how the future is, Google+ centralized. It used to be linked to Google Reader, if I recall correctly.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3803541356848955053-2329908007808557385?l=blog.yjl.im' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Z74J6ig69YWXoStgq9tUTi_Bi94/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Z74J6ig69YWXoStgq9tUTi_Bi94/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/Z74J6ig69YWXoStgq9tUTi_Bi94/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Z74J6ig69YWXoStgq9tUTi_Bi94/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/YJLv?a=58XiTU-i2Yk:YheeeoSbt1U:AOzAX-4I-Ts"&gt;&lt;img src="http://feeds.feedburner.com/~ff/YJLv?i=58XiTU-i2Yk:YheeeoSbt1U:AOzAX-4I-Ts" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/YJLv/~4/58XiTU-i2Yk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.yjl.im/feeds/2329908007808557385/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.yjl.im/2012/02/sigh-it-used-to-be-google-reader.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3803541356848955053/posts/default/2329908007808557385?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3803541356848955053/posts/default/2329908007808557385?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/YJLv/~3/58XiTU-i2Yk/sigh-it-used-to-be-google-reader.html" title="Sigh, it used to be Google Reader..." /><author><name>Yu-Jie Lin</name><uri>https://profiles.google.com/115422682039760465813</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-e-i3n52TFPI/AAAAAAAAAAI/AAAAAAAAAAA/N3NefrEGlxM/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-hB53s0BJiL8/T0hJcEbPf-I/AAAAAAAADAs/ffQOhRpNXuo/s72-c/Inbox+-+livibetter%2540gmail.com+-+Gmail_1330137410895.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.yjl.im/2012/02/sigh-it-used-to-be-google-reader.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEIARno_eyp7ImA9WhVTEU4.&quot;"><id>tag:blogger.com,1999:blog-3803541356848955053.post-2553727847729490876</id><published>2012-02-24T18:22:00.000-08:00</published><updated>2012-02-24T18:22:27.443-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-24T18:22:27.443-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="social networking" /><category scheme="http://www.blogger.com/atom/ns#" term="Google+" /><category scheme="http://www.blogger.com/atom/ns#" term="Facebook" /><category scheme="http://www.blogger.com/atom/ns#" term="thought" /><category scheme="http://www.blogger.com/atom/ns#" term="Twitter" /><title>Social networking obstacle</title><content type="html">Yesterday, I was watching a stream. The broadcaster received a Twitter following request via Facebook post (or something, not sure what that is called on Facebook). The screen showed the caster clicked on the link to the requester's Twitter page. The next ten or twenty seconds, the viewers watched the caster trying hard to find the &lt;i&gt;"Follow"&lt;/i&gt; button to follow which had been under cursor for most of time.&lt;br /&gt;
&lt;br /&gt;
As you could imagine, viewers were laughing so hard as I was, or ROFL or LMAO for short. Even I has &lt;a href="http://blog.yjl.im/2010/05/left-twitter.html"&gt;stopped using Twitter&lt;/a&gt; almost two years ago and the layout has been changed quite a lot, I still could spot that button right away.&lt;br /&gt;
&lt;br /&gt;
Recently, I found out a very interesting fact. Even someone in their sixties, they may be good at using Facebook but not be able to take care of their Windows operating system. They may be tapping like a pro on iPad, having some awesome apps installed by themselves. But never heard of or used RSS feed.&lt;br /&gt;
&lt;br /&gt;
People seem to get used to be in a certain circle or website. For example, the Facebook. They are so used to it and somehow can't have a concept that they can also follow/subscribe to same group of people on other websites. Everything has to be provided or accessed via Facebook. If something is mentioned by someone, some will ask for a link.&lt;br /&gt;
&lt;br /&gt;
Day after day, you will see same people ask for same thing again and again. They never learn to receive the new updates from other website which is the original source. It looks to me as if everything has to be on Facebook and only, or they would be completely unknown to those people.&lt;br /&gt;
&lt;br /&gt;
Do people really have problem using other website which they are not familiar with? Certainly not, just too lazy to click.&lt;br /&gt;
&lt;br /&gt;
I had used Facebook for some time and de/re/activated my account for two times at least. I just couldn't get the idea of Facebook. It's not social, in fact, not really any of social networking websites is real socializing, they are social networking, but not social.&lt;br /&gt;
&lt;br /&gt;
Well, maybe they are not for general purpose, but for people to &lt;i&gt;hook up&lt;/i&gt; someone for sexual purpose in my feeling. Nevertheless, it's still possible you can use it to find your high school classmate or long lost friends.&lt;br /&gt;
&lt;br /&gt;
I also tried a few times on Google+, but never got into it, not even tried to add someone to the circles. The more I used these websites, the more I feel it's the sea of messages or posts or updates or whatever you call it.&lt;br /&gt;
&lt;br /&gt;
We are buried in those messages. For me, I am afraid that I may be missing something important, something has real value. Not just that kind of chit-chat or j/k or LOL messages. It's not like I dislike those, life without those will be boring, but I don't want those to mess up with real message, either.&lt;br /&gt;
&lt;br /&gt;
On Google+, you have a slider to filter the amount of messages. I know I definitely wouldn't want to try that because the chance of missing a message. I guess you can make sure someone's message will always be shown, but you never know if you remember to maintain the whitelist. In many case, it's human error of user's. They forget to set or update certain message.&lt;br /&gt;
&lt;br /&gt;
You must be either having a crystal mind or giving no &lt;beep&gt; about what you may miss if you want to use social networking correctly, or it will just be obstacle in social life.&lt;/beep&gt;&lt;br /&gt;
&lt;br /&gt;
Email, phone, and letter are better than those.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3803541356848955053-2553727847729490876?l=blog.yjl.im' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/l5REvuFi3QjppivWlwz5j3kRgWk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/l5REvuFi3QjppivWlwz5j3kRgWk/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/l5REvuFi3QjppivWlwz5j3kRgWk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/l5REvuFi3QjppivWlwz5j3kRgWk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/YJLv?a=J46F30xP4ok:FVb5YfoEr0w:AOzAX-4I-Ts"&gt;&lt;img src="http://feeds.feedburner.com/~ff/YJLv?i=J46F30xP4ok:FVb5YfoEr0w:AOzAX-4I-Ts" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/YJLv/~4/J46F30xP4ok" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.yjl.im/feeds/2553727847729490876/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.yjl.im/2012/02/social-networking-obstacle.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3803541356848955053/posts/default/2553727847729490876?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3803541356848955053/posts/default/2553727847729490876?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/YJLv/~3/J46F30xP4ok/social-networking-obstacle.html" title="Social networking obstacle" /><author><name>Yu-Jie Lin</name><uri>https://profiles.google.com/115422682039760465813</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-e-i3n52TFPI/AAAAAAAAAAI/AAAAAAAAAAA/N3NefrEGlxM/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.yjl.im/2012/02/social-networking-obstacle.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEUGQXo_cCp7ImA9WhVTEU4.&quot;"><id>tag:blogger.com,1999:blog-3803541356848955053.post-7979152000269049768</id><published>2012-02-24T17:10:00.000-08:00</published><updated>2012-02-24T17:10:20.448-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-24T17:10:20.448-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="snippet" /><category scheme="http://www.blogger.com/atom/ns#" term="notification" /><category scheme="http://www.blogger.com/atom/ns#" term="IRC" /><category scheme="http://www.blogger.com/atom/ns#" term="plugin" /><category scheme="http://www.blogger.com/atom/ns#" term="monitoring" /><category scheme="http://www.blogger.com/atom/ns#" term="messaging" /><category scheme="http://www.blogger.com/atom/ns#" term="Python" /><category scheme="http://www.blogger.com/atom/ns#" term="XChat" /><title>XChat Python plugin for monitoring messages</title><content type="html">&lt;p&gt;I wrote this Python snippet for XChat:&lt;/p&gt;
&lt;pre class="python"&gt;&lt;code&gt;import os
import xchat


__module_name__ = "xchatmsgmon"
__module_version__ = "0.0.0.1"
__module_description__ = "Python module for monitoring messages"


def on_message(word, word_eol, userdata):

  if '@' in word[2] and \
     xchat.get_info('channel').startswith('#friends') and \
     'y' in word[1]:
    os.system('/usr/bin/mplayer /usr/share/sounds/warning.wav')


xchat.hook_print('Channel Message', on_message)
print "%s loaded." % __module_name__&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;To load it, run &lt;tt class="docutils literal"&gt;/py load /path/to/script.py&lt;/tt&gt; or just &lt;tt class="docutils literal"&gt;/py load script.py&lt;/tt&gt; if you save it at default configuration directory like &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;~/.xchat2&lt;/span&gt;&lt;/tt&gt;. Run &lt;tt class="docutils literal"&gt;/py unload xchatmsgmon&lt;/tt&gt; to unload it.&lt;/p&gt;
&lt;p&gt;You can check sender&amp;#8217;s username in &lt;tt class="docutils literal"&gt;word[0]&lt;/tt&gt;, user&amp;#8217;s mode in &lt;tt class="docutils literal"&gt;word[2]&lt;/tt&gt;, and the message is &lt;tt class="docutils literal"&gt;word[1]&lt;/tt&gt;. After callback function is hooked by &lt;tt class="docutils literal"&gt;xchat.hook_print&lt;/tt&gt;, all channel messages will be sent to the callback function. But only the messages meet the rules below:&lt;/p&gt;
&lt;ol class="arabic simple"&gt;
&lt;li&gt;Sent by OP, i.e. mode with &lt;tt class="docutils literal"&gt;&amp;#64;&lt;/tt&gt;.&lt;/li&gt;
&lt;li&gt;Sent to channel name starts with &lt;tt class="docutils literal"&gt;#friends&lt;/tt&gt;.&lt;/li&gt;
&lt;li&gt;With letter &lt;tt class="docutils literal"&gt;y&lt;/tt&gt; in the message.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;If the message meet the rules above, then a command is executed. This is just snippet, so the command may not work on your system. You can use any notification system or play media file with your favorite library. Creating GTK window with red background for ultimate attention. Whatever you want as long as you can code it.&lt;/p&gt;
&lt;p&gt;You may also want to hook up the highlight message print event as the issue mentioned &lt;a class="reference external" href="http://forum.xchat.org/viewtopic.php?t=4585"&gt;here&lt;/a&gt;. You can read this &lt;a class="reference external" href="http://labix.org/xchat-python"&gt;xchat-python&lt;/a&gt; page, it&amp;#8217;s a good place to get started writing about XChat Python binding.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3803541356848955053-7979152000269049768?l=blog.yjl.im' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/mvjVWtPwFsVUXHCupv_FaMyHPQA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/mvjVWtPwFsVUXHCupv_FaMyHPQA/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/mvjVWtPwFsVUXHCupv_FaMyHPQA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/mvjVWtPwFsVUXHCupv_FaMyHPQA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/YJLv?a=rDibLHlko9Y:uDhAojvn7Gk:AOzAX-4I-Ts"&gt;&lt;img src="http://feeds.feedburner.com/~ff/YJLv?i=rDibLHlko9Y:uDhAojvn7Gk:AOzAX-4I-Ts" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/YJLv/~4/rDibLHlko9Y" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.yjl.im/feeds/7979152000269049768/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.yjl.im/2012/02/xchat-python-plugin-for-monitoring.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3803541356848955053/posts/default/7979152000269049768?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3803541356848955053/posts/default/7979152000269049768?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/YJLv/~3/rDibLHlko9Y/xchat-python-plugin-for-monitoring.html" title="XChat Python plugin for monitoring messages" /><author><name>Yu-Jie Lin</name><uri>https://profiles.google.com/115422682039760465813</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-e-i3n52TFPI/AAAAAAAAAAI/AAAAAAAAAAA/N3NefrEGlxM/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.yjl.im/2012/02/xchat-python-plugin-for-monitoring.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DU8HQH8zeip7ImA9WhVTEUw.&quot;"><id>tag:blogger.com,1999:blog-3803541356848955053.post-7405127117009542436</id><published>2012-02-24T13:10:00.000-08:00</published><updated>2012-02-24T13:10:31.182-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-24T13:10:31.182-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="thought" /><category scheme="http://www.blogger.com/atom/ns#" term="personalized results" /><category scheme="http://www.blogger.com/atom/ns#" term="Google Search" /><category scheme="http://www.blogger.com/atom/ns#" term="blocklist" /><category scheme="http://www.blogger.com/atom/ns#" term="blocking" /><title>Google Search's Blocked Sites</title><content type="html">Yesterday, I was thinking to turn off &lt;i&gt;Personalized Results&lt;/i&gt;, so I can see what non-signed in user would see. Don't want to use second browser/private session/etc to because I remember I used to see there is a link below the search result which you can temporarily turn off personalized results, but it has long gone.&lt;br /&gt;
&lt;br /&gt;
I head over to the &lt;a href="https://www.google.com/preferences?hl=en"&gt;Search Settings&lt;/a&gt;, funny thing is I didn't see such option even a help entry, &lt;i&gt;&lt;a href="http://support.google.com/websearch/bin/answer.py?hl=en&amp;amp;answer=2410479"&gt;Turn off personal results&lt;/a&gt;&lt;/i&gt;, mentioning it. I don't have Web History running but I do have Google+ and I can see those additional results/annotations for social circles. I sometimes see Google Help doesn't help at all because things have changed, but help documentation doesn't get updated.&lt;br /&gt;
&lt;br /&gt;
Anyway, what I saw is &lt;a href="https://www.google.com/reviews/t?hl=en"&gt;Blocking unwanted results&lt;/a&gt;, I don't long how long it have been sitting there, but I am glad I finally noticed it!&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator unwrapper center" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-TxpTnOKg8Ek/T0f6K-DeecI/AAAAAAAADAc/kF5qZm0eXJs/s1600/Search+Settings_1330115259223.png" imageanchor="1"&gt;&lt;img border="0" class="no-autoresize" src="http://2.bp.blogspot.com/-TxpTnOKg8Ek/T0f6K-DeecI/AAAAAAAADAc/kF5qZm0eXJs/s1600/Search+Settings_1330115259223.png" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;i&gt;"You may block up to 500 sites."&lt;/i&gt; Oh yeah, that should be enough for me. I tried one and the website was removed from the results immediately.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator unwrapper center" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-wdHqWPTtcNs/T0f6bRJBXgI/AAAAAAAADAk/jpJ1GJDJVzg/s1600/Manage+Blocked+Sites_1330115289384.png" imageanchor="1"&gt;&lt;img border="0" class="no-autoresize" height="233" src="http://2.bp.blogspot.com/-wdHqWPTtcNs/T0f6bRJBXgI/AAAAAAAADAk/jpJ1GJDJVzg/s640/Manage+Blocked+Sites_1330115289384.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
I don't intent to block spam websites or content farms, those sites could be more the the population of cockroaches in the entire world. I want to block some archive websites as I mentioned in a post about &lt;a href="http://blog.yjl.im/2011/02/finally-blocklist-for-google-chrome.html"&gt;Google Chrome Personal Blocklist Extension&lt;/a&gt;. &lt;br /&gt;
&lt;br /&gt;
For those spams, I can only hope Google Search's algorithm will make them never see the light, rusting at the deep dungeon. Don't even think about it, they are rats, not dragon slayer. This is not video game, you nerdy dude! ;)&lt;br /&gt;
&lt;br /&gt;
As for archive type websites, I don't really need to see them when there are original public source, even they are legit in my definition.&lt;br /&gt;
&lt;br /&gt;
I have seen many times, they outrank original source which is never a good thing in my opinion. Besides, for one source, it could be four or more website doing the archiving. That means every five results, there is only one unique content, the only difference is the design/layout and ads.&lt;br /&gt;
&lt;br /&gt;
Back to the blocking setting, you can download the list as text file, but I don't see an option for you to upload. If you really have many entries, it will be easy to maintain on your end with your favorite editor.&lt;br /&gt;
&lt;br /&gt;
How so? Because I wouldn't just let it be simple text of lines of URL. It will be grouped with comments. For example, if the original archive site down, I can uncomment the archive sites group, then upload the temporarily updated list, so I can see those blocked archive sites.&lt;br /&gt;
&lt;br /&gt;
Of course, I will have my custom shell script to generate uploading list text file, comments will be removed from output. Well, you only need one &lt;code&gt;grep&lt;/code&gt;, actually.&lt;br /&gt;
&lt;br /&gt;
But that's just how I would like to use it if you can upload. Who knows, we might even have API for this. I only really hope this setting will stay, Google has terminated too many good stuff.&lt;br /&gt;
&lt;br /&gt;
Alright, enough talking, time to put into more action. Gotta add more blocked sites to the list, it's Friday!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3803541356848955053-7405127117009542436?l=blog.yjl.im' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/xePCdvAkYMGsj5KN5hvTVIlelAc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/xePCdvAkYMGsj5KN5hvTVIlelAc/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/xePCdvAkYMGsj5KN5hvTVIlelAc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/xePCdvAkYMGsj5KN5hvTVIlelAc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/YJLv?a=WytTvbz8cuM:uqiC3Gt6tO8:AOzAX-4I-Ts"&gt;&lt;img src="http://feeds.feedburner.com/~ff/YJLv?i=WytTvbz8cuM:uqiC3Gt6tO8:AOzAX-4I-Ts" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/YJLv/~4/WytTvbz8cuM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.yjl.im/feeds/7405127117009542436/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.yjl.im/2012/02/google-searchs-blocked-sites.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3803541356848955053/posts/default/7405127117009542436?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3803541356848955053/posts/default/7405127117009542436?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/YJLv/~3/WytTvbz8cuM/google-searchs-blocked-sites.html" title="Google Search's Blocked Sites" /><author><name>Yu-Jie Lin</name><uri>https://profiles.google.com/115422682039760465813</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-e-i3n52TFPI/AAAAAAAAAAI/AAAAAAAAAAA/N3NefrEGlxM/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-TxpTnOKg8Ek/T0f6K-DeecI/AAAAAAAADAc/kF5qZm0eXJs/s72-c/Search+Settings_1330115259223.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.yjl.im/2012/02/google-searchs-blocked-sites.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkcNQX45fCp7ImA9WhVTEEs.&quot;"><id>tag:blogger.com,1999:blog-3803541356848955053.post-545355840147331592</id><published>2012-02-23T22:14:00.001-08:00</published><updated>2012-02-23T22:14:50.024-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-23T22:14:50.024-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="JavaScript" /><category scheme="http://www.blogger.com/atom/ns#" term="Blogger" /><category scheme="http://www.blogger.com/atom/ns#" term="On This Day" /><category scheme="http://www.blogger.com/atom/ns#" term="history" /><category scheme="http://www.blogger.com/atom/ns#" term="Google Pages" /><title>The old Blogger On This Day script</title><content type="html">&lt;p&gt;Four and an half years ago, I wrote a JavaScript called &lt;a class="reference external" href="http://code.google.com/p/blogger-otd/"&gt;On This Day&lt;/a&gt;. It is a script which shows what posts were published on the same date (Today&amp;#8217;s date in reader&amp;#8217;s timezone) of previous years. I wasn&amp;#8217;t thinking it would still work, but it does:&lt;/p&gt;
&lt;link type="text/css" href="http://http://livibetter.googlepages.com/onthisday.css" rel="stylesheet" &gt;
&lt;script type="text/javascript" src="http://www.google.com/jsapi"&gt;&lt;/script&gt;
&lt;script type="text/javascript" src="http://livibetter.googlepages.com/onthisday.js?blogID=3803541356848955053&amp;amp;targetID=otd-feed"&gt;&lt;/script&gt;
&lt;h2&gt;On this day&amp;#8230;&lt;/h2&gt;
&lt;div id="otd-feed"&gt;&lt;/div&gt;&lt;hr class="docutils" /&gt;
&lt;p&gt;I looked at the code and felt &amp;#8220;Oh, what a noob.&amp;#8221; I really said that to myself, it&amp;#8217;s embarrassing. At that time, I probably didn&amp;#8217;t know much about JSON and/or JSONP. The code went a lot of trouble to use feed. I had thought about updating the code and making this On This Day thing a gadget recently, but never got started. I guess I will never do.&lt;/p&gt;
&lt;p&gt;Anyway, before this script, there was a WordPress plugin for this. At that time, I was a WordPress user mainly, I didn&amp;#8217;t recall why I wrote this script for Blogger. Probably because of the WP plugin.&lt;/p&gt;
&lt;p&gt;It&amp;#8217;s good to see an almost five years old code still running well. The files are hosted on Google Pages, they are still accessible, I thought Google shut down Pages two years ago. Obviously not entirely, or there is a limited time for files being online for a few years?&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3803541356848955053-545355840147331592?l=blog.yjl.im' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/owQFUWr38XH3Hz3PZOWOdZxq3Co/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/owQFUWr38XH3Hz3PZOWOdZxq3Co/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/owQFUWr38XH3Hz3PZOWOdZxq3Co/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/owQFUWr38XH3Hz3PZOWOdZxq3Co/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/YJLv?a=qqo1U_-_jow:hM5by0zWHKI:AOzAX-4I-Ts"&gt;&lt;img src="http://feeds.feedburner.com/~ff/YJLv?i=qqo1U_-_jow:hM5by0zWHKI:AOzAX-4I-Ts" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/YJLv/~4/qqo1U_-_jow" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.yjl.im/feeds/545355840147331592/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.yjl.im/2012/02/old-blogger-on-this-day-script.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3803541356848955053/posts/default/545355840147331592?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3803541356848955053/posts/default/545355840147331592?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/YJLv/~3/qqo1U_-_jow/old-blogger-on-this-day-script.html" title="The old Blogger On This Day script" /><author><name>Yu-Jie Lin</name><uri>https://profiles.google.com/115422682039760465813</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-e-i3n52TFPI/AAAAAAAAAAI/AAAAAAAAAAA/N3NefrEGlxM/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.yjl.im/2012/02/old-blogger-on-this-day-script.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEACQH8_cCp7ImA9WhRaGUU.&quot;"><id>tag:blogger.com,1999:blog-3803541356848955053.post-2654386464676215815</id><published>2012-02-22T23:38:00.000-08:00</published><updated>2012-02-22T23:39:21.148-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-22T23:39:21.148-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="plugin" /><category scheme="http://www.blogger.com/atom/ns#" term="Adobe Flash" /><category scheme="http://www.blogger.com/atom/ns#" term="PPAPI" /><title>Adobe Flash Player will be switching to PPAPI only on Linux</title><content type="html">&lt;i&gt;Well, in about five years... long time.&lt;/i&gt; &lt;br /&gt;
&lt;br /&gt;
I just saw this thread, &lt;i&gt;&lt;a href="https://bbs.archlinux.org/viewtopic.php?id=136378"&gt;Adobe drops Flash for Linux, except Chrome&lt;/a&gt;&lt;/i&gt;, I was like "Come on, Adobe, don't do this to Linux users!" at first. But after I read &lt;a href="http://blogs.adobe.com/flashplayer/2012/02/adobe-and-google-partnering-for-flash-player-on-linux.html"&gt;that page&lt;/a&gt;, I am sure that OP missed some things.&lt;br /&gt;
&lt;br /&gt;
Google and Adobe partner for this &lt;a href="http://code.google.com/p/ppapi/"&gt;PPAPI&lt;/a&gt; which will be used for future Flash Player version. For current NS Plugin API version of Flash, it will only have security updates for up to five years.&lt;br /&gt;
&lt;br /&gt;
It does not say Adobe drop development for Linux and only make Flash work for Chrome. It's API switch, that has nothing to do with specific browser. Just, it happens Google is doing this new PPAPI.&lt;br /&gt;
&lt;br /&gt;
As long as other browser starts to provide PPAPI, newer Flash will still work, or you will still have old NS Plugin API Flash for up to five years with only security updates. For other operating systems, non-PPAPI version of Flash will still be developed as before.&lt;br /&gt;
&lt;br /&gt;
Of course, it may take time for other browser to provide PPAPI for plugins, but I am sure it wouldn't be long. Flash is a big demand, just think about you can't watch silly cats running, some developers soon will help to make PPAPI happened in other browser.&lt;br /&gt;
&lt;br /&gt;
All of these will only start to take place after the release of 11.2, currently latest version is 11.1.102.62. According to &lt;a href="http://www.adobe.com/devnet/flashplatform/whitepapers/roadmap.html"&gt;roadmap&lt;/a&gt;, 11.2 is scheduled to be released in the first quarter of this year.&lt;br /&gt;
&lt;br /&gt;
However, I didn't like this switch. I have same comment like the first comment of that Adobe blog post:&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;
&lt;div class="comment-author vcard"&gt;
By Ron      - 11:20 AM on February 22, 2012 &lt;/div&gt;
&lt;div class="comment-body"&gt;
Doesn’t the NS Plugin API accomplish the same purpose?&lt;br /&gt;
&lt;br /&gt;
If so, wouldn’t it be better to work with Mozilla to fix the flaws in the NS Plugin API?&lt;br /&gt;
&lt;br /&gt;
Or is there a non-technical rationale for creating a different API?&lt;/div&gt;
&lt;/blockquote&gt;
&lt;br /&gt;
I don't know anything about NS Plugin API or PPAPI, but why not just fix it if there is a problem or lots of issues? Why not Google, Mozilla, Adobe, Microsoft, and Apple (sorry, Adobe, I know) work together if they really need a new API? Or is PPAPI already the case?&lt;br /&gt;
&lt;br /&gt;
Anyway, I don't really care about the detail as long as I have regularly updated Flash, it doesn't matter to me. I am not one of those who requires everything is open source or open.&lt;br /&gt;
&lt;br /&gt;
Proprietary software doesn't make me uncomfortable, but softwares with security holes do.&lt;br /&gt;
&lt;br /&gt;
Okay, right, I forgot: Flash's performance sucks. That's the only thing I bitch about Flash.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3803541356848955053-2654386464676215815?l=blog.yjl.im' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ZdKmFvwwcWjec-S51925E2O8_90/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ZdKmFvwwcWjec-S51925E2O8_90/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/ZdKmFvwwcWjec-S51925E2O8_90/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ZdKmFvwwcWjec-S51925E2O8_90/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/YJLv?a=bzsvOPdGyDU:TfD0R_aI73s:AOzAX-4I-Ts"&gt;&lt;img src="http://feeds.feedburner.com/~ff/YJLv?i=bzsvOPdGyDU:TfD0R_aI73s:AOzAX-4I-Ts" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/YJLv/~4/bzsvOPdGyDU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.yjl.im/feeds/2654386464676215815/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.yjl.im/2012/02/adobe-flash-player-will-be-switching-to.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3803541356848955053/posts/default/2654386464676215815?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3803541356848955053/posts/default/2654386464676215815?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/YJLv/~3/bzsvOPdGyDU/adobe-flash-player-will-be-switching-to.html" title="Adobe Flash Player will be switching to PPAPI only on Linux" /><author><name>Yu-Jie Lin</name><uri>https://profiles.google.com/115422682039760465813</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-e-i3n52TFPI/AAAAAAAAAAI/AAAAAAAAAAA/N3NefrEGlxM/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.yjl.im/2012/02/adobe-flash-player-will-be-switching-to.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0AHR38_eip7ImA9WhRaGUo.&quot;"><id>tag:blogger.com,1999:blog-3803541356848955053.post-5013796687618083177</id><published>2012-02-22T20:35:00.002-08:00</published><updated>2012-02-22T20:35:36.142-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-22T20:35:36.142-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="FeedBurner" /><category scheme="http://www.blogger.com/atom/ns#" term="traffic" /><category scheme="http://www.blogger.com/atom/ns#" term="referrer" /><category scheme="http://www.blogger.com/atom/ns#" term="Google Plus" /><category scheme="http://www.blogger.com/atom/ns#" term="Google Reader" /><category scheme="http://www.blogger.com/atom/ns#" term="feed" /><title>Trying to find the traffic source via Google Plus</title><content type="html">I just spent around 30 minutes to click on profiles on Google Plus, trying to find some profiles who has Blogger blogs listed in &lt;i&gt;Contributor to&lt;/i&gt; section. But I can't find one, even Blogger's Plus.&lt;br /&gt;
&lt;br /&gt;
I have been seeing a few traffic from Google Plus (&lt;code&gt;http://plus.url.google.com/...&lt;/code&gt;) and the URL link attached to that referral link is FeedBurner's. So, it's clear to me someone was able to click a link from my blog's feed on Google Plus.&lt;br /&gt;
&lt;br /&gt;
But I have never posted my blog posts on Plus when I published a new post, so it can't be me, can it? And that might not be a link via FeedBurner but a direct link, not sure what Blogger will put in the Plus post for the blog post link.&lt;br /&gt;
&lt;br /&gt;
Anyway, it's not me after 30 minutes of trying to find a profile. I was thinking to add a profile to a circle (follow?), so I can see what it is, well, actually, I have no idea anything about Plus. I just want to reproduce by finding a profile like mine.&lt;br /&gt;
&lt;br /&gt;
I didn't find one, but finally I realized that I could just search for the post title, then I found the source. It was someone who shared via Google Reader. Duh, all mysteries are solved at once.&lt;br /&gt;
&lt;br /&gt;
Google Reader uses my FeedBurner feed and it can post on Plus when you want to share, which I stop using because I don't want to share on Plus. I used to add my comments, but since Google started pushing and squeezing everything of Google into that 4-letter word P-L-U-S, I don't like doing so any more.&lt;br /&gt;
&lt;br /&gt;
During the profile hunting, I saw a few posts are about programming. Some of them have code included. Heck! That's just like reading NASA launch procedure programming code in variable-width text. It's gonna crash, at least in my brain. And...&lt;br /&gt;
&lt;br /&gt;
Wait, where was I? Oh, right, the referrer thing...&lt;br /&gt;
&lt;br /&gt;
So, what does this post tell you?&lt;br /&gt;
&lt;br /&gt;
Simple, only two things:&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;I wasted 30 minutes on clicking profiles.&lt;/li&gt;
&lt;li&gt;You just wasted 3 minutes on reading this post.&lt;/li&gt;
&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3803541356848955053-5013796687618083177?l=blog.yjl.im' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/8Sxlm1CAfDat21Bx8LlvOoBvg1g/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/8Sxlm1CAfDat21Bx8LlvOoBvg1g/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/8Sxlm1CAfDat21Bx8LlvOoBvg1g/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/8Sxlm1CAfDat21Bx8LlvOoBvg1g/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/YJLv?a=Cj2j-7tisfg:-fibuXVu0b4:AOzAX-4I-Ts"&gt;&lt;img src="http://feeds.feedburner.com/~ff/YJLv?i=Cj2j-7tisfg:-fibuXVu0b4:AOzAX-4I-Ts" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/YJLv/~4/Cj2j-7tisfg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.yjl.im/feeds/5013796687618083177/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.yjl.im/2012/02/trying-to-find-traffic-source-via.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3803541356848955053/posts/default/5013796687618083177?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3803541356848955053/posts/default/5013796687618083177?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/YJLv/~3/Cj2j-7tisfg/trying-to-find-traffic-source-via.html" title="Trying to find the traffic source via Google Plus" /><author><name>Yu-Jie Lin</name><uri>https://profiles.google.com/115422682039760465813</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-e-i3n52TFPI/AAAAAAAAAAI/AAAAAAAAAAA/N3NefrEGlxM/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.yjl.im/2012/02/trying-to-find-traffic-source-via.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUUEQ34zfCp7ImA9WhRaGUg.&quot;"><id>tag:blogger.com,1999:blog-3803541356848955053.post-6293636670339251255</id><published>2012-02-22T15:25:00.000-08:00</published><updated>2012-02-22T15:26:42.084-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-22T15:26:42.084-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ads" /><category scheme="http://www.blogger.com/atom/ns#" term="Phil" /><category scheme="http://www.blogger.com/atom/ns#" term="LOL" /><category scheme="http://www.blogger.com/atom/ns#" term="gaming" /><title>Phil? Phil!</title><content type="html">&lt;iframe allowfullscreen="" frameborder="0" height="360" src="http://lilbtn.yjl.im/embed/QeDbYuAyKx4?rel=0" width="640"&gt;&lt;/iframe&gt;&lt;br /&gt;
&lt;br /&gt;
I wasn't going to post this video after moved it to my &lt;i&gt;Bin&lt;/i&gt; of notes. But I was cleaning up that bin and clicked on this link while wondering what this YouTube link is in my notes bin. After watched one more time, it's too hilarious not to share.&lt;br /&gt;
&lt;br /&gt;
It was broadcasted during some online gaming events. You can see a lot of people asking about Phil when it's commercial time.&lt;br /&gt;
&lt;br /&gt;
Make sure you watch all the way through, the last line is the most important thing in this ads. xD&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3803541356848955053-6293636670339251255?l=blog.yjl.im' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/wB6XP8HNI7E5aCqqdNzzys0xBGg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/wB6XP8HNI7E5aCqqdNzzys0xBGg/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/wB6XP8HNI7E5aCqqdNzzys0xBGg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/wB6XP8HNI7E5aCqqdNzzys0xBGg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/YJLv?a=J3cT_MaJOZI:Mb6H9gEOZfo:AOzAX-4I-Ts"&gt;&lt;img src="http://feeds.feedburner.com/~ff/YJLv?i=J3cT_MaJOZI:Mb6H9gEOZfo:AOzAX-4I-Ts" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/YJLv/~4/J3cT_MaJOZI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.yjl.im/feeds/6293636670339251255/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.yjl.im/2012/02/phil-phil.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3803541356848955053/posts/default/6293636670339251255?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3803541356848955053/posts/default/6293636670339251255?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/YJLv/~3/J3cT_MaJOZI/phil-phil.html" title="Phil? Phil!" /><author><name>Yu-Jie Lin</name><uri>https://profiles.google.com/115422682039760465813</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-e-i3n52TFPI/AAAAAAAAAAI/AAAAAAAAAAA/N3NefrEGlxM/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.yjl.im/2012/02/phil-phil.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUIBRHc8fyp7ImA9WhRaGUk.&quot;"><id>tag:blogger.com,1999:blog-3803541356848955053.post-3934711929122711826</id><published>2012-02-22T12:45:00.000-08:00</published><updated>2012-02-22T12:45:55.977-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-22T12:45:55.977-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="reStructuredText" /><category scheme="http://www.blogger.com/atom/ns#" term="inline markup" /><category scheme="http://www.blogger.com/atom/ns#" term="docutils" /><category scheme="http://www.blogger.com/atom/ns#" term="rst" /><category scheme="http://www.blogger.com/atom/ns#" term="Python" /><category scheme="http://www.blogger.com/atom/ns#" term="Markup Language" /><title>reStructuredText inline markup on partial word</title><content type="html">&lt;p&gt;I have been using reStructuredText for blogging for months. It&amp;#8217;s a good tool but it also has some bizarre tiny things to deal with. For example:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
foo*bar*pub
foo**bar**pub
foo``bar``pub
*foo*bar
**foo**bar
``foo``bar
&lt;/pre&gt;
&lt;!-- * ** `` get rid out Vim syntax highlighting glitch --&gt;
&lt;p&gt;None of above will work as you expect. First three will result some text with asterisks, the last three will raise errors like:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
&amp;lt;string&amp;gt;:9: (WARNING/2) Inline emphasis start-string without end-string.
&amp;lt;string&amp;gt;:9: (WARNING/2) Inline strong start-string without end-string.
&amp;lt;string&amp;gt;:9: (WARNING/2) Inline literal start-string without end-string.
&lt;/pre&gt;
&lt;p&gt;The &lt;a class="reference external" href="http://sphinx.pocoo.org/rest.html#inline-markup"&gt;workaround&lt;/a&gt; is to escape a space or spaces:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
foo\ *bar*\ pub
*foo*\ bar
&lt;/pre&gt;
&lt;p&gt;They will look like foo&lt;em&gt;bar&lt;/em&gt;pub and  &lt;em&gt;foo&lt;/em&gt;bar as we expect to see.&lt;/p&gt;
&lt;p&gt;I have a &lt;a class="reference external" href="https://sites.google.com/site/yjlnotes/notes/restructuredtext"&gt;note&lt;/a&gt; for reminders and &lt;a class="reference external" href="https://github.com/livibetter/dotfiles/blob/master/bin/my-rst2html.py"&gt;my-rst2html.py&lt;/a&gt; for conversion. I think if you are also a blogger who post about coding, you may want to check out the &lt;tt class="docutils literal"&gt;PyRun&lt;/tt&gt; directive. Since I write some Python code, so a directive like that can make life easier. Also, &lt;tt class="docutils literal"&gt;kbd&lt;/tt&gt; role is a simple example for role.&lt;/p&gt;
&lt;p&gt;I am still a noob, but reStructuredText is better than &lt;a class="reference external" href="http://blog.yjl.im/2010/01/writting-posts-using-markdown.html"&gt;Markdown&lt;/a&gt; because of its extensibility. Certainly, you can hack Markdown library, but it can get ugly and you have to contribute back into the library core. It&amp;#8217;s not like you don&amp;#8217;t want to, but the code you use may not be useful for others. With Python &lt;em&gt;docutils&lt;/em&gt;, you can maintain you own piece of code.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3803541356848955053-3934711929122711826?l=blog.yjl.im' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/sVKJ0h1wdO6179ZZS4WJLsqZmGA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/sVKJ0h1wdO6179ZZS4WJLsqZmGA/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/sVKJ0h1wdO6179ZZS4WJLsqZmGA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/sVKJ0h1wdO6179ZZS4WJLsqZmGA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/YJLv?a=_BY3M55RmlU:H5JoMCxS1Yo:AOzAX-4I-Ts"&gt;&lt;img src="http://feeds.feedburner.com/~ff/YJLv?i=_BY3M55RmlU:H5JoMCxS1Yo:AOzAX-4I-Ts" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/YJLv/~4/_BY3M55RmlU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.yjl.im/feeds/3934711929122711826/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.yjl.im/2012/02/restructuredtext-inline-markup-on.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3803541356848955053/posts/default/3934711929122711826?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3803541356848955053/posts/default/3934711929122711826?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/YJLv/~3/_BY3M55RmlU/restructuredtext-inline-markup-on.html" title="reStructuredText inline markup on partial word" /><author><name>Yu-Jie Lin</name><uri>https://profiles.google.com/115422682039760465813</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-e-i3n52TFPI/AAAAAAAAAAI/AAAAAAAAAAA/N3NefrEGlxM/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.yjl.im/2012/02/restructuredtext-inline-markup-on.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkQGSXkzeyp7ImA9WhRaGUk.&quot;"><id>tag:blogger.com,1999:blog-3803541356848955053.post-4654985696790240654</id><published>2012-02-22T11:52:00.000-08:00</published><updated>2012-02-22T11:52:08.783-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-22T11:52:08.783-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="shell scripting" /><category scheme="http://www.blogger.com/atom/ns#" term="filter" /><category scheme="http://www.blogger.com/atom/ns#" term="grep" /><category scheme="http://www.blogger.com/atom/ns#" term="key function" /><category scheme="http://www.blogger.com/atom/ns#" term="grepsort" /><category scheme="http://www.blogger.com/atom/ns#" term="sort" /><category scheme="http://www.blogger.com/atom/ns#" term="Python" /><category scheme="http://www.blogger.com/atom/ns#" term="sed" /><category scheme="http://www.blogger.com/atom/ns#" term="Bash" /><title>Grepsort</title><content type="html">&lt;p&gt;&lt;em&gt;Okay, I may make up of a name.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;I use &lt;a class="reference external" href="http://www.vim.org/scripts/script.php?script_id=828"&gt;VimNote&lt;/a&gt; for note taking task and also have &lt;kbd&gt;F4&lt;/kbd&gt; bound with &lt;a class="reference external" href="https://github.com/livibetter/dotfiles/blob/master/vimrc"&gt;timestamp insertion&lt;/a&gt;. So there are some timestamps across all over my notes. They could look like:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
In Note A:
  Blah blah -- 2012-02-22T19:02:44Z

In Note B:
  ...
  * Feature Foo (2012-02-22T19:03:14Z) [blah blah]
  * Feature Bar - 2012-02-22T19:03:41Z. (Not a good idea 2012-02-22T19:03:56Z)

In Note C:
  something.... at 2012-02-22,... then blah 2012-02-22T19:04:20Z.

etc.
&lt;/pre&gt;
&lt;p&gt;As you can see, they are notes, so there is no strict way to put my timestamps. They can be at anywhere in a line.&lt;/p&gt;
&lt;p&gt;Yesterday, I wanted to know what notes I took the day before, but there was no easy way to make a list which is sorted by timestamp since you can&amp;#8217;t not be sure where they will appear, therefore you cannot simply use &lt;tt class="docutils literal"&gt;sort&lt;/tt&gt; to sort.&lt;/p&gt;
&lt;p&gt;Suddenly, &lt;strong&gt;grepsort&lt;/strong&gt; came out of nowhere in my mind. I need to &lt;tt class="docutils literal"&gt;grep&lt;/tt&gt; the timestamp and then &lt;tt class="docutils literal"&gt;sort&lt;/tt&gt; by the result. Here is a quick example:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;REGEX='2012-02-21[^ ]*' ; sed -n "/$REGEX/ {s/.*\($REGEX\).*/\1 &amp;amp;/;p}" * | sort | cut -d ' ' -f 2-

# breakdown
REGEX='2012-02-21[^ ]*'
sed -n "/$REGEX/ {s/.*\($REGEX\).*/\1 &amp;amp;/;p}" *
| sort
| cut -d ' ' -f 2-&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;tt class="docutils literal"&gt;$REGEX&lt;/tt&gt; is the variable with the search pattern, which is used for grepping. Although it&amp;#8217;s called &lt;em&gt;grep&lt;/em&gt;sort, there is actually no &lt;tt class="docutils literal"&gt;grep&lt;/tt&gt; being used. Of course, you can use &lt;tt class="docutils literal"&gt;grep&lt;/tt&gt;, but &lt;tt class="docutils literal"&gt;sed&lt;/tt&gt; can do it at once, why bother using &lt;tt class="docutils literal"&gt;grep&lt;/tt&gt;? Why I not name it as &lt;em&gt;sed&lt;/em&gt;sort? Because the fundamental is the grepping, not line editing in sed.&lt;/p&gt;
&lt;p&gt;We need &lt;tt class="docutils literal"&gt;sed&lt;/tt&gt;, because in order to use &lt;tt class="docutils literal"&gt;sort&lt;/tt&gt;, we have to provide a sorting column. But essentially, if possible, which is not in common command-line tools, we only need to sort by the grepped result.&lt;/p&gt;
&lt;p&gt;Anyway, as you can see, we use &lt;tt class="docutils literal"&gt;sed&lt;/tt&gt; to find (grep) the lines with the pattern and prefix the matched result at the first of line as sorting column, then print out the result.&lt;/p&gt;
&lt;p&gt;Next, &lt;tt class="docutils literal"&gt;sort&lt;/tt&gt; does its job. In this case, we sort by timestamp, which is basically text. You can grep any kind of information and use specific sorting option provided by &lt;tt class="docutils literal"&gt;sort&lt;/tt&gt;, such as file size, human-readable numbers, or month names.&lt;/p&gt;
&lt;p&gt;Lastly, the sorting column is cut out, but I think this can be optional.&lt;/p&gt;
&lt;p&gt;By the way, there is a benefit for using &lt;tt class="docutils literal"&gt;grep&lt;/tt&gt;, if you insisit, when does multiple. The file name will be prefixed and you can also use &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;-n&lt;/span&gt;&lt;/tt&gt; for the line number.&lt;/p&gt;
&lt;p&gt;I also wrote a simple Python version:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#!/usr/bin/env python
# Copyright 2012 Yu-Jie Lin
# MIT License

from __future__ import print_function
import fileinput
import re
import sys

def main():

  pattern = '(%s)' % sys.argv[1]
  files = sys.argv[2:]
  RE = re.compile(pattern)
  for line in sorted(filter(RE.search, fileinput.input(files)),
                     key=lambda line: RE.search(line).group()):
    print(RE.sub('\033[1;31m\\1\033[0m', line), end='')


if __name__ == '__main__':
  main()&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;I would say the actual code is &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;sorted(&amp;#46;..)&lt;/span&gt;&lt;/tt&gt;. It just as simple as that, but I think some Python wizard can make it even more magical.&lt;/p&gt;
&lt;p&gt;Often times, I found it&amp;#8217;s very easy to work with shell commands, one-liner can easily save the day. If you are using some GUI, I doubt they will have this kind of feature for you to click.&lt;/p&gt;
&lt;p&gt;The only thing I don&amp;#8217;t like is both of Bash and Python codes use the regular expression twice. Well, unless you write a command or function &lt;tt class="docutils literal"&gt;grepsort&lt;/tt&gt; in C, this is how it should be processing. If Python &lt;tt class="docutils literal"&gt;sorted&lt;/tt&gt; can catch certain of exception from &lt;tt class="docutils literal"&gt;key&lt;/tt&gt; function, so it can drop some item during the sorting, then &lt;tt class="docutils literal"&gt;filter&lt;/tt&gt; would not be needed.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3803541356848955053-4654985696790240654?l=blog.yjl.im' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/zIIAAm2yTDXQTeS8qb7A6S_Nr1s/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/zIIAAm2yTDXQTeS8qb7A6S_Nr1s/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/zIIAAm2yTDXQTeS8qb7A6S_Nr1s/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/zIIAAm2yTDXQTeS8qb7A6S_Nr1s/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/YJLv?a=sNwrQhLd0IM:VBj570wYw-Y:AOzAX-4I-Ts"&gt;&lt;img src="http://feeds.feedburner.com/~ff/YJLv?i=sNwrQhLd0IM:VBj570wYw-Y:AOzAX-4I-Ts" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/YJLv/~4/sNwrQhLd0IM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.yjl.im/feeds/4654985696790240654/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.yjl.im/2012/02/grepsort.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3803541356848955053/posts/default/4654985696790240654?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3803541356848955053/posts/default/4654985696790240654?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/YJLv/~3/sNwrQhLd0IM/grepsort.html" title="Grepsort" /><author><name>Yu-Jie Lin</name><uri>https://profiles.google.com/115422682039760465813</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-e-i3n52TFPI/AAAAAAAAAAI/AAAAAAAAAAA/N3NefrEGlxM/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.yjl.im/2012/02/grepsort.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEADRHw-eSp7ImA9WhRaGEo.&quot;"><id>tag:blogger.com,1999:blog-3803541356848955053.post-7005235689886169065</id><published>2012-02-21T17:06:00.000-08:00</published><updated>2012-02-21T17:06:15.251-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-21T17:06:15.251-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="JavaScript" /><category scheme="http://www.blogger.com/atom/ns#" term="querying" /><category scheme="http://www.blogger.com/atom/ns#" term="Blogger API" /><category scheme="http://www.blogger.com/atom/ns#" term="search" /><category scheme="http://www.blogger.com/atom/ns#" term="list.js" /><category scheme="http://www.blogger.com/atom/ns#" term="list" /><category scheme="http://www.blogger.com/atom/ns#" term="label" /><category scheme="http://www.blogger.com/atom/ns#" term="jQuery" /><title>Using list.js and jQuery for Blogger posts querying</title><content type="html">&lt;p&gt;I recently got to know about &lt;a class="reference external" href="https://github.com/javve/list"&gt;list.js&lt;/a&gt;, it is an awesome script. With it, you can filter in more responsive way, which is the major feature I like and you don&amp;#8217;t need to code much for that and sorting.&lt;/p&gt;
&lt;p&gt;The following example is only for conceptual purpose, it&amp;#8217;s incomplete and CSS style is not so good looking.&lt;/p&gt;
&lt;button onclick='blist_init()'&gt;Retrieve recent 50 posts of&lt;/button&gt;&lt;input id='blist-blog' value='http://blog.yjl.im/'/&gt; (any Blogger blog URL)
&lt;style&gt;
#blist-posts .sort.btn {
  border-radius: 0.5ex;
  border: 1px solid #aaa;
  background-color: #444;
  color: #aaa;
  cursor: pointer;
  padding: 0.5ex;
}
#blist-posts .id {
  display: none;
}
#blist-posts .list .title {
  color: #aaf;
  font-weight: bold;
  cursor: pointer;
}
#blist-posts .list .title:hover {
  text-decoration: underline;
}
&lt;/style&gt;
&lt;div id='blist-posts'&gt;
  Filter: &lt;input type="text" class="search"/&gt;
  Sorting by:
  &lt;span class="sort btn" data-sort="title"&gt;Title&lt;/span&gt;
  &lt;span class="sort btn" data-sort="published"&gt;Published date&lt;/span&gt;
  &lt;ul class='list'&gt;&lt;/ul&gt;
&lt;/div&gt;
&lt;script&gt;
/*
 * Copyright (c) 2012 Yu-Jie Lin
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy of
 * this software and associated documentation files (the "Software"), to deal in
 * the Software without restriction, including without limitation the rights to
 * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
 * of the Software, and to permit persons to whom the Software is furnished to do
 * so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in all
 * copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 * SOFTWARE.
 */
function blist_redirect(ele) {
  var id = $(ele).parent().children('.id').text();
  var blist_posts = $('#blist-posts')[0].blist_posts;
  var post = blist_posts.get('id', id);
  window.open(post.values().link);
}
function blist_process(data) {
  var posts = $.map(data.feed.entry, function(entry, idx) {
    var labels = $.map(entry.category, function(label, idx) {
      return label.term;
      });
    var link = $($.grep(entry.link, function(link, idx) {return link.rel == 'alternate'})).prop('href');
    return {
            id: entry.id.$t,
            title: entry.title.$t,
            published: entry.published.$t,
            link: link,
            labels: labels};
  });
  $.getScript('https://raw.github.com/javve/list/master/list.min.js', function() {
    var options = {
      item: "&lt;li&gt;&lt;span class='id'&gt;&lt;/span&gt;&lt;span class='title' onclick='blist_redirect(this);'&gt;&lt;/span&gt;&lt;br/&gt;Posted at &lt;span class='published'&gt;&lt;/span&gt;&lt;br/&gt;Labels: &lt;span class='labels'&gt;&lt;/span&gt;&lt;/li&gt;"
      };
    $('#blist-posts')[0].blist_posts = new List('blist-posts', options, posts);
  });
}
function blist_init() {
  var BLOG_URL = $('#blist-blog').val();
  var API_URL = BLOG_URL + 'feeds/posts/summary?alt=json-in-script&amp;max-results=50&amp;callback=?';
  $.getJSON(API_URL, blist_process);
}
&lt;/script&gt;&lt;p&gt;The actual JavaScript code is only about 30 lines, please view the source of this page, note that the code is licensed under the MIT License.&lt;/p&gt;
&lt;p&gt;The only issue I had was how to get the data when click on post title. I put the &lt;tt class="docutils literal"&gt;id&lt;/tt&gt; data from Blogger API, which provides an unique way to lookup via &lt;tt class="docutils literal"&gt;List.get&lt;/tt&gt; &lt;a class="reference external" href="https://github.com/javve/list"&gt;list.js&lt;/a&gt; API. It should be able to just use post title, but there is a chance that posts could have same title.&lt;/p&gt;
&lt;p&gt;This is not suitable for real use because it only gets recent 50 posts. It&amp;#8217;s simple to do a multiple requests for getting all posts. As far as I know, you can get 500 posts at once via Blogger API, if I recall correctly. But the problem is not the coding but how much data has to be returned from Blogger. With only 50 posts, the returned data is already around 27KB. This blog has more than 750 posts, it could be around 400KB and more.&lt;/p&gt;
&lt;p&gt;For performance issue, I think it might be better to pre-process in order to reduce the data size and process time, then merge with recent posts which is retrieved directly from API. It could be last # of posts or the current month, Blogger API allows you to query by time range.&lt;/p&gt;
&lt;p&gt;As you may know my &lt;a class="reference external" href="http://blog.yjl.im/p/labels.html"&gt;Labels&lt;/a&gt; page, which use different approach. Basically, in Labels page, the query is processed on Blogger&amp;#8217;s server, but this list.js method is processing on client browser. They have different pros and cons.&lt;/p&gt;
&lt;p&gt;If you need any explanation of my code or have any feedback, feel free to ask in comments.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3803541356848955053-7005235689886169065?l=blog.yjl.im' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/-RbAYm9dDqGe5DVmysYdtl-yDN8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/-RbAYm9dDqGe5DVmysYdtl-yDN8/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/-RbAYm9dDqGe5DVmysYdtl-yDN8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/-RbAYm9dDqGe5DVmysYdtl-yDN8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/YJLv?a=ode8tQeSbHs:xI7FMDvCyKY:AOzAX-4I-Ts"&gt;&lt;img src="http://feeds.feedburner.com/~ff/YJLv?i=ode8tQeSbHs:xI7FMDvCyKY:AOzAX-4I-Ts" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/YJLv/~4/ode8tQeSbHs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.yjl.im/feeds/7005235689886169065/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.yjl.im/2012/02/using-listjs-and-jquery-for-blogger.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3803541356848955053/posts/default/7005235689886169065?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3803541356848955053/posts/default/7005235689886169065?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/YJLv/~3/ode8tQeSbHs/using-listjs-and-jquery-for-blogger.html" title="Using list.js and jQuery for Blogger posts querying" /><author><name>Yu-Jie Lin</name><uri>https://profiles.google.com/115422682039760465813</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-e-i3n52TFPI/AAAAAAAAAAI/AAAAAAAAAAA/N3NefrEGlxM/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.yjl.im/2012/02/using-listjs-and-jquery-for-blogger.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUQNRng6fip7ImA9WhRaFkU.&quot;"><id>tag:blogger.com,1999:blog-3803541356848955053.post-4326272801027400962</id><published>2012-02-19T13:36:00.000-08:00</published><updated>2012-02-19T13:36:37.616-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-19T13:36:37.616-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="video" /><category scheme="http://www.blogger.com/atom/ns#" term="art" /><category scheme="http://www.blogger.com/atom/ns#" term="sexy" /><category scheme="http://www.blogger.com/atom/ns#" term="Food Porn" /><category scheme="http://www.blogger.com/atom/ns#" term="cooking" /><title>Gotta watch this cooking video!</title><content type="html">I haven't post any cooking video on this blog, but this will be first one, made by &lt;a href="http://www.youtube.com/user/smithbitesvids"&gt;smithbitevids&lt;/a&gt;, called &lt;i&gt;"&lt;a href="http://www.youtube.com/watch?v=FptNUkHjyRk"&gt;Chocolate Soufflés with Nougat Whip&lt;/a&gt;"&lt;/i&gt; via &lt;a href="http://www.youtube.com/user/foodwishes"&gt;Chef John&lt;/a&gt;:&lt;br /&gt;
&lt;br /&gt;
&lt;iframe allowfullscreen="" frameborder="0" height="360" src="http://lilbtn.yjl.im/embed/FptNUkHjyRk?rel=0" width="640"&gt;&lt;/iframe&gt;&lt;br /&gt;
&lt;br /&gt;
Anthony Bourdain has few episodes named "Food Porn" from No Reservations, but they are totally nothing comparing to this. Just hear the luscious stirring, whipping, pouring, oh man. Even chopping chocolate sounds sexy like hell.&lt;br /&gt;
&lt;br /&gt;
And the visual impact is like there is no tomorrow. Splashing, sprinkling, dipping, dripping, tipping, hooray molee smokie!&lt;br /&gt;
&lt;br /&gt;
Their videos are art.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3803541356848955053-4326272801027400962?l=blog.yjl.im' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/8fmliQBuzZidrUWNPP9DRKl3U9E/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/8fmliQBuzZidrUWNPP9DRKl3U9E/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/8fmliQBuzZidrUWNPP9DRKl3U9E/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/8fmliQBuzZidrUWNPP9DRKl3U9E/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/YJLv?a=Oq_v9DwYkEc:hhq-2w_SSwo:AOzAX-4I-Ts"&gt;&lt;img src="http://feeds.feedburner.com/~ff/YJLv?i=Oq_v9DwYkEc:hhq-2w_SSwo:AOzAX-4I-Ts" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/YJLv/~4/Oq_v9DwYkEc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.yjl.im/feeds/4326272801027400962/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.yjl.im/2012/02/gotta-watch-this-cooking-video.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3803541356848955053/posts/default/4326272801027400962?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3803541356848955053/posts/default/4326272801027400962?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/YJLv/~3/Oq_v9DwYkEc/gotta-watch-this-cooking-video.html" title="Gotta watch this cooking video!" /><author><name>Yu-Jie Lin</name><uri>https://profiles.google.com/115422682039760465813</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-e-i3n52TFPI/AAAAAAAAAAI/AAAAAAAAAAA/N3NefrEGlxM/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.yjl.im/2012/02/gotta-watch-this-cooking-video.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUUHRX0_cCp7ImA9WhRaFkU.&quot;"><id>tag:blogger.com,1999:blog-3803541356848955053.post-7782387146488402681</id><published>2012-02-19T12:27:00.000-08:00</published><updated>2012-02-19T12:27:14.348-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-19T12:27:14.348-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Gentoo" /><category scheme="http://www.blogger.com/atom/ns#" term="error" /><category scheme="http://www.blogger.com/atom/ns#" term="binary package" /><category scheme="http://www.blogger.com/atom/ns#" term="LibreOffice" /><title>libreoffice-bin 3.4.5.2 "Illegal instruction"</title><content type="html">This is a good example why that's good idea to check bug reports or forums before emerge/upgrade big package (long build time or long list of upgrading dependencies).&lt;br /&gt;
&lt;br /&gt;
I had been holding up on libreoffice since version 3.3.4, the next stable version 3.4.x which I masked because it has long dependencies list which was required by 3.3.4. But yesterday, I decided to upgrade libreoffice to 3.4.5.2 even the dependencies list is still long.&lt;br /&gt;
&lt;br /&gt;
Almost 20 packages were new installs on my system and I have to have CUPS and gstreamer and all other sorts I don't use. Merging from the source is too overwhelming for me. The last version I built was openoffice-3.0.0, 3 hours, 30 minutes and 12 seconds.&lt;br /&gt;
&lt;br /&gt;
After finished, I did not run it right away and I just knew it has a &lt;a href="https://bugs.gentoo.org/show_bug.cgi?id=403915"&gt;bug report&lt;/a&gt; (and a &lt;a href="http://forums.gentoo.org/viewtopic-p-6961654.html"&gt;thread&lt;/a&gt;) which you will see this error message:&lt;br /&gt;
&lt;pre&gt;~ $ loffice 
/usr/bin/loffice: line 2: 29884 Illegal instruction     /usr/lib64/libreoffice/program/soffice "$@"&lt;/pre&gt;
&lt;br /&gt;
Apparently, it only affects AMD64 arch and I am using that.&lt;br /&gt;
&lt;br /&gt;
For now, I am uncommenting this line in &lt;code&gt;/etc/portage/packages.mask&lt;/code&gt;:&lt;br /&gt;
&lt;pre&gt;=app-office/libreoffice-bin-3.4.5.2&lt;/pre&gt;
&lt;br /&gt;
and re-emerging for downgrading. Shouldn't have commented out that line. ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3803541356848955053-7782387146488402681?l=blog.yjl.im' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/OfJec5FkGG4p6QNv9MW2xvn80uk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/OfJec5FkGG4p6QNv9MW2xvn80uk/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/OfJec5FkGG4p6QNv9MW2xvn80uk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/OfJec5FkGG4p6QNv9MW2xvn80uk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/YJLv?a=QCDDDFP4ljY:d50aGr1gE3Q:AOzAX-4I-Ts"&gt;&lt;img src="http://feeds.feedburner.com/~ff/YJLv?i=QCDDDFP4ljY:d50aGr1gE3Q:AOzAX-4I-Ts" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/YJLv/~4/QCDDDFP4ljY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.yjl.im/feeds/7782387146488402681/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.yjl.im/2012/02/libreoffice-bin-3452-illegal.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3803541356848955053/posts/default/7782387146488402681?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3803541356848955053/posts/default/7782387146488402681?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/YJLv/~3/QCDDDFP4ljY/libreoffice-bin-3452-illegal.html" title="libreoffice-bin 3.4.5.2 &quot;Illegal instruction&quot;" /><author><name>Yu-Jie Lin</name><uri>https://profiles.google.com/115422682039760465813</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-e-i3n52TFPI/AAAAAAAAAAI/AAAAAAAAAAA/N3NefrEGlxM/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.yjl.im/2012/02/libreoffice-bin-3452-illegal.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0EGRHszeCp7ImA9WhRaFk8.&quot;"><id>tag:blogger.com,1999:blog-3803541356848955053.post-877713405487588761</id><published>2012-02-18T19:20:00.000-08:00</published><updated>2012-02-18T19:20:25.580-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-18T19:20:25.580-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="maintenance" /><category scheme="http://www.blogger.com/atom/ns#" term="slots" /><category scheme="http://www.blogger.com/atom/ns#" term="Python" /><category scheme="http://www.blogger.com/atom/ns#" term="Gentoo Portage" /><title>I have too many Python slots/versions installed</title><content type="html">Python 3.2.2 just got marked as stable on Gentoo and wants to be installed, but I already have four slots!&lt;br /&gt;
&lt;pre&gt;~ $ eix ^python$
[U] dev-lang/python
     Available versions:  
        (2.5)   2.5.4-r4
        (2.6)   2.6.6-r2 ~2.6.7-r2
        (2.7)   2.7.2-r3
        (3.1)   3.1.4-r3
        (3.2)   3.2.2
        {-berkdb build doc elibc_uclibc examples gdbm ipv6 +ncurses +readline sqlite +ssl +threads tk +wide-unicode wininst +xml}
     Installed versions:  2.5.4-r4(2.5)(12:27:19 PM 10/01/2010)(berkdb gdbm ncurses readline sqlite ssl threads tk wide-unicode xml -build -doc -elibc_uclibc -examples -ipv6 -wininst) 2.6.6-r2(2.6)(09:33:45 PM 02/28/2011)(gdbm ncurses readline sqlite ssl threads tk wide-unicode xml -berkdb -build -doc -elibc_uclibc -examples -ipv6 -wininst) 2.7.2-r3(2.7)(09:28:32 PM 10/28/2011)(gdbm ncurses readline sqlite ssl threads wide-unicode xml -berkdb -build -doc -elibc_uclibc -examples -ipv6 -tk -wininst) 3.1.4-r3(3.1)(09:32:19 PM 10/28/2011)(gdbm ncurses readline sqlite ssl threads wide-unicode xml -build -doc -elibc_uclibc -examples -ipv6 -tk -wininst)
     Homepage:            http://www.python.org/
     Description:         Python is an interpreted, interactive, object-oriented programming language.&lt;/pre&gt;
I feel it's too many and I need to clean up. The disk space usage is fine, I would say:&lt;br /&gt;
&lt;pre&gt;~ $ equery s dev-lang/python
 * dev-lang/python-2.5.4-r4
         Total files : 1483
         Total size  : 23.78 MiB
 * dev-lang/python-2.6.6-r2
         Total files : 1654
         Total size  : 27.71 MiB
 * dev-lang/python-2.7.2-r3
         Total files : 1782
         Total size  : 29.68 MiB
 * dev-lang/python-3.1.4-r3
         Total files : 1671
         Total size  : 27.44 MiB&lt;/pre&gt;
&lt;br /&gt;
Less than 30 MiB per slot, it's not much, but the amount of files is little more. I don't think I really need 2.6, 3.1. I will just keep 2.7 and 3.2, the latest versions of 2.x and 3.x. For 2.5, I have to keep it until GAE Python runtime for 2.7 out of experimental stage and I want to update my codes if needed. (I don't really use GAE anymore)&lt;br /&gt;
&lt;br /&gt;
For now, I am switching to 2.7 as active interpreter after upgraded to 3.2 and removed 3.1. python-updater has a long list of package to re-emerge, after that, I will remove Python 2.6 if no packages depends on it any longer. Here is a nice explanation &lt;a href="http://en.gentoo-wiki.com/wiki/Python_maintenance"&gt;how to maintain Python&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;(I wonder other distributions can install multiple versions of Python like ez-pz-cupcake-cheese on Gentoo?)&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3803541356848955053-877713405487588761?l=blog.yjl.im' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/smmifw964nhzvfF058Qq1CQPy-o/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/smmifw964nhzvfF058Qq1CQPy-o/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/smmifw964nhzvfF058Qq1CQPy-o/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/smmifw964nhzvfF058Qq1CQPy-o/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/YJLv?a=h-arHF88BlU:3Cs4Hnul8l0:AOzAX-4I-Ts"&gt;&lt;img src="http://feeds.feedburner.com/~ff/YJLv?i=h-arHF88BlU:3Cs4Hnul8l0:AOzAX-4I-Ts" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/YJLv/~4/h-arHF88BlU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.yjl.im/feeds/877713405487588761/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.yjl.im/2012/02/i-have-too-many-python-slotsversions.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3803541356848955053/posts/default/877713405487588761?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3803541356848955053/posts/default/877713405487588761?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/YJLv/~3/h-arHF88BlU/i-have-too-many-python-slotsversions.html" title="I have too many Python slots/versions installed" /><author><name>Yu-Jie Lin</name><uri>https://profiles.google.com/115422682039760465813</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-e-i3n52TFPI/AAAAAAAAAAI/AAAAAAAAAAA/N3NefrEGlxM/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.yjl.im/2012/02/i-have-too-many-python-slotsversions.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUcMRnc5fCp7ImA9WhRaFkw.&quot;"><id>tag:blogger.com,1999:blog-3803541356848955053.post-4197075121960893665</id><published>2012-02-18T18:04:00.000-08:00</published><updated>2012-02-18T18:04:47.924-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-18T18:04:47.924-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="REE" /><category scheme="http://www.blogger.com/atom/ns#" term="progress bar" /><category scheme="http://www.blogger.com/atom/ns#" term="fun" /><category scheme="http://www.blogger.com/atom/ns#" term="Python" /><title>python-progressbar</title><content type="html">I saw this &lt;a href="http://code.google.com/p/python-progressbar/"&gt;python-progressbar&lt;/a&gt; package when I updated my system, it's part of Gentoo Portage tree. When I saw it in the output report of eix-diff, I thought: &lt;i&gt;"Really? a library for progress bar and it is included in Portage tree, really?"&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
I checked out its &lt;a href="http://code.google.com/p/python-progressbar/source/browse/examples.py"&gt;examples&lt;/a&gt; and ran it, then I knew why it is a library and it's in the tree. That's a lot of awesome examples and many of the progressive stylesI have never seen before. So I made a &lt;a href="http://youtu.be/goeZaYERNnM"&gt;video&lt;/a&gt; with an additional example ^_^:&lt;br /&gt;
&lt;br /&gt;
&lt;iframe allowfullscreen="" frameborder="0" height="480" src="http://lilbtn.yjl.im/embed/goeZaYERNnM?rel=0" width="640"&gt;&lt;/iframe&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href="https://github.com/livibetter/REE"&gt;REE&lt;/a&gt; is something I created last September and never really made useful out of it, well, since it wasn't supposed to be. It was made only for fun. But when I saw the animated bouncing progressbar, I knew that's where REE can &lt;a href="https://gist.github.com/1861570"&gt;chime in&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
I probably won't create an issue for the modification for this REE example, because REEally?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3803541356848955053-4197075121960893665?l=blog.yjl.im' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/rza67pmDtmwXRu41V9Bz-SYq3HA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/rza67pmDtmwXRu41V9Bz-SYq3HA/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/rza67pmDtmwXRu41V9Bz-SYq3HA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/rza67pmDtmwXRu41V9Bz-SYq3HA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/YJLv?a=_7hJhnGNcNA:vxg6YRznhZg:AOzAX-4I-Ts"&gt;&lt;img src="http://feeds.feedburner.com/~ff/YJLv?i=_7hJhnGNcNA:vxg6YRznhZg:AOzAX-4I-Ts" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/YJLv/~4/_7hJhnGNcNA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.yjl.im/feeds/4197075121960893665/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.yjl.im/2012/02/python-progressbar.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3803541356848955053/posts/default/4197075121960893665?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3803541356848955053/posts/default/4197075121960893665?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/YJLv/~3/_7hJhnGNcNA/python-progressbar.html" title="python-progressbar" /><author><name>Yu-Jie Lin</name><uri>https://profiles.google.com/115422682039760465813</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-e-i3n52TFPI/AAAAAAAAAAI/AAAAAAAAAAA/N3NefrEGlxM/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.yjl.im/2012/02/python-progressbar.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0IDQngzfyp7ImA9WhRaFkw.&quot;"><id>tag:blogger.com,1999:blog-3803541356848955053.post-7197061855754318329</id><published>2012-02-18T16:32:00.000-08:00</published><updated>2012-02-18T16:32:53.687-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-18T16:32:53.687-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="comparison" /><category scheme="http://www.blogger.com/atom/ns#" term="version" /><category scheme="http://www.blogger.com/atom/ns#" term="shell scripting" /><category scheme="http://www.blogger.com/atom/ns#" term="Bash" /><title>Version comparison in Bash</title><content type="html">&lt;p&gt;I wrote these &lt;a class="reference external" href="https://gist.github.com/1861384"&gt;snippets&lt;/a&gt; for version comparison and they are not in good quality but enough for me.&lt;/p&gt;
&lt;p&gt;The following code is an implementation which compare arithmetically and alphabetically:&lt;/p&gt;
&lt;script src="https://gist.github.com/1861384.js?file=vercmp.sh"&gt;&lt;/script&gt;&lt;p&gt;But I later found it can&amp;#8217;t return the correct result I expect for &lt;tt class="docutils literal"&gt;1.0&lt;/tt&gt; and &lt;tt class="docutils literal"&gt;1.0rc1&lt;/tt&gt;. So, I decided to strip and made a simplified &lt;a class="reference external" href="https://gist.github.com/1861384#file_vercmps.sh"&gt;version&lt;/a&gt;, it will die hard when non-digits are supplied.&lt;/p&gt;
&lt;p&gt;I think there is another quick way to compare, using &lt;tt class="docutils literal"&gt;sort &lt;span class="pre"&gt;-V&lt;/span&gt;&lt;/tt&gt;. &lt;tt class="docutils literal"&gt;sort&lt;/tt&gt; can sort version strings, too. You feed it with two lines of version strings, then see which is returned first. But, I don&amp;#8217;t think it covers all strange versioning schemes.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3803541356848955053-7197061855754318329?l=blog.yjl.im' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/gkTZhFEn4hFCF1AGM1N493LHGVs/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/gkTZhFEn4hFCF1AGM1N493LHGVs/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/gkTZhFEn4hFCF1AGM1N493LHGVs/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/gkTZhFEn4hFCF1AGM1N493LHGVs/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/YJLv?a=-q0vr3i5dBU:qYUAlPB2w08:AOzAX-4I-Ts"&gt;&lt;img src="http://feeds.feedburner.com/~ff/YJLv?i=-q0vr3i5dBU:qYUAlPB2w08:AOzAX-4I-Ts" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/YJLv/~4/-q0vr3i5dBU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.yjl.im/feeds/7197061855754318329/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.yjl.im/2012/02/version-comparison-in-bash.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3803541356848955053/posts/default/7197061855754318329?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3803541356848955053/posts/default/7197061855754318329?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/YJLv/~3/-q0vr3i5dBU/version-comparison-in-bash.html" title="Version comparison in Bash" /><author><name>Yu-Jie Lin</name><uri>https://profiles.google.com/115422682039760465813</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-e-i3n52TFPI/AAAAAAAAAAI/AAAAAAAAAAA/N3NefrEGlxM/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.yjl.im/2012/02/version-comparison-in-bash.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUQGQHw8fyp7ImA9WhRaFUQ.&quot;"><id>tag:blogger.com,1999:blog-3803541356848955053.post-7721653589831208429</id><published>2012-02-18T11:28:00.000-08:00</published><updated>2012-02-18T11:28:41.277-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-18T11:28:41.277-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="glsa-check" /><category scheme="http://www.blogger.com/atom/ns#" term="GLSA" /><category scheme="http://www.blogger.com/atom/ns#" term="Gentoo" /><category scheme="http://www.blogger.com/atom/ns#" term="security" /><title>glsa-check</title><content type="html">I received this &lt;a href="http://www.gentoo.org/security/en/glsa/glsa-201202-01.xml"&gt;GLSA&lt;/a&gt; about Chromium via feed. I recalled I could get notified by emerge, but I might be mistaken. Anyway, I used &lt;code&gt;glsa-check&lt;/code&gt; to get a list of affected packages, it turned out there was one GLSA issued last year:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator unwrapper center" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-EKeav_P5ytQ/Tz_5cc0XBAI/AAAAAAAADAQ/JMI5R7yqsrA/s1600/2012-02-19--03:11:06.png" imageanchor="1"&gt;&lt;img border="0" class="no-autoresize" src="http://4.bp.blogspot.com/-EKeav_P5ytQ/Tz_5cc0XBAI/AAAAAAAADAQ/JMI5R7yqsrA/s1600/2012-02-19--03:11:06.png" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Gentoo has a page of documentation about &lt;a href="http://www.gentoo.org/doc/en/security/security-handbook.xml?part=1&amp;amp;chap=14"&gt;&lt;code&gt;glsa-check&lt;/code&gt;&lt;/a&gt;, the page is almost two years old since last updated.&lt;br /&gt;
&lt;br /&gt;
It's nice to have a command for updating package because of security issues, but the commands is little complicated to remember if you compare with &lt;code&gt;revdep-rebuild&lt;/code&gt;. I wrote this post with screenshot, so I could get the commands when next time I need them. :)&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;glsa-check -l
glsa-check -t all
glsa-check -p $(glsa-check -t all)
sudo glsa-check -f $(glsa-check -t all)&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3803541356848955053-7721653589831208429?l=blog.yjl.im' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/TXZz7B9kPkLHmTcMp4e_ISyR7Ns/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/TXZz7B9kPkLHmTcMp4e_ISyR7Ns/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/TXZz7B9kPkLHmTcMp4e_ISyR7Ns/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/TXZz7B9kPkLHmTcMp4e_ISyR7Ns/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/YJLv?a=kEk6MWQPnaA:cWYw3zLQ8IY:AOzAX-4I-Ts"&gt;&lt;img src="http://feeds.feedburner.com/~ff/YJLv?i=kEk6MWQPnaA:cWYw3zLQ8IY:AOzAX-4I-Ts" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/YJLv/~4/kEk6MWQPnaA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.yjl.im/feeds/7721653589831208429/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.yjl.im/2012/02/glsa-check.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3803541356848955053/posts/default/7721653589831208429?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3803541356848955053/posts/default/7721653589831208429?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/YJLv/~3/kEk6MWQPnaA/glsa-check.html" title="glsa-check" /><author><name>Yu-Jie Lin</name><uri>https://profiles.google.com/115422682039760465813</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-e-i3n52TFPI/AAAAAAAAAAI/AAAAAAAAAAA/N3NefrEGlxM/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-EKeav_P5ytQ/Tz_5cc0XBAI/AAAAAAAADAQ/JMI5R7yqsrA/s72-c/2012-02-19--03:11:06.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.yjl.im/2012/02/glsa-check.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0UER3c6cSp7ImA9WhRaFUw.&quot;"><id>tag:blogger.com,1999:blog-3803541356848955053.post-2839629148401541787</id><published>2012-02-17T12:40:00.000-08:00</published><updated>2012-02-17T12:40:06.919-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-17T12:40:06.919-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="dwm" /><category scheme="http://www.blogger.com/atom/ns#" term="layout" /><category scheme="http://www.blogger.com/atom/ns#" term="compilation error" /><category scheme="http://www.blogger.com/atom/ns#" term="nmaster" /><title>Upgrading to dwm 6.0</title><content type="html">I was trying to update the &lt;a href="http://dwm.suckless.org/"&gt;DWM&lt;/a&gt; and got this error message from emerge:&lt;br /&gt;
&lt;pre&gt;dwm.c: In function 'createmon':
dwm.c:654:15: error: 'nmaster' undeclared (first use in this function)
dwm.c:654:15: note: each undeclared identifier is reported only once for each function it appears in
dwm.c: At top level:
dwm.c:1030:1: warning: 'incnmaster' defined but not used
make: *** [dwm.o] Error 1&lt;/pre&gt;
It seems that dwm 6.0 has included the code of &lt;a href="http://dwm.suckless.org/patches/nmaster"&gt;nmaster patch&lt;/a&gt;, or a re-implementation. Anyhow, you need to update your &lt;code&gt;config.h&lt;/code&gt; for &lt;code&gt;nmaster&lt;/code&gt; variable, even you don't use nmaster.&lt;br /&gt;
&lt;pre&gt;&lt;code&gt;/* layout(s) */
// snip
static const int nmaster      = 1;    /* number of clients in master area */
// snip

static Key keys[] = {
// snip
 { MODKEY,                       XK_i,      incnmaster,     {.i = +1 } },
 { MODKEY,                       XK_d,      incnmaster,     {.i = -1 } },
// snip&lt;/code&gt;&lt;/pre&gt;
The &lt;code&gt;incnmaster&lt;/code&gt; function is to change the amount of clients in master area. I bind them to the keys which fits into my configuration, here is the &lt;a href="https://github.com/livibetter/dotfiles/commit/a2506a751790e51c597175541b85e1428edc4c63"&gt;diff&lt;/a&gt; I updated for this upgrade.&lt;br /&gt;
&lt;br /&gt;
Before 6.0, I hadn't used nmaster patch, but I did feel the need of similar feature. There were some moments, master area is, well, too big for just one client. However, I have &lt;a href="http://dwm.suckless.org/patches/gridmode"&gt;gridmode patch&lt;/a&gt;, sometimes it can sort of have the layout I need.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3803541356848955053-2839629148401541787?l=blog.yjl.im' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/mkiq8YK8zM_lqMbZGlzvx8LwsPs/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/mkiq8YK8zM_lqMbZGlzvx8LwsPs/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/mkiq8YK8zM_lqMbZGlzvx8LwsPs/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/mkiq8YK8zM_lqMbZGlzvx8LwsPs/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/YJLv?a=214D9uyw6ek:4Urmh6A8c2E:AOzAX-4I-Ts"&gt;&lt;img src="http://feeds.feedburner.com/~ff/YJLv?i=214D9uyw6ek:4Urmh6A8c2E:AOzAX-4I-Ts" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/YJLv/~4/214D9uyw6ek" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.yjl.im/feeds/2839629148401541787/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.yjl.im/2012/02/upgrading-to-dwm-60.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3803541356848955053/posts/default/2839629148401541787?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3803541356848955053/posts/default/2839629148401541787?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/YJLv/~3/214D9uyw6ek/upgrading-to-dwm-60.html" title="Upgrading to dwm 6.0" /><author><name>Yu-Jie Lin</name><uri>https://profiles.google.com/115422682039760465813</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-e-i3n52TFPI/AAAAAAAAAAI/AAAAAAAAAAA/N3NefrEGlxM/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.yjl.im/2012/02/upgrading-to-dwm-60.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0UDSH04fSp7ImA9WhRaFE8.&quot;"><id>tag:blogger.com,1999:blog-3803541356848955053.post-1463719269449979365</id><published>2012-02-16T12:47:00.000-08:00</published><updated>2012-02-16T12:47:59.335-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-16T12:47:59.335-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="JavaScript" /><category scheme="http://www.blogger.com/atom/ns#" term="function" /><category scheme="http://www.blogger.com/atom/ns#" term="call" /><category scheme="http://www.blogger.com/atom/ns#" term="plugin" /><category scheme="http://www.blogger.com/atom/ns#" term="design" /><category scheme="http://www.blogger.com/atom/ns#" term="flexibility" /><category scheme="http://www.blogger.com/atom/ns#" term="jQuery" /><title>Flexible insertion feature in jQuery plugin</title><content type="html">&lt;p&gt;In jQuery, it has many of &lt;a class="reference external" href="http://api.jquery.com/category/manipulation/"&gt;manipulation&lt;/a&gt; methods. If you have written an jQuery plugin, often it will require to put a generated content into a container which is specified in initialization process. For example:&lt;/p&gt;
&lt;pre class="javascript"&gt;&lt;code&gt;$(selector).plugin_foobar({
    container: $('#container')
    });&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;a class="reference external" href="http://api.jquery.com/appendTo/"&gt;&lt;tt class="docutils literal"&gt;appendTo&lt;/tt&gt;&lt;/a&gt; is most likely to be used for such task. The generated content is put into &lt;tt class="docutils literal"&gt;#container&lt;/tt&gt; and it&amp;#8217;s enough for most cases.&lt;/p&gt;
&lt;p&gt;Although I haven&amp;#8217;t seen any flexible design on insertion, but I think the following code may come in handy for me someday:&lt;/p&gt;
&lt;pre class="javascript"&gt;&lt;code&gt;$(selector).plugin_foobar({
    container: $('#container'),
    func: $.fn.prependTo
    });&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;As you can see the &lt;tt class="docutils literal"&gt;func&lt;/tt&gt; is supplied with &lt;tt class="docutils literal"&gt;prependTo&lt;/tt&gt; and you can expect the generated contain will be inserted before the contents in &lt;tt class="docutils literal"&gt;#container&lt;/tt&gt;, not after. An implementation could look like:&lt;/p&gt;
&lt;pre class="javascript"&gt;&lt;code&gt;// in plugin_foobar()

var container = opt.container;
var f = opt.func;

var gen_content = $('&amp;lt;div&amp;gt;foobar&amp;lt;/div&amp;gt;');

f.call(gen_content, container);
// ==&amp;gt; gen_content.prependTo(container);&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;By using &lt;a class="reference external" href="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/call"&gt;&lt;tt class="docutils literal"&gt;call&lt;/tt&gt;&lt;/a&gt;, it enables the flexibility we need here. Given certain function and operating on the generated jQuery object.&lt;/p&gt;
&lt;p&gt;Since a function is supplied, it does not have to be jQuery functions, you can even use it as a filter function. It&amp;#8217;s very flexible of how you can use this kind of design.&lt;/p&gt;
&lt;p&gt;Of course, you can use a string as option, values can be &lt;tt class="docutils literal"&gt;&amp;#8220;before&amp;#8221;&lt;/tt&gt;, &lt;tt class="docutils literal"&gt;&amp;#8220;after&amp;#8221;&lt;/tt&gt;, etc. You can use &lt;tt class="docutils literal"&gt;switch&lt;/tt&gt; to manually call the corresponding function, but the code does not look clean as the design above.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3803541356848955053-1463719269449979365?l=blog.yjl.im' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/vTt-socDyb6SwqdKwSwQ5pMHmj8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/vTt-socDyb6SwqdKwSwQ5pMHmj8/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/vTt-socDyb6SwqdKwSwQ5pMHmj8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/vTt-socDyb6SwqdKwSwQ5pMHmj8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/YJLv?a=4KCvCAuVJD0:040hPkEeKxs:AOzAX-4I-Ts"&gt;&lt;img src="http://feeds.feedburner.com/~ff/YJLv?i=4KCvCAuVJD0:040hPkEeKxs:AOzAX-4I-Ts" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/YJLv/~4/4KCvCAuVJD0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.yjl.im/feeds/1463719269449979365/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.yjl.im/2012/02/flexible-insertion-feature-in-jquery.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3803541356848955053/posts/default/1463719269449979365?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3803541356848955053/posts/default/1463719269449979365?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/YJLv/~3/4KCvCAuVJD0/flexible-insertion-feature-in-jquery.html" title="Flexible insertion feature in jQuery plugin" /><author><name>Yu-Jie Lin</name><uri>https://profiles.google.com/115422682039760465813</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-e-i3n52TFPI/AAAAAAAAAAI/AAAAAAAAAAA/N3NefrEGlxM/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.yjl.im/2012/02/flexible-insertion-feature-in-jquery.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0UARX84eCp7ImA9WhRaEkg.&quot;"><id>tag:blogger.com,1999:blog-3803541356848955053.post-6585934473158945050</id><published>2012-02-14T12:27:00.000-08:00</published><updated>2012-02-14T12:27:24.130-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-14T12:27:24.130-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="JavaScript" /><category scheme="http://www.blogger.com/atom/ns#" term="sound" /><category scheme="http://www.blogger.com/atom/ns#" term="HTML5" /><category scheme="http://www.blogger.com/atom/ns#" term="fun" /><category scheme="http://www.blogger.com/atom/ns#" term="audio" /><category scheme="http://www.blogger.com/atom/ns#" term="wave" /><category scheme="http://www.blogger.com/atom/ns#" term="FileReader" /><title>Sound of files using HTML5</title><content type="html">&lt;p&gt;If you are a Linux user, you probably have seen &lt;tt class="docutils literal"&gt;cat FILE &amp;gt; /dev/audio&lt;/tt&gt; or data directory from &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;/dev/&amp;#46;..&lt;/span&gt;&lt;/tt&gt;. And this is the HTML5 version of it, but only accept single file:&lt;/p&gt;
&lt;div&gt;&lt;input type="file" id="sf-file" onchange="sf_loadfile()"&gt;&lt;/div&gt;
&lt;div&gt;
  &lt;button onclick="sf_playfile()"&gt;Play&lt;/button&gt;
  &lt;span id="sf-fileinfo"&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;script&gt;
// The following function code is copied and modified from my old code
// http://hg.assembla.com/llbbsc/file/399aa8c2de03/GoogleGadget/HTMLTool/HTMLTool.xml
// Re-license to New BSD.
function base64_encoder(b) {
  // http://tools.ietf.org/html/rfc4648
  var map = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split("");
  var r = "";
  for (var i = 0; i &lt; b.length; i += 3) {
    var bin = 0x000000;
    // FIXME with one loop
    bin |= b[i] &lt;&lt; 16;
    if (i + 1 &lt; b.length)
      bin |= b[i + 1] &lt;&lt; 8;
    if (i + 2 &lt; b.length)
      bin |= b[i + 2];
    // Converting
    var mask = 0xFC0000;
    for (var j = 0; j &lt; 4; j++) {
      r += map[((bin &amp; (0xFC0000 &gt;&gt; (j * 6))) &gt;&gt; ((3 - j) * 6))];
      }
    }
  var padding = (b.length % 3 &gt; 0) ? "==".substring(b.length % 3 - 1, 2) : "";
  return r.substring(0, r.length - padding.length) + padding;
  }

// Make Little Endian Bytestream String
function mk_le_bs(data, size) {
  s = '';
  while (size &gt; 0) {
    s += String.fromCharCode(0xFF &amp; data);
    data &gt;&gt;= 8;
    size--;
    }
  return s;
  }

function sf_play(data) {
  var WAVE_FORMAT_PCM = 0x0001;
  var sample_rate = 8000;

  var s = '';
  pad = (data.length % 2 == 1) ? ' ': '';
  // http://www-mmsp.ece.mcgill.ca/Documents/AudioFormats/WAVE/WAVE.html
  s = 'RIFF' + mk_le_bs(4 + 24 + (8 + 1 * 1 * data.length + pad.length), 4) +
        'WAVE' + 'fmt ' + mk_le_bs(16, 4) +
          mk_le_bs(WAVE_FORMAT_PCM, 2) +
          mk_le_bs(1, 2) +
          mk_le_bs(sample_rate, 4) +
          mk_le_bs(sample_rate * 1 * 1, 4) +
          mk_le_bs(1 * 1, 2) +
          mk_le_bs(8 * 1, 2) +
        'data' + mk_le_bs(1 * 1 * data.length, 4)
        ;

  bs = [];
  for (var idx=0; idx&lt;s.length; idx++) {
    bs.push(s.charCodeAt(idx));
    }
  for (var idx=0; idx&lt;data.length; idx++) {
    bs.push(data.charCodeAt(idx));
    }
  if (pad.length &gt; 0)
    bs.push(0x00);

  s = 'data:audio/wav;base64,' + base64_encoder(bs);
  var audio = new Audio(s);
  audio.play();
  }

function sf_playfile() {
  sf_play(fr.result);
}

function sf_loadfile() {
  var f = $('#sf-file')[0].files[0];
  fr.readAsBinaryString(f);
}

$(function() {
  window.fr = new FileReader();
  // onload will not be fired if this page is file:/// in Chrome
  fr.onload = function(event) {
    var fileinfo =
        'Filename: ' + $('#sf-file')[0].files[0].name + ', ' +
        'Size: ' + this.result.length + ' bytes' + ', ' +
        'Audio length: ' + (this.result.length / 8000) + ' seconds.';
    $('#sf-fileinfo').text(fileinfo);
  }
});
&lt;/script&gt;&lt;p&gt;Remember to lower your sound level first, I take no responsibility of breaking anything, your ears, speakers, or whatsoever! :D&lt;/p&gt;
&lt;p&gt;The data of file is fed into HTML5 Audio via Data URI in 8 kHz sample rate, 8 bits. The code is basically same in &lt;a class="reference external" href="http://blog.yjl.im/2010/04/single-frequency-wave-generation-using.html"&gt;Single frequency wave generation using HTML5 audio&lt;/a&gt;. This should work with Firefox and Chrome, not tested in other browsers. I wrote this just to learn a bit of HTML5 File/FileReader stuff, not really something useful except for fun.&lt;/p&gt;
&lt;p&gt;By the way, I think MIT License file sound okay. &lt;tt class="docutils literal"&gt;bzip2&lt;/tt&gt; sounds like a modem.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3803541356848955053-6585934473158945050?l=blog.yjl.im' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ngna5Gvv8_1cs0QTSrH8WBfwo24/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ngna5Gvv8_1cs0QTSrH8WBfwo24/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/ngna5Gvv8_1cs0QTSrH8WBfwo24/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ngna5Gvv8_1cs0QTSrH8WBfwo24/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/YJLv?a=JCy4PKdqOdk:FQCdZWhRJRg:AOzAX-4I-Ts"&gt;&lt;img src="http://feeds.feedburner.com/~ff/YJLv?i=JCy4PKdqOdk:FQCdZWhRJRg:AOzAX-4I-Ts" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/YJLv/~4/JCy4PKdqOdk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.yjl.im/feeds/6585934473158945050/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.yjl.im/2012/02/sound-of-files-using-html5.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3803541356848955053/posts/default/6585934473158945050?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3803541356848955053/posts/default/6585934473158945050?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/YJLv/~3/JCy4PKdqOdk/sound-of-files-using-html5.html" title="Sound of files using HTML5" /><author><name>Yu-Jie Lin</name><uri>https://profiles.google.com/115422682039760465813</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-e-i3n52TFPI/AAAAAAAAAAI/AAAAAAAAAAA/N3NefrEGlxM/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.yjl.im/2012/02/sound-of-files-using-html5.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUYNQ3kzcCp7ImA9WhRaEUU.&quot;"><id>tag:blogger.com,1999:blog-3803541356848955053.post-4891789937482221657</id><published>2012-02-13T17:33:00.000-08:00</published><updated>2012-02-13T17:33:12.788-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-13T17:33:12.788-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="visualization" /><category scheme="http://www.blogger.com/atom/ns#" term="password" /><category scheme="http://www.blogger.com/atom/ns#" term="graph" /><category scheme="http://www.blogger.com/atom/ns#" term="security" /><category scheme="http://www.blogger.com/atom/ns#" term="Mozilla Firefox" /><category scheme="http://www.blogger.com/atom/ns#" term="addon" /><title>Firefox Password Reuse Visualizer</title><content type="html">Just read a &lt;a href="https://mozillalabs.com/blog/2012/02/watchdog-visualize-your-password-reuse/"&gt;post&lt;/a&gt; on Mozilla Lab by &lt;a href="http://connectioni.st/2012/01/visualize-your-password-reuse.html"&gt;Paul Sawaya&lt;/a&gt; about this &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/password-reuse-visualizer/"&gt;addon&lt;/a&gt;, here is a screenshot of my test profile in Firefox:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://imgur.com/wQThC"&gt;&lt;img alt="" class="no-autoresize" src="http://i.imgur.com/wQThC.png" title="Hosted by imgur.com" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
The graph use &lt;a href="http://mbostock.github.com/d3/"&gt;d3.js&lt;/a&gt; and it's interactive, you can draw or click, and even to check the clear text of the passwords.&lt;br /&gt;
&lt;br /&gt;
Again, it's not the passwords I use daily. No way I will show you that even this is just a visualization. They are a lot can be learned from a simple graph.&lt;br /&gt;
&lt;br /&gt;
I found this is helpful to help your realize how your security sense based on your passwords. A crazy nut of security should have a totally non-connecting graph.&lt;br /&gt;
&lt;br /&gt;
Each green dot is a password, blue dot is the website. Square orange box connecting passwords means those passwords are similar, which by general guidelines of security that should be avoid.&lt;br /&gt;
&lt;br /&gt;
Using different password for different website, but when you are testing. Well, you know &lt;code&gt;abc123&lt;/code&gt; comes in handy. As you can guess, those two only distinct passwords and websites are the actual passwords, and I am not going to tell you what they are. :)&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;PS. &lt;code&gt;abc123&lt;/code&gt; may just be a misleading to let you believe I use that for testing, please don't use it to hack into my account. ;)&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3803541356848955053-4891789937482221657?l=blog.yjl.im' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/I57Ri8S1qRIN4BMOZ_Alxyk8Ru8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/I57Ri8S1qRIN4BMOZ_Alxyk8Ru8/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/I57Ri8S1qRIN4BMOZ_Alxyk8Ru8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/I57Ri8S1qRIN4BMOZ_Alxyk8Ru8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/YJLv?a=5YEG-2wdEYE:FvAmFuxaRR4:AOzAX-4I-Ts"&gt;&lt;img src="http://feeds.feedburner.com/~ff/YJLv?i=5YEG-2wdEYE:FvAmFuxaRR4:AOzAX-4I-Ts" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/YJLv/~4/5YEG-2wdEYE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.yjl.im/feeds/4891789937482221657/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.yjl.im/2012/02/firefox-password-reuse-visualizer.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3803541356848955053/posts/default/4891789937482221657?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3803541356848955053/posts/default/4891789937482221657?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/YJLv/~3/5YEG-2wdEYE/firefox-password-reuse-visualizer.html" title="Firefox Password Reuse Visualizer" /><author><name>Yu-Jie Lin</name><uri>https://profiles.google.com/115422682039760465813</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-e-i3n52TFPI/AAAAAAAAAAI/AAAAAAAAAAA/N3NefrEGlxM/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.yjl.im/2012/02/firefox-password-reuse-visualizer.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0YCQXk_fip7ImA9WhRaEUU.&quot;"><id>tag:blogger.com,1999:blog-3803541356848955053.post-7635234197492775553</id><published>2012-02-13T16:59:00.000-08:00</published><updated>2012-02-13T16:59:20.746-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-13T16:59:20.746-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="DNS" /><category scheme="http://www.blogger.com/atom/ns#" term="OpenDNS" /><category scheme="http://www.blogger.com/atom/ns#" term="lookup" /><category scheme="http://www.blogger.com/atom/ns#" term="PyDNS" /><category scheme="http://www.blogger.com/atom/ns#" term="nameserver" /><category scheme="http://www.blogger.com/atom/ns#" term="Python" /><category scheme="http://www.blogger.com/atom/ns#" term="NXDOMAIN" /><title>Using PyDNS for manual domain name lookup</title><content type="html">&lt;p&gt;I saw a &lt;a class="reference external" href="http://forums.gentoo.org/viewtopic-t-912830-start-0.html"&gt;thread&lt;/a&gt; about how to do DNS query via different server in PHP because &lt;a class="reference external" href="http://www.opendns.com/"&gt;OpenDNS&lt;/a&gt; always resolve all domains even they should result &lt;tt class="docutils literal"&gt;NXDOMAN&lt;/tt&gt;. I don&amp;#8217;t know how to do that in PHP, but I am sure there is some libraries already for such task as same in Python, such as &lt;a class="reference external" href="http://pydns.sourceforge.net/"&gt;PyDNS&lt;/a&gt; or &lt;a class="reference external" href="http://www.dnspython.org/"&gt;dnspython&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The website of &lt;a class="reference external" href="http://pydns.sourceforge.net/"&gt;PyDNS&lt;/a&gt; isn&amp;#8217;t very helpful, there is no sample code as I didn&amp;#8217;t see any, but &lt;a class="reference external" href="http://pydns.cvs.sourceforge.net/viewvc/pydns/pydns/README.txt?view=markup"&gt;README&lt;/a&gt; is well enough to get started. I wrote a quick after I learned a bit of &lt;a class="reference external" href="http://pydns.sourceforge.net/"&gt;PyDNS&lt;/a&gt;, it was hard to use as you can see as the following sample code:&lt;/p&gt;
&lt;pre&gt;&lt;code class="python"&gt;# -*- coding: utf-8 -*-
import DNS

print 'PyDNS %s' % DNS.__version__

DNS.DiscoverNameServers()
print 'NS: %s' % DNS.defaults['server']

DN = 'example.com'
IDN = u'παράδειγμα.δοκιμή'
NXDN = 'foobar.example.com'

def q(name, qtype):

  print '%4s Query on %s -&amp;gt; %s' % (qtype, name.encode('utf-8'), DNS.dnslookup(name, qtype))

q('google.com', 'A')
q('google.com', 'AAAA')
q(DN, 'A')
q(DN, 'AAAA')
q(IDN, 'A')
q(IDN, 'AAAA')

# Catching error
try:
  q(NXDN, 'A')
except DNS.ServerError as e:
  if e.rcode == 3:
    print 'Cannot resolve %s' % NXDN.encode('utf-8')
  else:
    raise e

# Again, but let it raise
q(NXDN, 'A')&lt;/code&gt;&lt;/pre&gt;&lt;pre class="no-collapse"&gt;PyDNS 2.3.6
NS: ['168.95.192.1', '168.95.1.1']
   A Query on google.com -&amp;gt; ['72.14.203.102', '72.14.203.113', '72.14.203.138', '72.14.203.139', '72.14.203.100', '72.14.203.101']
AAAA Query on google.com -&amp;gt; []
   A Query on example.com -&amp;gt; ['192.0.43.10']
AAAA Query on example.com -&amp;gt; [' \x01\x05\x00\x00\x88\x02\x00\x00\x00\x00\x00\x00\x00\x00\x10']
   A Query on παράδειγμα.δοκιμή -&amp;gt; ['199.7.85.13']
AAAA Query on παράδειγμα.δοκιμή -&amp;gt; ['&amp;amp; \x00\x00(0\x020\x00\x00\x00\x00\x00\x00\x00\x10']
Cannot resolve foobar.example.com
&lt;/pre&gt;&lt;pre&gt;Traceback (most recent call last):
  File "&amp;lt;stdin&amp;gt;", line 34, in &amp;lt;module&amp;gt;
  File "&amp;lt;stdin&amp;gt;", line 15, in q
  File "/home/livibetter/lib/python2.5/DNS/lazy.py", line 37, in dnslookup
    result.header['rcode'])
DNS.Base.ServerError: ('DNS query status: NXDOMAIN', 3)
&lt;/pre&gt;&lt;p&gt;You can use &lt;tt class="docutils literal"&gt;DNS.DiscoverNameServers()&lt;/tt&gt; for system&amp;#8217;s name servers for querying.&lt;/p&gt;
&lt;p&gt;On my system, none of any packages were built with &lt;a class="reference external" href="http://idn.icann.org/"&gt;IDN&lt;/a&gt; (nor IPv6) support. But since you can do a manual query, querying IDN isn&amp;#8217;t a problem and changing the default DNS isn&amp;#8217;t very hard:&lt;/p&gt;
&lt;pre&gt;&lt;code class="python"&gt;# -*- coding: utf-8 -*-
import DNS

DNS.DiscoverNameServers()
print 'NS: %s' % DNS.defaults['server']

NXDN = 'foobar.example.com'

def q(name, qtype):

  try:
    print '%4s Query on %s -&amp;gt; %s' % (qtype, name.encode('utf-8'), DNS.dnslookup(name, qtype))
  except DNS.ServerError as e:
    if e.rcode == 3:
      print 'Cannot resolve %s' % name.encode('utf-8')
    else:
      raise e

q(NXDN, 'A')

DNS.defaults['server'] = ['208.67.222.222', '208.67.220.220']
print 'NS changed to OpenDNS: %s' % DNS.defaults['server']

q(NXDN, 'A')&lt;/code&gt;&lt;/pre&gt;&lt;pre class="no-collapse"&gt;NS: ['168.95.192.1', '168.95.1.1']
Cannot resolve foobar.example.com
NS changed to OpenDNS: ['208.67.222.222', '208.67.220.220']
   A Query on foobar.example.com -&amp;gt; ['67.215.65.132']
&lt;/pre&gt;&lt;p&gt;More practical method should generate a request object and query through it, check out &lt;tt class="docutils literal"&gt;dnslookup&lt;/tt&gt; function in &lt;tt class="docutils literal"&gt;lazy.py&lt;/tt&gt; to see how you can do it more comprehensive.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3803541356848955053-7635234197492775553?l=blog.yjl.im' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/r8xp37rgUIctHx8iMK7XDpo6iCQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/r8xp37rgUIctHx8iMK7XDpo6iCQ/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/r8xp37rgUIctHx8iMK7XDpo6iCQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/r8xp37rgUIctHx8iMK7XDpo6iCQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/YJLv?a=tK7JN8TV0RM:GmxXIE-j2I8:AOzAX-4I-Ts"&gt;&lt;img src="http://feeds.feedburner.com/~ff/YJLv?i=tK7JN8TV0RM:GmxXIE-j2I8:AOzAX-4I-Ts" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/YJLv/~4/tK7JN8TV0RM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.yjl.im/feeds/7635234197492775553/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.yjl.im/2012/02/using-pydns-for-manual-domain-name.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3803541356848955053/posts/default/7635234197492775553?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3803541356848955053/posts/default/7635234197492775553?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/YJLv/~3/tK7JN8TV0RM/using-pydns-for-manual-domain-name.html" title="Using PyDNS for manual domain name lookup" /><author><name>Yu-Jie Lin</name><uri>https://profiles.google.com/115422682039760465813</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-e-i3n52TFPI/AAAAAAAAAAI/AAAAAAAAAAA/N3NefrEGlxM/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.yjl.im/2012/02/using-pydns-for-manual-domain-name.html</feedburner:origLink></entry></feed>

