<?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;CkUBQHk8cSp7ImA9WhRUFkU.&quot;"><id>tag:blogger.com,1999:blog-3803541356848955053</id><updated>2012-01-27T08:04:11.779-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="Bourne shell" /><category term="Google+" /><category term="New York" /><category term="shooting" /><category term="Thai" /><category term="Modernizr" /><category term="Blue Marble" /><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="introduction" /><category term="list" /><category term="environment variable" /><category term="notetaking" /><category term="tmux" /><category term="LCD" /><category term="Unbroken" /><category term="OldBlogmakeYJL" /><category term="FX" /><category term="BSD" /><category term="ASCII art" /><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="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="GPG" /><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="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="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="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="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="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="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="Josh Peterson" /><category term="thought" /><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="Perl" /><category term="battery" /><category term="record" /><category term="Ox" /><category term="execution" /><category term="text" /><category term="cross-domain" /><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="ISP" /><category term="sleep" /><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="Brainfuck" /><category term="string format" /><category term="Keep Last Two Tabs" /><category term="PYTHONSTARTUP" /><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="genlop" /><category term="Dial-up Network" /><category term="Soviet" /><category term="Streaming API" /><category term="school" /><category term="Blogger" /><category term="random post" /><category term="billing" /><category term="wmctrl" /><category term="Leah Daniels" /><category term="Hinet" /><category term="Fortran" /><category term="xmllint" /><category term="photo" /><category term="Reamonn" /><category term="Midnight Commander" /><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="Tux" /><category term="MGS1" /><category term="jackd" /><category term="sitemap" /><category term="navbar" /><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="adventure" /><category term="socket" /><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="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="umount" /><category term="IRC" /><category term="related post" /><category term="SSL" /><category term="minor" /><category term="image" /><category term="qlop" /><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="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="Rechargeable Alkaline battery" /><category term="documentation" /><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="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="binary-based" /><category term="shared library" /><category term="dungeon" /><category term="seven" /><category term="tracking" /><category term="scrot" /><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="AVLD" /><category term="slide" /><category term="utimer" /><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="listing" /><category term="sex" /><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="operating system" /><category term="crash" /><category term="musical" /><category term="rainy" /><category term="dock" /><category term="random" /><category term="experience" /><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="search" /><category term="referrer" /><category term="ClientLogin" /><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="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="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="tag" /><category term="gadget" /><category term="event" /><category term="capability" /><category term="Supergirl" /><category term="command" /><category term="Disqus" /><category term="stopwatch" /><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="Pink" /><category term="speed" /><category term="Google Webmaster Tools" /><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="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="screencast" /><category term="sandbox" /><category term="pricing" /><category term="rules" /><category term="Twitterank" /><category term="cross-site" /><category term="cache" /><category term="nipple" /><category term="no-multilib" /><category term="return value" /><category term="PyXSS" /><category term="graph" /><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="CLI" /><category term="feline" /><category term="vidir" /><category term="birthday" /><category term="spoon" /><category term="tutorial" /><category term="Jack Nicholson" /><category term="falling snow" /><category term="streaming" /><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="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="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="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="charity" /><category term="plugin" /><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="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="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="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="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="FlickrFS" /><category term="sharing" /><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="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="binding" /><category term="spped" /><category term="tv show" /><category term="page navigation" /><category term="XOAuth" /><category term="flower" /><category term="Masterbranch" /><category term="world clock" /><category term="RPMFusion" /><category term="audio" /><category term="git" /><category term="Halloween" /><category term="Bible" /><category term="gdata" /><category term="jQuery TextFill" /><category term="wish" /><category term="Bashrun" /><category term="tiv" /><category term="gradient" /><category term="OCR" /><category term="QT3" /><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="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="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="Flot" /><category term="tip" /><category term="LZMA" /><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="chance" /><category term="weird" /><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="audio processing" /><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="promise" /><category term="stove" /><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="movie" /><category term="Say" /><category term="Lisa Hannigan" /><category term="g-yt-embed" /><category term="hand" /><category term="escape" /><category term="dawn" /><category term="color" /><category term="Damien Rice" /><category term="bastet" /><category term="Barack Obama" /><category term="capture" /><category term="Summer" /><category term="Atom" /><category term="Lobster Wars" /><category term="wiki" /><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="Marshall University" /><category term="Ian Murdock" /><category term="Clip Smile" /><category term="cabin" /><category term="cairo-dock" /><category term="science" /><category term="Woopra" /><category term="log.sh" /><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="Fox" /><category term="rename" /><category term="Hawaii Five-0" /><category term="Graphviz" /><category term="Shell.FM" /><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="Solaris" /><category term="JDIC" /><category term="romance" /><category term="livibetter.mp" /><category term="visualization" /><category term="attack" /><category term="RFC" /><category term="Google Spreadsheet" /><category term="MSN" /><category term="Terrified" /><category term="waste" /><category term="traceback" /><category term="charger" /><category term="volume" /><category term="Lille" /><category term="gnuclad" /><category term="sci-fi" /><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="MPD" /><category term="No Ordinary Family" /><category term="direction" /><category term="stair" /><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="Moskau" /><category term="super power" /><category term="Visual Effect" /><category term="interestingness" /><category term="template" /><category term="band" /><category term="snowman" /><category term="Gsource" /><category term="Steve Jobs" /><category term="ctypes" /><category term="word cloud" /><category term="Blackberry" /><category term="response" /><category term="animation" /><category term="mom" /><category term="Friend Connect" /><category term="BFS" /><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="datatype" /><category term="songwriter" /><category term="Arch Hurd" /><category term="classic" /><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="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="skeleton" /><category term="Gzip" /><category term="recursion" /><category term="blit" /><category term="visits" /><category term="Selah" /><category term="Twitter" /><category term="center" /><category term="BashPad" /><category term="Chase" /><category term="signature" /><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="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="GNU/Screen" /><category term="sketch" /><category term="microwave" /><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="MODEM" /><category term="microphone" /><category term="Google Docs Viewer" /><category term="tomorrow" /><category term="Google Buzz" /><category term="bzen2" /><category term="F1" /><category term="x11grabr" /><category term="package" /><category term="live" /><category term="movie-game" /><category term="hash" /><category term="shopping" /><category term="Mozilla Firefox" /><category term="jQuery plugin" /><category term="Hey Jude" /><category term="resolution" /><category term="service" /><category term="bottle" /><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="violence" /><category term="baked" /><category term="Ishihara color test" /><category term="memory" /><category term="chroot" /><category term="search box" /><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="Live Webmaster Tools" /><category term="math" /><category term="QT" /><category term="binclock" /><category term="radio" /><category term="drawing" /><category term="spamming" /><category term="lmgtfy.com" /><category term="login" /><category term="OpenDocument" /><category term="SSMTP" /><category term="MP3" /><category term="reverse video" /><category term="Autumn" /><category term="donation" /><category term="i8042" /><category term="Breaking Bad" /><category term="SXSW" /><category term="status code" /><category term="skin" /><category term="task" /><category term="vegetarian" /><category term="advertisment" /><category term="server" /><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="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="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="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="tablet" /><category term="rm" /><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="telnet" /><category term="Kesha" /><category term="SoftMaker" /><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="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>735</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;CkUBQ346fip7ImA9WhRUFkU.&quot;"><id>tag:blogger.com,1999:blog-3803541356848955053.post-989480066147743444</id><published>2012-01-27T08:04:00.000-08:00</published><updated>2012-01-27T08:04:12.016-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-27T08:04:12.016-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="fadeout" /><category scheme="http://www.blogger.com/atom/ns#" term="fading" /><category scheme="http://www.blogger.com/atom/ns#" term="text" /><category scheme="http://www.blogger.com/atom/ns#" term="CSS" /><category scheme="http://www.blogger.com/atom/ns#" term="effect" /><category scheme="http://www.blogger.com/atom/ns#" term="gradient" /><title>Bottom text fadeout with solid background color using CSS</title><content type="html">&lt;p&gt;I was making a &lt;a class="reference external" href="http://livibetter.github.com//ffrc-kittycam-ce/kittyoverflow.html"&gt;webpage&lt;/a&gt; and wanted to make bottom of a text fade, which is a small portion of a long text. It should indicate perfectly that there is more text as if saying &lt;em&gt;&amp;#8220;click to read more.&amp;#8221;&lt;/em&gt;&lt;/p&gt;&lt;style&gt;
.fade-text-container {
  color: #aaa;
  background-color: #333;
  border-radius: 0.5em;
  padding: 0.5em;
}

.fade-text-container,
.text-container {
  line-height: 1.5em;
  width: 320px;
  /* 10 lines =&gt; 1.5em * 10 = 15em ***/
  height: 15em;
  overflow: hidden;
}

.fadeout {
  position: relative;
  /* 3 lines =&gt; 1.5em * 3 = 4.5em ***/
  height: 4.5em;
  top: -4.5em;
  background: -webkit-linear-gradient(
    rgba(51, 51, 51, 0) 0%,
    rgba(51, 51, 51, 1) 100%
    );
  background: -moz-linear-gradient(
    rgba(51, 51, 51, 0) 0%,
    rgba(51, 51, 51, 1) 100%
    );
  background: linear-gradient(
    rgba(51, 51, 51, 0) 0%,
    rgba(51, 51, 51, 1) 100%
    );
  z-index: 1;
}
&lt;/style&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div class="fade-text-container"&gt;  &lt;div class="text-container"&gt;Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam dui nunc, tempus vel ullamcorper ac, aliquet iaculis purus. Donec fermentum ipsum nec odio convallis et venenatis felis bibendum. Proin sed quam massa. Ut nibh mauris, tempor eget suscipit nec, tempus ac lectus. Proin sed augue ante, in fringilla nunc. Proin adipiscing orci molestie mi vehicula viverra. Aliquam erat volutpat. Proin tortor leo, tempor quis luctus vitae, pharetra non quam. Mauris et nisl sit amet arcu pharetra tempus in vel enim. Vestibulum lacinia porttitor sodales.&lt;/div&gt;  &lt;div class="fadeout"&gt;&lt;/div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&amp;lt;style&amp;gt;
.fade-text-container {
  color: #aaa;
  background-color: #333;
  border-radius: 0.5em;
  padding: 0.5em;
}

.fade-text-container,
.text-container {
  line-height: 1.5em;
  width: 320px;
  /* 10 lines =&amp;gt; 1.5em * 10 = 15em ***/
  height: 15em;
  overflow: hidden;
}

.fadeout {
  position: relative;
  /* 3 lines =&amp;gt; 1.5em * 3 = 4.5em ***/
  height: 4.5em;
  top: -4.5em;
  background: -webkit-linear-gradient(
    rgba(51, 51, 51, 0) 0%,
    rgba(51, 51, 51, 1) 100%
    );
  background: -moz-linear-gradient(
    rgba(51, 51, 51, 0) 0%,
    rgba(51, 51, 51, 1) 100%
    );
  background: linear-gradient(
    rgba(51, 51, 51, 0) 0%,
    rgba(51, 51, 51, 1) 100%
    );
  z-index: 1;
}
&amp;lt;/style&amp;gt;

&amp;lt;div class="fade-text-container"&amp;gt;
  &amp;lt;div class="text-container"&amp;gt;Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam dui nunc, tempus vel ullamcorper ac, aliquet iaculis purus. Donec fermentum ipsum nec odio convallis et venenatis felis bibendum. Proin sed quam massa. Ut nibh mauris, tempor eget suscipit nec, tempus ac lectus. Proin sed augue ante, in fringilla nunc. Proin adipiscing orci molestie mi vehicula viverra. Aliquam erat volutpat. Proin tortor leo, tempor quis luctus vitae, pharetra non quam. Mauris et nisl sit amet arcu pharetra tempus in vel enim. Vestibulum lacinia porttitor sodales.&amp;lt;/div&amp;gt;
  &amp;lt;div class="fadeout"&amp;gt;&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;It&amp;#8217;s two-level container, top one &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;.fade-text-container&lt;/span&gt;&lt;/tt&gt; contains the text &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;.text-container&lt;/span&gt;&lt;/tt&gt; and the fadeout effect &lt;tt class="docutils literal"&gt;.fadeout&lt;/tt&gt;. Because the need of calucating the position of &lt;tt class="docutils literal"&gt;.fadeout&lt;/tt&gt;, so I made two-level and so &lt;tt class="docutils literal"&gt;.fadeout&lt;/tt&gt; can be placed at exactly at bottom of text. Using this method, I can set how many exactly lines I want to fade out.&lt;/p&gt;&lt;p&gt;There is one issue I am aware of, because &lt;tt class="docutils literal"&gt;.fadeout&lt;/tt&gt; is on top of text, therefore the text under it can not be selected. It shouldn&amp;#8217;t be a big issue, because normally you want visitor actually to click and to go to another page. You can set up a click event on &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;.fade-text-container&lt;/span&gt;&lt;/tt&gt; and redirect user to other page.&lt;/p&gt;&lt;p&gt;This method only works with background is solid color.&lt;/p&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3803541356848955053-989480066147743444?l=blog.yjl.im' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/YJLv?a=Q8i_mWUixU0:xLsPl7SN5Uo:AOzAX-4I-Ts"&gt;&lt;img src="http://feeds.feedburner.com/~ff/YJLv?i=Q8i_mWUixU0:xLsPl7SN5Uo: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/Q8i_mWUixU0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.yjl.im/feeds/989480066147743444/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.yjl.im/2012/01/bottom-text-fadeout-with-solid.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3803541356848955053/posts/default/989480066147743444?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3803541356848955053/posts/default/989480066147743444?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/YJLv/~3/Q8i_mWUixU0/bottom-text-fadeout-with-solid.html" title="Bottom text fadeout with solid background color using CSS" /><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/01/bottom-text-fadeout-with-solid.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEYGSHw_eyp7ImA9WhRUFUQ.&quot;"><id>tag:blogger.com,1999:blog-3803541356848955053.post-1676161211929250002</id><published>2012-01-26T08:42:00.000-08:00</published><updated>2012-01-26T08:42:09.243-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-26T08:42:09.243-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="JavaScript" /><category scheme="http://www.blogger.com/atom/ns#" term="JSON" /><category scheme="http://www.blogger.com/atom/ns#" term="filter" /><category scheme="http://www.blogger.com/atom/ns#" term="link" /><category scheme="http://www.blogger.com/atom/ns#" term="jQuery" /><title>Filtering links in Blogger/YouTube/etc API JSON</title><content type="html">&lt;br /&gt;
If you have used Google/Blogger/YouTube/etc API with JSON format, you may have seen the &lt;tt class="docutils literal"&gt;link&lt;/tt&gt; array like&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;code class="javascript"&gt;entry =
{
&amp;nbsp; "link":
&amp;nbsp;&amp;nbsp;&amp;nbsp; [
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "rel":&amp;nbsp;&amp;nbsp; "replies",
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "type":&amp;nbsp; "application/atom+xml",
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "href":&amp;nbsp; "http://example.com/link1",
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "title": "Post Comments"
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; },
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "rel":&amp;nbsp;&amp;nbsp; "replies",
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "type":&amp;nbsp; "text/html",
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "href":&amp;nbsp; "http://example.com/link2",
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "title": "Comments"
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; },
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "rel":&amp;nbsp;&amp;nbsp; "edit",
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "type":&amp;nbsp; "application/atom+xml",
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "href":&amp;nbsp; "http://example.com/link3",
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; },
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "rel":&amp;nbsp;&amp;nbsp; "self",
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "type":&amp;nbsp; "application/atom+xml",
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "href":&amp;nbsp; "http://example.com/link4",
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; },
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "rel":&amp;nbsp;&amp;nbsp; "alternate",
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "type":&amp;nbsp; "text/html",
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "href":&amp;nbsp; "http://example.com/link5",
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "title": "Example Title"
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp; ]
}&lt;/code&gt;&lt;/pre&gt;
Usually, you want the one which type is &lt;tt class="docutils literal"&gt;text/html&lt;/tt&gt; and a link to normal webpage. I used to write a &lt;tt class="docutils literal"&gt;for&lt;/tt&gt; loop, every time I need to get that one. I do mean every time, who knows how much time I wasted in writing the same loop code.&lt;br /&gt;
&lt;br /&gt;
I finally came up a quick and better way using jQuery:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;code&gt;var link = $($.grep(entry.link, function(link, idx) {return link.rel == 'alternate'})).prop('href');
// breakdown
var link = $(
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $.grep(entry.link,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; function(link, idx) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return link.rel == 'alternate'
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; })
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ).prop('href');&lt;/code&gt;&lt;/pre&gt;
Even its reasonably little longer one-liner, its much more clear than a &lt;tt class="docutils literal"&gt;for&lt;/tt&gt; loop, and could be same clear for who is not familiar with jQuery. The only drawback I could think of is: it could be slower than &lt;tt class="docutils literal"&gt;for&lt;/tt&gt; loop, though I haven’t tested.&lt;br /&gt;
&lt;br /&gt;
jQuery accepts objects not just DOM, you can have some methods though you don’t have selector-like to filter, but in this case, &lt;tt class="docutils literal"&gt;$.grep&lt;/tt&gt; is good enough for processing. The result will be an array of objects and I use &lt;tt class="docutils literal"&gt;prop()&lt;/tt&gt; to extract the &lt;cite&gt;href&lt;/cite&gt; attribute after the results are turned into jQuery object.&lt;br /&gt;
&lt;br /&gt;
Certainly, you can use just &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;match_results[0].href&lt;/span&gt;&lt;/tt&gt;, directly access object’s &lt;tt class="docutils literal"&gt;href&lt;/tt&gt; attribute. But you can not guarantee that &lt;tt class="docutils literal"&gt;match_results&lt;/tt&gt; is not an empty array. If it is, you will get a Type Error, because your code tries to get &lt;tt class="docutils literal"&gt;undefined.href&lt;/tt&gt;.&lt;br /&gt;
&lt;br /&gt;
Using &lt;tt class="docutils literal"&gt;prop()&lt;/tt&gt;, it will fail silently by returning &lt;tt class="docutils literal"&gt;undefined&lt;/tt&gt; and you can check it or just leave it in &lt;tt class="docutils literal"&gt;&amp;lt;a/&amp;gt;&lt;/tt&gt; if you don’t care.&lt;br /&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3803541356848955053-1676161211929250002?l=blog.yjl.im' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/YJLv?a=-OUDcfArYY8:JmTftcM1En4:AOzAX-4I-Ts"&gt;&lt;img src="http://feeds.feedburner.com/~ff/YJLv?i=-OUDcfArYY8:JmTftcM1En4: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/-OUDcfArYY8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.yjl.im/feeds/1676161211929250002/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.yjl.im/2012/01/filtering-links-in-bloggeryoutubeetc.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3803541356848955053/posts/default/1676161211929250002?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3803541356848955053/posts/default/1676161211929250002?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/YJLv/~3/-OUDcfArYY8/filtering-links-in-bloggeryoutubeetc.html" title="Filtering links in Blogger/YouTube/etc API JSON" /><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/01/filtering-links-in-bloggeryoutubeetc.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUQFSHw6fCp7ImA9WhRUFE8.&quot;"><id>tag:blogger.com,1999:blog-3803541356848955053.post-6884553803557061699</id><published>2012-01-24T08:41:00.000-08:00</published><updated>2012-01-24T08:41:59.214-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-24T08:41:59.214-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="shell scripting" /><category scheme="http://www.blogger.com/atom/ns#" term="template" /><category scheme="http://www.blogger.com/atom/ns#" term="skeleton" /><category scheme="http://www.blogger.com/atom/ns#" term="boilerplate" /><category scheme="http://www.blogger.com/atom/ns#" term="template.sh" /><category scheme="http://www.blogger.com/atom/ns#" term="Bash" /><title>My Bash script template</title><content type="html">A few days ago, I read &lt;a href="http://linuxtidbits.wordpress.com/2012/01/20/bash-script-templates/"&gt;Bash Script Templates&lt;/a&gt; and I think this might be a good idea to start one of my own. I later found &lt;a href="http://blog.bigsmoke.us/2011/01/05/bash-script-template"&gt;two&lt;/a&gt; &lt;a href="http://bashify.com/?Scripts_%26amp%3B_Tools:Script_Skeleton"&gt;more&lt;/a&gt; posts about it, it's not easy to find one. Either search engine was playing with me or I was too dumb to enter perfect search terms.&lt;br /&gt;
&lt;br /&gt;
I read them and got some concepts from all three of them. Some I like, some I don't. I mingled them altogether with my own thoughts. I created a new repository: &lt;a href="https://github.com/livibetter/template.sh"&gt;template.sh&lt;/a&gt;, it could be a good idea for it to have own repo, so you may contribute to it easily.&lt;br /&gt;
&lt;br /&gt;
It's still a work-in-progress, but it already has 177 lines (159 sloc) for &lt;a href="https://github.com/livibetter/template.sh/blob/af090bf29e991b7c75d65aa53e123a02f2bbb1db/template.sh"&gt;first version&lt;/a&gt;. I have been thinking that a library could be a better idea, especially when I was writing the &lt;code&gt;parse_options&lt;/code&gt; function. It could be working like argument parsing in C or in Python with their libraries, and the code would be more clean.&lt;br /&gt;
&lt;br /&gt;
I had also thought of creating user interface, you can click buttons or be asked questions to enable/disable features, then a template will be generated. But that's a lot of works, not sure if that's worth. I didn't go that way eventually, but a simple file.&lt;br /&gt;
&lt;br /&gt;
Please be aware that I haven't used it yet, so I don't really know if it's practical enough. If you run into trouble, please open an issue. Any feedback is welcome, leave a comment.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3803541356848955053-6884553803557061699?l=blog.yjl.im' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/YJLv?a=X8kf0mvSgBA:3Hm4JJ26NHU:AOzAX-4I-Ts"&gt;&lt;img src="http://feeds.feedburner.com/~ff/YJLv?i=X8kf0mvSgBA:3Hm4JJ26NHU: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/X8kf0mvSgBA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.yjl.im/feeds/6884553803557061699/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.yjl.im/2012/01/my-bash-script-template.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3803541356848955053/posts/default/6884553803557061699?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3803541356848955053/posts/default/6884553803557061699?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/YJLv/~3/X8kf0mvSgBA/my-bash-script-template.html" title="My Bash script template" /><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/01/my-bash-script-template.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEUMSXw5fyp7ImA9WhRUE0k.&quot;"><id>tag:blogger.com,1999:blog-3803541356848955053.post-7569808048011026514</id><published>2012-01-23T10:11:00.000-08:00</published><updated>2012-01-23T10:11:28.227-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-23T10:11:28.227-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="arithmetic evaluation" /><category scheme="http://www.blogger.com/atom/ns#" term="shell scripting" /><category scheme="http://www.blogger.com/atom/ns#" term="builtin" /><category scheme="http://www.blogger.com/atom/ns#" term="arithmetic expansion" /><category scheme="http://www.blogger.com/atom/ns#" term="return value" /><category scheme="http://www.blogger.com/atom/ns#" term="Bash" /><title>Arithmetic Expansion and colon builtin command in Bash</title><content type="html">I just did a system update and got configuration diffs like&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;code&gt;-               i=$(($i + 1))
+               : $(( i += 1 ))&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
If you don't know &lt;code&gt;:&lt;/code&gt; builtin yet, read first entry of "SHELL BUILTIN COMMANDS." I have been using it quite often with infinite while loop, e.g.&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;code&gt;while :; do
  do_something
done&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
I never thought of putting something behind it, and that diff is quite genius in my opinion. However I will just write&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="bash"&gt;&lt;code&gt;(( i++ ))&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
I don't see there is a reason for using Arithmetic Expansion, Evaluation is enough and clear. Expansion will returns the expanded string, which cause command execution if you don't prefix with &lt;code&gt;:&lt;/code&gt;, and you will get "command not found" error.&lt;br /&gt;
&lt;br /&gt;
There is a good use of &lt;code&gt;:&lt;/code&gt;, putting it after last command of a function or last command of a script, if they have chances to return non-zero and you do not care if that command runs into problem. This way it will clear out the returned value.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3803541356848955053-7569808048011026514?l=blog.yjl.im' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/YJLv?a=eEHH20vwJvU:8RDjAVAZUqM:AOzAX-4I-Ts"&gt;&lt;img src="http://feeds.feedburner.com/~ff/YJLv?i=eEHH20vwJvU:8RDjAVAZUqM: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/eEHH20vwJvU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.yjl.im/feeds/7569808048011026514/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.yjl.im/2012/01/arithmetic-expansion-and-colon-builtin.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3803541356848955053/posts/default/7569808048011026514?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3803541356848955053/posts/default/7569808048011026514?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/YJLv/~3/eEHH20vwJvU/arithmetic-expansion-and-colon-builtin.html" title="Arithmetic Expansion and colon builtin command 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/01/arithmetic-expansion-and-colon-builtin.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0YARnYzfSp7ImA9WhRUE04.&quot;"><id>tag:blogger.com,1999:blog-3803541356848955053.post-1829031064169320095</id><published>2012-01-23T07:05:00.000-08:00</published><updated>2012-01-23T07:05:47.885-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-23T07:05:47.885-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="shell scripting" /><category scheme="http://www.blogger.com/atom/ns#" term="log.sh" /><category scheme="http://www.blogger.com/atom/ns#" term="library" /><category scheme="http://www.blogger.com/atom/ns#" term="logging" /><category scheme="http://www.blogger.com/atom/ns#" term="Bash" /><title>log.sh - Bash logging library</title><content type="html">As I mentioned in previous post about &lt;a href="http://blog.yjl.im/2012/01/printing-out-call-stack-in-bash.html"&gt;Call Stack&lt;/a&gt;, the thing is ready on GitHub, &lt;a href="https://github.com/livibetter/log.sh"&gt;log.sh&lt;/a&gt;. It's a library for easy logging, here is a quick screenshot of the examples:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-C4ina8EsnG8/Tx11fpAzEcI/AAAAAAAAC_Y/_-9WjbSOZgs/s1600/2012-01-23--22%253A51%253A57.png" imageanchor="1"&gt;&lt;img border="0" class="no-autoresize" src="http://1.bp.blogspot.com/-C4ina8EsnG8/Tx11fpAzEcI/AAAAAAAAC_Y/_-9WjbSOZgs/s1600/2012-01-23--22%253A51%253A57.png" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
As you can see, it's &lt;b&gt;&lt;span style="color: blue;"&gt;c&lt;/span&gt;&lt;span style="color: lime;"&gt;o&lt;/span&gt;&lt;span style="color: yellow;"&gt;l&lt;/span&gt;&lt;span style="color: red;"&gt;o&lt;/span&gt;&lt;span style="background-color: red; color: white;"&gt;r&lt;/span&gt;&lt;/b&gt;ful, little too fancy, I hope it didn't blind you. It's new , so I hope someone can jump in and improve it. There are some in it I didn't like, e.g. the templating.&lt;br /&gt;
&lt;br /&gt;
It's easy to use, just &lt;code&gt;source log.sh&lt;/code&gt;, then you are good to go. Please read more on &lt;a href="https://github.com/livibetter/log.sh"&gt;GitHub&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3803541356848955053-1829031064169320095?l=blog.yjl.im' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/YJLv?a=AEt4tP6l8I0:QXg2awJQQwA:AOzAX-4I-Ts"&gt;&lt;img src="http://feeds.feedburner.com/~ff/YJLv?i=AEt4tP6l8I0:QXg2awJQQwA: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/AEt4tP6l8I0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.yjl.im/feeds/1829031064169320095/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.yjl.im/2012/01/logsh-bash-logging-library.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3803541356848955053/posts/default/1829031064169320095?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3803541356848955053/posts/default/1829031064169320095?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/YJLv/~3/AEt4tP6l8I0/logsh-bash-logging-library.html" title="log.sh - Bash logging library" /><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://1.bp.blogspot.com/-C4ina8EsnG8/Tx11fpAzEcI/AAAAAAAAC_Y/_-9WjbSOZgs/s72-c/2012-01-23--22%253A51%253A57.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.yjl.im/2012/01/logsh-bash-logging-library.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEYMQHY_eip7ImA9WhRUEko.&quot;"><id>tag:blogger.com,1999:blog-3803541356848955053.post-4012406183786434129</id><published>2012-01-22T14:43:00.000-08:00</published><updated>2012-01-22T14:43:01.842-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-22T14:43:01.842-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="call stack" /><category scheme="http://www.blogger.com/atom/ns#" term="shell scripting" /><category scheme="http://www.blogger.com/atom/ns#" term="traceback" /><category scheme="http://www.blogger.com/atom/ns#" term="Bash" /><title>Printing out Call Stack in Bash</title><content type="html">&lt;p&gt;Yes, there is such same thing called &lt;a class="reference external" href="http://en.wikipedia.org/wiki/Call_stack"&gt;Call Stack&lt;/a&gt; in Bash as you see in C, Python, etc. The information is stored in &lt;tt class="docutils literal"&gt;BASH_SOURCE&lt;/tt&gt;, &lt;tt class="docutils literal"&gt;BASH_LINENO&lt;/tt&gt;, and &lt;tt class="docutils literal"&gt;FUNCNAME&lt;/tt&gt;. They all are arrays with same length/depth. The last item represents main script, the first item is the current function (or main script) of where these arrays are accessed.&lt;/p&gt;
&lt;p&gt;Here is some working code, the first file &lt;tt class="docutils literal"&gt;test.sh&lt;/tt&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code class="bash"&gt;#!/bin/bash
# Copyright 2012 Yu-Jie Lin
# MIT License

# Log Call Stack
LSLOGSTACK () {
  local i=0
  local FRAMES=${#BASH_LINENO[@]}
  # FRAMES-2 skips main, the last one in arrays
  for ((i=FRAMES-2; i&amp;gt;=0; i--)); do
    echo '  File' \"${BASH_SOURCE[i+1]}\", line ${BASH_LINENO[i]}, in ${FUNCNAME[i+1]}
    # Grab the source code of the line
    sed -n "${BASH_LINENO[i]}{s/^/    /;p}" "${BASH_SOURCE[i+1]}"
  done
}

source src.sh
# LINE 18
func2 () {
  func3 foo bar
}
# LINE 22
func1 () {
  func2 a b c
}
# LINE 26
func1 1 2 3&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This is extracted from something I am currently working on, which will be released under the MIT License, so this small code is with same license. The second file &lt;tt class="docutils literal"&gt;src.sh&lt;/tt&gt; is for being sourced:&lt;/p&gt;
&lt;pre&gt;&lt;code class="bash"&gt;func3 () {
  LSLOGSTACK
}&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;And the output:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
$ ./test.sh
  File &amp;quot;./test.sh&amp;quot;, line 27, in main
    func1 1 2 3
  File &amp;quot;./test.sh&amp;quot;, line 24, in func1
      func2 a b c
  File &amp;quot;./test.sh&amp;quot;, line 20, in func2
      func3 foo bar
  File &amp;quot;src.sh&amp;quot;, line 2, in func3
      LSLOGSTACK
&lt;/pre&gt;
&lt;p&gt;It may look vaguely familiar to you if you are also a Python coder, the code mimics the output of &lt;a class="reference external" href="http://docs.python.org/library/traceback.html"&gt;Traceback&lt;/a&gt; module.&lt;/p&gt;
&lt;p&gt;The explanation of those three arrays can be found in &lt;tt class="docutils literal"&gt;man bash&lt;/tt&gt;. I am also planning to print out &lt;tt class="docutils literal"&gt;BASH_ARGV&lt;/tt&gt; for each frame, but that will be in that library I am coding.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3803541356848955053-4012406183786434129?l=blog.yjl.im' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/YJLv?a=6dTV8lQHArM:hZaiJGifHVY:AOzAX-4I-Ts"&gt;&lt;img src="http://feeds.feedburner.com/~ff/YJLv?i=6dTV8lQHArM:hZaiJGifHVY: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/6dTV8lQHArM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.yjl.im/feeds/4012406183786434129/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.yjl.im/2012/01/printing-out-call-stack-in-bash.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3803541356848955053/posts/default/4012406183786434129?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3803541356848955053/posts/default/4012406183786434129?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/YJLv/~3/6dTV8lQHArM/printing-out-call-stack-in-bash.html" title="Printing out Call Stack 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/01/printing-out-call-stack-in-bash.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUIFQn8yfCp7ImA9WhRUEks.&quot;"><id>tag:blogger.com,1999:blog-3803541356848955053.post-3823154959950015159</id><published>2012-01-22T12:18:00.000-08:00</published><updated>2012-01-22T12:18:33.194-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-22T12:18:33.194-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="status code" /><category scheme="http://www.blogger.com/atom/ns#" term="HTTP" /><category scheme="http://www.blogger.com/atom/ns#" term="parody" /><category scheme="http://www.blogger.com/atom/ns#" term="RFC" /><category scheme="http://www.blogger.com/atom/ns#" term="LOL" /><category scheme="http://www.blogger.com/atom/ns#" term="webdev" /><title>RFC for HTTP Status Code 7XX: Developer Errors</title><content type="html">Go check out first on &lt;a href="https://github.com/joho/7XX-rfc"&gt;GitHub&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
At first glance of the title, even it's a bit of weird, I was kind of believing that was a valid document until I read the code 701. Then, I started laughing. Here is a list of my favorites:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;72X - Edge Cases  &lt;ul&gt;
&lt;li&gt;720 - Unpossible&lt;/li&gt;
&lt;li&gt;721 - Known Unknowns&lt;/li&gt;
&lt;li&gt;722 - Unknown Unknowns&lt;/li&gt;
&lt;li&gt;723 - Tricky&lt;/li&gt;
&lt;li&gt;724 - This line should be unreachable&lt;/li&gt;
&lt;li&gt;725 - It works on my machine&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;73X - Fucking  &lt;ul&gt;
&lt;li&gt;735 - Fucking IE&lt;/li&gt;
&lt;li&gt;736 - Fucking Race Conditions&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;74X - Meme Driven  &lt;ul&gt;
&lt;li&gt;742 - A kitten dies&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;76X - Substance-Affected Developer  &lt;ul&gt;
&lt;li&gt;761 - Hungover&lt;/li&gt;
&lt;li&gt;762 - Stoned&lt;/li&gt;
&lt;li&gt;763 - Over-Caffienated&lt;/li&gt;
&lt;li&gt;764 - Under-Caffienated&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;77X - Predictable Problems  &lt;ul&gt;
&lt;li&gt;777 - Coincidence&lt;/li&gt;
&lt;li&gt;779 - Off By Too Many To Count Error&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;78X - Somebody Else's Problem  &lt;ul&gt;
&lt;li&gt;781 - Operations&lt;/li&gt;
&lt;li&gt;782 - QA&lt;/li&gt;
&lt;li&gt;783 - It was a customer request, honestly&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
Someone really needs to get this into standard. ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3803541356848955053-3823154959950015159?l=blog.yjl.im' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/YJLv?a=XR2L2Hv7NxY:iXXRWKeMCGc:AOzAX-4I-Ts"&gt;&lt;img src="http://feeds.feedburner.com/~ff/YJLv?i=XR2L2Hv7NxY:iXXRWKeMCGc: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/XR2L2Hv7NxY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.yjl.im/feeds/3823154959950015159/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.yjl.im/2012/01/rfc-for-http-status-code-7xx-developer.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3803541356848955053/posts/default/3823154959950015159?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3803541356848955053/posts/default/3823154959950015159?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/YJLv/~3/XR2L2Hv7NxY/rfc-for-http-status-code-7xx-developer.html" title="RFC for HTTP Status Code 7XX: Developer Errors" /><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/01/rfc-for-http-status-code-7xx-developer.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0MAR3czeSp7ImA9WhRUEEo.&quot;"><id>tag:blogger.com,1999:blog-3803541356848955053.post-3826045416115479766</id><published>2012-01-20T06:57:00.000-08:00</published><updated>2012-01-20T06:57:26.981-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-20T06:57:26.981-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="JavaScript" /><category scheme="http://www.blogger.com/atom/ns#" term="random post" /><category scheme="http://www.blogger.com/atom/ns#" term="Blogger" /><category scheme="http://www.blogger.com/atom/ns#" term="Blogger API" /><title>Blogger Random Posts JavaScript function</title><content type="html">&lt;p&gt;There are some Blogger gadget for sending reader to a random post, but they are gadgets, you need to put them into layout. Sometimes, it might not look good, especially you have a custom template.&lt;/p&gt;
&lt;p&gt;For me, I am not fond of such thing, so you won&amp;#8217;t see this on my blog, but it&amp;#8217;s easy to code. Here is a quick result:&lt;/p&gt;
&lt;script&gt;
/* Simple Random Posts function for Blogger
 * Copyright 2012 Yu-Jie Lin
 * Licensed under the MIT License
 */
function blogger_random_post(){
  // You can replace the value with your blog ID
  var blogID = $('#blogID').val();
  // for example:
  //  blogID = "3803541356848955053";
  var BLOGGER_POSTS_API = "http://www.blogger.com/feeds/blogID/posts/summary";
  // appending necessary parameters
  BLOGGER_POSTS_API += "?alt=json-in-script&amp;max-results=1&amp;callback=?";
  // replacing blogID with value
  BLOGGER_POSTS_API = BLOGGER_POSTS_API.replace('blogID', blogID.toString());
  $('#btn-blogger-random').text('Tossing dice...');
  // retrieving posts count
  $.getJSON(BLOGGER_POSTS_API, function(data){
    var posts_count = parseInt(data.feed.openSearch$totalResults.$t);
    // index is 1-based
    var index = Math.floor(Math.random() * posts_count) + 1;
    // retrieving post link
    $.getJSON(BLOGGER_POSTS_API + '&amp;start-index=' + index, function(data){
      $.each(data.feed.entry[0].link, function(idx, link){
        if (link.rel == 'alternate')
          // redirecting
          document.location.href = link.href;
      });
    });
  });
}
$(function(){
  $('#btn-blogger-random').click(blogger_random_post);
});
&lt;/script&gt;
&lt;label&gt;Blog ID &lt;input id="blogID" value="3803541356848955053"/&gt;&lt;/label&gt;
&lt;button id="btn-blogger-random"&gt;I&amp;#8217;m Feeling Lucky &amp;raquo;&lt;/button&gt;&lt;p&gt;And the code&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;script&amp;gt;
/* Simple Random Posts function for Blogger
 * Copyright 2012 Yu-Jie Lin
 * Licensed under the MIT License
 */
function blogger_random_post(){
  // You can replace the value with your blog ID
  var blogID = $('#blogID').val();
  // for example:
  //  blogID = "3803541356848955053";
  var BLOGGER_POSTS_API = "http://www.blogger.com/feeds/blogID/posts/summary";
  // appending necessary parameters
  BLOGGER_POSTS_API += "?alt=json-in-script&amp;amp;max-results=1&amp;amp;callback=?";
  // replacing blogID with value
  BLOGGER_POSTS_API = BLOGGER_POSTS_API.replace('blogID', blogID.toString());
  $('#btn-blogger-random').text('Tossing dice...');
  // retrieving posts count
  $.getJSON(BLOGGER_POSTS_API, function(data){
    var posts_count = parseInt(data.feed.openSearch$totalResults.$t);
    // index is 1-based
    var index = Math.floor(Math.random() * posts_count) + 1;
    // retrieving post link
    $.getJSON(BLOGGER_POSTS_API + '&amp;amp;start-index=' + index, function(data){
      $.each(data.feed.entry[0].link, function(idx, link){
        if (link.rel == 'alternate')
          // redirecting
          document.location.href = link.href;
      });
    });
  });
}
$(function(){
  $('#btn-blogger-random').click(blogger_random_post);
});
&amp;lt;/script&amp;gt;
&amp;lt;label&amp;gt;Blog ID &amp;lt;input id="blogID" value="3803541356848955053"/&amp;gt;&amp;lt;/label&amp;gt;
&amp;lt;button id="btn-blogger-random"&amp;gt;I'm Feeling Lucky &amp;amp;raquo;&amp;lt;/button&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;It is not quite efficient for retrieved data from Blogger API, it makes two requests, one for posts count, another for the random post&amp;#8217;s link. Blogger will send a huge list of labels if your blog has a lot of labals. However, it is still not too bad.&lt;/p&gt;
&lt;p&gt;It only requires jQuery library and you can pretty much put that button anywhere you like with CSS. Even use an image or text line, etc. That&amp;#8217;s something gadgets can not give you. Of course, you need to know one or two things about webpages.&lt;/p&gt;
&lt;p&gt;If you are interested in putting this into your stuff, feel free to leave questions in comments if you have any problems.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3803541356848955053-3826045416115479766?l=blog.yjl.im' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/YJLv?a=Fem7qTxsu7M:ZdTUfNinpSQ:AOzAX-4I-Ts"&gt;&lt;img src="http://feeds.feedburner.com/~ff/YJLv?i=Fem7qTxsu7M:ZdTUfNinpSQ: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/Fem7qTxsu7M" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.yjl.im/feeds/3826045416115479766/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.yjl.im/2012/01/blogger-random-posts-javascript.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3803541356848955053/posts/default/3826045416115479766?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3803541356848955053/posts/default/3826045416115479766?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/YJLv/~3/Fem7qTxsu7M/blogger-random-posts-javascript.html" title="Blogger Random Posts JavaScript function" /><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/01/blogger-random-posts-javascript.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkANRXkycSp7ImA9WhRVGU8.&quot;"><id>tag:blogger.com,1999:blog-3803541356848955053.post-6440180679841038800</id><published>2012-01-18T13:06:00.000-08:00</published><updated>2012-01-18T13:06:34.799-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-18T13:06:34.799-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="shell scripting" /><category scheme="http://www.blogger.com/atom/ns#" term="human readable" /><category scheme="http://www.blogger.com/atom/ns#" term="time duration" /><category scheme="http://www.blogger.com/atom/ns#" term="Bash" /><title>Updating td.sh, Bash time duration library</title><content type="html">More than &lt;a href="http://blog.yjl.im/2010/11/printing-human-readable-time-duration.html"&gt;a year ago&lt;/a&gt;, I wrote &lt;a href="https://github.com/livibetter/td.sh"&gt;td.sh&lt;/a&gt;. It is very helpful to me, I use it to show the uptime and the Portage tree's freshness. I recently moved it to GitHub, even it's only one short script, less than 100 hundred lines, 19 of them are MIT License text. It deserves its own repository.&lt;br /&gt;
&lt;br /&gt;
It's fairly easy to use, you just feed it the number of seconds.&lt;br /&gt;
&lt;br /&gt;
After moving to GitHub, I added a few features because there was a picky alignment issue from me. I have a script which records Unix timestamps, it calculate those timestamps to current time and show the ages using td.sh. They are not aligned and it looks really ugly as you see in the first case below.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="no-collapse"&gt;$ ./td.sh 1 2 60 61
1 second
2 seconds
1 minute
1 minute 1 second
$ ./td.sh -p -P 1 2 60 61
 1 second 
 2 seconds
 1 minute 
 1 minute   1 second 
$ ./td.sh -p -P -a 1 2 60 61
 0 days  0 hours  0 minutes  1 second 
 0 days  0 hours  0 minutes  2 seconds
 0 days  0 hours  1 minute   0 seconds
 0 days  0 hours  1 minute   1 second &lt;/pre&gt;
&lt;br /&gt;
Now it looks great. Also I updated the test script:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="no-collapse"&gt;$ ./td-test.sh 
Passed:          0            =&amp;gt; "0 seconds"
Passed:          1            =&amp;gt; "1 second"
Passed:         -1            =&amp;gt; "1 second"
Passed:          2            =&amp;gt; "2 seconds"
Passed:         60            =&amp;gt; "1 minute"
Passed:         61            =&amp;gt; "1 minute 1 second"
Passed:       3599            =&amp;gt; "59 minutes 59 seconds"
Passed:       3600            =&amp;gt; "1 hour"
Passed:       3601            =&amp;gt; "1 hour 1 second"
Passed:       3660            =&amp;gt; "1 hour 1 minute"
Passed:       3661            =&amp;gt; "1 hour 1 minute 1 second"
Passed:      86400            =&amp;gt; "1 day"
Passed:     172799            =&amp;gt; "1 day 23 hours 59 minutes 59 seconds"
Passed:     259199            =&amp;gt; "2 days 23 hours 59 minutes 59 seconds"
Passed:   31622401            =&amp;gt; "366 days 1 second"
Passed:          1 -P         =&amp;gt; "1 second "
Passed:         60 -P         =&amp;gt; "1 minute "
Passed:         60 -P -p      =&amp;gt; " 1 minute "
Passed:         60 -P -p0     =&amp;gt; "01 minute "
Passed:         60 -p -a      =&amp;gt; " 0 days  0 hours  1 minute  0 seconds"
Passed:         60 -P -a      =&amp;gt; "0 days 0 hours 1 minute  0 seconds"
Passed:         60 -P -p -a   =&amp;gt; " 0 days  0 hours  1 minute   0 seconds"
0 failures of 22 tests.
1652 conversions per second via function calls.
183 conversions per second via script executions.&lt;/pre&gt;
&lt;br /&gt;
If you compare the performance,&amp;nbsp; it's down about 10% after the new features added, but I think I can live with that.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3803541356848955053-6440180679841038800?l=blog.yjl.im' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/YJLv?a=mMfrdpg9LwI:1yGTGQEAduQ:AOzAX-4I-Ts"&gt;&lt;img src="http://feeds.feedburner.com/~ff/YJLv?i=mMfrdpg9LwI:1yGTGQEAduQ: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/mMfrdpg9LwI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.yjl.im/feeds/6440180679841038800/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.yjl.im/2012/01/updating-tdsh-bash-time-duration.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3803541356848955053/posts/default/6440180679841038800?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3803541356848955053/posts/default/6440180679841038800?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/YJLv/~3/mMfrdpg9LwI/updating-tdsh-bash-time-duration.html" title="Updating td.sh, Bash time duration library" /><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/01/updating-tdsh-bash-time-duration.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUIDQHkzfCp7ImA9WhRVGEQ.&quot;"><id>tag:blogger.com,1999:blog-3803541356848955053.post-7693981324918873437</id><published>2012-01-18T06:39:00.000-08:00</published><updated>2012-01-18T06:39:31.784-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-18T06:39:31.784-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="SOPA" /><category scheme="http://www.blogger.com/atom/ns#" term="blackout" /><category scheme="http://www.blogger.com/atom/ns#" term="protest" /><category scheme="http://www.blogger.com/atom/ns#" term="Internet" /><title>Watching SOPA progress as a soap show</title><content type="html">SOPA is serious problem, please allow me stating that first before you are trying to scold me for taking this so silly in the post title.&lt;br /&gt;
&lt;br /&gt;
You should've read one thing or two about SOPA already. But from what I have experienced, many people still do and not even heard of "SOPA" and they are US citizens.&lt;br /&gt;
&lt;br /&gt;
I have heard of it a while back, but only really paid attention little before the boycott of GoDaddy, a nice episode. They stood by SOPA at first, then softened but calling customers. Finally, they changed side.&lt;br /&gt;
&lt;br /&gt;
Microsoft and Apple are another episode. They were considered as supporter since they are behind BSA. But recently, they claimed against SOPA.&lt;br /&gt;
&lt;br /&gt;
Sony, another one episode. They changed side, too, but it's after Anonymous threatened to take them down alongside other singers, such as Justin Bieber, Lady Gaga, Kim Kardashian, and Taylor Swift. I am not sure what they would be going to do with them.&lt;br /&gt;
&lt;br /&gt;
I don't agree such action (threat, illegal action). It's using wrongdoing for wrongdoing, no matter how you justify your threat, it is wrong after all.&lt;br /&gt;
&lt;br /&gt;
The same goes to SOPA. I can understand those big companies (music and film industry, even tech companies) want to protect the profit which should go into their pocket, but the reality is the money is lost to piracy. Whoever thinks &lt;i&gt;they should not make not much money is wrong or they make enough money, therefore SOPA is bad&lt;/i&gt; is terribly wrong. How so? because their products are not necessity to your life, no one points a gun at your head to force you buying. &lt;br /&gt;
&lt;br /&gt;
Free market is free (as in some sense), any company has right to name their product's price. You don't like, then you don't buy.&lt;br /&gt;
&lt;br /&gt;
I would not say SOPA is entirely bad, but the bill can not justify its goal. It overdoes, too powerful. It will be abused eventually as people have foreseen it and I believe it will certainly happen.&lt;br /&gt;
&lt;br /&gt;
Whoever started the bill either has own agenda or clearly does not understand the nature of piracy on the Internet and the Internet. Yes, you block one pirate website, that's just one of a million of websites, which owned by one pirate of one million pirates.&lt;br /&gt;
&lt;br /&gt;
It's as if telling (blocking) your citizen not going to a marker on a sea map, but there are like 100 marks around that one. And the pirate will set up another two new markers! SOPA does nothing about piracy.&lt;br /&gt;
&lt;br /&gt;
You gotta catch the pirate! &lt;br /&gt;
&lt;br /&gt;
Since GoDaddy boycott, many companies have changed sides. It sounds great as if we have achieved something, but the truth is it's just what they are &lt;i&gt;saying&lt;/i&gt;.&lt;br /&gt;
&lt;br /&gt;
Moreover, I feel who swings is who you can not trust. They react to what people like not what they believe and that kind of people is dangerous.&lt;br /&gt;
&lt;br /&gt;
People tend to forget. Watch them as hawk if you can.&lt;br /&gt;
&lt;br /&gt;
I am interested in seeing famous singers and actors coming out against SOPA. Unfortunately, I haven't read any on Entertainment section. Come on, you guys, it's great to build up your public image. TMZ, send agents for their comments!&lt;br /&gt;
&lt;br /&gt;
I also wonder why YouTube hasn't posted or changed its website. Maybe it has strong tie with music brands? Well, just speculation, don't quote me. I do use the question mark.&lt;br /&gt;
&lt;br /&gt;
Now, 18th, January is the blackout day, let have some to checkout. As you can see, I put a &lt;a href="http://sopablackout.org/"&gt;script&lt;/a&gt; on. It looks like&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-Kb1Ebm7Xh5A/TxbMXx-MDNI/AAAAAAAAC-Y/vwF0N8yyMbg/s1600/2012-01-18--21%253A42%253A28.png" imageanchor="1"&gt;&lt;img border="0" height="258" src="http://1.bp.blogspot.com/-Kb1Ebm7Xh5A/TxbMXx-MDNI/AAAAAAAAC-Y/vwF0N8yyMbg/s640/2012-01-18--21%253A42%253A28.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
The script was written by me, it seems to have slight issue, it only blacks out the first viewport, you can scroll down to see the rest of page. It should be open source, so it can get fixed quick.&lt;br /&gt;
&lt;br /&gt;
The &lt;i&gt;WordPress&lt;/i&gt; hosting:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-OdHZOV7MwTU/TxbQMAOhP6I/AAAAAAAAC-4/2uy4KMz329M/s1600/2012-01-18--21%253A58%253A39.png" imageanchor="1"&gt;&lt;img border="0" height="512" src="http://1.bp.blogspot.com/-OdHZOV7MwTU/TxbQMAOhP6I/AAAAAAAAC-4/2uy4KMz329M/s640/2012-01-18--21%253A58%253A39.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Straight to the point! You can also see a &lt;a href="https://github.com/sgerrand/sopa-blackout-for-wordpress"&gt;WordPress plugin&lt;/a&gt; and this super fancy &lt;a href="https://github.com/zachstronaut/stop-sopa"&gt;stop-sopa&lt;/a&gt;:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-AOto4ZVm9RA/TxbOjKFDVuI/AAAAAAAAC-g/uzQROCwR7oU/s1600/2012-01-18--21%253A51%253A39.png" imageanchor="1"&gt;&lt;img border="0" height="556" src="http://3.bp.blogspot.com/-AOto4ZVm9RA/TxbOjKFDVuI/AAAAAAAAC-g/uzQROCwR7oU/s640/2012-01-18--21%253A51%253A39.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Well, I think that's overdo. But that's the creativity.&lt;br /&gt;
&lt;br /&gt;
After fancy one, the &lt;i&gt;Google&lt;/i&gt;'s pathetic, barely noticeable link:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-Bz7tXD0dutg/TxbPKFMEuYI/AAAAAAAAC-o/88XJvJqT-10/s1600/2012-01-18--21%253A54%253A12.png" imageanchor="1"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-Bz7tXD0dutg/TxbPKFMEuYI/AAAAAAAAC-o/88XJvJqT-10/s1600/2012-01-18--21%253A54%253A12.png" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Where is dat creativity, Google? You can do better than that.&lt;br /&gt;
&lt;br /&gt;
And the &lt;i&gt;Wikipedia&lt;/i&gt;'s:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-fLxzxR06-zU/TxbPrMtl0FI/AAAAAAAAC-w/LiNWEheRC0Y/s1600/2012-01-18--21%253A56%253A21.png" imageanchor="1"&gt;&lt;img border="0" height="640" src="http://1.bp.blogspot.com/-fLxzxR06-zU/TxbPrMtl0FI/AAAAAAAAC-w/LiNWEheRC0Y/s640/2012-01-18--21%253A56%253A21.png" width="636" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
It's the best one I have seen so far. News is all over about Wikipedia blackout, probably lots of people use it. By the way, don't forget to check out Twitter's Dick Costolo's comment on Wikipedia's blackout decision, that's another episode.&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;Reddit&lt;/i&gt;:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-lN9SjrRfrIo/TxbQ1rBB3mI/AAAAAAAAC_A/ZoWJewvDkx8/s1600/2012-01-18--22%253A00%253A56.png" imageanchor="1"&gt;&lt;img border="0" height="158" src="http://1.bp.blogspot.com/-lN9SjrRfrIo/TxbQ1rBB3mI/AAAAAAAAC_A/ZoWJewvDkx8/s640/2012-01-18--22%253A00%253A56.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
Nice countdown. It seems to really blackout, not using script to overlap.&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;Flickr&lt;/i&gt;, lol:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-mJ9OaR5Jhys/TxbRmdXaacI/AAAAAAAAC_I/vOARz-v2ya4/s1600/2012-01-18--22%253A04%253A22.png" imageanchor="1"&gt;&lt;img border="0" height="460" src="http://3.bp.blogspot.com/-mJ9OaR5Jhys/TxbRmdXaacI/AAAAAAAAC_I/vOARz-v2ya4/s640/2012-01-18--22%253A04%253A22.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
I don't quite get the point to darken photo as in per photo basis. You might as well as just put a Google-link-like to save the manpower for coding this.&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;FSF.org&lt;/i&gt;:&lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;
&lt;pre id="line1"&gt;01000100010010010100011101001001010101000100000101001100&lt;/pre&gt;
&lt;/blockquote&gt;
Not a screenshot but the page title. Gotta be nerd as in &lt;code&gt;DIGITAL&lt;/code&gt; domain!&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;Craigslist&lt;/i&gt;:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-KwwFbRADRsw/TxbUAOdhqSI/AAAAAAAAC_Q/PyglMCd-ntE/s1600/2012-01-18--22%253A14%253A31.png" imageanchor="1"&gt;&lt;img border="0" height="342" src="http://3.bp.blogspot.com/-KwwFbRADRsw/TxbUAOdhqSI/AAAAAAAAC_Q/PyglMCd-ntE/s640/2012-01-18--22%253A14%253A31.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
It has Craigslist's spirit, don't you think? I love that &lt;i&gt;PS&lt;/i&gt;.&lt;br /&gt;
&lt;br /&gt;
Well, that's pretty much all I have seen on the Internet. Will this blackout day works? Could the bill be stopped? I am not sure, but one thing I am 100% certain:&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;
No matter what will happen on January 24 and in February, the piracy will still be around.&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3803541356848955053-7693981324918873437?l=blog.yjl.im' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/YJLv?a=oUg0_C7UI8s:GkxGJN9Y_Qs:AOzAX-4I-Ts"&gt;&lt;img src="http://feeds.feedburner.com/~ff/YJLv?i=oUg0_C7UI8s:GkxGJN9Y_Qs: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/oUg0_C7UI8s" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.yjl.im/feeds/7693981324918873437/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.yjl.im/2012/01/watching-sopa-progress-as-soap-show.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3803541356848955053/posts/default/7693981324918873437?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3803541356848955053/posts/default/7693981324918873437?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/YJLv/~3/oUg0_C7UI8s/watching-sopa-progress-as-soap-show.html" title="Watching SOPA progress as a soap show" /><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://1.bp.blogspot.com/-Kb1Ebm7Xh5A/TxbMXx-MDNI/AAAAAAAAC-Y/vwF0N8yyMbg/s72-c/2012-01-18--21%253A42%253A28.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.yjl.im/2012/01/watching-sopa-progress-as-soap-show.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUEFQ385cCp7ImA9WhRVF0k.&quot;"><id>tag:blogger.com,1999:blog-3803541356848955053.post-7191931691238031713</id><published>2012-01-16T11:53:00.000-08:00</published><updated>2012-01-16T11:53:32.128-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-16T11:53:32.128-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="JavaScript" /><category scheme="http://www.blogger.com/atom/ns#" term="one-liner" /><category scheme="http://www.blogger.com/atom/ns#" term="jQuery TextFill" /><category scheme="http://www.blogger.com/atom/ns#" term="CSS" /><category scheme="http://www.blogger.com/atom/ns#" term="jQuery plugin" /><category scheme="http://www.blogger.com/atom/ns#" term="HTML" /><category scheme="http://www.blogger.com/atom/ns#" term="webdesign" /><category scheme="http://www.blogger.com/atom/ns#" term="jQuery" /><title>One-liner text using jQuery TextFill plugin</title><content type="html">&lt;p&gt;I recently found out the text in my &lt;a class="reference external" href="http://blog.yjl.im/2011/02/lightweight-youtube-player-loader.html"&gt;Lightweight YouTube Player Loader&lt;/a&gt; will be almost unreadable if you make the frame too small. The problem enabled me seeking for a solution.&lt;/p&gt;
&lt;p&gt;And here are the quick tests I came up with:&lt;/p&gt;
&lt;link href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/themes/base/jquery-ui.css" rel="stylesheet" type="text/css"/&gt;
&lt;script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/jquery-ui.min.js"&gt;&lt;/script&gt;
&lt;script src="https://raw.github.com/jquery-textfill/jquery-textfill/master/jquery.textfill.min.js"&gt;&lt;/script&gt;

&lt;style type="text/css" media="screen"&gt;
#textfill-tester {
  background-color: #aaa;
  color: black;
  width: 400px;
  height: 200px;
}
#line-textfill-nomin {
  background-color: #faa;
}
#line-textfill {
  background-color: #afa;
  width: 100%;
}
#line-ellipsis {
  background-color: #aaf;
}
.line-textfill {
  font-size: 36px;
  height: 1.25em;
  line-height: 1.25em;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.line-textfill * {
  vertical-align: middle;
}
&lt;/style&gt;
&lt;script&gt;
function init_textfill_tester() {
  $('#line-ellipsis').attr('title', $('#line-ellipsis').text());
  $('#line-textfill-nomin').textfill({maxFontPixels: 36});
  $('#line-textfill').textfill({maxFontPixels: 36, minFontPixels: 24});
  $('#textfill-tester').resizable({
    resize: function(){
      $('#line-textfill-nomin').textfill({maxFontPixels: 36});
      $('#line-textfill').textfill({maxFontPixels: 36, minFontPixels: 24});
    }
  });
}
$(init_textfill_tester);
&lt;/script&gt;

&lt;div id="textfill-tester"&gt;
  &lt;div id="line-textfill-nomin" class="line-textfill"&gt;
    &lt;span&gt;[textfill] The quick brown fox jumps over the lazy dog&lt;/span&gt;
  &lt;/div&gt;
  &lt;div id="line-textfill" class="line-textfill"&gt;
    &lt;span&gt;[textfill-min] The quick brown fox jumps over the lazy dog&lt;/span&gt;
  &lt;/div&gt;
  &lt;div id="line-ellipsis" class="line-textfill"&gt;
    &lt;span&gt;[ellipsis] The quick brown fox jumps over the lazy dog&lt;/span&gt;
  &lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;cite&gt;(You can drag the bottom-right trianble handler to resize)&lt;/cite&gt;&lt;/p&gt;
&lt;p&gt;There are three tests above, the first two are helped by the &lt;a class="reference external" href="https://github.com/jquery-textfill/jquery-textfill"&gt;jQuery TextFill plugin&lt;/a&gt; by Russ Painter, which I just helped to set up a repository on GitHub. Both have maximal font size at 40px, and 4px and 24px as minimal font size, respectively. The last one uses only pure CSS &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;text-overflow:&lt;/span&gt; ellipsis&lt;/tt&gt; to achieve the goal.&lt;/p&gt;
&lt;p&gt;I personally like the middle one, the text resizes. I can see some people may not like that because it may generate different text size in one page, but when you have huge header style, pure ellipsis will not be readable unless you remember setting up &lt;tt class="docutils literal"&gt;title&lt;/tt&gt; attribute, so hinttext can show the full text.&lt;/p&gt;
&lt;p&gt;The fancy non standard &lt;tt class="docutils literal"&gt;&amp;lt;marquee&amp;gt;&lt;/tt&gt;-like scripts may be good in some cases, but it requires timer for constant updates. I prefer the static style.&lt;/p&gt;
&lt;p&gt;Here is the nearly complete code:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;script src="https://raw.github.com/jquery-textfill/jquery-textfill/master/jquery.textfill.min.js"&amp;gt;&amp;lt;/script&amp;gt;

&amp;lt;style type="text/css" media="screen"&amp;gt;
#textfill-tester {
  background-color: #aaa;
  color: black;
  width: 400px;
  height: 200px;
}
#line-textfill-nomin {
  background-color: #faa;
}
#line-textfill {
  background-color: #afa;
  width: 100%;
}
#line-ellipsis {
  background-color: #aaf;
}
.line-textfill {
  font-size: 36px;
  height: 1.25em;
  line-height: 1.25em;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.line-textfill * {
  vertical-align: middle;
}
&amp;lt;/style&amp;gt;

&amp;lt;script&amp;gt;
function init_textfill_tester() {
  $('#line-ellipsis').attr('title', $('#line-ellipsis').text());
  $('#line-textfill-nomin').textfill({maxFontPixels: 36});
  $('#line-textfill').textfill({maxFontPixels: 36, minFontPixels: 24});
}
$(init_textfill_tester);
&amp;lt;/script&amp;gt;

&amp;lt;div id="textfill-tester"&amp;gt;
  &amp;lt;div id="line-textfill-nomin" class="line-textfill"&amp;gt;
    &amp;lt;span&amp;gt;[textfill] The quick brown fox jumps over the lazy dog&amp;lt;/span&amp;gt;
  &amp;lt;/div&amp;gt;
  &amp;lt;div id="line-textfill" class="line-textfill"&amp;gt;
    &amp;lt;span&amp;gt;[textfill-min] The quick brown fox jumps over the lazy dog&amp;lt;/span&amp;gt;
  &amp;lt;/div&amp;gt;
  &amp;lt;div id="line-ellipsis" class="line-textfill"&amp;gt;
    &amp;lt;span&amp;gt;[ellipsis] The quick brown fox jumps over the lazy dog&amp;lt;/span&amp;gt;
  &amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;I haven&amp;#8217;t decided if I want to make text resize, but mostly just too lazy to update the code. ;)&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3803541356848955053-7191931691238031713?l=blog.yjl.im' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/YJLv?a=9MLK6eDa-Eo:KgD4LFFoQhU:AOzAX-4I-Ts"&gt;&lt;img src="http://feeds.feedburner.com/~ff/YJLv?i=9MLK6eDa-Eo:KgD4LFFoQhU: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/9MLK6eDa-Eo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.yjl.im/feeds/7191931691238031713/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.yjl.im/2012/01/one-liner-text-using-jquery-textfill.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3803541356848955053/posts/default/7191931691238031713?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3803541356848955053/posts/default/7191931691238031713?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/YJLv/~3/9MLK6eDa-Eo/one-liner-text-using-jquery-textfill.html" title="One-liner text using jQuery TextFill 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/01/one-liner-text-using-jquery-textfill.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CE4MSX4zcCp7ImA9WhdVFk4.&quot;"><id>tag:blogger.com,1999:blog-3803541356848955053.post-918002049884839660</id><published>2011-09-21T12:20:00.000-07:00</published><updated>2011-09-21T12:23:08.088-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-21T12:23:08.088-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="music" /><category scheme="http://www.blogger.com/atom/ns#" term="Justin.tv" /><category scheme="http://www.blogger.com/atom/ns#" term="International Day of Peace" /><category scheme="http://www.blogger.com/atom/ns#" term="Peace In Our Lifetime" /><category scheme="http://www.blogger.com/atom/ns#" term="peach" /><title>International Peace Day Concert</title><content type="html">The following Justin.tv channel &lt;a href="http://www.justin.tv/thebedfordlive"&gt;The Bedford Live&lt;/a&gt; is one of my favorite channel. And today, it is hosting a &lt;a href="http://www.thebedford.co.uk/EventView.aspx?ID=d619b875-61e6-4727-86df-dc3a68a223a3"&gt;special event&lt;/a&gt;:&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;
21 September is International Day of Peace and &lt;a href="http://www.peaceinourlifetime.org/"&gt;Peace In Our Lifetime &lt;/a&gt;are holding an annual "Global United Party for Peace".&lt;/blockquote&gt;
&lt;br /&gt;
&lt;iframe height="480" src="http://lilbtn.yjl.im/cleanjtv/thebedfordlive" style="border: 0;" width="640"&gt;&lt;/iframe&gt;&lt;br /&gt;
&lt;br /&gt;
It just began...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3803541356848955053-918002049884839660?l=blog.yjl.im' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/YJLv?a=rrOcNuVGdEE:OGawncxGAAo:AOzAX-4I-Ts"&gt;&lt;img src="http://feeds.feedburner.com/~ff/YJLv?i=rrOcNuVGdEE:OGawncxGAAo: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/rrOcNuVGdEE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.yjl.im/feeds/918002049884839660/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.yjl.im/2011/09/international-peace-day-concert.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3803541356848955053/posts/default/918002049884839660?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3803541356848955053/posts/default/918002049884839660?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/YJLv/~3/rrOcNuVGdEE/international-peace-day-concert.html" title="International Peace Day Concert" /><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/2011/09/international-peace-day-concert.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkYNRX89fip7ImA9WhdVFUs.&quot;"><id>tag:blogger.com,1999:blog-3803541356848955053.post-2722993806224854939</id><published>2011-09-20T18:01:00.000-07:00</published><updated>2011-09-20T18:23:14.166-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-20T18:23:14.166-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Blogger Stats" /><category scheme="http://www.blogger.com/atom/ns#" term="spam" /><category scheme="http://www.blogger.com/atom/ns#" term="fake referrer" /><title>Blogger Stats is now OUT OF CONTROL!</title><content type="html">I think I have ever CAPS my title (I control myself not to CAP all), but this is really out of control!)&lt;br /&gt;
&lt;br /&gt;
141 (27.81%) out of 507 pageviews are spams and this is just yesterday.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-9e6s7XBSJ1s/Tnk0_eJoIrI/AAAAAAAAC9w/r_YzhcuuGrw/s1600/2011-09-21--08%253A49%253A26.png" imageanchor="1"&gt;&lt;img border="0" class="no-autoresize" height="520" src="http://3.bp.blogspot.com/-9e6s7XBSJ1s/Tnk0_eJoIrI/AAAAAAAAC9w/r_YzhcuuGrw/s640/2011-09-21--08%253A49%253A26.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-ja00JYlCr9o/Tnk1BM5mgxI/AAAAAAAAC90/_w8Z015R0uY/s1600/2011-09-21--08%253A49%253A35.png" imageanchor="1"&gt;&lt;img border="0" class="no-autoresize" height="520" src="http://3.bp.blogspot.com/-ja00JYlCr9o/Tnk1BM5mgxI/AAAAAAAAC90/_w8Z015R0uY/s640/2011-09-21--08%253A49%253A35.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
I am going to &lt;a href="http://www.google.com/support/forum/p/blogger/thread?tid=642f97172cb17717&amp;hl=en"&gt;post on help forum&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3803541356848955053-2722993806224854939?l=blog.yjl.im' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/YJLv?a=rB-2M7ZVdGk:MjszXbrKqc8:AOzAX-4I-Ts"&gt;&lt;img src="http://feeds.feedburner.com/~ff/YJLv?i=rB-2M7ZVdGk:MjszXbrKqc8: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/rB-2M7ZVdGk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.yjl.im/feeds/2722993806224854939/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.yjl.im/2011/09/blogger-stats-is-now-out-of-control.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3803541356848955053/posts/default/2722993806224854939?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3803541356848955053/posts/default/2722993806224854939?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/YJLv/~3/rB-2M7ZVdGk/blogger-stats-is-now-out-of-control.html" title="Blogger Stats is now OUT OF CONTROL!" /><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/-9e6s7XBSJ1s/Tnk0_eJoIrI/AAAAAAAAC9w/r_YzhcuuGrw/s72-c/2011-09-21--08%253A49%253A26.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.yjl.im/2011/09/blogger-stats-is-now-out-of-control.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0ICSX07fip7ImA9WhdVEkU.&quot;"><id>tag:blogger.com,1999:blog-3803541356848955053.post-6608993952854574106</id><published>2011-09-17T11:35:00.000-07:00</published><updated>2011-09-17T11:52:48.306-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-17T11:52:48.306-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="x11grabr" /><category scheme="http://www.blogger.com/atom/ns#" term="donation" /><category scheme="http://www.blogger.com/atom/ns#" term="thought" /><title>Unexpected coffee for x11grabr</title><content type="html">I was cleaning up the subscription videos and recommendations on YouTube. After I finished I noticed I got a new comment on &lt;a href="http://www.youtube.com/watch?v=_X0pi8ObpMg"&gt;this video&lt;/a&gt;, so I checked my reader and immediately notice the $.&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/-65M2KJdihMs/TnTe_P4l6bI/AAAAAAAAC9s/GIBkBZX5px0/s1600/2011-09-18--01%253A26%253A34.png" imageanchor="1"&gt;&lt;img border="0" class="no-autoresize" height="400" src="http://4.bp.blogspot.com/-65M2KJdihMs/TnTe_P4l6bI/AAAAAAAAC9s/GIBkBZX5px0/s640/2011-09-18--01%253A26%253A34.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
This is the second time I &lt;a href="http://thebrps.blogspot.com/2009/11/first-donation-to-brps.html"&gt;received money&lt;/a&gt; and the first time I didn't ask for it. It just came unexpectedly.&lt;br /&gt;
&lt;br /&gt;
To be honesty, I don't consider &lt;a href="https://github.com/livibetter/x11grabr"&gt;x11grabr&lt;/a&gt; is at the stage for donation and I personally don't think putting a donation button will really get me some extra money. I did recall once someone asked how can send me some money for something I wrote, but I gratefully turned down the offer.&lt;br /&gt;
&lt;br /&gt;
I feel no shame to admit most of my code is actually at garbage grade as in term of WINE, therefore I don't really want to receive donation. I would feel bad for it. Who doesn't like money, I do also, but I just don't feel right to receive the money.&lt;br /&gt;
&lt;br /&gt;
Since the money is already in my account, I guess there is some button to return the money but I won't do it, that is another reason I won't do it. If this generous gentleman asks me for my Paypal email first, I would thank him and ask him for comments/suggestions instead of sending me money. (I am guessing my email isn't so secret after all.)&lt;br /&gt;
&lt;br /&gt;
As of x11grabr, it has been almost two weeks no pushes to &lt;a href="https://github.com/livibetter/x11grabr"&gt;GitHub&lt;/a&gt; and actually not much on my computer. I did try to fix the A/V out-of-sync issue by using ffmpeg/libav as library, so x11grabr can output a container with time code, that should be able to fix it.&lt;br /&gt;
&lt;br /&gt;
However, I didn't have much progress, I can generate a Matroska (MKV) with still a rawvideo (bgra pix format) from XImage's data, but the video just doesn't get right. There is something I don't use correctly. Unfortunately, I don't know what it is and to tell the truth, I don't exactly understand how to use ffmpeg/libav to generate a media file correctly.&lt;br /&gt;
&lt;br /&gt;
I believe I have actually thought about to pause the development until... well, I am not sure. The project has been watched by three people and now the money. I feel I would need to continue one way or another.&lt;br /&gt;
&lt;br /&gt;
I have asked at #libav on IRC and that's how I knew I should generate a media file. I could just ask again, but I don't really like using IRC.&lt;br /&gt;
&lt;br /&gt;
A couple days ago, I wanted to post on ArchLinux's forums as a community contribution project announcement as well as a help wanted thread (I don't use Arch anymore, but Arch does have the best community in my opinion), but didn't do it.&lt;br /&gt;
&lt;br /&gt;
Anyway, I would need to clean up my current working copy, so if I still can't figure out on my own, then I can ask for help with cleaner code.&lt;br /&gt;
&lt;br /&gt;
Right now, I &lt;a href="http://blog.yjl.im/2011/09/upcoming-561777-week-or-weeks.html"&gt;don't have any mood&lt;/a&gt; to do anything.&lt;br /&gt;
&lt;br /&gt;
(If you already know how to resolve the A/V out-of-sync issue as well as generate media file using ffmpeg/libav, or you just want to join the project even you are learning like me, please shoot me an email or message me on GitHub)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3803541356848955053-6608993952854574106?l=blog.yjl.im' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/YJLv?a=uD1jsbOgQ4c:R7_u74cU_iM:AOzAX-4I-Ts"&gt;&lt;img src="http://feeds.feedburner.com/~ff/YJLv?i=uD1jsbOgQ4c:R7_u74cU_iM: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/uD1jsbOgQ4c" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.yjl.im/feeds/6608993952854574106/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.yjl.im/2011/09/unexpected-coffee-for-x11grabr.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3803541356848955053/posts/default/6608993952854574106?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3803541356848955053/posts/default/6608993952854574106?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/YJLv/~3/uD1jsbOgQ4c/unexpected-coffee-for-x11grabr.html" title="Unexpected coffee for x11grabr" /><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/-65M2KJdihMs/TnTe_P4l6bI/AAAAAAAAC9s/GIBkBZX5px0/s72-c/2011-09-18--01%253A26%253A34.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.yjl.im/2011/09/unexpected-coffee-for-x11grabr.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DU4ARH46fip7ImA9WhdVEk0.&quot;"><id>tag:blogger.com,1999:blog-3803541356848955053.post-3199054629548545948</id><published>2011-09-16T14:19:00.000-07:00</published><updated>2011-09-16T14:19:05.016-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-16T14:19:05.016-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="SSL" /><category scheme="http://www.blogger.com/atom/ns#" term="Google Webmaster Tools" /><category scheme="http://www.blogger.com/atom/ns#" term="Googlebot" /><category scheme="http://www.blogger.com/atom/ns#" term="certificate" /><category scheme="http://www.blogger.com/atom/ns#" term="HTTPS" /><title>Googlebot noticed your site, https://&lt;MYDOMAIN&gt;/, uses an SSL certificate which may be considered invalid by web browsers</title><content type="html">Thanks for the notification!&lt;br /&gt;
&lt;br /&gt;
Here is the email I just received:&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;
Dear Webmaster,&lt;br /&gt;
&lt;br /&gt;
Your site, https://&amp;lt;mydomain&amp;gt;/, uses an SSL certificate which is not recognized by web browsers. This will cause many web browsers to block users from accessing your site, or to display a security warning message when your site is accessed.&lt;br /&gt;
&lt;br /&gt;
To correct this problem, please get a new SSL certificate from a Certificate Authority (CA) that is trusted by web browsers.&lt;br /&gt;
&lt;br /&gt;
Thanks,&lt;br /&gt;
&lt;br /&gt;
The Google Web Crawling Team&lt;/blockquote&gt;
&lt;br /&gt;
Where &amp;lt;MYDOMAIN&amp;gt; is yjl.im. At first glance, I thought this was new kind of phishing but it's real, the message was also on Webmaster Tools.&lt;br /&gt;
&lt;br /&gt;
First of all, I believe I have never written down http://yjl.im/ anywhere, needless to mention the one with HTTPS. So, I guess Google is &lt;i&gt;very kind&lt;/i&gt; to check that for you. If it isn't not this email, I haven't thought about to check it.&lt;br /&gt;
&lt;br /&gt;
And here is a screenshot of the certificate:&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/-U9BO23_a16U/TnO5XQTJgsI/AAAAAAAAC9o/WjZPhgN_98Q/s1600/2011-09-17--04%253A43%253A35.png" imageanchor="1"&gt;&lt;img border="0" class="no-autoresize" height="640" src="http://4.bp.blogspot.com/-U9BO23_a16U/TnO5XQTJgsI/AAAAAAAAC9o/WjZPhgN_98Q/s640/2011-09-17--04%253A43%253A35.png" width="610" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
The naked domain has URL forwarding to www.yjl.im. I use my registrar's free service, so I have no control of it. If Google App Engine could operate on naked domain, I wouldn't need that.&lt;br /&gt;
&lt;br /&gt;
I don't understand why their servers listen to HTTPS, that makes no sense. Anyway, I might turn off URL forwarding or see what my registrar would say about it or just forget the whole thing... &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3803541356848955053-3199054629548545948?l=blog.yjl.im' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/YJLv?a=9aYAfICeO8Y:QE-JVYkywXk:AOzAX-4I-Ts"&gt;&lt;img src="http://feeds.feedburner.com/~ff/YJLv?i=9aYAfICeO8Y:QE-JVYkywXk: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/9aYAfICeO8Y" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.yjl.im/feeds/3199054629548545948/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.yjl.im/2011/09/googlebot-noticed-your-site-https-uses.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3803541356848955053/posts/default/3199054629548545948?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3803541356848955053/posts/default/3199054629548545948?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/YJLv/~3/9aYAfICeO8Y/googlebot-noticed-your-site-https-uses.html" title="Googlebot noticed your site, https://&amp;lt;MYDOMAIN&amp;gt;/, uses an SSL certificate which may be considered invalid by web browsers" /><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/-U9BO23_a16U/TnO5XQTJgsI/AAAAAAAAC9o/WjZPhgN_98Q/s72-c/2011-09-17--04%253A43%253A35.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.yjl.im/2011/09/googlebot-noticed-your-site-https-uses.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEQMQH48fip7ImA9WhdVEU4.&quot;"><id>tag:blogger.com,1999:blog-3803541356848955053.post-1694241628029009600</id><published>2011-09-15T18:26:00.000-07:00</published><updated>2011-09-15T18:26:21.076-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-15T18:26:21.076-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Disqus" /><category scheme="http://www.blogger.com/atom/ns#" term="comment" /><category scheme="http://www.blogger.com/atom/ns#" term="HTML" /><title>Post for testing HTML support in Disqus comments</title><content type="html">I just replied to a comment and noticed that I could actually used &amp;lt;code/&amp;gt;. So here is the post for testing and for adding related text and CSS styles.&lt;br /&gt;
&lt;br /&gt;
Also here is a list of what &lt;a href="http://docs.disqus.com/help/19/"&gt;HTML tags Disqus supports&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3803541356848955053-1694241628029009600?l=blog.yjl.im' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/YJLv?a=eeUYPRQMe74:QtWAe-5_rNE:AOzAX-4I-Ts"&gt;&lt;img src="http://feeds.feedburner.com/~ff/YJLv?i=eeUYPRQMe74:QtWAe-5_rNE: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/eeUYPRQMe74" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.yjl.im/feeds/1694241628029009600/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.yjl.im/2011/09/post-for-testing-html-support-in-disqus.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3803541356848955053/posts/default/1694241628029009600?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3803541356848955053/posts/default/1694241628029009600?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/YJLv/~3/eeUYPRQMe74/post-for-testing-html-support-in-disqus.html" title="Post for testing HTML support in Disqus comments" /><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/2011/09/post-for-testing-html-support-in-disqus.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0AHSX06fyp7ImA9WhdWGEk.&quot;"><id>tag:blogger.com,1999:blog-3803541356848955053.post-3331167437097232001</id><published>2011-09-12T09:42:00.000-07:00</published><updated>2011-09-12T09:42:18.317-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-12T09:42:18.317-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="5617" /><title>Upcoming 561777 week, or weeks</title><content type="html">It will be like 5617, I know, I am sure about it. But look from the other side, I can do something I have been stalling. Yea, right, who are you going to kid? That kind of speaking is for foolish people.&lt;br /&gt;
&lt;br /&gt;
Gonna loop &lt;a href="http://www.youtube.com/watch?v=Z9PzSNy3xj0"&gt;this&lt;/a&gt; for one hundred times. Minimum. We will see &lt;a href="http://www.last.fm/music/Christopher+Evan+Welch/_/Funeral+Monologue"&gt;how many times&lt;/a&gt; I actually listen to, hopefully this won't get my account suspended.&lt;br /&gt;
&lt;br /&gt;
Somehow, this sad scene, which is also one of my favorite film scenes, makes me calm. Every time, this kind of 5617 pops up, I open my player load this video, switch repeat on, then keep it playing over and over again. I might have listened to this clip for one thousand times.&lt;br /&gt;
&lt;br /&gt;
I wait until I get really sick of it. Yes, it's my favorite, it's like you eat 10 cakes in a row, you still puke no matter how delicious the cake is. When I finally have enough for this video, I shut the player down.&lt;br /&gt;
&lt;br /&gt;
Then, I will feel. It's still the same. What do you expect? Everything changes? The world gets better? You think there is still hope? For whatsoever's sake, this is not some kind of Life Inspiration Speaker with some book has his or her photo on it which has big text reading "Change your life in ten steps."&lt;br /&gt;
 &lt;br /&gt;
This is that kind of 5617. They are just like you and me, 5617 still 5617 in their life. That's their job to make you think you can make change. The truth is it's you not them, nor what they say or write. 561777 people still 561777.&lt;br /&gt;
&lt;br /&gt;
Just as you think the 5617 has finally come to the end, no, it's not. Another 5617 follows up, even dump a bigger 5617. Who knows what would come after this new 5617.&lt;br /&gt;
&lt;br /&gt;
Anyway, who gives a 5617.&lt;br /&gt;
&lt;br /&gt;
Frak 8vbd. Amen.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3803541356848955053-3331167437097232001?l=blog.yjl.im' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/YJLv?a=qmnCRYe20FU:vOXdieJ-PHs:AOzAX-4I-Ts"&gt;&lt;img src="http://feeds.feedburner.com/~ff/YJLv?i=qmnCRYe20FU:vOXdieJ-PHs: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/qmnCRYe20FU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.yjl.im/feeds/3331167437097232001/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.yjl.im/2011/09/upcoming-561777-week-or-weeks.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3803541356848955053/posts/default/3331167437097232001?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3803541356848955053/posts/default/3331167437097232001?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/YJLv/~3/qmnCRYe20FU/upcoming-561777-week-or-weeks.html" title="Upcoming 561777 week, or weeks" /><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/2011/09/upcoming-561777-week-or-weeks.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUQMRn49cSp7ImA9WhdWF0s.&quot;"><id>tag:blogger.com,1999:blog-3803541356848955053.post-2408783225620048427</id><published>2011-09-11T11:56:00.000-07:00</published><updated>2011-09-11T11:56:27.069-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-11T11:56:27.069-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="C" /><category scheme="http://www.blogger.com/atom/ns#" term="bzen2" /><category scheme="http://www.blogger.com/atom/ns#" term="twmn" /><category scheme="http://www.blogger.com/atom/ns#" term="dzen" /><category scheme="http://www.blogger.com/atom/ns#" term="Bash" /><title>bzen2 - the dzen2 which bounces</title><content type="html">I just finish this &lt;a href="https://github.com/livibetter/dotfiles/blob/master/bin/bzen2.sh"&gt;bzen2.sh&lt;/a&gt; script, it is used to replace &lt;a href="http://blog.yjl.im/2011/09/notification-could-be-sexy-twmn-new.html"&gt;twmn&lt;/a&gt;. It's a good program but I recently found out it has strange memory usage issue and I can't quite find out what's the cause. If I leave it runs for hours and have music plays, so the notifications would pop up every a few minutes. After hours, it could uses several hundred MB of memory.&lt;br /&gt;
&lt;br /&gt;
I don't want to report since I don't think I can commit to help find out the bug and the author committed the feature and then removed it. I asked about it, didn't get a response yet. Anyway, I would just drop it since I feel my Bash script does a little better, though it's not a daemon. Well, I don't really need a notification daemon actually.&lt;br /&gt;
&lt;br /&gt;
Back to bzen2, the name is very clear, b stands for bouncing and zen2 for dzen2. So, it bounces and that's basically all it does. No options. All arguments after the command will be treated as a string and been fed to dzen2.&lt;br /&gt;
&lt;br /&gt;
There is only one bouncing mode, which is below the cursor. Check out this clip:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="unwrapper center"&gt;
&lt;iframe allowfullscreen="" frameborder="0" height="750" src="http://lilbtn.yjl.im/embed/awOk_YoQOb4?rel=0&amp;amp;hd=1" width="1280"&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;br /&gt;
(A/V is out of sync, an issue of x11grabr, haven't started to fix it. All music in the video can be found on Jamendo)&lt;br /&gt;
&lt;br /&gt;
This script uses a simple &lt;a href="https://github.com/livibetter/dotfiles/blob/master/bin/xcinfo.c"&gt;C code&lt;/a&gt; to get cursor information, so it can keep dzen2 below the cursor. It also depends on xwininfo, xprop, and wmctrl for necessary controlling.&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;Sexy bouncing!&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3803541356848955053-2408783225620048427?l=blog.yjl.im' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/YJLv?a=ix2ThdifafM:cwvFUqcljlI:AOzAX-4I-Ts"&gt;&lt;img src="http://feeds.feedburner.com/~ff/YJLv?i=ix2ThdifafM:cwvFUqcljlI: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/ix2ThdifafM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.yjl.im/feeds/2408783225620048427/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.yjl.im/2011/09/bzen2-dzen2-which-bounces.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3803541356848955053/posts/default/2408783225620048427?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3803541356848955053/posts/default/2408783225620048427?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/YJLv/~3/ix2ThdifafM/bzen2-dzen2-which-bounces.html" title="bzen2 - the dzen2 which bounces" /><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/2011/09/bzen2-dzen2-which-bounces.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUMGRnk4cCp7ImA9WhdWFkg.&quot;"><id>tag:blogger.com,1999:blog-3803541356848955053.post-7361537708438796358</id><published>2011-09-10T05:21:00.000-07:00</published><updated>2011-09-10T05:23:47.738-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-10T05:23:47.738-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Blogger Stats" /><category scheme="http://www.blogger.com/atom/ns#" term="spammer" /><category scheme="http://www.blogger.com/atom/ns#" term="fake referrer" /><title>My most sincere gratitude to spammers and Blogger staff</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-bh3EgsbZk88/TmtPfgpI8EI/AAAAAAAAC9c/-d55BSs2CRc/s1600/2011-09-10--19%253A47%253A27.png" imageanchor="1"&gt;&lt;img border="0" class="no-autoresize" height="492" src="http://2.bp.blogspot.com/-bh3EgsbZk88/TmtPfgpI8EI/AAAAAAAAC9c/-d55BSs2CRc/s640/2011-09-10--19%253A47%253A27.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Thank you, spams! Thank you for bringing 60 poor people to my blog posts, I believe that they are real people and eager to find out what's going on and how to get rid of those.&lt;br /&gt;
&lt;br /&gt;
Thank you for filling up my boring traffic source with your creative &lt;a href="http://blog.yjl.im/2011/09/same-old-story-fake-forums-profile.html"&gt;member profiles&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-9A3QH92GmdQ/TmtQdE2TQoI/AAAAAAAAC9g/LWQglvQ8xuU/s1600/2011-09-10--19%253A51%253A50.png" imageanchor="1"&gt;&lt;img border="0" class="no-autoresize" height="478" src="http://3.bp.blogspot.com/-9A3QH92GmdQ/TmtQdE2TQoI/AAAAAAAAC9g/LWQglvQ8xuU/s640/2011-09-10--19%253A51%253A50.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Thank you, you kindly Ukrainian people for spending time sending delicated fabric HTTP referrer header to Blogger server. It must cost you some bandwidth to send to a million of blogs or even more. On be half of all our bloggers, we thank you. I apologize if some come from other nations and I didn't give you credit. You can leave your information in comment, I will add as soon as I finish process the invaluable message in the folder named Spam in Gmail.&lt;br /&gt;
&lt;br /&gt;
Also, thank you, you genius high moral programmers for building programs for those people. I know you guys build them not for money, because that's only a few bucks, that's all those people can pay you.&lt;br /&gt;
&lt;br /&gt;
And how can I miss our beloved Blogger staff? They let us enjoy reading the amazing statistics. For the last few days, it's been a fantastic period of time. The number get higher and higher. Who knows, I might hit one thousand pageviews next month.&lt;br /&gt;
&lt;br /&gt;
Lastly, for a comparison, just to show you how bad product Google Analytics is, can not detect HTTP referrer which web server receives. The following screenshot is made by increase the size of new Google Analytics report's embed, so you can see clearly. The line on top is pageviews, the other is visits. As you can see, Blogger Stats gives you 100+ more pageviews.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-H-yqYJrgywA/TmtUoBqB3SI/AAAAAAAAC9k/76LFeHSamBQ/s1600/2011-09-10--20%253A07%253A12.png" imageanchor="1"&gt;&lt;img border="0" class="no-autoresize" height="360" src="http://3.bp.blogspot.com/-H-yqYJrgywA/TmtUoBqB3SI/AAAAAAAAC9k/76LFeHSamBQ/s640/2011-09-10--20%253A07%253A12.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Don't use Google Analytics, Blogger Stats is better. No installation required, better (bigger as in number) results.&lt;br /&gt;
&lt;br /&gt;
Love,&lt;br /&gt;
P.&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;Half way to join to 500 club&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3803541356848955053-7361537708438796358?l=blog.yjl.im' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/YJLv?a=yNAn_PtJy3s:M03gmiRjl10:AOzAX-4I-Ts"&gt;&lt;img src="http://feeds.feedburner.com/~ff/YJLv?i=yNAn_PtJy3s:M03gmiRjl10: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/yNAn_PtJy3s" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.yjl.im/feeds/7361537708438796358/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.yjl.im/2011/09/my-most-sincere-gratitude-to-spammers.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3803541356848955053/posts/default/7361537708438796358?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3803541356848955053/posts/default/7361537708438796358?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/YJLv/~3/yNAn_PtJy3s/my-most-sincere-gratitude-to-spammers.html" title="My most sincere gratitude to spammers and Blogger staff" /><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/-bh3EgsbZk88/TmtPfgpI8EI/AAAAAAAAC9c/-d55BSs2CRc/s72-c/2011-09-10--19%253A47%253A27.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.yjl.im/2011/09/my-most-sincere-gratitude-to-spammers.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D04CR3gzeyp7ImA9WhdWFk0.&quot;"><id>tag:blogger.com,1999:blog-3803541356848955053.post-3189466740537672278</id><published>2011-09-09T14:52:00.000-07:00</published><updated>2011-09-09T15:06:06.683-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-09T15:06:06.683-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Google App Engine" /><category scheme="http://www.blogger.com/atom/ns#" term="pricing" /><title>Now I know I will be screwed by new GAE pricing model</title><content type="html">Firstly: Hey, GAE team thanks for updating the side-by-side new price info in Billing History.&lt;br /&gt;
&lt;br /&gt;
They just posted &lt;a href="http://fedoratux.blogspot.com/2009/11/migrating-to-tmux-from-gnuscreen.html"&gt;an update&lt;/a&gt;. (My TL;DR: Still prepare to move out if you have already decided to do so.) Believe me, there will be another flood coming, just see.&lt;br /&gt;
&lt;br /&gt;
In my previous, I &lt;a href="http://blog.yjl.im/2011/09/i-have-1438180-3677230-pageviews.html"&gt;mentioned&lt;/a&gt; that I have an app which receives 2.5M pageviews per month. That is just roughly speaking. It has two versions, the newer one is just a simple JavaScript which is run on other websites.&lt;br /&gt;
&lt;br /&gt;
Which is actually the reason of suffering running out of free quota. I had to cease using GAE processing or that app is easily capped. But the version is different than the original, the original processes and stores data. It's fairly simple but processing really uses a lot of resources. The original currently serves 80 to 100 websites a day, it still runs just didn't accept new websites.&lt;br /&gt;
&lt;br /&gt;
It receives close to 200K requests a day, average CPU time is 23 (7 for API), uses 96% of overall CPU time. No errors. Since it uses 96%, I am pretty sure that I would redirect to new script, I think they are compatible. Not really sure, can't remember last time I updated either of them.&lt;br /&gt;
&lt;br /&gt;
Here is the updated new pricing estimation:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-keLpEHiZhvw/Tmp_JvRz0ZI/AAAAAAAAC9Y/KjKV0P_iBAI/s1600/2011-09-10--04%253A58%253A05.png"&gt;&lt;img border="0" class="no-autoresize" src="http://3.bp.blogspot.com/-keLpEHiZhvw/Tmp_JvRz0ZI/AAAAAAAAC9Y/KjKV0P_iBAI/s1600/2011-09-10--04%253A58%253A05.png" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Clearly, I will need to react. 300+ websites (200 from new script) use my stuff, I can't really just let their viewers see error message saying the BRPS is out of service.&lt;br /&gt;
&lt;br /&gt;
But that's not all, this blog is also affected. Currently, it uses 26+ instance hours (I have no idea what that means). Basically, the app I uses to serve for this blog only provides static files and font files, though there does have some Python code running for HTTP header setting and checking if request font path is valid. I don't understand why it costs so much free quota, or it doesn't just new pricing has much lower quota?&lt;br /&gt;
&lt;br /&gt;
I will need to look into this.&lt;br /&gt;
&lt;br /&gt;
Still not ends here yet. Third app, it uses 24+. Crap! Wait, not yet. Fourth app, 30+. Darn! Get back to your seat, fifth and sixth apps, they have heavy cron tasks. 50+, two corpses.&lt;br /&gt;
&lt;br /&gt;
That's all, thanks for reading.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="center"&gt;
&lt;tt&gt;&amp;lt;THIS IS A SEPARATOR IN ASCII SO IT WON'T SUCK UP FREE QUOTA&amp;gt;&lt;/tt&gt;&lt;/div&gt;
&lt;br /&gt;
One thing this &lt;a href="https://plus.google.com/110401818717224273095/posts/AA3sBWG92gu"&gt;personal post&lt;/a&gt; says very right, GAE has been in three year preview state. (I only skim it)&lt;br /&gt;
&lt;br /&gt;
This is how I look at it. Three years is way too long and we get tired of it. In the beginning, you were very excited of new feature just being added, bugs got fixed. But as the version number grew, you didn't even want to download the new version, needless to read the changelog carefully.&lt;br /&gt;
&lt;br /&gt;
You just want to the existing code to continue running as before. You don't want to use new API or even some experimental hooks, you just can care less how much improved performance you can get by using new stuff.&lt;br /&gt;
&lt;br /&gt;
The old one runs well, why bother to update? Not to mention there might be bug in new thing, who knows when that would explode? Old is stable already, life is exciting already, I need no more surprise.&lt;br /&gt;
&lt;br /&gt;
Free quota now is really free. I used to feel, it's not easy to use them all if your program is small. Now, it's like dining at 100$+ restaurant, you eat for atmosphere not the food for your stomach.&lt;br /&gt;
&lt;br /&gt;
Oh, wait, just saw this: "Increased free Instance Hours: We are increasing the number of free Instance Hours &lt;b&gt;&lt;i&gt;from 24 to 28&lt;/i&gt;&lt;/b&gt;," does that mean I have one more dessert? Come on, ever heard a word "double?"&lt;br /&gt;
&lt;br /&gt;
"We’re now giving you almost eight weeks before introducing the new pricing," then I will start tuning.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://www.flickr.com/photos/news46/2199460575/"&gt;Starting on October 31st&lt;/a&gt;. Anyone with me?&lt;br /&gt;
&lt;br /&gt;
&lt;div class="center"&gt;
&lt;tt&gt;&amp;lt;THIS IS ANOTHER SEPARATOR IN ASCII SO IT WON'T SUCK UP FREE QUOTA&amp;gt;&lt;/tt&gt;&lt;/div&gt;
&lt;br /&gt;
Edit: a couple of minutes after I hit the publish button, I received the following letter from GAE regarding the recent M/S datastore outage and my app brps.&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;Subject: Google App Engine application brps affected by unapplied writes

Dear Developer,

During the day of Aug 19th, 2011, Google App Engine experienced a
serving outage that lasted approximately 2 hours affecting Master
Slave application. HRD applications were not impacted. In the minutes
leading up to the outage, we received a number of writes from your
application that we were unable to replicate to the secondary
Datastore. This caused the secondary Datastore to be slightly out of
sync when we began serving traffic as part of the outage recovery
process. We call these type of writes “unapplied writes.” Rest
assured, unapplied writes do not impact the transactional consistency
and have not corrupted your application data.

During the recovery of the failed data center, we were able to produce
a log of the unapplied writes that occurred during the outage
period. As a service to you, these unapplied writes are now available
from within your application’s to make it easy for you to re-integrate
them. We have also developed a number of tools and example on how to
do so. If you are interested in better understanding this logged data
and how you can work with it, please visit the Unapplied Writes FAQ:
http://code.google.com/appengine/kb/unappliedwrites.html

The following application you own has unapplied writes:
brps

You can determine which entities are impacted by unapplied writes by
looking at the Admin Console Datastore Viewer. If you see any Kinds in
the Kind dropdown box with the prefix __unapplied_write__, this Entity
Kind has unapplied writes that can be re-integrated.

No action is required on your part; you can choose to ignore these
writes if you choose. We're making these writes available to you
because we want you to know that whenever possible, we take every step
we can to recover any data, complete or incomplete, that you attempt
to store on App Engine.

Additionally, if you have any follow up questions, feel free to fill a
production ticket on the public issue tracker:
http://code.google.com/p/googleappengine/issues/entry?template=Production%20issue

Note that application using the High Replication Datastore for Storage
are not impacted by datacenter failovers, because App Engine commits
data synchronously to multiple datacenters before returning to the
applications.

We strongly suggest you to migrate to HRD to prevent future datacenter
failovers to impact your application.

We are about to release an improved HRD migration tool, if you haven’t
already we strongly encourage you to signup for early testing here:
http://goo.gl/3jrXu

We apologize for any inconvenience this may have caused you and thank
you for your continued support of Google App Engine.

The App Engine team

© 2011 Google Inc. 1600 Amphitheatre Parkway, Mountain View, CA 94043

You have received this mandatory email service announcement to notify
you about important maintenance for your Google App Engine
application.&lt;/pre&gt;
&lt;br /&gt;
IDGAD. Archived.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3803541356848955053-3189466740537672278?l=blog.yjl.im' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/YJLv?a=hUc8ZfAgLVQ:qg-Op3-12Ns:AOzAX-4I-Ts"&gt;&lt;img src="http://feeds.feedburner.com/~ff/YJLv?i=hUc8ZfAgLVQ:qg-Op3-12Ns: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/hUc8ZfAgLVQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.yjl.im/feeds/3189466740537672278/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.yjl.im/2011/09/now-i-know-i-will-be-screwed-by-new-gae.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3803541356848955053/posts/default/3189466740537672278?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3803541356848955053/posts/default/3189466740537672278?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/YJLv/~3/hUc8ZfAgLVQ/now-i-know-i-will-be-screwed-by-new-gae.html" title="Now I know I will be screwed by new GAE pricing model" /><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/-keLpEHiZhvw/Tmp_JvRz0ZI/AAAAAAAAC9Y/KjKV0P_iBAI/s72-c/2011-09-10--04%253A58%253A05.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.yjl.im/2011/09/now-i-know-i-will-be-screwed-by-new-gae.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkMESHw6fSp7ImA9WhdWFUQ.&quot;"><id>tag:blogger.com,1999:blog-3803541356848955053.post-9026127277431736354</id><published>2011-09-09T11:53:00.000-07:00</published><updated>2011-09-09T11:53:29.215-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-09T11:53:29.215-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="BRPS" /><category scheme="http://www.blogger.com/atom/ns#" term="Allrecipes" /><category scheme="http://www.blogger.com/atom/ns#" term="Food Wishes" /><category scheme="http://www.blogger.com/atom/ns#" term="Chef John" /><title>I have a 1,438,180 + 36,772*30 pageviews service, anyone wants to acquire it?</title><content type="html">Alright, this is a null-grade post. Nothing really important except the first part.&lt;br /&gt;
&lt;br /&gt;
One of my favorite channel, &lt;a href="http://www.youtube.com/user/foodwishes"&gt;Food Wishes&lt;/a&gt;, has just announced that they are acquired by Allrecipes.com. If you don't know either, well, I guess you probably a fast food lover.&lt;br /&gt;
&lt;br /&gt;
Aside: There is nothing wrong with fast food, I don't get why some people so dislike them to emphasis their taste or healthy diet. It's how you make, not how fast food is cooked.&lt;br /&gt;
&lt;br /&gt;
Anyway, I read the &lt;a href="http://www.prnewswire.com/news-releases/allrecipescom-acquires-food-wishes-in-major-push-to-dominate-the-online-food-video-space-127301528.html"&gt;press release&lt;/a&gt; and just realized how big Food Wishes is. 2 million views and work independently, Chef John really does an amazing job.&lt;br /&gt;
&lt;br /&gt;
If you have watched his videos, that number isn't really hard to imagine. His videos is so fun too watch, especially when he make some pun connection.&lt;br /&gt;
&lt;br /&gt;
Back to the service I was talking about. (Was I?) Let's take a look at screenshots first.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-M9DbAcLxSCk/TmpZy1QufwI/AAAAAAAAC9Q/MQCq1HDmRto/s1600/2011-09-10--02%253A18%253A56.png" imageanchor="1"&gt;&lt;img border="0" height="296" src="http://2.bp.blogspot.com/-M9DbAcLxSCk/TmpZy1QufwI/AAAAAAAAC9Q/MQCq1HDmRto/s640/2011-09-10--02%253A18%253A56.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-xSi_-XuABn0/TmpZ6RAhC9I/AAAAAAAAC9U/nSrSUKszm2o/s1600/2011-09-10--02%253A19%253A34.png" imageanchor="1"&gt;&lt;img border="0" height="192" src="http://1.bp.blogspot.com/-xSi_-XuABn0/TmpZ6RAhC9I/AAAAAAAAC9U/nSrSUKszm2o/s640/2011-09-10--02%253A19%253A34.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
I do not edit it or use Firebug to &lt;a href="http://blog.yjl.im/2011/08/even-spammers-need-education.html"&gt;make fun of screenshot&lt;/a&gt;. They are untouched, SOO&amp;lt;del&amp;gt;C&amp;lt;/del&amp;gt;S. (Straight-Out-Of-Screen)&lt;br /&gt;
&lt;br /&gt;
That's just v1.5 (I think I can call that), there is an old v1.0, which generates 36,772 requests in last 24 hours. Multiply it by 30, that would be 1,103,160+. (The real number should be little higher, because it's actually 23h-24h window) Sum up them, it's 2,541,340.&lt;br /&gt;
&lt;br /&gt;
Holy smoky bacon with cheese, I have no idea my simple script serves 2.5+ million times a month. If that wasn't Chef John, I wouldn't have looked into it.&lt;br /&gt;
&lt;br /&gt;
If I nuke the service someday, I wonder if I would hear some swears?&lt;br /&gt;
&lt;br /&gt;
I wish this statistics was my blog's.&lt;br /&gt;
&lt;br /&gt;
PS. that service is NFS, the question mark sneaks into title by itself.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3803541356848955053-9026127277431736354?l=blog.yjl.im' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/YJLv?a=4cm3rz5A0sE:L1NoqT4NMDM:AOzAX-4I-Ts"&gt;&lt;img src="http://feeds.feedburner.com/~ff/YJLv?i=4cm3rz5A0sE:L1NoqT4NMDM: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/4cm3rz5A0sE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.yjl.im/feeds/9026127277431736354/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.yjl.im/2011/09/i-have-1438180-3677230-pageviews.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3803541356848955053/posts/default/9026127277431736354?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3803541356848955053/posts/default/9026127277431736354?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/YJLv/~3/4cm3rz5A0sE/i-have-1438180-3677230-pageviews.html" title="I have a 1,438,180 + 36,772*30 pageviews service, anyone wants to acquire it?" /><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/-M9DbAcLxSCk/TmpZy1QufwI/AAAAAAAAC9Q/MQCq1HDmRto/s72-c/2011-09-10--02%253A18%253A56.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.yjl.im/2011/09/i-have-1438180-3677230-pageviews.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0MEQ304fyp7ImA9WhdWFUQ.&quot;"><id>tag:blogger.com,1999:blog-3803541356848955053.post-4938900694034383907</id><published>2011-09-09T11:03:00.000-07:00</published><updated>2011-09-09T11:03:22.337-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-09T11:03:22.337-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="fun" /><title>Does Google hire teenage girl?</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-rhB1j-Htazs/TmpUM55_9bI/AAAAAAAAC9M/Myk6SRMbwe8/s1600/2011-09-10--01%253A51%253A30.png" imageanchor="1"&gt;&lt;img border="0" class="no-autoresize" src="http://3.bp.blogspot.com/-rhB1j-Htazs/TmpUM55_9bI/AAAAAAAAC9M/Myk6SRMbwe8/s1600/2011-09-10--01%253A51%253A30.png" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
At first glance, I did have such thought. Too shame it didn't have waves around it, or it would be really cute. xD&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3803541356848955053-4938900694034383907?l=blog.yjl.im' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/YJLv?a=PuvQrxbQElA:UIFOU-EYZkA:AOzAX-4I-Ts"&gt;&lt;img src="http://feeds.feedburner.com/~ff/YJLv?i=PuvQrxbQElA:UIFOU-EYZkA: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/PuvQrxbQElA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.yjl.im/feeds/4938900694034383907/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.yjl.im/2011/09/does-google-hire-teenage-girl.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3803541356848955053/posts/default/4938900694034383907?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3803541356848955053/posts/default/4938900694034383907?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/YJLv/~3/PuvQrxbQElA/does-google-hire-teenage-girl.html" title="Does Google hire teenage girl?" /><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/-rhB1j-Htazs/TmpUM55_9bI/AAAAAAAAC9M/Myk6SRMbwe8/s72-c/2011-09-10--01%253A51%253A30.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.yjl.im/2011/09/does-google-hire-teenage-girl.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUICQ307eSp7ImA9WhdWFUo.&quot;"><id>tag:blogger.com,1999:blog-3803541356848955053.post-3744349249376634241</id><published>2011-09-09T07:12:00.000-07:00</published><updated>2011-09-09T07:12:42.301-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-09T07:12:42.301-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Vim" /><category scheme="http://www.blogger.com/atom/ns#" term="Vimperator" /><category scheme="http://www.blogger.com/atom/ns#" term="web browser" /><category scheme="http://www.blogger.com/atom/ns#" term="Pentadactyl" /><category scheme="http://www.blogger.com/atom/ns#" term="Firefox" /><title>From Vimperator to Pentadactyl</title><content type="html">&lt;a href="http://blog.yjl.im/2009/11/migrating-to-tmux-from-gnuscreen.html"&gt;Once&lt;/a&gt; again, I switch to something better. But this time is different, it's not the Vimperator broken, well it is in some sense of interpretation. It's because the basis of philosophy. I would never expect myself switching because this kind of point of view. I always think people who so insist in using Open Source are like Saints. (Hope you get what I really mean in that)&lt;br /&gt;
&lt;br /&gt;
Anyway, after I posted about &lt;a href="http://blog.yjl.im/2011/09/fixing-vimperator-statusline-encryption.html"&gt;encryption status in Vimperator&lt;/a&gt;, I stumbled on this wiki page, &lt;a href="http://code.google.com/p/vimperator-labs/wiki/VimperatorVsPentadactyl"&gt;VimperatorVsPentadactyl&lt;/a&gt;. Now I see why they have been &lt;i&gt;getting rid&lt;/i&gt; of us.&lt;br /&gt;
&lt;br /&gt;
Right now, I have switched to &lt;a href="http://code.google.com/p/dactyl/"&gt;Pentadactyl&lt;/a&gt;. Here is the &lt;a href="https://github.com/livibetter/dotfiles/commit/2b8c750efe6f1d54dc537f8d763f0b9392dcd2bf"&gt;diff&lt;/a&gt; of what I have changed. It virtually produces exactly same result as before.&lt;br /&gt;
&lt;br /&gt;
A few things I have learnt:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Vim syntax file is generated by running &lt;code&gt;:mks&lt;/code&gt; in Pentadactyl. It will put the file at right place for you.&lt;/li&gt;
&lt;li&gt;Colorscheme extension is &lt;code&gt;.penta&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;guioptions&lt;/code&gt; not &lt;code&gt;toolbars&lt;/code&gt;, since that's where it was. It also has option for statusline, so I don't need to hack the style anymore.&lt;/li&gt;
&lt;li&gt;You need to define function in &lt;code&gt;window&lt;/code&gt; in your &lt;code&gt;~/.pentadactylrc&lt;/code&gt;, i.e. &lt;code&gt;window.func = function(){};&lt;/code&gt;. &lt;code&gt;this !== window&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;:if :elseif :else :endif&lt;/code&gt; is nice.&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
Pentadactyl intergates statusline with the Addon bar, so those addon button, you can see next to the statusline. I personally do not like this. But I like the loading indication, which is what Vimperator nuked. And the encryption status, also what Vimperator nuked. I now understand how many stuff Vimperator has erased.&lt;br /&gt;
&lt;br /&gt;
I have known Pentadactyl long ago, at that time, Vimperator has made a lot of changes, so I decided not to switch. But, it doesn't really seem to change much, some of my code I didn't even touch.&lt;br /&gt;
&lt;br /&gt;
Two things I have to complain is now I need to get used to &lt;kbd&gt;C-V&lt;/kbd&gt; and &lt;kbd&gt;C-Z&lt;/kbd&gt; after I finally got comfortable with inhuman &lt;kbd&gt;Ins&lt;/kbd&gt; or &lt;kbd&gt;S-Esc&lt;/kbd&gt;.&lt;br /&gt;
&lt;br /&gt;
The latter is the worst keybinding throughout the computing history, though insert key isn't much better, that takes me eons to get used of them. They should've just tell those people, use your &lt;i&gt;mouse&lt;/i&gt; to uninstall Vimperator, problem solved!&lt;br /&gt;
&lt;br /&gt;
The second thing, the name is...&lt;br /&gt;
&lt;br /&gt;
Time for the final step:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;code&gt;:extdelete Vimperator&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
Mission accomplished. &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3803541356848955053-3744349249376634241?l=blog.yjl.im' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/YJLv?a=KFJ_PzKkheM:2uUpWzHvvBo:AOzAX-4I-Ts"&gt;&lt;img src="http://feeds.feedburner.com/~ff/YJLv?i=KFJ_PzKkheM:2uUpWzHvvBo: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/KFJ_PzKkheM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.yjl.im/feeds/3744349249376634241/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.yjl.im/2011/09/from-vimperator-to-pentadactyl.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3803541356848955053/posts/default/3744349249376634241?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3803541356848955053/posts/default/3744349249376634241?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/YJLv/~3/KFJ_PzKkheM/from-vimperator-to-pentadactyl.html" title="From Vimperator to Pentadactyl" /><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/2011/09/from-vimperator-to-pentadactyl.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkYNRX8_eip7ImA9WhdWFUo.&quot;"><id>tag:blogger.com,1999:blog-3803541356848955053.post-4869190712792899261</id><published>2011-09-08T16:35:00.000-07:00</published><updated>2011-09-09T06:16:34.142-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-09T06:16:34.142-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="SystemTap" /><category scheme="http://www.blogger.com/atom/ns#" term="fun" /><category scheme="http://www.blogger.com/atom/ns#" term="kernel" /><category scheme="http://www.blogger.com/atom/ns#" term="rickrolling" /><title>kernelroll</title><content type="html">This just... &lt;a href="https://github.com/fpletz/kernelroll"&gt;rickrolls&lt;/a&gt;!&lt;br /&gt;
&lt;br /&gt;
Also checkout this one-liner using &lt;a href="https://github.com/fpletz/kernelroll/pull/4"&gt;SystemTap&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
I didn't compile the original, so I re-compiled my kernel to add required flags, just get my computer rickrolling! I did slight modification:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="bash"&gt;&lt;code&gt;sudo stap -g -e 'probe kernel.function("do_filp_open") { p = kernel_string($pathname); l = strlen(p); ext = substr(p, l - 4, l) ; if ( ext == ".mp3" || ext == ".ogg" || ext == ".mp4" ) { $pathname = %{ (long)"/tmp/RickRoll.flv" %}; } }'

sudo stap    -e 'probe kernel.function("do_filp_open") { p = kernel_string($pathname); l = strlen(p); ext = substr(p, l - 4, l) ; if ( ext == ".mp3" || ext == ".ogg" || ext == ".mp4" ) { system("mplayer -fs /tmp/RickRoll.flv") ; } }'&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
To tell the truth, I don't know where to get the MP3, so I use YouTube video and it gets even better. Video player sure has no problems, MPD has no problem as well.&lt;br /&gt;
&lt;br /&gt;
If you have an empty audio file for the media player and supply &lt;code&gt;-loop 0&lt;/code&gt; to mplayer... full screen + looping, FTW!&lt;br /&gt;
&lt;br /&gt;
I didn't try these: Hijacking normal files like txt when editor opening (Don't really know SystemTap, but I think &lt;code&gt;execname()&lt;/code&gt; is right way to check, right?) and replace with lyrics. Images, mehhay! I think this would replace all images you view on web when browser loads from cache.&lt;br /&gt;
&lt;br /&gt;
All my playlists are rickroll'd.&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;Never gonna say good bye, well sang.&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3803541356848955053-4869190712792899261?l=blog.yjl.im' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/YJLv?a=yCca1eV5HDA:7XyDnsgMwmg:AOzAX-4I-Ts"&gt;&lt;img src="http://feeds.feedburner.com/~ff/YJLv?i=yCca1eV5HDA:7XyDnsgMwmg: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/yCca1eV5HDA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.yjl.im/feeds/4869190712792899261/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.yjl.im/2011/09/kernelroll.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3803541356848955053/posts/default/4869190712792899261?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3803541356848955053/posts/default/4869190712792899261?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/YJLv/~3/yCca1eV5HDA/kernelroll.html" title="kernelroll" /><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>2</thr:total><feedburner:origLink>http://blog.yjl.im/2011/09/kernelroll.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0IERnYzeCp7ImA9WhdWFU8.&quot;"><id>tag:blogger.com,1999:blog-3803541356848955053.post-7772688813544584818</id><published>2011-09-08T13:55:00.000-07:00</published><updated>2011-09-08T16:45:07.880-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-08T16:45:07.880-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Blogger Stats" /><category scheme="http://www.blogger.com/atom/ns#" term="Blogger" /><category scheme="http://www.blogger.com/atom/ns#" term="profile page" /><category scheme="http://www.blogger.com/atom/ns#" term="Google" /><category scheme="http://www.blogger.com/atom/ns#" term="fake referrer" /><title>Same old story, fake forums profile pages referrer</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-3tE8mYQIkJo/TmknDGZ4sQI/AAAAAAAAC9E/uPqgGQVb4mg/s1600/2011-09-09--04%253A30%253A30.png" imageanchor="1"&gt;&lt;img border="0" class="no-autoresize" src="http://4.bp.blogspot.com/-3tE8mYQIkJo/TmknDGZ4sQI/AAAAAAAAC9E/uPqgGQVb4mg/s1600/2011-09-09--04%253A30%253A30.png" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
I have seen this type of spam long ago, but didn't mention it.&lt;br /&gt;
&lt;br /&gt;
Blogger keeps &lt;a href="http://buzz.blogger.com/2011/09/announcing-blogger-app-for-ios.html"&gt;adding new features&lt;/a&gt; just like other &lt;a href="http://googlecode.blogspot.com/2011/09/google-apis-client-library-for-php-beta.html"&gt;Google product/service&lt;/a&gt;. But leaves plenty of issues behind, you go open a issue tracker, 90% you will see lots of issues are damn old and unresolved.&lt;br /&gt;
&lt;br /&gt;
As a normal user and someone who can code, I am really sick of  it. It's not like you can fix on your end, they are server-side things.  You can workaround, you can pretend you didn't see it, but you know the  issues are still there.&lt;br /&gt;
&lt;br /&gt;
Do they really use their own products? They must be aware of it.&lt;br /&gt;
&lt;br /&gt;
There is no doubt that Google creates a lot of good stuff, but also no denial about this: they also  close/kill/terminate/abandon good stuff.&lt;br /&gt;
&lt;br /&gt;
Google, assign some developers for this kind of thing and old issues! Hire some relationship managers like Jen and bridge API users (the developers) and your developers. You don't need to deal with normal users since you have lots of so-called &lt;i&gt;"experts"&lt;/i&gt; users on your help forums already.&lt;br /&gt;
&lt;br /&gt;
But it's Google, I am just nobody, not someone who tweets would get hundreds retweets in an hour. Not someone who whispers would cause one hundred follow-up comments.&lt;br /&gt;
&lt;br /&gt;
So, I would just suck it up and leave it rusty in the dungeon behind the red door.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3803541356848955053-7772688813544584818?l=blog.yjl.im' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/YJLv?a=60mlDIQz43A:Ydk468aoyuA:AOzAX-4I-Ts"&gt;&lt;img src="http://feeds.feedburner.com/~ff/YJLv?i=60mlDIQz43A:Ydk468aoyuA: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/60mlDIQz43A" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.yjl.im/feeds/7772688813544584818/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.yjl.im/2011/09/same-old-story-fake-forums-profile.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3803541356848955053/posts/default/7772688813544584818?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3803541356848955053/posts/default/7772688813544584818?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/YJLv/~3/60mlDIQz43A/same-old-story-fake-forums-profile.html" title="Same old story, fake forums profile pages referrer" /><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/-3tE8mYQIkJo/TmknDGZ4sQI/AAAAAAAAC9E/uPqgGQVb4mg/s72-c/2011-09-09--04%253A30%253A30.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.yjl.im/2011/09/same-old-story-fake-forums-profile.html</feedburner:origLink></entry></feed>

