<?xml version="1.0" encoding="UTF-8"?><rss xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:content="http://purl.org/rss/1.0/modules/content/" version="2.0"><channel><title>rictin.com</title><atom:link href="http://www.rictin.com/feed" rel="self" type="application/rss+xml"/><link>http://www.rictin.com/</link><description>Just another weblog</description><lastBuildDate>Sat, 18 Sep 2021 20:38 +0000</lastBuildDate><language>en</language><item><title>XPath shell script</title><link>http://www.rictin.com/xpath</link><guid>http://www.rictin.com/xpath</guid><description>XPath shell script, with auto completion.</description><pubDate>Sat, 12 Apr 2014 23:00 +0000</pubDate><content:encoded>&lt;p&gt;I often want to quickly run an XPath expression against an XML file, e.g. when grep is not satisfactory. Commands I have tried usually don't even support "*:name" to ignore namespaces. I wrote a script based on xsltproc that ignores all namespaces, selects nodes matched, and prints an optionally customized expression for each node:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;Usage: xpath FILE XPATH_EXPRESSION [XPATH_EXPRESSION]

Name spaces are ignored. For each node matched by the first
expression, the optional expression (default: ".") is applied.

Example: xpath file "/books/book[year=1983]" "concat(title,author)"&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The output consists of two columns; the path to the matched node, and the value of the matched node (the 2nd expression). Example:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;$ xpath pom.xml //version
/project/version        0.2
/project/build/plugins/plugin[1]/version        3.1
/project/build/plugins/plugin[2]/version        2.6&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;I also wrote a completion script to enable auto completion of XPath expressions, like:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;$ xpath pom.xml /project/de[TAB][TAB]
/project/dependencies/  /project/developers/&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The files: &lt;a href="http://data.rictin.com/files/xpath.sh"&gt;xpath.sh&lt;/a&gt;, &lt;a href="http://data.rictin.com/files/xpath_completion"&gt;xpath_completion&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>Book.js</title><link>http://www.rictin.com/book</link><guid>http://www.rictin.com/book</guid><description>Simple book page flip script.</description><pubDate>Thu, 20 Mar 2014 19:00 +0000</pubDate><content:encoded>&lt;p&gt;There are a lot of page flip libraries available, but I couldn't find a simple one that was compatible with old browsers and with a permissive software license, so I wrote one. Demo:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;&amp;lt;div class="book pages_5"&amp;gt;
	&amp;lt;img src="http://data.rictin.com/img/book.js/page0.jpg" alt="Page 0" /&amp;gt;
&amp;lt;/div&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Result:&lt;/p&gt;&lt;div class="book pages_5"&gt;
				&lt;img src="http://data.rictin.com/img/book.js/page0.jpg" alt="Page 0"&gt;&lt;/img&gt;
			&lt;/div&gt;&lt;p&gt;Click on the images to turn page.&lt;/p&gt;&lt;p&gt;Code: &lt;a href="http://data.rictin.com/files/book-0.2.2.js"&gt;book.js&lt;/a&gt; (BSD license)&lt;/p&gt;</content:encoded></item><item><title>Readable list operations</title><link>http://www.rictin.com/lists</link><guid>http://www.rictin.com/lists</guid><description>Simple and readable list operations.</description><pubDate>Fri, 15 Nov 2013 21:00 +0000</pubDate><content:encoded>&lt;p&gt;My attempt at simplifying common (java.util.)list operations such as:&lt;/p&gt;&lt;table border="0"&gt;
				&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;Lists.&lt;i&gt;sort&lt;/i&gt;(list).ascendingBy().getFirstName()&lt;/td&gt;&lt;/tr&gt;
				&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;Lists.&lt;i&gt;sort&lt;/i&gt;(list).nullsFirstDescendingBy().getFirstName()&lt;/td&gt;&lt;/tr&gt;
				&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;Lists.&lt;i&gt;filter&lt;/i&gt;(list).accept("Erik").getFirstName()&lt;/td&gt;&lt;/tr&gt;
				&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;Lists.&lt;i&gt;filter&lt;/i&gt;(list).rejectLessThan(18).getAge()&lt;/td&gt;&lt;/tr&gt;
				&lt;tr&gt;&lt;td&gt;Long total = &lt;/td&gt;&lt;td&gt;Lists.&lt;i&gt;sum&lt;/i&gt;(list).getCredit()&lt;/td&gt;&lt;/tr&gt;
				&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;Lists.&lt;i&gt;search&lt;/i&gt;(list).forValue("Erik").getFirstName() != null&lt;/td&gt;&lt;/tr&gt;
				&lt;tr&gt;&lt;td&gt;int minScore = &lt;/td&gt;&lt;td&gt;Lists.&lt;i&gt;search&lt;/i&gt;(list).forSmallest().getScore()&lt;/td&gt;&lt;/tr&gt;
				&lt;tr&gt;&lt;td&gt;int minScore = &lt;/td&gt;&lt;td&gt;Lists.&lt;i&gt;min&lt;/i&gt;(list).getScore()&lt;/td&gt;&lt;/tr&gt;
				&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;Lists.&lt;i&gt;forEach&lt;/i&gt;(list).setScore(0)&lt;/td&gt;&lt;/tr&gt;
				&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;Lists.&lt;i&gt;select&lt;/i&gt;(fromList, toList).acceptGreaterThan(30).getAge()&lt;/td&gt;&lt;/tr&gt;
				&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;Lists.&lt;i&gt;collect&lt;/i&gt;(persons, names).getName()&lt;/td&gt;&lt;/tr&gt;
				&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;Lists.&lt;i&gt;groupBy&lt;/i&gt;(inputList, resultMap).getAge()&lt;/td&gt;&lt;/tr&gt;
			&lt;/table&gt;&lt;p&gt;I think this has some very readable and easy to use code. Compare these (no pun intended. sort of. sorry.) different ways of sorting:&lt;/p&gt;&lt;p&gt;Pure Java:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;Collections.sort(list, new Comparator&amp;lt;Person&gt;() {
	public int compare(Person o1, Person o2) {
		if (null == ...
		return o1.getAge() - o2.getAge();
	}
});&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Google Guava:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;List&amp;lt;Person&gt; sorted = Ordering.natural().nullsFirst().onResultOf(
		new Function&amp;lt;Person, Integer&gt;() {
	public Integer apply(Person person) {
		return person.getAge();
	}
}).sortedCopy(list);&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Lambdaj:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;List&amp;lt;Person&gt; sorted = Lambda.sort(list, Lambda.on(Person.class).getAge()); // nulls?&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Mine:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;Lists.sort(list).nullsFirstAscendingBy().getAge();&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Google Guava and Lambdaj are much more powerful and feature complete, but I think mine is nice in specific cases.&lt;/p&gt;&lt;p&gt;Download: &lt;a href="http://repo.rictin.com/com/rictin/util/lists/0.2/lists-0.2.jar"&gt;lists-0.2.jar&lt;/a&gt; (Java 5, source included, MPL2).&lt;/p&gt;&lt;p&gt;&lt;a href="http://data.rictin.com/apidocs/collections/index.html"&gt;Javadoc&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Known limitations:&lt;/p&gt;&lt;ul&gt;
				&lt;li&gt;Supports only one method call per element. WON'T work: &lt;span class="nobr"&gt;sort(&lt;/span&gt;list).&lt;span class="nobr"&gt;ascendingBy(&lt;/span&gt;).&lt;span class="nobr"&gt;getAdr(&lt;/span&gt;).&lt;span class="nobr"&gt;getCountry(&lt;/span&gt;)&lt;/li&gt;
				&lt;li&gt;List cannot be empty&lt;/li&gt;
				&lt;li&gt;Final class elements won't work, but special support has been added for java.lang.String/Integer/Long/Double&lt;/li&gt;
			&lt;/ul&gt;</content:encoded></item><item><title>Valgomat</title><link>http://www.rictin.com/valgomat</link><guid>http://www.rictin.com/valgomat</guid><description>Demo av mini-valgomat for Venstre, SP og SV.</description><pubDate>Thu, 08 Aug 2013 23:59 +0000</pubDate><content:encoded>&lt;p id="tekst"&gt;Sorter utsagnene ved å dra boksene med musen slik at det du er mest enig med står øverst.&lt;/p&gt;&lt;div id="resultat" class="resultat"&gt;
				&lt;div class="alt venstre"&gt; &lt;/div&gt;
				&lt;div class="alt sv"&gt; &lt;/div&gt;
				&lt;div class="alt sp"&gt; &lt;/div&gt;
			&lt;/div&gt;&lt;div id="spm1" class="spm"&gt;
				&lt;div class="alt venstre"&gt;
					[Partiets] prinsipielle syn er at [...] ingen posisjoner [skal] gå i arv. Eventuell avvikling av kongedømmet
					må forankres i folkeavstemming
				&lt;/div&gt;
				&lt;div class="alt sv"&gt;
					I et demokrati kan ikke viktige samfunnsposisjoner gå i
					arv. [Partiet] vil derfor avskaffe monarkiet og innføre republikk
					som styringsform i Norge.
				&lt;/div&gt;
				&lt;div class="alt sp"&gt;
					[Partiet] slår ring om [...] monarkiet [...] og andre samlende nasjonale institusjoner fordi vi mener at disse er bærende i den norske identiteten
				&lt;/div&gt;
			&lt;/div&gt;&lt;div id="spm2" class="spm"&gt;
				&lt;div class="alt sv"&gt;
					I dag tas for
					mange avgjørelser i internasjonale organisasjoner som
					er med på å befeste de rådende maktforholdene og
					forskjellene, som IMF, Verdensbanken, WTO og G20.
					At disse demokratiseres eller erstattes med et
					sterkere FN og mer demokratiske institusjoner
				&lt;/div&gt;
				&lt;div class="alt sp"&gt;
					[Partiet] ønsker ikke en ytterligere liberalisering av verdenshandelen. Ikke alle sektorer egner seg for
					liberalisering gjennom internasjonale handelsavtaler. Vi vil støtte opp om interessene til de fattigste landene i WTO.
				&lt;/div&gt;
				&lt;div class="alt venstre"&gt;
					mekanismer som favoriserer rike land, må reduseres, og erstattes av et
					handelsregime som ivaretar utviklingslandenes interesser på en bedre måte. Norge bør
					aktivt bidra til å videreutvikle og styrke WTO. Systemet må reformeres, åpnes og demokratiseres.
				&lt;/div&gt;
			&lt;/div&gt;&lt;div id="spm3" class="spm"&gt;
				&lt;div class="alt sp"&gt;
					Vi ønsker å begrense kommersiell finansiering av skoler [...].
					Dagens privatskolelov dekker et tilbud med lange tradisjoner som et supplement til fellesskolen.
				&lt;/div&gt;
				&lt;div class="alt sv"&gt;
					Velferdsstaten skal gi skole [...] av god kvalitet til alle. [...]
					Det er et offentlig ansvar å sørge for velferd for alle.
					Større innslag av private tilbydere av velferdstjenester
					bidrar til å undergrave dette [...]
				&lt;/div&gt;
				&lt;div class="alt venstre"&gt;
					Gode private skoler skal ikke møtes med frykt og forbud,
					men med en satsing på den offentlige skolen som gjør at
					den foretrekkes av de fleste.
				&lt;/div&gt;
			&lt;/div&gt;&lt;div id="spm4" class="spm"&gt;
				&lt;div class="alt venstre"&gt;
					Staten og andre offentlige institusjoner skal i toleransens navn være upartiske [...]
					staten må bidra til rause finansieringsordninger for tros- og livssynssamfunn.
					[Partiet] vil skille stat og kirke
				&lt;/div&gt;
				&lt;div class="alt sp"&gt;
					kirke, religion og livssyn fortsatt bør være et offentlig anliggende.
					[Partiet] vil: - holde på en grunnlovsforankret folkekirke
				&lt;/div&gt;
				&lt;div class="alt sv"&gt;
					[Partiet] vil derfor avskaffe statskirkeordningen
					og sikre at offentlige institusjoner er
					livssynsnøytrale, samtidig som de enkelte trossamfunn
					får frihet og mulighet til å drive sin virksomhet
				&lt;/div&gt;
			&lt;/div&gt;&lt;div id="spm5" class="spm"&gt;
				&lt;div class="alt sv"&gt;
					det offentlige bør eie
					dominerende selskaper i markeder som er av avgjørende
					økonomisk betydning for landet. [...]
					Vi må [...] utvide offentlig eierskap.
				&lt;/div&gt;
				&lt;div class="alt venstre"&gt;
					Offentlig eierskap i næringslivet skaper lett rolleblanding	og
					demokratiske problemer. Det skal derfor begrenses til vitale
					samfunnshensyn, som viktige kompetansemiljøer, grunnleggende
					infrastruktur og kontroll med energi- og naturressurser.
				&lt;/div&gt;
				&lt;div class="alt sp"&gt;
					ønsker vi norsk privat eierskap med lokal forankring og statlig deleierskap
					der det trengs for å sikre nasjonalt eierskap.
					[...]
					Offentlig eierskap kan være hensiktsmessig i næringer og bedrifter med nasjonal, strategisk betydning.
				&lt;/div&gt;
			&lt;/div&gt;&lt;div id="spm6" class="spm"&gt;
				&lt;div class="alt venstre"&gt;
					[Partiet] er for et alleuropeisk samarbeid. [...]
					Forholdet til EU må demokratiseres slik at flere avgjørelser
					prøves i offentligheten. Dette krever en opprydning i
					de politiske prosessene i Stortinget, slik at en skiller ut de
					vesentlige politiske sakene fra andre mindre vesentlige.
					[...]
					et eventuelt norsk EU-medlemskap skal
					avgjøres etter folkeavstemning
				&lt;/div&gt;
				&lt;div class="alt sv"&gt;
					Overnasjonale ordninger av denne art [EU] er et dobbelt onde; folkestyret
					svekkes og blir erstattet med en nyliberalistisk økonomisk orden
					[...]
					Utenfor EU står Norge langt friere til å kjempe for global
					rettferdighet [...].
					[Partiet] er derfor motstandere av norsk EU-medlemskap og
					EØS-avtalen.
				&lt;/div&gt;
				&lt;div class="alt sp"&gt;
					[Partiet] mener at Norge fortsatt skal stå utenfor EU, og til at vi vil si opp EØS-avtalen og erstatte den med handels- og samarbeidsavtaler med EU.
					Det skal ikke være EU som utformer regler for det norske samfunnet.
				&lt;/div&gt;
			&lt;/div&gt;&lt;div id="spm7" class="spm"&gt;
				&lt;div class="alt sp"&gt;
					hoveddelen av norske klimakutt skal tas innenlands [...]
					Skogen er en viktig del av løsningen i klimapolitikken.
					Skogen i Norge tar opp CO2 tilsvarende halvparten av de norske klimautslippene.
				&lt;/div&gt;
				&lt;div class="alt sv"&gt;
					alle samfunnsbeslutninger skal bygge på noen grunnleggende miljøprinsipper [...]
					Redusert forbruk i vår del av verden er en forutsetning for å løse mange miljøproblemer.
				&lt;/div&gt;
				&lt;div class="alt venstre"&gt;
					Forbrukerne må alltid kunne velge miljøvennlig. [...]
					[Partiet] arbeider for bruk av grønne skatter, omsettelige kvoter
					og andre markedsmekanismer for å få ned klimautslippene
					både nasjonalt og internasjonalt.
				&lt;/div&gt;
			&lt;/div&gt;&lt;div id="spm8" class="spm"&gt;
				&lt;div class="alt sv"&gt;
					[Partiet] arbeider for utviklingsfremmende
					internasjonale handelsregler som ivaretar interessene
					til fattige folk i fattige land. Handelsreglene må gi
					utviklingslandene politisk handlingsrom, og ikke frata
					dem virkemidler som har vært sentrale i vår egen
					utvikling [...]
					Lokal matproduksjon
					må kunne skjermes mot å bli utkonkurrert av
					subsidierte landbruksprodukter fra rike land.
				&lt;/div&gt;
				&lt;div class="alt venstre"&gt;
					Norge må bli mindre opptatt av å beskytte seg mot internasjonal
					konkurranse og mer opptatt av å mestre sin rolle i
					en globalisert verden. Forenkling av regelverk og kamp mot
					handelshindringer, monopoler og maktkonsentrasjoner må
					til for å skape mer rettferdige spilleregler.
				&lt;/div&gt;
				&lt;div class="alt sp"&gt;
					Importvernet for jordbruksvarer er avgjørende for å ha et norsk jordbruksvaremarked.
					Det høye norske lønns- og kostnadsnivået sammen med et utfordrende klima og krevende
					topografi bidrar til at prisene for norske landbruksprodukter er høyere enn i våre naboland.
					Det kan derfor ikke inngås nye handelsavtaler som svekker importvernet og rammevilkårene
					for den nasjonale landbruksproduksjonen.
				&lt;/div&gt;
			&lt;/div&gt;&lt;div id="spm9" class="spm"&gt;
				&lt;div class="alt venstre"&gt;
					det skal svært tungtveiende
					argumenter til for at kriger som ikke er sanksjonert i FNs
					sikkerhetsråd, kan rettferdiggjøres. Kun akutte humanitære
					kriser rettferdiggjør slike militære aksjoner.
					[...]
					Gjennom NATO er Norge i stand til å forsvare sine grunnleggende
					sikkerhetsinteresser, men også økonomiske og politiske
					tiltak må til for å forebygge globale trusler
				&lt;/div&gt;
				&lt;div class="alt sv"&gt;
					Gjennom NATO-medlemskapet er Norge del av en militær
					strategi som bygger på bruk av atomvåpen og åpner for
					offensive militære operasjoner utenfor NATOs område. [...]
					[Partiet] er mot norsk medlemskap i NATO. [...]
					[Partiet] tar avstand fra all bruk av militærmakt som ikke er
					hjemlet i FN-pakten.
				&lt;/div&gt;
				&lt;div class="alt sp"&gt;
					mener at Norge fortsatt skal basere sin forsvars- og sikkerhetspolitikk på medlemskapet i Nato og aktivt arbeid i FN.
					[...]
					Deltagelse i FN-ledede operasjoner må prioriteres.
					[...]
					ikke avgi militære styrker til internasjonale operasjoner utenfor Nato uten forankring i FN-pakten og et klart FN-mandat
				&lt;/div&gt;
			&lt;/div&gt;&lt;p id="neste"&gt;&lt;a href="http://www.rictin.com/valgomat#"&gt;Neste&lt;/a&gt;&lt;/p&gt;</content:encoded></item><item><title>Linux find</title><link>http://www.rictin.com/linux-find</link><guid>http://www.rictin.com/linux-find</guid><description>A couple of Linux find command tips.</description><pubDate>Thu, 20 Jun 2013 20:19 +0000</pubDate><content:encoded>&lt;p&gt;Here are a couple of find tricks I use repeatedly.&lt;/p&gt;&lt;h2&gt;Search files&lt;/h2&gt;&lt;p&gt;By declaring this function in e.g. ~/.bash_profile I can efficiently search files.&lt;/p&gt;&lt;code&gt;grip(){ find "${3-.}" -name '.[^.]*' -prune -o -name "${2:-*}" -type f -print0 | xargs -0 egrep ${@:4} "$1" ;}&lt;/code&gt;&lt;p&gt;I also set &lt;code&gt;GREP_OPTIONS='--binary-files=without-match --color'&lt;/code&gt;&lt;/p&gt;&lt;p&gt;It skips all files and directories whose name starts with a dot. It works very much like &lt;a href="http://svn.apache.org/repos/asf/subversion/trunk/contrib/client-side/wcgrep"&gt;wcgrep&lt;/a&gt; which I discovered later.&lt;/p&gt;&lt;pre&gt;Usage: grip PATTERN [FILENAME_PATTERN] [DIRECTORY] [GREP_OPTIONS]...

Default FILENAME_PATTERN if not set or empty: *
Default DIRECTORY if not set: .&lt;/pre&gt;&lt;p&gt;Examples:&lt;/p&gt;&lt;table border="0"&gt;
				&lt;tr&gt;&lt;td&gt;&lt;code&gt;grip something&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Searches all files in current directory for "something"&lt;/td&gt;&lt;/tr&gt;
				&lt;tr&gt;&lt;td&gt;&lt;code&gt;grip something \*.txt&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Searches .txt files&lt;/td&gt;&lt;/tr&gt;
				&lt;tr&gt;&lt;td&gt;&lt;code&gt;grip something '*.txt' /some/path&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Searches .txt files in /some/path&lt;/td&gt;&lt;/tr&gt;
				&lt;tr&gt;&lt;td&gt;&lt;code&gt;grip something '' . -m 1&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Searches all files in current directory for first occurrence of "something"&lt;/td&gt;&lt;/tr&gt;
			&lt;/table&gt;&lt;h2&gt;Stop descent on first finding&lt;/h2&gt;&lt;p&gt;Useful for finding outermost index.htm or pom.xml files, for example.&lt;/p&gt;&lt;code&gt;find -type d -execdir test -e {}/"$1" \; -print -prune&lt;/code&gt;&lt;h2&gt;Find deepest directories (no subdirectories)&lt;/h2&gt;&lt;code&gt;find -type d ! -execdir sh -c "find '{}' -maxdepth 1 -mindepth 1 -type d -print -quit | grep -q ." \; -print&lt;/code&gt;&lt;p&gt;This became more complex than anticipated. Because &lt;code&gt;-execdir&lt;/code&gt; relies on exit code and &lt;code&gt;find&lt;/code&gt; returns 0 (OK) on no results, I had to use &lt;code&gt;grep&lt;/code&gt;, and because of the pipe, I had to use &lt;code&gt;sh -c&lt;/code&gt;.&lt;/p&gt;&lt;p&gt;Another, faster, way is:&lt;/p&gt;&lt;code&gt;find -type d | awk 'NR&gt;1 &amp;amp;&amp;amp; $0 !~ "^" prev "/" { print prev } { prev=$0 } END { print }'&lt;/code&gt;&lt;h2&gt;Grep log files&lt;/h2&gt;&lt;p&gt;Here is a small program I wrote for easier grepping logfiles by printing the timestamp even if the matched line doesn't have one (e.g. stack traces).&lt;/p&gt;&lt;pre&gt;awk -v "pattern=$1" '{
  if (match($0, /^[0-9][^[:alpha:]]*/)) {
    dat=substr($0, 1, RLENGTH)
    grep("")
  } else
    grep(dat)
}
function grep(prefix) {
  if ($0 ~ pattern) print prefix $0
}'&lt;/pre&gt;&lt;p&gt;I also created a similar &lt;a href="http://data.rictin.com/files/logcat.sh"&gt;logcat.sh&lt;/a&gt; (nice with pipe from &lt;code&gt;tail -f&lt;/code&gt;).&lt;/p&gt;</content:encoded></item><item><title>Celestial sphere</title><link>http://www.rictin.com/stars</link><guid>http://www.rictin.com/stars</guid><description>An interactive celestial sphere in HTML5.</description><pubDate>Sat, 20 Apr 2013 20:00 +0000</pubDate><content:encoded>&lt;p&gt;You should be redirected &lt;a href="http://www.rictin.com/stars/"&gt;here&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>Epub2pdf</title><link>http://www.rictin.com/epub2pdf</link><guid>http://www.rictin.com/epub2pdf</guid><description>Command line tool that generates PDF from EPUB, trying to preserve styling.</description><pubDate>Wed, 06 Mar 2013 22:11 +0000</pubDate><content:encoded>&lt;p&gt;This program is for converting an EPUB file to a PDF file for printing.&lt;/p&gt;&lt;p&gt;The goal is to have the result resemble the EPUB book as closely as possible. 
			Of course, because the EPUB format is not meant for printing, this is not an 
			exact science. Nonetheless, all styles specified by the EPUB author are 
			preserved, and additional sensible defaults are used.&lt;/p&gt;&lt;p&gt;Parameters such as page size and margins are easily configurable.&lt;/p&gt;&lt;p&gt;Page numbers and hyperlinks are not deemed important because links are not 
			meaningful for printing and page numbers do not exist in EPUB electronic 
			books.&lt;/p&gt;&lt;p&gt;&lt;a href="http://data.rictin.com/files/epub2pdf-0.3.zip"&gt;Jar w/dependencies &amp;amp; source (14.5 MB)&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Usage:&lt;/p&gt;&lt;pre&gt;epub2pdf epubFileName pdfFileName [styleString|styleFileName]

Example styleString: "@page{ size: 21cm 30cm; margin: 10%; }"&lt;/pre&gt;</content:encoded></item><item><title>Shaxpeare.com</title><link>http://www.rictin.com/shaxpeare</link><guid>http://www.rictin.com/shaxpeare</guid><description>A digital First Folio from 1623.</description><pubDate>Fri, 04 Jan 2013 23:11 +0000</pubDate><content:encoded>&lt;p&gt;I created a web site for William Shakespeare's plays of the 1623 First Folio,&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.shaxpeare.org/"&gt;www.shaxpeare.org&lt;/a&gt;&lt;/p&gt;&lt;p&gt;While there exist many Shakespeare resources online, most of them emphasize acts and speeches. This website on the other hand, focuses on pages and words. The goal is to represent the original printed book as closely as possible, spelling mistakes and errors included, but also to be accessible and useful (searchable).&lt;/p&gt;&lt;p&gt;The content on the site is mainly based on a modified "00ws110.txt" from Project Gutenberg. I use Apache Maven to build the site, and I wanted few design time and run time dependencies and a small client footprint.&lt;/p&gt;</content:encoded></item><item><title>Facebook book</title><link>http://www.rictin.com/facebook-book</link><guid>http://www.rictin.com/facebook-book</guid><description>How to create a book/album of your Facebook photos using XSL.</description><pubDate>Wed, 05 Sep 2012 19:00 +0000</pubDate><content:encoded>&lt;p&gt;This is how I made a facebook book.&lt;/p&gt;&lt;p&gt;&lt;img src="http://data.rictin.com/img/facebook.jpg" alt="Physical facebook book"&gt;&lt;/img&gt;&lt;/p&gt;&lt;p&gt;First we need to get the data. We don't have to write an app, we just need an access token and a url. This can be obtained e.g. by browsing to &lt;a title="Facebook Graph API" href="https://developers.facebook.com/docs/reference/api/"&gt;Facebook's developer resources&lt;/a&gt;. After logging in you can find the following link:&lt;/p&gt;&lt;code&gt;https://graph.facebook.com/me/photos?access_token=xxx&lt;/code&gt;&lt;p&gt;"/me" could be substituted with a friend's username or profile id. Append "&amp;amp;limit=999" to get more at once. The data is returned in json:&lt;/p&gt;&lt;pre&gt;{
   "data": [
      {
         "id": "10101470046392053",
         "from": {
            "name": "Richard H. Tingstad",
            "id": "1245408"
         },
         "picture": "https://fbcdn-photos-a.akamaihd.net/xxx_s.jpg",
         "source": "https://fbcdn-sphotos-a-a.akamaihd.net/xxx_n.jpg",
         "height": 540,
         "width": 720,
         "images": [
            {
               "height": 1536,
               "width": 2048,
               "source": "https://fbcdn-sphotos-a-a.akamaihd.net/xxx_n.jpg"
            }, ...&lt;/pre&gt;&lt;p&gt;To turn this into a printable book I chose to use XSL-FO. This means that the data first has to be &lt;a title="JSON to XML converter online" href="http://jsontoxml.utilities-online.info/"&gt;converted&lt;/a&gt; into xml. We get something like:&lt;/p&gt;&lt;pre&gt;&amp;lt;data&amp;gt;
	&amp;lt;id&amp;gt;10101470046392053&amp;lt;/id&amp;gt;
	&amp;lt;from&amp;gt;
		&amp;lt;name&amp;gt;Richard H. Tingstad&amp;lt;/name&amp;gt;
		&amp;lt;id&amp;gt;1245408&amp;lt;/id&amp;gt;
	&amp;lt;/from&amp;gt;
	&amp;lt;picture&amp;gt;https://fbcdn-photos-a.akamaihd.net/xxx_s.jpg&amp;lt;/picture&amp;gt;
	&amp;lt;source&amp;gt;https://fbcdn-sphotos-a-a.akamaihd.net/xxx_n.jpg&amp;lt;/source&amp;gt;
	&amp;lt;height&amp;gt;540&amp;lt;/height&amp;gt;
	&amp;lt;width&amp;gt;720&amp;lt;/width&amp;gt;
	&amp;lt;images&amp;gt;
		&amp;lt;height&amp;gt;1536&amp;lt;/height&amp;gt;
		&amp;lt;width&amp;gt;2048&amp;lt;/width&amp;gt;
		&amp;lt;source&amp;gt;https://fbcdn-sphotos-a-a.akamaihd.net/xxx_n.jpg&amp;lt;/source&amp;gt;
	&amp;lt;/images&amp;gt;
	&amp;lt;images&amp;gt;
		&amp;lt;height&amp;gt;540&amp;lt;/height&amp;gt;
		&amp;lt;width&amp;gt;720&amp;lt;/width&amp;gt;
		&amp;lt;source&amp;gt;https://fbcdn-sphotos-a-a.akamaihd.net/xxx_n.jpg&amp;lt;/source&amp;gt;
	&amp;lt;/images&amp;gt; ...&lt;/pre&gt;&lt;p&gt;There are many root "data" elements, so I added an all-surrounding "foo" tag. Next, I wanted to download the image files. Every photo has several sizes. To get the largest ones, I used the following xslt:&lt;/p&gt;&lt;pre&gt;&amp;lt;xsl:for-each select="images"&amp;gt;
	&amp;lt;xsl:variable name="w" select="number(width/text())"/&amp;gt;
	&amp;lt;xsl:if test="not(../images[width &amp;amp;gt; $w])"&amp;gt;
		&amp;lt;xsl:value-of select="source"/&amp;gt;
		&amp;lt;xsl:text&amp;gt;
&amp;lt;/xsl:text&amp;gt;&amp;lt;!-- newline --&amp;gt;
	&amp;lt;/xsl:if&amp;gt;
&amp;lt;/xsl:for-each&amp;gt;&lt;/pre&gt;&lt;p&gt;The XPath expression "/foo/data/images[1]" would probably work too, as they appear to be in the correct order. I piped the results to a text file, then downloaded them:&lt;/p&gt;&lt;code&gt;cat images.txt | while read a;do wget $a;done&lt;/code&gt;&lt;p&gt;Ironically, while I want high quality images now, I usually upload low resolution files myself. It's one of the jobs of my &lt;a title="Photo script" href="http://www.rictin.com/photo-script"&gt;photo script&lt;/a&gt; (which has been heavily updated recently). Therefore, I manually replaced some of my pictures with high resolution files. The major step in the book exercise is the &lt;a href="http://data.rictin.com/files/facebook.xsl"&gt;XSL transform&lt;/a&gt;. Feel free to download and use this file. Apache FOP can use this file to generate a PDF file.&lt;/p&gt;&lt;p&gt;To print the book, I ordered a photo album and uploaded each page as a jpg file:&lt;/p&gt;&lt;code&gt;convert -density 300 file.pdf files.jpg&lt;/code&gt;&lt;p&gt;Next time, I'll consider including QR codes in my book too, linking to the photos on facebook.com.&lt;/p&gt;</content:encoded></item><item><title>Gollnokkelen.com</title><link>http://www.rictin.com/gullnokkelen</link><guid>http://www.rictin.com/gullnokkelen</guid><description>Min lille families turblogg.</description><pubDate>Tue, 14 Aug 2012 19:40 +0000</pubDate><content:encoded>&lt;p&gt;Vi blogger om turer på &lt;a href="http://www.gullnokkelen.com/"&gt;www.gullnokkelen.com&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>Caesar shift</title><link>http://www.rictin.com/caesar</link><guid>http://www.rictin.com/caesar</guid><description>Custom alphabet Caesar's cipher encryptor/decryptor.</description><pubDate>Sat, 23 Jun 2012 19:00 +0000</pubDate><content:encoded>&lt;p&gt;Custom alphabet Caesar's cipher encryptor/decryptor.&lt;/p&gt;&lt;div&gt;[HTML Form]&lt;/div&gt;</content:encoded></item><item><title>Client-side printer friendly webpage</title><link>http://www.rictin.com/print-css</link><guid>http://www.rictin.com/print-css</guid><description>Making a printer friendly web page.</description><pubDate>Wed, 16 May 2012 20:00 +0000</pubDate><content:encoded>&lt;p&gt;&lt;a href="http://www.rictin.com/print-css#"&gt;&lt;span class="reveal" title="Main/full page (cancel print preview)"&gt; &lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;I will here show how the CSS3 pseudo selector &lt;code&gt;:target&lt;/code&gt; can be used to display printer friendly versions of static web pages, as well as how to combine it with other methods.&lt;/p&gt;&lt;p&gt;Let's start with the following file(s) where we use CSS2's media type:&lt;/p&gt;&lt;pre&gt;HTML:
&amp;lt;body&gt;
&amp;lt;div&gt;
	&amp;lt;div id="navigation" class="noprint"&gt;
		...
	&amp;lt;/div&gt;
	...
&amp;lt;/div&gt;
&amp;lt;/body&gt;

CSS:
@media print { .noprint { display: none; } }&lt;/pre&gt;&lt;p&gt;This simple example hides all elements with class .noprint when the page is printed. We can expand the example with the CSS3 :target selector like so:&lt;/p&gt;&lt;pre&gt;HTML:
&amp;lt;body&gt;
&amp;lt;div &lt;b&gt;id="print"&lt;/b&gt;&gt;
	&amp;lt;div id="navigation" class="noprint"&gt;
		...
		&lt;b&gt;&amp;lt;a href="#print"&gt;Print&amp;lt;/a&gt;&lt;/b&gt;
	&amp;lt;/div&gt;
	...
&amp;lt;/div&gt;
&amp;lt;/body&gt;

CSS:
@media print { .noprint { display: none; } }
&lt;b&gt;#print:target .noprint { display: none; }&lt;/b&gt;&lt;/pre&gt;&lt;p&gt;"&lt;code&gt;#print:target .noprint&lt;/code&gt;" is now activated by going to &lt;code&gt;page.html#print&lt;/code&gt;. The advantage of this is that users get to see a print preview in their browsers - and no scripting was necessary, neither on the client nor on the server - purely CSS!&lt;/p&gt;&lt;p&gt;Let's help the user more and bring up the print dialogue box if (s)he goes directly to #print:&lt;/p&gt;&lt;pre&gt;HTML:
&amp;lt;body &lt;b&gt;onload="load()"&lt;/b&gt;&gt;
&amp;lt;div id="print"&gt;
	&amp;lt;div id="navigation" class="noprint"&gt;
		...
		&amp;lt;a href="#print"&gt;Print&amp;lt;/a&gt;
	&amp;lt;/div&gt;
	...
&amp;lt;/div&gt;
&amp;lt;/body&gt;

CSS:
@media print { .noprint { display: none; } }
#print:target .noprint { display: none; }

Javascript:
&lt;b&gt;function load() {
	if (location.hash === '#print') window.print();
}&lt;/b&gt;&lt;/pre&gt;&lt;p&gt;Finally, we can use Javascript to help out clients without CSS3 support:&lt;/p&gt;&lt;pre&gt;HTML:
&amp;lt;body onload="load()"&gt;
&amp;lt;div id="print"&gt;
	&amp;lt;div id="navigation" class="noprint"&gt;
		...
		&amp;lt;a href="#print" &lt;b&gt;onclick="printPage();return false;"&lt;/b&gt;&gt;Print&amp;lt;/a&gt;
	&amp;lt;/div&gt;
	...
&amp;lt;/div&gt;
&amp;lt;/body&gt;

CSS:
@media print { .noprint { display: none; } }
#print:target .noprint { display: none; }
&lt;b&gt;.doprint .noprint { display: none; }&lt;/b&gt;

Javascript:
function load() {
	if (location.hash === '#print') &lt;b&gt;printPage();&lt;/b&gt;
}
&lt;b&gt;function printPage() {
	document.body.className += ' doprint';
	location.hash = '#print';
	window.print();
}&lt;/b&gt;
&lt;/pre&gt;&lt;p&gt;The beauty of this is that the print style sheet will work with CSS2, and the browser preview will work with CSS3 &lt;em&gt;or&lt;/em&gt; Javascript.&lt;/p&gt;&lt;p&gt;Demo: &lt;a href="http://www.rictin.com/print-css#print"&gt;Print page &lt;img src="http://data.rictin.com/img/print.png" alt="Printer"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;P.S. Challenges:&lt;/p&gt;&lt;ul&gt;
				&lt;li&gt;The Back button may not function. Maybe a "back to full page" link should be provided (but not for &lt;code&gt;@media print&lt;/code&gt;).&lt;/li&gt;
				&lt;li&gt;It may be tempting to merge the two last CSS rules, but this will break .doprint if e.g. Internet Explorer does not understand :target.&lt;/li&gt;
				&lt;li&gt;If printPage() is renamed print(), window.print() will be confused.&lt;/li&gt;
				&lt;li&gt;The id="print"-element has to contain &lt;em&gt;all&lt;/em&gt; elements you want to hide or alter.&lt;/li&gt;
			&lt;/ul&gt;&lt;h2&gt;&lt;a href="http://www.rictin.com/print-css#revelation" name="revelation"&gt;Update: Using CSS to display hidden content&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Initially, I implemented a "back to full page" link basically by displaying this "hidden" element:&lt;/p&gt;&lt;pre&gt;&amp;lt;p style="display:none" id="cancel"&gt;&amp;lt;a href="#"&gt;Cancel print preview&amp;lt;/a&gt;&amp;lt;/p&gt;&lt;/pre&gt;&lt;p&gt;A disadvantage of this is that the element is displayed when CSS is disabled. So I created a cooler trick, where CSS reveals the link! Here is the HTML:&lt;/p&gt;&lt;pre&gt;&amp;lt;p&gt;&amp;lt;a href="#"&gt;&amp;lt;span class="reveal" title="Cancel print preview"&gt;&amp;lt;/span&gt;&amp;lt;/a&gt;&amp;lt;/p&gt;&lt;/pre&gt;&lt;p&gt;The link here is hidden because the anchor tag has no content. I put the hidden text in the title attribute of a contained span tag. To display it, we can use the following simple CSS:&lt;/p&gt;&lt;pre&gt;.reveal:after { content: attr(title); }&lt;/pre&gt;&lt;p&gt;Here, CSS2 generates text content for the anchor tag (from the title attribute of the span tag), effectively revealing the link :-)&lt;/p&gt;</content:encoded></item><item><title>Chifre i Shakespeare Mysteriet</title><link>http://www.rictin.com/shakespeare-chiffer</link><guid>http://www.rictin.com/shakespeare-chiffer</guid><description>Boka Shakespeare Mysteriet av Søren Hauge inneholder skjulte chiffer.</description><pubDate>Tue, 17 Apr 2012 19:00 +0000</pubDate><content:encoded>&lt;div class="floatimg"&gt;&lt;a href="http://www.shakespearemysteriet.dk/"&gt;&lt;img src="http://data.rictin.com/img/shakespeare-mysteriet.png" alt="Shakespeare Mysteriet" width="165" height="280"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;Boka &lt;a href="http://www.shakespearemysteriet.dk/"&gt;Shakespeare Mysteriet&lt;/a&gt; av Søren Hauge handler om William Shakespeare, Francis Bacon og chifferteknikker benyttet på 15- og 1600-tallet, inkludert steganografiske metoder, altså skjult tekst.&lt;/p&gt;&lt;p&gt;Litt inn i kapittel 1 kom jeg over det jeg først trodde var typografifeil, hvor deler av teksten hadde en litt annen skrifttype enn resten. Etter hvert forstod jeg at forfatteren har tatt i bruk de omtalte kryptografiske metodene i egen bok.&lt;/p&gt;&lt;p&gt;Chifrene jeg oppdaget i boka er av typen Bacons bilitterære chiffer, hvor to skrifttyper brukes for å kode en beskjed.&lt;/p&gt;&lt;p&gt;&lt;img src="http://data.rictin.com/img/biliteral.png" alt="Bacons bilitterære chiffer" width="252" height="160"&gt;&lt;/img&gt;&lt;/p&gt;&lt;p&gt;Her er for eksempel chifferet på side 45:&lt;/p&gt;&lt;p&gt;&lt;img src="http://data.rictin.com/img/chiffer1.jpg" alt="Side 45" width="500" height="272"&gt;&lt;/img&gt;&lt;/p&gt;&lt;p&gt;h&lt;i&gt;an v&lt;/i&gt;a&lt;i&gt;r e&lt;/i&gt;n de&lt;i&gt;l af de&lt;/i&gt;n &lt;i&gt;li&lt;/i&gt;tt&lt;i&gt;er&lt;/i&gt;ær&lt;i&gt;e kr&lt;/i&gt;e&lt;i&gt;ds&lt;/i&gt;&lt;/p&gt;&lt;table&gt;
				&lt;tr&gt;&lt;td&gt;h&lt;i&gt;anv&lt;/i&gt;a&lt;/td&gt;&lt;td&gt;&lt;i&gt;re&lt;/i&gt;nde&lt;/td&gt;&lt;td&gt;&lt;i&gt;lafde&lt;/i&gt;&lt;/td&gt;&lt;td&gt;n&lt;i&gt;li&lt;/i&gt;tt&lt;/td&gt;&lt;td&gt;&lt;i&gt;er&lt;/i&gt;ær&lt;i&gt;e&lt;/i&gt;&lt;/td&gt;&lt;td&gt;&lt;i&gt;kr&lt;/i&gt;e&lt;i&gt;ds&lt;/i&gt;&lt;/td&gt;&lt;/tr&gt;
				&lt;tr&gt;&lt;td&gt;baaab&lt;/td&gt;&lt;td&gt;aabbb&lt;/td&gt;&lt;td&gt;aaaaa&lt;/td&gt;&lt;td&gt;baabb&lt;/td&gt;&lt;td&gt;aabba&lt;/td&gt;&lt;td&gt;aabaa&lt;/td&gt;&lt;/tr&gt;
				&lt;tr&gt;&lt;td&gt;S&lt;/td&gt;&lt;td&gt;H&lt;/td&gt;&lt;td&gt;A&lt;/td&gt;&lt;td&gt;U&lt;/td&gt;&lt;td&gt;G&lt;/td&gt;&lt;td&gt;E&lt;/td&gt;&lt;/tr&gt;
			&lt;/table&gt;&lt;p&gt;Altså står det S. Hauge, forfatterens navn.&lt;/p&gt;&lt;p&gt;Sidetallene hvor disse chifrene opptrer er heller ikke tilfeldig valgt. Som boka forklarer kan man summere verdiene av bokstavene i et ord ved å sette A=1, B=2, osv. Navnet Bacon har f.eks. verdien 2+1+3+14+13=33. Side 53 og 157 har en prikk ved sidetallet.&lt;/p&gt;&lt;p&gt;&lt;img src="http://data.rictin.com/img/chiffer2.jpg" alt="Side 157" width="500" height="300"&gt;&lt;/img&gt;&lt;/p&gt;&lt;p&gt;Her er alle kodene jeg har funnet:&lt;/p&gt;&lt;table&gt;
				&lt;tr&gt;&lt;th&gt;Side&lt;/th&gt;&lt;th&gt;Kode&lt;/th&gt;&lt;th&gt;&lt;/th&gt;&lt;/tr&gt;
				&lt;tr&gt;&lt;td&gt;33&lt;/td&gt;&lt;td&gt;Lys til din vej&lt;/td&gt;&lt;td&gt;33=Bacon&lt;/td&gt;&lt;/tr&gt;
				&lt;tr&gt;&lt;td&gt;45&lt;/td&gt;&lt;td&gt;S. Hauge&lt;/td&gt;&lt;td&gt;45=?&lt;/td&gt;&lt;/tr&gt;
				&lt;tr&gt;&lt;td&gt;72&lt;/td&gt;&lt;td&gt;K. Puggaard&lt;/td&gt;&lt;td&gt;Kirsten Puggaard har laget omslags-layout. 72=Puggaard&lt;/td&gt;&lt;/tr&gt;
				&lt;tr&gt;&lt;td&gt;103&lt;/td&gt;&lt;td&gt;Hjertets sprog viser vej&lt;/td&gt;&lt;td&gt;103=Shakespeare&lt;/td&gt;&lt;/tr&gt;
				&lt;tr&gt;&lt;td&gt;157&lt;/td&gt;&lt;td&gt;Til rosenkorsets visdom&lt;/td&gt;&lt;td&gt;157=Antall ord i To the Reader&lt;/td&gt;&lt;/tr&gt;
				&lt;tr&gt;&lt;td&gt;277&lt;/td&gt;&lt;td&gt;Global Albada&lt;/td&gt;&lt;td&gt;Baklengs! 277=WilliamShakespeare+FrancisBacon&lt;/td&gt;&lt;/tr&gt;
			&lt;/table&gt;&lt;p&gt;&lt;img src="http://data.rictin.com/img/chiffer3.jpg" alt="Albada" width="500" height="375"&gt;&lt;/img&gt;&lt;br&gt;&lt;/br&gt;Side 107.&lt;/p&gt;&lt;h2 id="organisten"&gt;&lt;a href="http://www.rictin.com/shakespeare-chiffer#organisten"&gt;Organisten&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Ekstrabonus: chiffer i boka Organisten av Erlend Loe og Petter Amundsen!&lt;/p&gt;&lt;p&gt;&lt;img src="http://data.rictin.com/img/chiffer4.jpg" alt="Organisten" width="500" height="300"&gt;&lt;/img&gt;&lt;/p&gt;&lt;table&gt;
				&lt;tr&gt;&lt;td&gt;OrGan&lt;/td&gt;&lt;td&gt;isteN&lt;/td&gt;&lt;/tr&gt;
				&lt;tr&gt;&lt;td&gt;babaa&lt;/td&gt;&lt;td&gt;aaaab&lt;/td&gt;&lt;/tr&gt;
				&lt;tr&gt;&lt;td&gt;W&lt;/td&gt;&lt;td&gt;B&lt;/td&gt;&lt;/tr&gt;
			&lt;/table&gt;&lt;p&gt;I denne boka er også sidetallet på side 399 endret til 993. Dette er en referanse til Shakespeares førstefolio hvor dette forekommer på den siste siden.&lt;/p&gt;&lt;h2 id="hiddentruth"&gt;&lt;a href="http://www.rictin.com/shakespeare-chiffer#hiddentruth"&gt;Hidden truth&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Oppdatering 2013: Utfordring for leseren!&lt;/p&gt;&lt;p&gt;&lt;img src="http://data.rictin.com/img/hidden-truth.jpg" alt="Hidden truth" width="500" height="239"&gt;&lt;/img&gt;&lt;/p&gt;</content:encoded></item><item><title>Bookmarkweb</title><link>http://www.rictin.com/bookmarkweb</link><guid>http://www.rictin.com/bookmarkweb</guid><description>My last and final bookmarklet.</description><pubDate>Mon, 16 Apr 2012 22:00 +0000</pubDate><content:encoded>&lt;p&gt;Some months ago I wrote a GUI version of my Quix-like &lt;a href="http://www.rictin.com/ubiquitous-web-os-command-line"&gt;bookmarklet&lt;/a&gt;. It is still an open source JavaScript file, but a GUI allows for more interaction with the web page (e.g. the Regular expression find function). It's also simpler to use.&lt;/p&gt;&lt;p&gt;&lt;a title="Bookmarkweb" href="javascript:(function(){var d=document,h=d.getElementsByTagName('head');if(1&gt;h.length)alert('Error');else{var s=d.createElement('script');s.type='text/javascript';s.src='http://www.rictin.com/1.js?'+new Date().getTime();h[0].appendChild(s);}})()"&gt;&lt;img alt="Bookmarkweb" src="http://data.rictin.com/img/bookmarkweb-firefox.png" width="625" height="432"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;The bookmarklet: &lt;a title="Bookmarkweb" href="javascript:(function(){var d=document,h=d.getElementsByTagName('head');if(1&gt;h.length)alert('Error');else{var s=d.createElement('script');s.type='text/javascript';s.src='http://www.rictin.com/1.js?'+new Date().getTime();h[0].appendChild(s);}})()"&gt;&lt;img alt="Bookmarkweb" src="http://data.rictin.com/img/bookmarkweb.png"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Save the link (on the image/icon) or drag the icon to your toolbar.&lt;/p&gt;&lt;p&gt;A typical use case is selecting some text on a page, clicking the bookmarklet, and then selecting one of the actions to take; for example searching YouTube for the text, or tweeting the text and the URL of the page. Shift or ctrl click an action to open it in a new window or tab.&lt;/p&gt;&lt;p&gt;To try it out right now, just click it.&lt;/p&gt;&lt;p&gt;There are still some bugs, but I think it's usable.&lt;/p&gt;</content:encoded></item><item><title>Decoding the Ast Ritual</title><link>http://www.rictin.com/ast-ritual</link><guid>http://www.rictin.com/ast-ritual</guid><description>Decoding the "Ast Ritual" a.k.a. the Masonic Tablet from 1822.</description><pubDate>Tue, 27 Mar 2012 21:42 +0000</pubDate><content:encoded>&lt;p&gt;When I stumbled upon the page about the &lt;a href="http://nationalheritagemuseum.typepad.com/library_and_archives/2011/09/rare-ast-ritual-given-to-library.html"&gt;Ast Ritual&lt;/a&gt; at the Scottish Rite Masonic Museum and Library, I immediately wanted to know more and started decoding it.&lt;/p&gt;&lt;img width="395" height="640" src="http://data.rictin.com/img/ast-ritual.jpg" alt="Ast ritual"&gt;&lt;/img&gt;&lt;h2&gt;Transcription&lt;/h2&gt;&lt;div style="font-family:serif"&gt;
			&lt;p&gt;
			;Ast SC PE's L.
			&lt;/p&gt;
			&lt;p&gt;
			1. FM whce cm u ]oviz[ &lt;i&gt;sa na&lt;/i&gt; PE ]gmz[ 2. fm ]gp[ e g f h st&lt;br&gt;&lt;/br&gt;
			jn t j ]mqz[ rsa ]pq[ lm 5 wt cm u hr o d ]mpq[ 8 o lrn o sbdu&lt;br&gt;&lt;/br&gt;
			&lt;i&gt;ym&lt;/i&gt; psns nd mprv &lt;i&gt;flsm&lt;/i&gt; n &lt;i&gt;ysm&lt;/i&gt; 3 tn u r a ]vs[ n i prsm 4 i m os&lt;br&gt;&lt;/br&gt;
			tkn nd cptd mg brs nd &lt;i&gt;swlf&lt;/i&gt; 7 hw d u no urslf ]pinz[ o b a n S&lt;br&gt;&lt;/br&gt;
			y hvg bn ftn trd ]ema[ nv dnd nd m wlng o b trd gn 3 wt mks&lt;br&gt;&lt;/br&gt;
			u a n 2 ym obn 1 hw shl i no u o b a n 4 y a ertn sn &lt;i&gt;nkt drw&lt;/i&gt;&lt;br&gt;&lt;/br&gt;
			nd e prft &lt;i&gt;stnp&lt;/i&gt; f &lt;i&gt;ym&lt;/i&gt; ntnc 1 wt r sns 2 rt &lt;i&gt;slgna&lt;/i&gt;, &lt;i&gt;sltnzrh&lt;/i&gt;, nd&lt;br&gt;&lt;/br&gt;
			&lt;i&gt;srlednprp&lt;/i&gt; . 3 pls o gv &lt;i&gt;em&lt;/i&gt; e sn f n &lt;i&gt;Pe&lt;/i&gt; . (rss nd gvs t) S hs tt ny&lt;br&gt;&lt;/br&gt;
			llsn . 4 t hs o e &lt;i&gt;ytnp&lt;/i&gt; f &lt;i&gt;ym&lt;/i&gt; obn tt i wd rthr hv &lt;i&gt;ym&lt;/i&gt; | ct &lt;i&gt;ssrca&lt;/i&gt; fm&lt;br&gt;&lt;/br&gt;
			re o re thn o rvl e &lt;i&gt;stres&lt;/i&gt; f &lt;i&gt;erf ysm&lt;/i&gt; nl ]qmp[ fly . 5 wt s a &lt;i&gt;nkt&lt;/i&gt;&lt;br&gt;&lt;/br&gt;
			6 a crtn fndly r ]emz[ bry prg wrb ;a br &lt;i&gt;yam&lt;/i&gt; no nthr n e &lt;i&gt;krd&lt;/i&gt;&lt;br&gt;&lt;/br&gt;
			sa wl sa n e &lt;i&gt;xl&lt;/i&gt; . 7 pls o gv ur lft &lt;i&gt;dnh&lt;/i&gt; br e nkt nd &lt;i&gt;prg&lt;/i&gt; f n &lt;i&gt;pe&lt;/i&gt;&lt;br&gt;&lt;/br&gt;
			(ty rs nd gv t) A gvs B e &lt;i&gt;prg&lt;/i&gt;. B &lt;i&gt;sys&lt;/i&gt; wt s tt A i &lt;i&gt;liah&lt;/i&gt; B i cncl&lt;br&gt;&lt;/br&gt;
			A. wt d u cncl B &lt;i&gt;l stres&lt;/i&gt; f ns n ysm xet t shl b nt a &lt;i&gt;urt&lt;/i&gt; nd l&lt;br&gt;&lt;/br&gt;
			]nmz[ fl br r wn e &lt;i&gt;ydb&lt;/i&gt; f a &lt;i&gt;tsj&lt;/i&gt; nd l ]pmq[ fl g f sch A wt s tt&lt;br&gt;&lt;/br&gt;
			cld B a &lt;i&gt;prg&lt;/i&gt; A &lt;i&gt;prg&lt;/i&gt; f wt B Pe A hs t a nm. B t hs A wl u pls&lt;br&gt;&lt;/br&gt;
			o gv t o em B i dd ut os rev t nthr en i os mpt t A hw wl u&lt;br&gt;&lt;/br&gt;
			dsps f t B i wl &lt;i&gt;rettl&lt;/i&gt; r &lt;i&gt;vhl&lt;/i&gt; t wh u A u wl pls o &lt;i&gt;rettl&lt;/i&gt; t B . &lt;i&gt;nigb&lt;/i&gt;&lt;br&gt;&lt;/br&gt;
			A u &lt;i&gt;nigb&lt;/i&gt; f u pls (&lt;i&gt;eton&lt;/i&gt; A gvs fast &lt;i&gt;rettl&lt;/i&gt; Be ;e B poncs e &lt;i&gt;drw&lt;/i&gt;) A&lt;br&gt;&lt;/br&gt;
			t s rt i grt u br * 1. whr wr u fast prpd o b md a n 2 n &lt;i&gt;ym trh&lt;/i&gt;&lt;br&gt;&lt;/br&gt;
			S whr ;endy 4 n a &lt;i&gt;moor&lt;/i&gt; djet o e g 5 hw wr u prpd 6 y bng&lt;br&gt;&lt;/br&gt;
			dvsd f l &lt;i&gt;slrnm&lt;/i&gt; nd &lt;i&gt;sltm&lt;/i&gt; nhr &lt;i&gt;dkn&lt;/i&gt; nr clhd bt nr &amp;#8224; &amp;#8225; wh a &amp;#182; abt &lt;i&gt;ym&lt;/i&gt;&lt;br&gt;&lt;/br&gt;
			&lt;i&gt;ken&lt;/i&gt; n whh stn i ws cn ]vizh[ dctd o e dr f e g y e hd f a frnd&lt;br&gt;&lt;/br&gt;
			wm i ftrds fnd o b a br 7 hw dd u no t o b a dr bng &amp;#8225; 8 y fast&lt;br&gt;&lt;/br&gt;
			mtng wh rstnc nd ftrwds gng dmssn 9. hw gnd u dmssn 2 y ;i&lt;br&gt;&lt;/br&gt;
			dstnt &lt;i&gt;skonk&lt;/i&gt; 3 wt ws sd o u fm wn 4 wo cms thr 9 ur nsr 2 n&lt;br&gt;&lt;/br&gt;
			&lt;i&gt;roop dnlb&lt;/i&gt; cn ]amz[ ddt wo hs &lt;i&gt;gnl&lt;/i&gt; bn dsrs f bng brt &lt;i&gt;tuo&lt;/i&gt; f drkn&lt;br&gt;&lt;/br&gt;
			o &lt;i&gt;xl&lt;/i&gt; o hv nd rev a &lt;i&gt;trp&lt;/i&gt; f e rts nd bnfts f ts &lt;i&gt;wRt&lt;/i&gt; g retd o &amp;#167; nd&lt;br&gt;&lt;/br&gt;
			ddctd o h st jn sa ynm brs nd &lt;i&gt;swllf&lt;/i&gt; hv dn bfr em 1 wt mr wr&lt;br&gt;&lt;/br&gt;
			u skd 4 f i cm f ym wn fr wl nd crd f i ws dly nd trly prprd&lt;br&gt;&lt;/br&gt;
			&lt;i&gt;yhtrw&lt;/i&gt; nd wl &lt;i&gt;dflq&lt;/i&gt; f lwfl ega nd prpy &lt;i&gt;dhcva&lt;/i&gt; fr 1 whh bng nsrd&lt;br&gt;&lt;/br&gt;
			u e &lt;i&gt;vtrff&lt;/i&gt; i ws skd y wt &lt;i&gt;rhtrf&lt;/i&gt; rt r bnft i xpcd o gn dmsn 7 ur&lt;br&gt;&lt;/br&gt;
			nsr 8 y bng a mn &lt;i&gt;erf&lt;/i&gt; brn f gd rprt nd wl remd 9 wt flwd 2 i&lt;br&gt;&lt;/br&gt;
			ws rqsd o wt a tm wh ptnc ntl e &lt;i&gt;wrt rm&lt;/i&gt; cd b nf ]qpt[ rmd f&lt;br&gt;&lt;/br&gt;
			&lt;i&gt;ym&lt;/i&gt; rq ]azp[ st nd s nrs rtd . 1 wt ws hs nsr wn rtd 4 . lt &lt;i&gt;mh&lt;/i&gt;&lt;br&gt;&lt;/br&gt;
			ntr . S hw dd u ntr 6. no e pt f a &lt;i&gt;prhs&lt;/i&gt; nst ]enw[ rmt preg &lt;i&gt;ym&lt;/i&gt;&lt;br&gt;&lt;/br&gt;
			&lt;i&gt;dkn&lt;/i&gt; lft &lt;i&gt;tsrb&lt;/i&gt; 5 whr wr u tn cn ]prz[ dctd 8 o e cnr f e g whr i&lt;br&gt;&lt;/br&gt;
			ws csd o &lt;i&gt;lnk&lt;/i&gt; nd rev e &lt;i&gt;tfnb&lt;/i&gt; f a &lt;i&gt;ryrp&lt;/i&gt; (&lt;i&gt;rm&lt;/i&gt; gvs ;i &lt;i&gt;skonk&lt;/i&gt; 1 rs) i wl&lt;br&gt;&lt;/br&gt;
			thnk u o rpt e &lt;i&gt;ryrp&lt;/i&gt; &amp;#8220; veh ]qmz[ thu &lt;i&gt;dia&lt;/i&gt;&amp;#8221; (&lt;i&gt;es&lt;/i&gt; Mnr) 1. ftr revg&lt;br&gt;&lt;/br&gt;
			&lt;/p&gt;
			&lt;/div&gt;&lt;h2&gt;Translation&lt;/h2&gt;&lt;div style="font-family:serif"&gt;
			&lt;p&gt;
			First Section Entered Apprentice's Lecture.&lt;br&gt;&lt;/br&gt;
			&lt;br&gt;&lt;/br&gt;
			1. FROM whence came you &lt;span class="cipher"&gt;]oviz[&lt;/span&gt; as an Entered Apprentice &lt;span class="cipher"&gt;]gmz[&lt;/span&gt; 2. From &lt;span class="cipher"&gt;]gp[&lt;/span&gt; the Lodge of Holy Saint&lt;br&gt;&lt;/br&gt;
			John at Je &lt;span class="cipher"&gt;]mqz[&lt;/span&gt; rusa &lt;span class="cipher"&gt;]pq[&lt;/span&gt; lem 5 What came you here to do &lt;span class="cipher"&gt;]mpq[&lt;/span&gt; 8 To learn to subdue&lt;br&gt;&lt;/br&gt;
			my passions and improve myself in Masonry 3 Then you are a &lt;span class="cipher"&gt;]vs[&lt;/span&gt; Mason I presume 4 I am so&lt;br&gt;&lt;/br&gt;
			taken and accepted among brothers and fellows 7 How do you know yourself &lt;span class="cipher"&gt;]pinz[&lt;/span&gt; to be a Mason S&lt;br&gt;&lt;/br&gt;
			By having been often tried &lt;span class="cipher"&gt;]ema[&lt;/span&gt; never denied and am willing to be tried again 3 What makes&lt;br&gt;&lt;/br&gt;
			you a Mason 2 My obligation 1 How shall I know you to be a Mason 4 By a certain signs token word&lt;br&gt;&lt;/br&gt;
			and the perfect points of my entrance 1 What are signs 2 Right angles, horizontals, and&lt;br&gt;&lt;/br&gt;
			perpendiculars . 3 Please to give me the signs of Mason Entered Apprentice . (rises and gives it) S Has that any&lt;br&gt;&lt;/br&gt;
			allusion . 4 It has to the penalty of my obligation that I would rather have my throat cut across from&lt;br&gt;&lt;/br&gt;
			ear to ear than to reveal the secrets of free Masonry unlaw &lt;span class="cipher"&gt;]qmp[&lt;/span&gt; fully . 5 What is a token&lt;br&gt;&lt;/br&gt;
			6 A certain friendly or &lt;span class="cipher"&gt;]emz[&lt;/span&gt; brotherly grip whereby one brother may know another in the dark&lt;br&gt;&lt;/br&gt;
			as well as in the light . 7 Please to give your left hand brother the token and grip of an Entered Apprentice&lt;br&gt;&lt;/br&gt;
			(&lt;span class="cipher"&gt;ty&lt;/span&gt; rise and give it) A gives B the grip. B says what is that A I hail B I conceal&lt;br&gt;&lt;/br&gt;
			A. What do you conceal B All secrets of Masons in Masonry except it shall be to a true and law&lt;br&gt;&lt;/br&gt;
			&lt;span class="cipher"&gt;]nmz[&lt;/span&gt; ful brother or within the body of a just and law &lt;span class="cipher"&gt;]pmq[&lt;/span&gt; ful Lodge of such A What is that&lt;br&gt;&lt;/br&gt;
			&lt;span class="cipher"&gt;cld&lt;/span&gt; B A grip A Grip of what B Entered Apprentice A Has it a name. B It has A Will you please&lt;br&gt;&lt;/br&gt;
			to give it to me B I did not so receive it neither then I so impart it A How will you&lt;br&gt;&lt;/br&gt;
			dispose of it B I will letter or halve it with you A You will please to letter it B . Begin&lt;br&gt;&lt;/br&gt;
			A You begin if you please (note A gives first letter Be two B pronounces the word) A&lt;br&gt;&lt;/br&gt;
			It is right I greet you brother * 1. Where were you first prepared to be made a Mason 2 In my heart&lt;br&gt;&lt;/br&gt;
			S Where secondly 4 In a room adjacent to the Lodge 5 How were you prepared 6 By being&lt;br&gt;&lt;/br&gt;
			divested of all minerals and metals neither naked nor clothed barefoot nor shod hoodwinked with a cable-tow about my&lt;br&gt;&lt;/br&gt;
			neck in which situation I was con &lt;span class="cipher"&gt;]vizh[&lt;/span&gt; ducted to the door of the Lodge by the hand of a friend&lt;br&gt;&lt;/br&gt;
			whom I afterward found to be a brother 7 How did you know it to be a door being hoodwinked 8 By first&lt;br&gt;&lt;/br&gt;
			meeting with resistance and afterwards gaining admission 9. How gained you admission 2 By three&lt;br&gt;&lt;/br&gt;
			distinct knocks 3 What was said to you from within 4 Who comes there 9 Your answer 2 A&lt;br&gt;&lt;/br&gt;
			poor blind can &lt;span class="cipher"&gt;]amz[&lt;/span&gt; didate who has long been desirous of being brought out of darkness&lt;br&gt;&lt;/br&gt;
			to light to have and receive a part of the rights and benefits of this Worshipful Lodge erected to God and&lt;br&gt;&lt;/br&gt;
			dedicated to Holy Saint John as many brothers and fellows have done before me 1 What more were&lt;br&gt;&lt;/br&gt;
			you asked 4 If I came of my own free will and accord if I was duly and truly prepared&lt;br&gt;&lt;/br&gt;
			worthy and well qualified of lawful age and properly vouched for 1 Which being answered&lt;br&gt;&lt;/br&gt;
			you the affirmative I was asked by what further right or benefit I expected to again admission 7 Your&lt;br&gt;&lt;/br&gt;
			answer 8 By being a man free born of good repute and well recommended 9 What followed 2 I&lt;br&gt;&lt;/br&gt;
			was requested to wait a time with patience until the Worshipful Master could be inf &lt;span class="cipher"&gt;]qpt[&lt;/span&gt; ormed of&lt;br&gt;&lt;/br&gt;
			my reque &lt;span class="cipher"&gt;]azp[&lt;/span&gt; st and his answer returned . 1 What was his answer when returned 4 . Let him&lt;br&gt;&lt;/br&gt;
			enter . S How did you enter 6. On the point of a sharp inst &lt;span class="cipher"&gt;]enw[&lt;/span&gt; rument pressing my&lt;br&gt;&lt;/br&gt;
			naked left breast 5 Where were you then con &lt;span class="cipher"&gt;]prz[&lt;/span&gt; ducted 8 To the centre of the Lodge where I&lt;br&gt;&lt;/br&gt;
			was caused to kneel and receive the benefit of a prayer (Master gives three knocks 1 &lt;span class="cipher"&gt;rs&lt;/span&gt;) I will&lt;br&gt;&lt;/br&gt;
			thank you to repeat the prayer &amp;#8220; &lt;span class="cipher"&gt;veh ]qmz[ thu &lt;i&gt;dia&lt;/i&gt;&lt;/span&gt;&amp;#8221; &lt;span class="cipher"&gt;(&lt;i&gt;es&lt;/i&gt; Mnr) 1. ftr revg&lt;/span&gt;&lt;br&gt;&lt;/br&gt;
			&lt;/p&gt;
			&lt;/div&gt;&lt;p&gt;The ritual is written in a kind of shorthand with some twists. The square brackets and letters between them look like null ciphers, and some words are not easy to guess. Words written in &lt;i&gt;italic&lt;/i&gt; should be read backwards. I like the use of special symbols (&amp;#182;=cable-tow, &amp;#167;=God), and the numbering system, which I interpret as ; followed by a vowel such that a=1, e=2, and i=3 (and o=4?). I don't understand why one word has a capital letter in the middle: &lt;i&gt;wRt&lt;/i&gt; (worshipful).&lt;/p&gt;&lt;p&gt;It's also interesting to see how similar this shorthand from 1822 is to modern SMS language: "hw d u no urslf".&lt;/p&gt;</content:encoded></item><item><title>Rick Dangerous II dynamic font</title><link>http://www.rictin.com/rick-dangerous-dynamic-font</link><guid>http://www.rictin.com/rick-dangerous-dynamic-font</guid><description>Dynamic text replacement with Rick Dangerous II font.</description><pubDate>Sat, 24 Mar 2012 13:49 +0000</pubDate><content:encoded>&lt;p&gt;My take on dynamic text replacement. I used the font of Rick Dangerous 2, but the technique is valid for any generated font image (see e.g. &lt;a href="http://nfggames.com/games/fontmaker/"&gt;NFG Arcade Font Engine&lt;/a&gt;).&lt;/p&gt;&lt;h2&gt;1. Image generation&lt;/h2&gt;&lt;p&gt;A simple PHP script, &lt;a href="http://data.rictin.com/files/rick-png.php.txt"&gt;rick-png.php&lt;/a&gt;, generates the image dynamically using a &lt;a href="http://data.rictin.com/files/rick-dangerous-2.png"&gt;bitmap file&lt;/a&gt; of the font alphabet.&lt;/p&gt;&lt;h2&gt;2. Text replacement&lt;/h2&gt;&lt;p&gt;The following javascript replaces all text in h2 tags with generated images. I wanted the replacement to happen upon completion of generating and loading the image.&lt;/p&gt;&lt;pre&gt;function rick(){
	var e=document.getElementsByTagName('h2');
	var a=[];
	for(var j=0; e.length&gt;j; j++){
		var t=e[j].textContent;
		if(t==undefined)t=e[j].innerText;
		a[t]=e[j];
		var i=document.createElement('img');
		i.alt=t;
		i.onload=function(){
			a[this.alt].replaceChild(this,a[this.alt].firstChild);
		};
		i.src='http://www.gullnokkelen.com/rick-png.php?t='+t;
	}
}
window.onload=rick;&lt;/pre&gt;&lt;p&gt;This method should be good for search engines and for unsupported clients, because the original text will be used.&lt;/p&gt;&lt;p&gt;P.S. In the code above, we depend on the a[] array and image alt attribute, but a perhaps cooler way is to use closures (which also works with multiple identical texts, unlike the former method):&lt;/p&gt;&lt;pre&gt;function rick(){
	var e=document.getElementsByTagName('h2');
	for(var j=0; e.length&gt;j; j++){
		var t=e[j].textContent;
		if(t==undefined)t=e[j].innerText;
		var i=document.createElement('img');
		i.alt=t;
		i.onload=clos(e[j]);
		i.src='http://www.gullnokkelen.com/rick-png.php?t='+t;
	}
	function clos(e){
		return function(){
			e.replaceChild(this,e.firstChild);
		};
	}
}
window.onload=rick;&lt;/pre&gt;&lt;p&gt;P.P.S. Wouldn't it be cool if this CSS could work: h2{ content: url('http://www.gullnokkelen.com/rick-png.php?t=' attr(title)); }&lt;/p&gt;</content:encoded></item><item><title>Pigpen cipher on Mark Master Masons token</title><link>http://www.rictin.com/mark-master-masons-pigpen-cipher</link><guid>http://www.rictin.com/mark-master-masons-pigpen-cipher</guid><description>Deciphering a pigpen cipher.</description><pubDate>Tue, 20 Mar 2012 20:57 +0000</pubDate><content:encoded>&lt;p&gt;The pigpen cipher is fun because is it generally easy to understand, yet has several variations. Here are a couple I haven't seen deciphered on the internet, so I challenged myself to solve them.&lt;/p&gt;&lt;img src="http://data.rictin.com/img/pigpen-cipher.jpg" alt="Mason token with pigpen cipher" width="475" height="315"&gt;&lt;/img&gt;&lt;p&gt;Masons have these "pennies" or tokens that they give to candidates, &lt;a href="http://www.marktokens.org.uk/dies/reverses.aspx"&gt;some&lt;/a&gt; of which have ciphers on them.&lt;/p&gt;&lt;img src="http://data.rictin.com/img/pigpen-cipher.png" alt="Pigpen cipher"&gt;&lt;/img&gt;&lt;p&gt;The exact key to this particular cipher isn't reproduced much on the internet, but I finally found it:&lt;/p&gt;&lt;img src="http://data.rictin.com/img/digramatic-cipher.jpg" alt="Pigpen cipher key"&gt;&lt;/img&gt;&lt;p&gt;The solution is: &lt;span class="solution"&gt;JOPPA- KEBRAOTH  MARK.WELL&lt;/span&gt;&lt;/p&gt;&lt;p&gt;I gather from &lt;a href="http://www.stichtingargus.nl/vrijmetselarij/ovom_r1e.html"&gt;one&lt;/a&gt; of the very few &lt;a href="https://encrypted.google.com/search?q=joppa+kebraoth"&gt;Google results&lt;/a&gt; for JOPPA KEBRAOTH that these are some kind of freemason passwords.&lt;/p&gt;&lt;p&gt;Here is another one:&lt;/p&gt;&lt;div&gt;&lt;a href="http://www.marktokens.org.uk/dies/die.aspx?ID=55"&gt;&lt;img src="http://data.rictin.com/img/lancashire.jpg" alt="East Lancashire Mark Token"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br&gt;&lt;/br&gt;
			&lt;span style="font-size:80%"&gt;(&lt;a href="http://www.marktokens.org.uk/dies/die.aspx?ID=55"&gt;www.marktokens.org.uk&lt;/a&gt;)&lt;/span&gt;&lt;/div&gt;&lt;img src="http://data.rictin.com/img/pigpen-cipher2.png" alt="Pigpen cipher"&gt;&lt;/img&gt;&lt;p&gt;This one uses a different key, similar to a normal version, but backwards. I couldn't find an existing image, so I assembled this:&lt;/p&gt;&lt;img src="http://data.rictin.com/img/digramatic-cipher.png" alt="Pigpen cipher key"&gt;&lt;/img&gt;&lt;p&gt;The solution is: &lt;span class="solution"&gt;THE MARK PROVINCE OF EAST LANCASHIRE&lt;/span&gt;&lt;/p&gt;</content:encoded></item><item><title>XSLT Content Management</title><link>http://www.rictin.com/xslt</link><guid>http://www.rictin.com/xslt</guid><description>I ported my web site from PHP to XML and Java.</description><pubDate>Sat, 18 Feb 2012 22:20 +0000</pubDate><content:encoded>&lt;p&gt;I wanted this web site to be simpler and more portable, so I threw out Wordpress, PHP, and MySQL, and wrote my own code based on one XML and one XSLT file.&lt;/p&gt;&lt;p&gt;Here is an excerpt of the XML file:&lt;/p&gt;&lt;pre&gt;
&amp;lt;post&gt;
	&amp;lt;date&gt;2012-02-18T22:20:00&amp;lt;/date&gt;
	&amp;lt;url&gt;xslt&amp;lt;/url&gt;
	&amp;lt;title&gt;XSLT Content Management&amp;lt;/title&gt;
	&amp;lt;css&gt;pre{ background-color: #EEEEEE }&amp;lt;/css&gt;
	&amp;lt;excerpt&gt;I ported my web site from PHP to XML and Java.&amp;lt;/excerpt&gt;
	&amp;lt;tags&gt;
		&amp;lt;tag&gt;xslt&amp;lt;/tag&gt;
		&amp;lt;tag nolink="true"&gt;xsl&amp;lt;/tag&gt;
	&amp;lt;/tags&gt;
	&amp;lt;tns:content xmlns="http://www.w3.org/1999/xhtml"&gt;
		&amp;lt;p&gt;I wanted this web site to be simpler and more portable,
&lt;/pre&gt;&lt;p&gt;The XSLT file creates several (X)HTML files using the &lt;code&gt;xsl:result-document&lt;/code&gt; instruction. Where I needed server side dynamics, I used JSPX and Java.&lt;/p&gt;&lt;p&gt;Features:&lt;/p&gt;&lt;ol&gt;
				&lt;li&gt;Portable&lt;/li&gt;
				&lt;li&gt;Fast (no database)&lt;/li&gt;
				&lt;li&gt;Secure (static files)&lt;/li&gt;
				&lt;li&gt;Separates content from style and code&lt;/li&gt;
				&lt;li&gt;Tags&lt;/li&gt;
				&lt;li&gt;RSS feed&lt;/li&gt;
				&lt;li&gt;Links to next and previous post&lt;/li&gt;
				&lt;li&gt;"Hidden"/unlisted posts (pages), etc.&lt;/li&gt;
				&lt;li&gt;Support for custom CSS + JavaScript&lt;/li&gt;
			&lt;/ol&gt;&lt;p&gt;To simplify building and error detection, I configured this XML pipeline using maven-antrun-plugin:&lt;/p&gt;&lt;ol&gt;
				&lt;li&gt;Validate content.xml&lt;/li&gt;
				&lt;li&gt;Transform with XSLT&lt;/li&gt;
				&lt;li&gt;Validate HTML files (XHTML 1.1 Strict)&lt;/li&gt;
				&lt;li&gt;Check well-formedness of JSPX files and feed.xml&lt;/li&gt;
			&lt;/ol&gt;</content:encoded></item><item><title>Using Opera Mini as an anonymizer</title><link>http://www.rictin.com/opera-mini</link><guid>http://www.rictin.com/opera-mini</guid><description>Run Opera Mini on your computer for simple anonymization. Full screen window and no installation!</description><pubDate>Wed, 21 Sep 2011 20:25 +0000</pubDate><content:encoded>&lt;p&gt;Because Opera Mini fetches all content through a proxy server over an encrypted connection, you are guaranteed anonymity at the user end.&lt;/p&gt;&lt;p&gt;&lt;a href="http://en.wikipedia.org/wiki/File:Opera_mini.png"&gt;&lt;img class="aligncenter" src="http://upload.wikimedia.org/wikipedia/commons/f/f8/Opera_mini.png" alt="Opera Mini proxy" width="450"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;This prevents eavesdropping by your neighbor at least. The more recent versions of &lt;a title="Download" href="http://www.opera.com/mobile/download/versions/"&gt;Opera Mini&lt;/a&gt; can be run in mobile &lt;a title="MicroEmulator" href="http://www.microemu.org/"&gt;emulators&lt;/a&gt; and look rather well on larger displays:&lt;/p&gt;&lt;p&gt;&lt;a title="Opera Mini in simulator" href="http://www.rictin.com/mini"&gt;&lt;img class="aligncenter" src="http://data.rictin.com/img/opera-mini.png" alt="Opera Mini on MicroEmulator in Microsoft Windows"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;I then noticed two cool things: 1. MicroEmulator can run MIDlets from URLs using Java Web Start, and 2. When using the &lt;a href="http://www.opera.com/mobile/demo/"&gt;Opera Mini Demo&lt;/a&gt;, the client IP address is not sent in the &lt;code&gt;X-Forwarded-For&lt;/code&gt; HTTP header. This is what gives us anonymity. It&amp;#8217;s not as secure as Tor, but more practical. All you need is to click one link!&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.rictin.com/mini"&gt;http://www.rictin.com/mini&lt;/a&gt;&lt;br&gt;&lt;/br&gt;
			(I recommend: Options &amp;gt; Select device &amp;gt; Resizable device)&lt;/p&gt;&lt;p&gt;(The link forwards to http://&lt;del&gt;microemu.org/webstart/&lt;/del&gt;www.rictin.com/files/mini.jnlp where www.rictin.com/mini.(jad|jar) is the Opera Mini Demo)&lt;/p&gt;&lt;p&gt;P.S. Opera Mini does not provide &lt;a href="http://www.opera.com/mobile/help/faq/#security"&gt;end-to-end security&lt;/a&gt;. Also, we can&amp;#8217;t control the HTTP headers or what Opera decides to do on its servers.&lt;/p&gt;</content:encoded></item><item><title>Join video files Nautilus script</title><link>http://www.rictin.com/join-video-files-nautilus-script</link><guid>http://www.rictin.com/join-video-files-nautilus-script</guid><description>Select several video files, right click, and select "Join video files". Uses mencoder.</description><pubDate>Sat, 07 May 2011 21:23 +0000</pubDate><content:encoded>&lt;p&gt;The command to join video files with mencoder looks something like this:
			&lt;/p&gt;&lt;p&gt;
			&lt;code&gt;mencoder -oac copy -ovc copy -o out.avi in1.avi in2.avi in3.avi&lt;/code&gt;
			&lt;/p&gt;&lt;p&gt;
			There are also other parameters one would want to set depending on the video file formats. To simplify this process of merging videos, download&lt;/p&gt;&lt;ul&gt;
				&lt;li&gt;&lt;a title="Join video files Nautilus script" href="http://data.rictin.com/files/Join%20video%20files"&gt;Join video files&lt;/a&gt;&lt;/li&gt;
			&lt;/ul&gt;&lt;p&gt;and place the file in &lt;span style="background-color: #eeeeff;"&gt;~/.gnome2/nautilus-scripts&lt;/span&gt;
			&lt;/p&gt;&lt;p&gt;
			Then, simply select and right click video files in Nautilus and choose Scripts -&amp;gt; Join video files
			&lt;/p&gt;&lt;p&gt;
			The script will try to set the correct options based on the video files. Files are joined in sequence according to their file names in alphabetical order. The output file is named using the name of the first video file; v1.mpg + ... =&amp;gt; v1-joined.mpg As shown in the command above, the video and audio streams are copied, not re-encoded.&lt;/p&gt;</content:encoded></item><item><title>Zodiac tool</title><link>http://www.rictin.com/zodiac-tool</link><guid>http://www.rictin.com/zodiac-tool</guid><description>An online tool to aid in cracking the Zodiac killer's 340 cipher.</description><pubDate>Fri, 22 Apr 2011 15:32 +0000</pubDate><content:encoded>&lt;p&gt;I decided to have a go at the unsolved "340 cipher" from the Zodiac killer.
			&lt;/p&gt;&lt;p&gt;
			After fruitless attempts using pen and paper I created a web &lt;a title="Zodiac 340 cipher tool" href="http://www.rictin.com/zodiac"&gt;TOOL&lt;/a&gt;.
			&lt;/p&gt;&lt;p&gt;
			There exists several similar tools already, but there are some differences. I use numbers instead of symbols to easier process the data. I think maybe the greatest advantage of my tool is the hover effect which affects all similar symbols on mouse-over. There is also a (rather primitive) "generate remaining" function which estimates unsolved symbols.
			&lt;/p&gt;&lt;p&gt;
			Unfortunately, I still haven't solved the cipher ;-)&lt;/p&gt;</content:encoded></item><item><title>Send custom HTML via Gmail from command line</title><link>http://www.rictin.com/send-custom-html-via-gmail-from-command-line</link><guid>http://www.rictin.com/send-custom-html-via-gmail-from-command-line</guid><description>This bash script converts a webpage/HTML document to an HTML email, inlining (embedding) the images.</description><pubDate>Wed, 05 Jan 2011 20:35 +0000</pubDate><content:encoded>&lt;p&gt;Gmail allows composing and sending of HTML email, but it does not let you edit the source. Among other things, this irritates me because images with links get ugly borders. Luckily, Google also allows us to send emails from your account using other clients. Great, but composing HTML emails with inline/embedded images is still a hassle. Because I couldn't find anything better, I wrote a bash script that converts a webpage/HTML document to an email:&lt;/p&gt;&lt;ul&gt;
				&lt;li&gt;&lt;a title="Script to create inline images in e-mail from HTML file" href="http://data.rictin.com/files/html2email.sh"&gt;html2email.sh&lt;/a&gt;&lt;/li&gt;
			&lt;/ul&gt;&lt;p&gt;The usage is simple: &lt;code&gt;./html2email.sh input.html output.txt [subject]&lt;/code&gt;&lt;/p&gt;&lt;p&gt;Then output.txt can be mailed by e.g. Gmail. A simple way of doing this is using sendemail:&lt;/p&gt;&lt;p&gt;&lt;code&gt;sendemail -f you@gmail.com -t receiver@hotmail.com -s smtp.gmail.com:587 -o tls=yes -xu you@gmail.com -xp yourpassw -o message-format=raw -o message-file=output.txt&lt;/code&gt;&lt;/p&gt;&lt;p&gt;&lt;a title="Script source code" href="http://data.rictin.com/files/html2email.sh.txt"&gt;View the script&lt;/a&gt;&lt;/p&gt;&lt;p&gt;P.S. Edit output.txt to set To: field.&lt;/p&gt;</content:encoded></item><item><title>Script that prepares photos for Facebook</title><link>http://www.rictin.com/photo-script</link><guid>http://www.rictin.com/photo-script</guid><description>A script that lets you merge photo albums from different cameras while preserving chronological order, and optionally prepares them for e.g. Facebook by removing metadata, resizing, and renaming them.</description><pubDate>Tue, 04 May 2010 19:12 +0000</pubDate><content:encoded>&lt;p&gt;This is a follow-up of an &lt;a href="http://www.rictin.com/preparing-photos-for-facebook"&gt;earlier post&lt;/a&gt;. The topic remains the same; merging photo albums from different cameras while preserving chronological order, and removing potentially private metadata.
			&lt;/p&gt;&lt;p&gt;
			Like many others, I have noticed that Facebook increased its photo size &lt;a href="http://blog.facebook.com/blog.php?post=337389082130"&gt;from 604 to 720 pixels&lt;/a&gt;. At the same time, I noticed that the commands in my last post weren't perfect. I have tried to write an improved script:
			&lt;/p&gt;&lt;ul&gt;
				&lt;li&gt;&lt;a href="http://data.rictin.com/files/photosort.sh"&gt;photosort.sh&lt;/a&gt;&lt;/li&gt;
			&lt;/ul&gt;&lt;pre&gt;Usage: photosort.sh [OPTIONS] source_dir_1...[source_dir_N] target_dir&lt;/pre&gt;&lt;p&gt;To find images deep in subfolders, just remove or edit "-maxdepth 1".
			&lt;/p&gt;&lt;p&gt;
			As before, I can recommend &lt;a href="http://www.imagemagick.org/"&gt;ImageMagick&lt;/a&gt; and &lt;a href="http://www.cygwin.com/"&gt;Cygwin&lt;/a&gt; if you are a Windows user.
			&lt;/p&gt;&lt;p&gt;
			Shouldn't have to mention it, but: Use at your own risk.&lt;/p&gt;</content:encoded></item><item><title>Send SMS fra kommandolinjen</title><link>http://www.rictin.com/send-sms-fra-kommandolinjen</link><guid>http://www.rictin.com/send-sms-fra-kommandolinjen</guid><description>Et shell-script for å sende SMS fra gulesider.no.</description><pubDate>Sat, 13 Mar 2010 14:20 +0000</pubDate><content:encoded>&lt;p&gt;&lt;b&gt;Oppdatering:&lt;/b&gt; Gulesider.no er endret så dette virker nok ikke lenger.&lt;/p&gt;&lt;p&gt;&lt;a href="https://www.gulesider.no/mypage/loginForm.c"&gt;Gulesider.no&lt;/a&gt; lar norske mobilbrukere opprette konto og sende inntil 5 gratis SMS per dag fra siden sin (fra ditt eget mobilnummer!).
			&lt;/p&gt;&lt;p&gt;
			Jeg skrev et shell-script som sender fra denne siden uten at du trenger å bruke nettleseren. Dette er bl.a. nyttig hvis du ønsker å varsles av datamaskinen din ved ulike hendelser. Jeg synes også det forenkler manuell sending.
			&lt;/p&gt;&lt;p&gt;
			Last ned &lt;a href="http://data.rictin.com/files/sms.sh"&gt;sms.sh&lt;/a&gt; og kjør f.eks.:&lt;br&gt;&lt;/br&gt;
			&lt;code&gt;./sms.sh 98765432 Hei! Skal vi treffes i dag?&lt;/code&gt;
			&lt;/p&gt;&lt;p&gt;
			Lag en tekstfil, smsnums.txt, med 'nummer,kallenavn' per linje for å slippe å huske telefonnummer.
			&lt;/p&gt;&lt;p&gt;
			Jeg bruker Ubuntu Linux, men hvis du vil kjøre scriptet i Windows, er det bare å laste ned &lt;a href="http://www.cygwin.com/"&gt;Cygwin&lt;/a&gt; og wget.&lt;/p&gt;</content:encoded></item><item><title>Ubiquitous Web OS Command Line</title><link>http://www.rictin.com/ubiquitous-web-os-command-line</link><guid>http://www.rictin.com/ubiquitous-web-os-command-line</guid><description>One single JavaScript file that let's you access all your favorite internet functions from any browser on any machine, without installing anything.</description><pubDate>Sat, 06 Feb 2010 22:21 +0000</pubDate><content:encoded>&lt;p&gt;Update: I wrote a &lt;a href="http://www.rictin.com/bookmarkweb"&gt;similar&lt;/a&gt; bookmarklet with a GUI.&lt;/p&gt;&lt;p&gt;The last couple of years, I have been wondering who my "online profile" will belong to. First, applications started moving from the PC to the web, such as &lt;a href="http://www.gmail.com/"&gt;email&lt;/a&gt; and &lt;a href="http://delicious.com/"&gt;bookmarking&lt;/a&gt;. Then browsers &lt;a title="Opera Link" href="http://www.opera.com/link/"&gt;started&lt;/a&gt; &lt;a title="Mozilla Weave, Firefox add-on" href="https://mozillalabs.com/weave/"&gt;syncing&lt;/a&gt; bookmarks and customizations across different PCs and mobile devices.
			&lt;/p&gt;&lt;p&gt;
			All of these developments are really exciting, but I am not totally satisfied. For one thing, you have to choose and stick to one particular browser. Also, they do not sync everything that I would like (e.g. &lt;a href="http://en.wikipedia.org/wiki/Greasemonkey"&gt;Greasemonkey&lt;/a&gt; scripts). A blog post about &lt;a title="Ubiquity Alternatives Offer Power Users Command-Line Tools for the Web" href="http://www.webmonkey.com/blog/Ubiquity_Alternatives_Offer_Power_Users_Command-Line_Tools_for_the_Web"&gt;alternatives to Mozilla's Ubiquity&lt;/a&gt; introduced me to some great projects, and inspired me to start using &lt;a title="Quix, Bookmarklets on steroids" href="http://quixapp.com/"&gt;Quix&lt;/a&gt;. Quix lets you access your bookmarks, custom searches, and other tools, from one place. It works across all browsers and doesn't need to be installed!
			&lt;/p&gt;&lt;p&gt;
			Not long after, however, I decided to not depend on Quix at all, and write a free, open version. While Quix lets you write your own command file, I also let you modify and store the code. This way, you don't have to worry about Quix crashing, going bankrupt, or eavesdropping on your traffic. You just have to host one JavaScript file (or use mine) and remember its address.&lt;/p&gt;&lt;p&gt;Clicking the following image invokes the script: &lt;a title="Web OS Cmd" href="javascript:WebOsCmd();function WebOsCmd(){var b=false;var h=document.getElementsByTagName('head');if(h.length==0){alert('Error');return;}var s=document.getElementById('weboscmd');if(s)s.parentNode.removeChild(s);s=document.createElement('script');s.src='http://www.rictin.com/WebOsCmd-0.03.min.js';s.id='weboscmd';s.type='text/javascript';s.onload=function(){b=true;};s.onreadystatechange=function(){if(s.readyState=='complete'||s.readyState=='loaded')b=true;};h[0].appendChild(s);var t=window.getSelection?window.getSelection():(document.getSelection?document.getSelection():(document.selection?document.selection.createRange().text:''));var c=window.prompt('Type \'h\' for a list of commands:','');if(c){var o=function(){if(b){s=tingstad(c,t,document.title?encodeURIComponent(document.title):'',''+document.location);if(s!=''){s=window.open(s);s.focus();}}else setTimeout(o,99);};o();}}"&gt;&lt;img src="http://data.rictin.com/img/internet.png" style="border-style:none" alt="Web OS Cmd"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Drag it to your browser's toolbar for convenience. Alter the web address in the link if you want to use your own copy or modified version. The file: &lt;a href="http://www.rictin.com/WebOsCmd-0.03.js"&gt;WebOsCmd.js&lt;/a&gt;&lt;/p&gt;</content:encoded></item><item><title>Save file by URL</title><link>http://www.rictin.com/save-file-by-url</link><guid>http://www.rictin.com/save-file-by-url</guid><description>I created a page where you can paste a URL to generate a link which you then can right click and "Save As...".</description><pubDate>Sun, 17 Jan 2010 13:49 +0000</pubDate><content:encoded>&lt;p&gt;Oftentimes, I have a URL to a file I want to download, but no simple way of downloading it. The problem is that some files (e.g. videos) open in the browser instead of giving you the "Save As..." dialog box.
			&lt;/p&gt;&lt;p&gt;
			&lt;a href="http://www.linksave.net/"&gt;LinkSave.net&lt;/a&gt; provides a text box where you can paste the URL and generate a link you can right click and "Save As...". But do you want LinkSave to know all the links you save?
			&lt;/p&gt;&lt;p&gt;
			I created a similar &lt;a href="http://www.rictin.com/linksave"&gt;link generator&lt;/a&gt; where your URLs are not logged. The link is created on the client side using JavaScript, and you can view the source code to be sure. Easier than writing a new HTML file with the URL every time you want to save a file. Of course, wget is an alternative.&lt;/p&gt;</content:encoded></item><item><title>Linksave</title><link>http://www.rictin.com/linksave</link><guid>http://www.rictin.com/linksave</guid><description>Save a link.</description><pubDate>Sun, 17 Jan 2010 00:00 +0000</pubDate><content:encoded>&lt;p&gt;Similar to &lt;a href="http://www.linksave.net/"&gt;LinkSave.net&lt;/a&gt;, but guaranteed no logging.&lt;/p&gt;&lt;div&gt;[HTML Form]&lt;/div&gt;&lt;ol&gt;
			&lt;li&gt;Paste the URL of the file you wish to save and click "Link".&lt;/li&gt;
			&lt;li&gt;Right click the link and choose "Save Target As..." or "Save Link As..."&lt;/li&gt;
			&lt;/ol&gt;&lt;p id="i"&gt;Link will appear here &lt;/p&gt;</content:encoded></item><item><title>Codes in Shakespeare</title><link>http://www.rictin.com/codes-in-shakespeare</link><guid>http://www.rictin.com/codes-in-shakespeare</guid><description>Investigating alleged ciphers in Shakespeare's First Folio.</description><pubDate>Fri, 25 Dec 2009 21:29 +0000</pubDate><content:encoded>&lt;p&gt;In the Norwegian book, &lt;i title="ISBN: 8202264227"&gt;Organisten&lt;/i&gt; (Dan/Swe: &lt;i&gt;Ekspedition/Expedition Shakespeare&lt;/i&gt;), Petter Amundsen presents several ciphers in the works of William Shakespeare. A newer English &lt;a href="http://www.amazon.com/gp/product/B007TUGKCQ/ref=as_li_qf_sp_asin_tl?ie=UTF8&amp;camp=1789&amp;creative=9325&amp;creativeASIN=B007TUGKCQ&amp;linkCode=as2&amp;tag=rictin-20" title="Oak Island &amp; the Treasure Map in Shakespeare"&gt;e-book&lt;/a&gt;&lt;img src="http://www.assoc-amazon.com/e/ir?t=rictin-20&amp;l=as2&amp;o=1&amp;a=B007TUGKCQ" width="1" height="1" alt="" style="border:none !important; margin:0px !important;"&gt;&lt;/img&gt; and &lt;a title="Shakespeare: The Hidden Truth" href="http://shakespearethehiddentruth.com/"&gt;film&lt;/a&gt; have also been produced. I will here try to investigate some of the alleged ciphers.
			&lt;/p&gt;&lt;p&gt;&lt;a title="Oak Island &amp; the Treasure Map in Shakespeare" href="http://www.amazon.com/gp/product/B007TUGKCQ/ref=as_li_tf_il?ie=UTF8&amp;camp=1789&amp;creative=9325&amp;creativeASIN=B007TUGKCQ&amp;linkCode=as2&amp;tag=rictin-20"&gt;&lt;img src="http://ws.assoc-amazon.com/widgets/q?_encoding=UTF8&amp;ASIN=B007TUGKCQ&amp;Format=_SL160_&amp;ID=AsinImage&amp;MarketPlace=US&amp;ServiceVersion=20070822&amp;WS=1&amp;tag=rictin-20" width="120" height="160" alt="Oak Island &amp; the Treasure Map in Shakespeare"&gt;&lt;/img&gt;&lt;/a&gt;&lt;img src="http://www.assoc-amazon.com/e/ir?t=rictin-20&amp;l=as2&amp;o=1&amp;a=B007TUGKCQ" width="1" height="1" alt="" style="border:none !important; margin:0px !important;"&gt;&lt;/img&gt; &lt;a href="http://shakespearethehiddentruth.com/" title="Shakespeare: The Hidden Truth"&gt;&lt;img width="120" height="160" alt="Shakespeare: The Hidden Truth" src="http://data.rictin.com/img/shakespeare/Hidden-truth-thumb.jpg"&gt;&lt;/img&gt;&lt;/a&gt;
			&lt;/p&gt;&lt;p&gt;Contents&lt;br&gt;&lt;/br&gt;
			&lt;a href="http://www.rictin.com/codes-in-shakespeare#bacon"&gt;Bacon acrostics&lt;/a&gt;&lt;br&gt;&lt;/br&gt;
			&lt;a href="http://www.rictin.com/codes-in-shakespeare#RosyC"&gt;Rosy Cross&lt;/a&gt;&lt;br&gt;&lt;/br&gt;
			&lt;a href="http://www.rictin.com/codes-in-shakespeare#stars"&gt;Star map&lt;/a&gt;&lt;br&gt;&lt;/br&gt;
			&lt;a href="http://www.rictin.com/codes-in-shakespeare#quarto"&gt;Comparing to quartos&lt;/a&gt;&lt;br&gt;&lt;/br&gt;
			&lt;a href="http://www.rictin.com/codes-in-shakespeare#misc"&gt;Miscellaneous&lt;/a&gt;&lt;br&gt;&lt;/br&gt;
			&lt;a href="http://www.rictin.com/codes-in-shakespeare#island"&gt;Oak Island&lt;/a&gt;&lt;br&gt;&lt;/br&gt;
			&lt;a href="http://www.rictin.com/codes-in-shakespeare#conclusion"&gt;Conclusion&lt;/a&gt;&lt;br&gt;&lt;/br&gt;
			&lt;a href="http://www.rictin.com/codes-in-shakespeare#appendix"&gt;Appendix - images&lt;/a&gt;&lt;/p&gt;&lt;h2 id="bacon"&gt;&lt;a name="bacon" href="http://www.rictin.com/codes-in-shakespeare#bacon"&gt;Bacon acrostics&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;i&gt;To the Reader&lt;/i&gt; has a &lt;i&gt;w&lt;/i&gt; which should be capitalized and the three first outermost letters spell TWO. On page 2, another T&lt;i&gt;w&lt;/i&gt;O appears, next to "F BACon".&lt;/p&gt;&lt;p class="serif indent"&gt;&lt;span class="red"&gt;T&lt;/span&gt;his Figure, that thou here seest put,&lt;br&gt;&lt;/br&gt;
			&lt;span class="indent"&gt;It was for gentle Shakespeare cut;&lt;/span&gt;&lt;br&gt;&lt;/br&gt;
			&lt;span class="red"&gt;W&lt;/span&gt;herein the Grauer had a strife&lt;br&gt;&lt;/br&gt;
			&lt;span class="indent"&gt;&lt;span class="blue"&gt;w&lt;/span&gt;ith Nature, to out-doo the life :&lt;/span&gt;&lt;br&gt;&lt;/br&gt;
			&lt;span class="red"&gt;O&lt;/span&gt;,could he but haue dravvne his vvit&lt;br&gt;&lt;/br&gt;
			&lt;span class="indent"&gt;As vvell in brasse, as he hath hit&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;img src="http://data.rictin.com/img/bacon-sum/2-tempest.jpg" alt="The Tempest page 2" width="664" height="121"&gt;&lt;/img&gt;&lt;/p&gt;&lt;p&gt;Can such acrostics be found anywhere? A &lt;a href="http://data.rictin.com/files/acrostic.sh"&gt;search&lt;/a&gt; for BACon in the First Folio yields only two hits:&lt;/p&gt;&lt;pre&gt;$ tr '\n' = &amp;lt; 00ws110.txt |egrep -io '=B[^=]*=+A[^=]*=+Con[^=]*' |tr = '\n'

Begun to tell me what I am, but stopt
And left me to a bootelesse Inquisition,
Concluding, stay: not yet

Banish'd this fraile sepulchre of our flesh,
As now our flesh is banish'd from this Land.
Confesse thy Treasons, ere thou flye this Realme,
&lt;/pre&gt;&lt;p&gt;Other simple acrostics are also rare: TwO (1), BACON (0), FBACO (0), OCABF (&lt;a href="http://www.rictin.com/codes-in-shakespeare#HenryIV49"&gt;1&lt;/a&gt;), BACO (&lt;a href="http://www.rictin.com/codes-in-shakespeare#BACO"&gt;1&lt;/a&gt;), OCAB&lt;del&gt;F&lt;/del&gt; (0), ConAB (&lt;a href="http://www.rictin.com/codes-in-shakespeare#Coriolanus2"&gt;2&lt;/a&gt;), FBAC (&lt;a href="http://www.rictin.com/codes-in-shakespeare#Antony346"&gt;1&lt;/a&gt;), 'O w T' (&lt;a href="http://www.rictin.com/codes-in-shakespeare#Antony346"&gt;1&lt;/a&gt;).&lt;/p&gt;&lt;p&gt;I do not believe that all acrostics are intended ciphers. However, I think that some of my findings are interesting. I think it's peculiar that a BACon is on page 2 of &lt;i&gt;Comedies&lt;/i&gt; when I found BACon reversed on &lt;a href="http://www.rictin.com/codes-in-shakespeare#Coriolanus2"&gt;page&lt;/a&gt; 2 of &lt;i&gt;Tragedies&lt;/i&gt;, especially knowing that only one other BACon (without the preceding "F ") and one other reversed BACon (indented) exist. I also think it's funny that the only FBAC and OwT I found are on the same &lt;a href="http://www.rictin.com/codes-in-shakespeare#Antony346"&gt;page&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;The three parts of the First Folio are about 300 pages long, so the probability of no "page number collisions" (assuming random distribution of the "BACon"s) is about 1 * 897/900 * 894/900 * 891/900 ~= 98.01%.
			&lt;/p&gt;&lt;h2 id="RosyC"&gt;&lt;a href="http://www.rictin.com/codes-in-shakespeare#RosyC"&gt;Rosy Cross&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;a href="http://data.rictin.com/img/shakespeare-Alls-Well-that-Ends-Well-235.jpg"&gt;&lt;img src="http://data.rictin.com/img/shakespeare-Alls-Well-that-Ends-Well-235-small.jpg" alt="Codes in Shakespeare's Alls Well that Ends Well page 235" width="450" height="341"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br&gt;&lt;/br&gt;
			This page is mentioned in epilogue 4 of &lt;i&gt;Organisten&lt;/i&gt; (not in the first edition of the book), but not the circled parts. Petter Amundsen found "R-O-s-y C" between &lt;em&gt;Rossi&lt;/em&gt; and &lt;em&gt;crosse&lt;/em&gt; after I told him about my discovery of &lt;em&gt;fame&lt;/em&gt; and &lt;em&gt;confesse&lt;/em&gt;. It's at a 53 degree angle of course! It's discussed further in the &lt;a href="http://www.amazon.com/gp/product/B007TUGKCQ/ref=as_li_qf_sp_asin_tl?ie=UTF8&amp;camp=1789&amp;creative=9325&amp;creativeASIN=B007TUGKCQ&amp;linkCode=as2&amp;tag=rictin-20" title="Oak Island &amp; the Treasure Map in Shakespeare"&gt;e-book&lt;/a&gt;.
			&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;The e-book says the following about the &lt;em&gt;other&lt;/em&gt; Rosie Cross triange: "a hyphened adjective with a peculiar feature: &amp;#8220;un-Sunn’d&amp;#8221;, the strangeness being the capital S."&lt;br&gt;&lt;/br&gt;
			&lt;img src="http://data.rictin.com/img/shakespeare/Rosie-CROSS.jpg" alt="Rosie CROSS" width="450" height="351"&gt;&lt;/img&gt;
			&lt;br&gt;&lt;/br&gt;I checked and found that it's not unique, but admittedly unusual:&lt;/p&gt;&lt;pre&gt;$ grep '[uv]n-[A-Z]' 00ws110.txt
God saue King Henry, vn-King'd Richard sayes,
And therefore Ile vn-Crowne him, er't be long.
As Chaste, as vn-Sunn'd Snow. Oh, all the Diuels!
Appeare vn-Kinglike&lt;/pre&gt;&lt;p&gt;I also verified another e-book quote: "A brief inspection of the complete Cymbeline uncovers no similar groups of words with capital letters C.R.C."&lt;/p&gt;&lt;pre&gt;$ egrep -o 'C\w*\W+R\w*\W+C\w*' 00ws110.txt
Cedar, Royall Cymbeline&lt;/pre&gt;&lt;p&gt;Actually, the word group in Cymbeline is the only C.R.C. combination in all of the plays.
			&lt;/p&gt;&lt;h2 id="stars"&gt;&lt;a href="http://www.rictin.com/codes-in-shakespeare#stars" name="stars"&gt;Star map&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;I'm convinced that Boötes and Wain (and Swan) are hidden in the Shake-speare productions, but do they form the geometric symbols that Petter Amundsen claim? To be a perfect match, the stars should fit the following diagram:&lt;/p&gt;&lt;p&gt;&lt;a href="http://data.rictin.com/img/shakespeare/stars.png"&gt;&lt;img src="http://data.rictin.com/img/shakespeare/stars.jpg" width="369" height="369" alt="Celestial globe"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;The distance between Regulus (Leo) and Deneb (Cygnus) is 119.47700 degrees, the distance between Arcturus (Boötes) and Capella is 103.03220 degrees. All stars are the brightest of their constellation. We get a proportion of 119.47700/103.03220=1.15961, which is &lt;b&gt;99.4%&lt;/b&gt; of the expected 1.16667 (7/6). The length and width match, but is the figure straight? CapellaDeneb/ArcturusDeneb = 78.18639/&lt;a href="http://www.rictin.com/stars/"&gt;80.85666&lt;/a&gt; = &lt;b&gt;96.7%&lt;/b&gt;. And finally, do the 6 and 7 units long lines cross at the right place? RegulusDeneb and ArcturusCapella intersect at about +54°51'11", 11h45'14", and IntersectionToRegulus = 46.9390° and IntersectionToDeneb = 72.5801°, which gives us IntersectionToRegulus/IntersectionToDeneb = 0.6467 = &lt;b&gt;86.2%&lt;/b&gt; of 3/4.&lt;/p&gt;&lt;p&gt;&lt;img alt="Albireo" src="http://data.rictin.com/img/shakespeare/Albireo-small.jpg" width="400" height="224"&gt;&lt;/img&gt;&lt;/p&gt;&lt;p&gt;The star map is partly based on acrostics like the one above. This one is on page 37 of &lt;i&gt;The Two Gentlemen of Verona&lt;/i&gt;, the first page to be mislabeled as &lt;i&gt;The Merry Wives of Windsor&lt;/i&gt;. I think it's curious that I find another star on the next, and final page of the play, which is also mislabeled.&lt;/p&gt;&lt;p&gt;&lt;img alt="Tania" src="http://data.rictin.com/img/shakespeare/Tania.jpg" width="500" height="215"&gt;&lt;/img&gt;&lt;/p&gt;&lt;p&gt;The two stars Tania Australis and Tania Borealis mark the left hind foot of Ursa Major.&lt;/p&gt;&lt;p&gt;The page number 169 should be special to the Rosicrucians because 16=4&lt;span class="copy"&gt;^&lt;/span&gt;&lt;sup&gt;2&lt;/sup&gt;, 9=3&lt;span class="copy"&gt;^&lt;/span&gt;&lt;sup&gt;2&lt;/sup&gt;, and 169=13&lt;span class="copy"&gt;^&lt;/span&gt;&lt;sup&gt;2&lt;/sup&gt;, which is why I wonder about two possible stars in &lt;i&gt;3 Henry VI&lt;/i&gt;:&lt;/p&gt;&lt;p&gt;&lt;img alt="3 Henry VI, p. 169" src="http://data.rictin.com/img/shakespeare/Gemini-169.jpg" width="500" height="493"&gt;&lt;/img&gt;&lt;/p&gt;&lt;p&gt;Tejat and Almeisan (a.k.a. Alhena) are the brightest stars in Gemini after Castor and Pollux (son of Cygnus, the swan). Tejat is the left "back foot" or heel of Castor, and Almeisan is the left foot of Pollux.&lt;/p&gt;&lt;p&gt;&lt;img alt="Gemini" src="http://data.rictin.com/img/shakespeare/Gemini.jpg" width="500" height="423"&gt;&lt;/img&gt;&lt;/p&gt;&lt;p&gt;None of these stars fit the existing star map.&lt;/p&gt;&lt;h2 id="quarto"&gt;&lt;a href="http://www.rictin.com/codes-in-shakespeare#quarto" name="quarto"&gt;Comparing to quartos&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;I thought it a good idea to compare the First Folio to the previous quarto and had a look at &lt;i&gt;1 Henry IV&lt;/i&gt;.&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.rictin.com/1henry4" title="Comparison of 1Henry4 Q5 and F1"&gt;&lt;img alt="Comparison of 1Henry4 Q5 and F1" src="http://data.rictin.com/img/shakespeare/compare.jpg" width="500" height="79"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;My first observation is that the two are very similar, only a few words are changed, and mostly the same ones. Many &lt;span class="compare"&gt;&amp;amp;&lt;/span&gt; have been replaced by &lt;span class="compare"&gt;and&lt;/span&gt;, and many expressions such as &lt;span class="compare"&gt;by the Lord&lt;/span&gt; and &lt;span class="compare"&gt;Zounds&lt;/span&gt; have been removed. The FBACO acrostic spans two pages in Q5, which I think discredits it a bit. The line between the Lords is also uncertain, as I see no obvious signs of manipulation of their positions. The removal of the other Lords could be a good sign, but since they are all "by the Lord", it doesn't look as good. Much &lt;a href="http://data.rictin.com/img/shakespeare/1henry4-53-q5.png"&gt;the same&lt;/a&gt; goes for page 53, but Bottes/BoOtes and Boots/Bootes seem very plausible.&lt;/p&gt;&lt;h2 id="misc"&gt;&lt;a href="http://www.rictin.com/codes-in-shakespeare#misc" name="misc"&gt;Miscellaneous&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Geometric patterns and shapes are difficult to evaluate because of their subjective nature. One that I think can be measured more objectively is the five &lt;i&gt;Lord&lt;/i&gt;s in a row on page 131 of &lt;i&gt;Histories&lt;/i&gt;. The page has 12 &lt;i&gt;Lord&lt;/i&gt;s in total, 66 lines and 82 characters per line in average. For 3 randomly placed &lt;i&gt;Lord&lt;/i&gt;s to be aligned between two others, we have approximately (64/66)*(63/66)*(62/66)*1/82&lt;span class="copy"&gt;^&lt;/span&gt;&lt;sup&gt;3&lt;/sup&gt;*&lt;span title="Binomial coefficient, 10 choose 3 = 120"&gt;nCr(10,3)&lt;/span&gt;=0.000189..., i.e. 0.02% probability of coincidence. Unfortunately, that number is neither large enough nor small enough to settle any real doubt on its own.&lt;/p&gt;&lt;p&gt;Finally, an acrostic I have found, which could be nothing, is TAROT on the final page of &lt;i&gt;All's Well That Ends Well&lt;/i&gt;.&lt;br&gt;&lt;/br&gt;
			&lt;a href="http://data.rictin.com/img/shakespeare/tarot-254.png"&gt;&lt;img src="http://data.rictin.com/img/shakespeare/tarot-254.jpg" alt="Comedies page 254" width="500" height="255"&gt;&lt;/img&gt;&lt;/a&gt;
			&lt;/p&gt;&lt;h2 id="island"&gt;&lt;a href="http://www.rictin.com/codes-in-shakespeare#island" name="island"&gt;Oak Island&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;One of the claims I am hesitant to accept immediately is that there are references to Oak Island. If one were to point to Oak Island, however, I'll admit that the
			Swan is the star constellation closest to the mark:&lt;/p&gt;&lt;p&gt;&lt;a href="https://www.google.com/maps/d/viewer?mid=zwWl9Gm11YG8.k6wbH0qFtr00"&gt;&lt;img src="http://data.rictin.com/img/shakespeare/cygnus.png" alt="Map of Atlantic Ocean and Cygnus" width="500" height="291"&gt;&lt;/img&gt;&lt;/a&gt;
			&lt;br&gt;&lt;/br&gt;(Click image for details)&lt;/p&gt;&lt;h2 id="conclusion"&gt;&lt;a href="http://www.rictin.com/codes-in-shakespeare#conclusion" name="conclusion"&gt;Conclusion&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;I have only focused on a few of the discoveries here, notably those I've been unsure about or contibuted to. Personally, I am convinced that Rosy Cross, Boötes, and Bacon ciphers exist in the publications, but I'm not sure what they signify.&lt;/p&gt;&lt;p&gt;You may also be interested in my &lt;a href="http://www.rictin.com/a/bacon-cipher/"&gt;Summary of most convincing Bacon ciphers in Shakespeare&lt;/a&gt;.&lt;/p&gt;&lt;h2 id="appendix"&gt;&lt;a href="http://www.rictin.com/codes-in-shakespeare#appendix" name="appendix"&gt;Appendix - images&lt;/a&gt;&lt;/h2&gt;&lt;h3 id="Antony346"&gt;&lt;a href="http://www.rictin.com/codes-in-shakespeare#Antony346"&gt;Boötes in Antony and Cleopatra&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;a href="http://data.rictin.com/img/shakespeare-antony-and-cleopatra-346-7.jpg"&gt;&lt;img src="http://data.rictin.com/img/shakespeare-antony-and-cleopatra-346-7-small.jpg" alt="Codes in Shakespeare's Antony and Cleopatra page 346"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br&gt;&lt;/br&gt;
			Page 346 of &lt;em&gt;The Tragedy of Antony and Cleopatra&lt;/em&gt; contains the only &lt;i&gt;TwO&lt;/i&gt; I have found beyond page 2 of &lt;em&gt;The Tempest&lt;/em&gt;, and the only FBAC in the Folio. The OwT is part of "BO&lt;a title="w = O" href="http://en.wikipedia.org/wiki/Omega"&gt;w&lt;/a&gt;T&lt;a title="H = E" href="http://en.wikipedia.org/wiki/Eta_(letter)"&gt;H&lt;/a&gt;S" (=&lt;a href="http://en.wikipedia.org/wiki/Bootes"&gt;Boötes&lt;/a&gt;).
			&lt;/p&gt;&lt;h3 id="Coriolanus2"&gt;&lt;a href="http://www.rictin.com/codes-in-shakespeare#Coriolanus2"&gt;BACon on page 2 of Tragedies&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;a href="http://data.rictin.com/img/coriolanus-2.jpg"&gt;&lt;img src="http://data.rictin.com/img/coriolanus-2-small.jpg" alt="Coriolanus, page 2"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://data.rictin.com/img/shakespeare-king-john-10.jpg"&gt;&lt;img src="http://data.rictin.com/img/shakespeare/king-john-10-small.jpg" alt="King John, page 10"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br&gt;&lt;/br&gt;
			I have found only two Con-A-B, and it's fitting that one of them is on page 2, mirroring the B-A-Con on page 2 of Comedies. Also a possible BOWTIs anagram. The other instance is indented and prefixed with &lt;em&gt;Fra.&lt;/em&gt;
			&lt;/p&gt;&lt;h3 id="HenryIV49"&gt;&lt;a href="http://www.rictin.com/codes-in-shakespeare#HenryIV49"&gt;37/53 degrees of the 3-4-5 triangle in 1 Henry IV&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;a href="http://data.rictin.com/img/shakespeare-king-henry-iv-49-2.jpg"&gt;&lt;img src="http://data.rictin.com/img/shakespeare-king-henry-iv-49-2-small.jpg" alt="Codes in Shakespeare's King Henry IV page 49"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br&gt;&lt;/br&gt;
			This page and its acrostic ciphers are mentioned in &lt;i&gt;Organisten&lt;/i&gt;, but the line was not. It passes through the page's only two "Lord"s, intersects the upper left corner, and has a 37 degree angle. I'm still not completely sure whether the finds on this page is accidental or not.
			&lt;/p&gt;&lt;h3 id="BACO"&gt;&lt;a href="http://www.rictin.com/codes-in-shakespeare#BACO"&gt;BACO on page 281&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;The most promising BACO I've found is on page 281 (prime), &lt;em&gt;The Winters Tale&lt;/em&gt;. I'm guessing the others are coincidences (&lt;i&gt;Comedies&lt;/i&gt; p. 21 and &lt;i&gt;Tragedies&lt;/i&gt; p. 127).&lt;br&gt;&lt;/br&gt;
			&lt;a href="http://data.rictin.com/img/shakespeare-281-Winters-Tale.jpg"&gt;&lt;img src="http://data.rictin.com/img/shakespeare-281-Winters-Tale-small.jpg" alt="Codes in Shakespeare's Winters Tale page 281"&gt;&lt;/img&gt;&lt;/a&gt; &lt;img src="http://data.rictin.com/img/shakespeare/baco.jpg" alt="BACO"&gt;&lt;/img&gt;
			&lt;/p&gt;&lt;p&gt;The final BACon is on &lt;i&gt;Histories&lt;/i&gt; p. 27 (&lt;i&gt;Richard II&lt;/i&gt;):&lt;br&gt;&lt;/br&gt;
			&lt;img src="http://data.rictin.com/img/shakespeare-richard-ii-27-small.jpg" alt="Richard II, page 27"&gt;&lt;/img&gt;&lt;/p&gt;</content:encoded></item><item><title>Hvilket Flax-lodd er best?</title><link>http://www.rictin.com/hvilket-flax-lodd-er-best</link><guid>http://www.rictin.com/hvilket-flax-lodd-er-best</guid><description>Regner ut virkelige sannsynligheter og forventningsverdier.</description><pubDate>Tue, 07 Apr 2009 17:07 +0000</pubDate><content:encoded>&lt;p&gt;&lt;img class="aligncenter" src="http://data.rictin.com/img/flax.png" alt="Flax-lodd"&gt;&lt;/img&gt;&lt;/p&gt;&lt;p&gt;
			I disse førjulstider er det mange kalendere og lodd å sette seg inn i. Men hvilke gir egentlig de beste vinnersjansene? La oss ta for oss Flax-loddene. På baksiden står vinnersannsynligheten:
			&lt;/p&gt;&lt;table style="border-style:solid;border-collapse:collapse;border-color:#cccccc" border="1"&gt;
			&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Julekalender:&lt;/td&gt;&lt;td&gt;50,0 % (1:2)&lt;/td&gt;&lt;/tr&gt;
			&lt;tr&gt;&lt;td&gt;Million:&lt;/td&gt;&lt;td&gt;25,5 % (1:3,92)&lt;/td&gt;&lt;/tr&gt;
			&lt;tr&gt;&lt;td&gt;Griseflax:&lt;/td&gt;&lt;td&gt;20,6 % (1:4,84)&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;Ser jo greit ut, kalenderen er best. Eller er den det? På kalenderen kan du vinne maksimum kr 500 000, mens du kan vinne opptil kr 1 000 000 på "Flax million". Dessuten er kalenderen dyrere. I tillegg kalkulerer Norsk Tipping selv de minste premier som "win". Altså, hvis du skraper frem 20 kroner på et lodd som kostet 50, så har du "vunnet". Følgende sannsynligheter kan være interessante:&lt;/p&gt;&lt;table style="border-style:solid;border-collapse:collapse;border-color:#cccccc" border="1"&gt;
			&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;"Vinnersannsynlighet"&lt;/td&gt;&lt;td&gt;Sannsynlighet for ikke tap&lt;/td&gt;&lt;td&gt;Sannsynlighet for lønnsom gevinst&lt;/td&gt;&lt;/tr&gt;
			&lt;tr&gt;&lt;td&gt;Julekalender:&lt;/td&gt;&lt;td&gt;&lt;strong&gt;50,0 %&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;20,0 %&lt;/td&gt;&lt;td&gt;10,0%&lt;/td&gt;&lt;/tr&gt;
			&lt;tr&gt;&lt;td&gt;Million:&lt;/td&gt;&lt;td&gt;25,5 %&lt;/td&gt;&lt;td&gt;&lt;strong&gt;25.5 %&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;9,7%&lt;/td&gt;&lt;/tr&gt;
			&lt;tr&gt;&lt;td&gt;Griseflax:&lt;/td&gt;&lt;td&gt;20,6 %&lt;/td&gt;&lt;td&gt;20,6 %&lt;/td&gt;&lt;td&gt;&lt;strong&gt;11,2 %&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;
			&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;
			Som vi ser er forskjellige typer lodd best på forskjellige målsetninger. Vi kan beregne forventningsverdien for å finne ut hvor mye loddene faktisk koster oss (i snitt):
			&lt;/p&gt;&lt;table style="border-style:solid;border-collapse:collapse;border-color:#cccccc" border="1"&gt;
			&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;Forventet gevinst&lt;/td&gt;&lt;td&gt;Pris&lt;/td&gt;&lt;td&gt;Forventningsverdi per krone&lt;/td&gt;&lt;/tr&gt;
			&lt;tr&gt;&lt;td&gt;Julekalender:&lt;/td&gt;&lt;td&gt;kr 25,85&lt;/td&gt;&lt;td&gt;kr 50&lt;/td&gt;&lt;td&gt;kr 0,517&lt;/td&gt;&lt;/tr&gt;
			&lt;tr&gt;&lt;td&gt;Million:&lt;/td&gt;&lt;td&gt;kr 13,75&lt;/td&gt;&lt;td&gt;kr 25&lt;/td&gt;&lt;td&gt;&lt;strong&gt;kr 0,55&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;
			&lt;tr&gt;&lt;td&gt;Griseflax:&lt;/td&gt;&lt;td&gt;kr 5,10&lt;/td&gt;&lt;td&gt;kr 10&lt;/td&gt;&lt;td&gt;kr 0,51&lt;/td&gt;&lt;/tr&gt;
			&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;
			Hvis du kun er interessert i å tape minst mulig penger bør du altså velge Flax million. Hvis en er interessert i sannsynligheten for premier av en viss størrelsesorden kan man se på denne oversikten:
			&lt;/p&gt;&lt;p&gt;
			&lt;a href="http://data.rictin.com/img/flax1.png"&gt;&lt;img src="http://data.rictin.com/img/flax1.png" alt="Sannsynlighet 1"&gt;&lt;/img&gt;&lt;/a&gt;
			&lt;/p&gt;&lt;p&gt;
			&lt;a href="http://data.rictin.com/img/flax2.png"&gt;&lt;img src="http://data.rictin.com/img/flax2.png" alt="Sannsynlighet 2"&gt;&lt;/img&gt;&lt;/a&gt;
			&lt;/p&gt;&lt;p&gt;
			Julekalenderen ser ut til å ligge høyest hele veien, bortsett fra på &amp;gt;= 250, hvor Flax million gjør det litt bedre (men husk at loddene ikke koster like mye). Også på &amp;gt;= 1 000 000 vinner selvsagt Flax million.
			&lt;/p&gt;&lt;p&gt;
			Hvis man snevrer seg inn mot store premier, kan man også følge med på &lt;a title="Dame fra Langhus vant 500 000 på kalender des. 2009" href="https://www.norsk-tipping.no/page?id=93&amp;key=88262"&gt;kunngjøringer om gevinster&lt;/a&gt; og oppdatere sannsynligheten deretter.
			&lt;/p&gt;&lt;p&gt;
			Beregningene finner du i &lt;a href="https://spreadsheets.google.com/ccc?key=0Aib2gmz-44-xdE9NXzJSSTlYb2pNM1VYNE9QYlVLVWc&amp;hl=en"&gt;dette regnearket&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>IMG Mosaic Generator</title><link>http://www.rictin.com/img-mosaic-generator</link><guid>http://www.rictin.com/img-mosaic-generator</guid><description>A simple open source photomosaic creator (with support for multithreading) written in Java.</description><pubDate>Tue, 24 Nov 2009 19:44 +0000</pubDate><content:encoded>&lt;p&gt;A simple open source photomosaic creator (with support for multithreading) written in Java.
			&lt;/p&gt;&lt;p&gt;
			For more technical information, visit &lt;a href="http://code.google.com/p/img-mosaic-generator/"&gt;Google code&lt;/a&gt;, where the code is hosted.
			&lt;/p&gt;&lt;p&gt;
			To use, download &lt;a href="http://data.rictin.com/files/IMGMosaicGenerator.jar"&gt;IMGMosaicGenerator.jar&lt;/a&gt;, and run something like:
			&lt;/p&gt;&lt;p&gt;
			&lt;code&gt;java -jar IMGMosaicGenerator.jar bigpicture.jpg 100 75 mytilesdirectory&lt;/code&gt;
			&lt;/p&gt;&lt;p&gt;
			This will look for image files in &lt;em&gt;mytilesdirectory&lt;/em&gt;. Every image file is then resized to resolution 100x75 and matched against every position of bigpicture.jpg:
			&lt;/p&gt;&lt;p&gt;
			&lt;img src="http://data.rictin.com/img/img-mosaic-generator.png" alt="IMG Mosaic Generator"&gt;&lt;/img&gt;
			&lt;/p&gt;&lt;p&gt;
			The preview window is updated every time a tile is a "best match so far". Window can be resized:
			&lt;/p&gt;&lt;p&gt;
			&lt;img src="http://data.rictin.com/img/img-mosaic-generator-resized.png" alt="Resized window"&gt;&lt;/img&gt;
			&lt;/p&gt;&lt;p&gt;
			Two versions are created (one normal and one "optimally dithered"):
			&lt;/p&gt;&lt;p&gt;
			&lt;img src="http://data.rictin.com/img/img-mosaic-generator-no-dithering.png" alt="Version 1, none-dithered photomosaic"&gt;&lt;/img&gt;&lt;img src="http://data.rictin.com/img/img-mosaic-generator-dithering.png" alt=""&gt;&lt;/img&gt;
			&lt;/p&gt;&lt;p&gt;
			The second version can be obtained when aborting the process by clicking in the window and invoking the following dialog box:
			&lt;/p&gt;&lt;p&gt;
			&lt;img src="http://data.rictin.com/img/img-mosaic-generator-interaction.png" alt="Version 2, dithered photomosaic"&gt;&lt;/img&gt;
			&lt;/p&gt;&lt;p&gt;
			Output is in HTML. To save as image, Firefox add-on, &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/3408"&gt;Abduction!&lt;/a&gt; can be used.&lt;/p&gt;</content:encoded></item><item><title>Preparing photos for Facebook upload</title><link>http://www.rictin.com/preparing-photos-for-facebook</link><guid>http://www.rictin.com/preparing-photos-for-facebook</guid><description>A few tips for using Facebook and/or other services. Shows a way to correctly order photos from different sources (2 cameras -&gt; 1 album) and how to remove potentially private data.</description><pubDate>Sat, 17 Oct 2009 15:23 +0000</pubDate><content:encoded>&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; Improved version in a &lt;a href="http://www.rictin.com/photo-script"&gt;new post&lt;/a&gt; of mine.&lt;/p&gt;&lt;p&gt;A few tips for using Facebook and/or other services. You will need &lt;a title="Free software, most operating systems supported" href="http://www.imagemagick.org/"&gt;ImageMagick&lt;/a&gt; and Linux or &lt;a title="Linux-like environment for Windows" href="http://www.cygwin.com/"&gt;Cygwin&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Order images correctly&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt; &lt;/strong&gt;Copying images to your computer, or rotating them, may ruin the files' time (of last modification). If your album contains images from several cameras, the file names can't be used to sort the images either. The following command renames the files to the second they were taken (see &lt;a title="Exchangeable image file format (metadata in jpg)" href="http://en.wikipedia.org/wiki/Exif"&gt;Exif&lt;/a&gt;).&lt;/p&gt;&lt;p&gt;&lt;code&gt;&lt;span title="c ensures names are unique"&gt;c=0;for i in *.jpg;do t=`identify -verbose $i |egrep 'Exif:DateTime:'|sed 's/[^0-9]//g'`; mv $i "$t-$c.jpg";c=$[ $c + 1 ];echo $i;done&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Remove excess information&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Be sure you don't share &lt;a title="Why you should remove metadata" href="http://netzreport.googlepages.com/hidden_data_in_jpeg_files.html"&gt;more than you mean to&lt;/a&gt;! Also, saves you a couple of bytes to upload. (Copy files to a new folder first.)&lt;/p&gt;&lt;p&gt;&lt;code&gt;for i in *.jpg;do mogrify &lt;span title="Removes Exif data"&gt;-strip&lt;/span&gt; &lt;span title="Aspect ratio is preserved, max width/height is 604"&gt;-resize 604x604&lt;/span&gt; $i;echo $i;done&lt;/code&gt;&lt;/p&gt;&lt;p&gt;Of course, for some services, keeping the metadata could be useful.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Anonymize file names&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Finally, you may want to rename the album file names:&lt;/p&gt;&lt;p&gt;&lt;code&gt;c=0;for i in *.jpg;do f=`&lt;span title="0000,0001,0002,..."&gt;printf "%04u" "$c"&lt;/span&gt;`;mv $i $f.jpg;c=$[ $c + 1 ];done&lt;/code&gt;&lt;/p&gt;</content:encoded></item><item><title>Punktliste mot datalagringsdirektivet</title><link>http://www.rictin.com/nei-til-datalagringsdirektivet</link><guid>http://www.rictin.com/nei-til-datalagringsdirektivet</guid><description>En oppsummering av problemene med datalagringsdirektivet slik jeg ser det.</description><pubDate>Wed, 05 Aug 2009 20:28 +0000</pubDate><content:encoded>&lt;p&gt;En oppsummering av problemene med &lt;a href="http://no.wikipedia.org/wiki/Datalagringsdirektivet"&gt;datalagringsdirektivet&lt;/a&gt; slik jeg ser det:
			&lt;/p&gt;&lt;ul&gt;
				&lt;li&gt;Alle lovlydige &lt;a title="Vår tapte frihet" href="http://www.dagbladet.no/nyheter/2009/07/28/583252.html"&gt;mister sin anonymitet&lt;/a&gt;&lt;/li&gt;
				&lt;li&gt;Kan misbrukes i fremtiden (ved maktskifte)&lt;/li&gt;
				&lt;li&gt;Kan misbrukes hvis &lt;a title="Datalogger: En honningkrukke for kriminelle" href="http://www.tu.no/it/article132137.ece"&gt;uvedkommende får tilgang til informasjonen&lt;/a&gt;&lt;/li&gt;
				&lt;li&gt;Lett å senere "utvide" til verre formål ("slippery slope")&lt;/li&gt;
				&lt;li&gt;Gjør det &lt;a href="http://www.idg.no/computerworld/article138343.ece"&gt;vanskeligere med whistle blowing&lt;/a&gt;&lt;/li&gt;
				&lt;li&gt;Ett skritt i retning av at man må &lt;a href="http://www.amnesty.no/web.nsf/pages/83ABD0887125B4F1C12573FA003A6A0F"&gt;bevise sin uskyld&lt;/a&gt;&lt;/li&gt;
				&lt;li&gt;Kriminelle kan lett &lt;a href="http://www.torproject.org/"&gt;unngå overvåkningen&lt;/a&gt;&lt;/li&gt;
				&lt;li&gt;&lt;a title="Antall døde i terroristaksjoner 1970-2007" href="http://www.washingtonpost.com/wp-dyn/content/graphic/2009/06/12/GR2009061200051.html"&gt;Lite igjen&lt;/a&gt; i forhold til prisen?&lt;/li&gt;
			&lt;/ul&gt;&lt;p&gt;
			Dette er selvsagt litt forenklet, men det må en punktliste nødvendigvis være. Finnes det flere punkter? Skriv gjerne en kommentar.
			&lt;/p&gt;&lt;p&gt;
			Tekst fra &lt;a href="http://carlchristian.net/2009/07/14/regjeringen-ma-ta-stilling-na-si-nei-til-datalagringsdirektivet/"&gt;carlchristian.net&lt;/a&gt; (&lt;a href="http://creativecommons.org/licenses/by-sa/3.0/no/"&gt;Creative Commons Attribution-Share Alike 3.0 Norway License&lt;/a&gt;):
			&lt;/p&gt;&lt;p&gt;
			Personvern er en grunnleggende verdi i et demokrati. Personvernet innebærer en rett til å være i fred fra andre, men også en rett til å ha kontroll over opplysninger om seg selv, særlig opplysninger som oppleves som personlige. Etter EMK artikkel 8 er personvern ansett som en menneskerettighet.
			&lt;/p&gt;&lt;p&gt;
			Med en mulig norsk implementering av Datalagringsdirektivet (direktiv 2006/24/EF), som pålegger tele- og nettselskap å lagre trafikkdata om borgernes elektroniske kommunikasjon (e-post, sms, telefon, internett) i inntil to år, vil nordmenns personvern bli krenket på det groveste.
			&lt;/p&gt;&lt;p&gt;
			Datalagringsdirektivet ble vedtatt av EU 15. mars 2006, men fremdeles har den norske regjeringen ikke offisielt tatt stilling til om direktivet skal gjøre til norsk lov eller ikke. Gjennom EØS-avtalen har Norge en reservasjonsrett. Denne har aldri før blitt brukt, men så har man heller aldri stått overfor et direktiv som representerer en så stor trussel mot demokratiets grunnleggende verdier som det datalagringsdirektivet gjør.&lt;/p&gt;</content:encoded></item><item><title>Morse Code MIDlet</title><link>http://www.rictin.com/morsecode</link><guid>http://www.rictin.com/morsecode</guid><description>Use your phone's screen to transmit morse code.</description><pubDate>Sat, 20 Jun 2009 13:20 +0000</pubDate><content:encoded>&lt;div class="floatimg"&gt;&lt;img alt="Navy seaman sending morse code signals" src="http://data.rictin.com/img/morsecode.jpg"&gt;&lt;/img&gt;&lt;/div&gt;&lt;p&gt;Inspired by the flashlight midlet, &lt;a href="http://www.substanceofcode.com/software/torch-midlet/"&gt;Torch&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;The midlet sends morse code signals, it does not receive.&lt;/p&gt;&lt;p&gt;Allows you to communicate accross distances where your voice and body is not enough and your phone is otherwise useless.&lt;/p&gt;&lt;p&gt;For example if you're in a dark and noisy environment and you don't have the recipient's phone number or there is no network coverage.&lt;/p&gt;&lt;p&gt;A life saver! ;)&lt;/p&gt;&lt;p&gt;Download: &lt;a href="http://www.rictin.com/m.jad"&gt;http://www.rictin.com/m.jad&lt;/a&gt;. If that doesn't automatically work, try to also download &lt;a href="http://www.rictin.com/m.jar"&gt;http://www.rictin.com/m.jar&lt;/a&gt;. &lt;a href="http://data.rictin.com/files/MorseCode.java"&gt;Source code&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>FINN Greasemonkey script</title><link>http://www.rictin.com/finn-no-greasemonkey-script</link><guid>http://www.rictin.com/finn-no-greasemonkey-script</guid><description>Forbedrer Finn Eiendom ved å legge til kjøreavstand (og reisetid) til en oppgitt adresse og totalpris og kvadratmeterpris på alle boliger. Boligene/eiendommene kan også sorteres på disse variablene.</description><pubDate>Thu, 09 Apr 2009 15:45 +0000</pubDate><content:encoded>&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; FINN.no har endret mye på koden sin siden dette ble laget så det virker sannsynligvis ikke lenger.
			&lt;/p&gt;&lt;p&gt;
			Jeg har flere ganger brukt &lt;a title="FINN eiendom" href="http://www.finn.no/eiendom/"&gt;FINN eiendom&lt;/a&gt;, og synes stort sett det fungerer godt. Jeg liker at man kan avgrense søk såpass fritt (antall soverom, størrelse, etasje, osv.). Jeg har derimot syntes at det kan være litt vanskelig å vurdere boligers beliggenhet, da område/sted kan være litt generelle og grensene kanskje ikke går der man ønsker. Man måtte til dels vurdere hver enkelt boligs adresse. Jeg syntes det var veldig kult at boliganonsene ble plassert i kart etter hvert. Det har imidlertid fortsatt noen &lt;a title="Om FINN.no boliganonser i kart" href="http://labs.finn.no/blog/visste-du-du-kan-soke-opp-annonser-direkte-fra-kart"&gt;svakheter&lt;/a&gt;. Et av problemene synes jeg er at kartet ikke gir en rask oversikt over boligenes beliggenhet i forhold til noe, f.eks. trikkestasjoner. Jeg mener det også er svært aktuelt å vite en boligs avstand &lt;em&gt;i reisetid&lt;/em&gt; til jobb eller skole.
			&lt;/p&gt;&lt;p&gt;
			Mitt Greasemonkey-&lt;a title="Finn distance" href="http://userscripts.org/scripts/show/46276"&gt;skript&lt;/a&gt; forsøker å vise boligers avstand til en oppgitt adresse på en rask og enkel måte. Dette gjøres ved å legge på &lt;em&gt;kjøreavstand (kilometer og minutter)&lt;/em&gt; til en oppgitt adresse på hver oppføring i resultatlisten. For å gjøre dette mer nyttig kan man sortere resultlisten etter kjøreavstand.
			&lt;/p&gt;&lt;p&gt;
			&lt;img title="FINN distance Greasemonkey script" src="http://data.rictin.com/img/finn.png" alt="FINN distance Greasemonkey script" width="500" height="261"&gt;&lt;/img&gt;
			&lt;/p&gt;&lt;p&gt;
			Man kan også sortere etter &lt;em&gt;kvadratmeterpris&lt;/em&gt;, &lt;em&gt;totalpris (inkl. fellesgjeld)&lt;/em&gt; eller standard (ingen sortering). Dersom skriptet ikke finner variabelen det sorteres på for en bolig (f.eks. kjøreavstand eller kvadratmeterpris) blir boligen vist sist.
			&lt;/p&gt;&lt;p&gt;
			Også på objektsiden vises kvadratmeterpris og kjøreavstand.
			&lt;/p&gt;&lt;p&gt;
			&lt;img class="alignnone size-full wp-image-30" title="FINN distance Greasemonkey script" src="http://data.rictin.com/img/finn22.png" alt="" width="492" height="362"&gt;&lt;/img&gt;
			&lt;/p&gt;&lt;p&gt;
			Hvis man klikker på kjøreavstand-linken får man opp kart med kjøreanvisning mellom de to adressene fra Google maps. Kjøreavstand vil dessverre ikke virke i Opera, men man kan fortsatt sortere etter totalpris og kvadratmeterpris.
			&lt;/p&gt;&lt;p&gt;
			&lt;img class="alignnone size-full wp-image-29" title="FINN distance Greasemonkey script in Opera" src="http://data.rictin.com/img/opera.png" alt="" width="500" height="121"&gt;&lt;/img&gt;
			&lt;/p&gt;&lt;p&gt;
			Det er enkelt å endre koden for å få gåavstand i stedet for kjøreavstand eller å endre retningen (som har noe å si pga. enveiskjørte gater o.l.).
			&lt;/p&gt;&lt;p&gt;
			Hvis flere elementer i HTML-koden på finn.no hadde hatt id, ville det vært mye enklere å lage dette skriptet!&lt;/p&gt;</content:encoded></item><item><title>Online Excel Translator</title><link>http://www.rictin.com/excel-translator</link><guid>http://www.rictin.com/excel-translator</guid><description>Translates Excel function names between several languages. Convenient if you read about a formula you want to use on a webpage that is in a different language than your Excel version.</description><pubDate>Tue, 07 Apr 2009 17:07 +0000</pubDate><content:encoded>&lt;p&gt;Currently not working&lt;/p&gt;&lt;del&gt;
			&lt;p&gt;Translate Microsoft Excel formulas/function names between several languages.&lt;/p&gt;
			&lt;div&gt;[HTML Form]&lt;/div&gt;
			&lt;p&gt;P.S. Danish is the least supported language (but most similar to Norwegian).&lt;/p&gt;
			&lt;p&gt;Feel free to &lt;a href="http://www.rictin.com/about"&gt;contact me&lt;/a&gt; with suggestions etc.&lt;/p&gt;
			&lt;p&gt;Sources used:&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;&lt;a href="http://cherbe.free.fr/traduc_fonctions_xl97.html"&gt;http://cherbe.free.fr/traduc_fonctions_xl97.html&lt;/a&gt; / &lt;a href="http://dolf.trieschnigg.nl/excel/excel.html"&gt;http://dolf.trieschnigg.nl/excel/excel.html&lt;/a&gt;&lt;/li&gt;
				&lt;li&gt;&lt;a href="http://www.probabilityof.com/excel.shtml#30"&gt;http://www.probabilityof.com/excel.shtml#30&lt;/a&gt;&lt;/li&gt;
				&lt;li&gt;&lt;a href="http://www.sslug.dk/locale/kenneth/dom/apps/gnumeric-hacks/intlfuncn.html"&gt;http://www.sslug.dk/locale/kenneth/dom/apps/gnumeric-hacks/intlfuncn.html&lt;/a&gt;&lt;/li&gt;
				&lt;li&gt;&lt;a href="http://www.piuha.fi/excel-function-name-translation/index.php?page=english-polish.html"&gt;http://www.piuha.fi/excel-function-name-translation/index.php?page=english-polish.html&lt;/a&gt;&lt;/li&gt;
			&lt;/ul&gt;
			&lt;/del&gt;</content:encoded></item><item><title>Excel sort</title><link>http://www.rictin.com/excel-sorting</link><guid>http://www.rictin.com/excel-sorting</guid><description>Using CSS to make beautiful Excel spreadsheet tables.</description><pubDate>Tue, 07 Apr 2009 17:07 +0000</pubDate><content:encoded>&lt;p&gt;
			I recently created an &lt;a title="Excel dynamic sort" href="http://www.rictin.com/excel-sort"&gt;explanation&lt;/a&gt; of how to automatically sort a list of data in Excel.
			&lt;/p&gt;&lt;p&gt;
			I wanted to present the technique as simply and effectively as possible. Pages like &lt;a title="Sorting in Excel" href="http://www.mrexcel.com/tip093.shtml"&gt;MrExcel&lt;/a&gt; use jpg images to show screenshots of Excel sheets. This works nicely, but I wanted something more usable and accessible. HTML tables are also frequently used around the internet, but often rather primitively.
			&lt;/p&gt;&lt;p&gt;
			I used a simple HTML table with border="1" and some cellpadding as a basis, and added CSS on top. I found that I needed the HTML border and cellpadding for the table to be readable without CSS. The CSS has two functions; to mimic the Excel look and to use colors for highlighting.
			&lt;/p&gt;&lt;p&gt;
			The HTML+CSS approach has both advantages and disadvantages compared to screenshots. Disadvantage: Difficult to show colored squares that span several cells, such as:
			&lt;/p&gt;&lt;p&gt;
			&lt;img class="alignnone size-full wp-image-4" title="Spreadsheet screenshot" src="http://data.rictin.com/img/excel.png" alt="Spreadsheet screenshot" width="341" height="190"&gt;&lt;/img&gt;
			&lt;/p&gt;&lt;p&gt;
			Advantages: Can show the formula of more than one cell at a time. The text can be selected and copied, etc. Instead of cell-spaning rectangles, I use different colors for the cell contents.
			&lt;/p&gt;&lt;p&gt;
			I wanted it to be possible to copy the whole table and paste it into Excel or OpenOffice. You can, but you have to delete the first column afterwards.
			&lt;/p&gt;&lt;p&gt;
			I ended up with two style sheets (Creative Commons license):&lt;/p&gt;&lt;ul&gt;
				&lt;li&gt;&lt;a title="Excel style sheet for tables with th" href="http://data.rictin.com/style/excel-with-th.css"&gt;Style sheet for tables with &amp;lt;TH&amp;gt; elements&lt;/a&gt;.&lt;/li&gt;
				&lt;li&gt;&lt;a title="Excel style sheet for tables without th" href="http://data.rictin.com/style/excel-without-th.css"&gt;Style sheet for tables without &amp;lt;TH&amp;gt; elements&lt;/a&gt;.&lt;/li&gt;
			&lt;/ul&gt;&lt;p&gt;
			I am also wondering if I can do something more with the Excel functions. I could link to the function reference, like &lt;del&gt;&lt;a title="VLOOKUP - Excel - Microsoft Office Online" href="http://office.microsoft.com/en-us/excel/HP052093351033.aspx"&gt;VLOOKUP&lt;/a&gt;&lt;/del&gt;(dead link). &lt;del&gt;Or perhaps I should link to my translation page; &lt;a title="VLOOKUP translated into Dutch" href="http://www.rictin.com/excel-translator?from=English&amp;to=Dutch&amp;input=VLOOKUP"&gt;VLOOKUP&lt;/a&gt;&lt;/del&gt;(defunct). The question is what language to translate to. Perhaps we could use Accept-Language from the HTTP header. For now, I just put a &amp;lt;span class="msexcel"&amp;gt; around the formulas to make them easily available to machine interpretation (e.g. Greasemonkey scripts).
			&lt;/p&gt;&lt;p&gt;
			&lt;del&gt;After writing the page, I found a &lt;a title="Automatic sorting Excel" href="http://www.auditexcel.co.za/Automatic%20Sorting%20Project.html"&gt;video presentation&lt;/a&gt; (Flash) of the same technique. They do not mention the +COUNTIF function however.&lt;/del&gt; (dead link)
			&lt;/p&gt;</content:encoded></item><item><title>Excel dynamic sort</title><link>http://www.rictin.com/excel-sort</link><guid>http://www.rictin.com/excel-sort</guid><description>Page explaining sorting of data dynamically in Microsoft Excel, without macros.</description><pubDate>Tue, 07 Apr 2009 00:00 +0000</pubDate><content:encoded>&lt;p&gt;Sorting data in-place in MS Excel &lt;a href="http://www.mrexcel.com/tip093.shtml" title="Sorting in Excel"&gt;is easy&lt;/a&gt;. This technique however will sort a table without changing the original data. This means you can have several referring tables that will automatically update when the original data is modified. Without macros.&lt;/p&gt;&lt;del&gt;&lt;p&gt;P.S. Use my &lt;a href="http://www.rictin.com/excel-translator"&gt;Online Excel Translator&lt;/a&gt; if you want the functions in another language.&lt;/p&gt;&lt;/del&gt;&lt;p&gt;This is our initial table:&lt;/p&gt;&lt;table class="excel" border="1" cellpadding="4"&gt;
			&lt;tr class="excelt"&gt;&lt;th class="excell"&gt;&amp;#160;&lt;/th&gt;&lt;th&gt;A&lt;/th&gt;&lt;th&gt;B&lt;/th&gt;&lt;th&gt;C&lt;/th&gt;&lt;th&gt;D&lt;/th&gt;&lt;th&gt;E&lt;/th&gt;&lt;th&gt;F&lt;/th&gt;&lt;th&gt;G&lt;/th&gt;&lt;th&gt;H&lt;/th&gt;&lt;/tr&gt;
			&lt;tr&gt;&lt;th class="excell"&gt;1&lt;/th&gt;&lt;td&gt;&amp;#160;&lt;/td&gt;&lt;td&gt;Name&lt;/td&gt;&lt;td&gt;Score&lt;/td&gt;&lt;td&gt;&amp;#160;&lt;/td&gt;&lt;td&gt;&amp;#160;&lt;/td&gt;&lt;td&gt;&amp;#160;&lt;/td&gt;&lt;td&gt;&amp;#160;&lt;/td&gt;&lt;td&gt;&amp;#160;&lt;/td&gt;&lt;/tr&gt;
			&lt;tr&gt;&lt;th class="excell"&gt;2&lt;/th&gt;&lt;td&gt;&amp;#160;&lt;/td&gt;&lt;td&gt;Mallory&lt;/td&gt;&lt;td&gt;50&lt;/td&gt;&lt;td&gt;&amp;#160;&lt;/td&gt;&lt;td&gt;&amp;#160;&lt;/td&gt;&lt;td&gt;&amp;#160;&lt;/td&gt;&lt;td&gt;&amp;#160;&lt;/td&gt;&lt;td&gt;&amp;#160;&lt;/td&gt;&lt;/tr&gt;
			&lt;tr&gt;&lt;th class="excell"&gt;3&lt;/th&gt;&lt;td&gt;&amp;#160;&lt;/td&gt;&lt;td&gt;Bob&lt;/td&gt;&lt;td&gt;120&lt;/td&gt;&lt;td&gt;&amp;#160;&lt;/td&gt;&lt;td&gt;&amp;#160;&lt;/td&gt;&lt;td&gt;&amp;#160;&lt;/td&gt;&lt;td&gt;&amp;#160;&lt;/td&gt;&lt;td&gt;&amp;#160;&lt;/td&gt;&lt;/tr&gt;
			&lt;tr&gt;&lt;th class="excell"&gt;4&lt;/th&gt;&lt;td&gt;&amp;#160;&lt;/td&gt;&lt;td&gt;Eve&lt;/td&gt;&lt;td&gt;10&lt;/td&gt;&lt;td&gt;&amp;#160;&lt;/td&gt;&lt;td&gt;&amp;#160;&lt;/td&gt;&lt;td&gt;&amp;#160;&lt;/td&gt;&lt;td&gt;&amp;#160;&lt;/td&gt;&lt;td&gt;&amp;#160;&lt;/td&gt;&lt;/tr&gt;
			&lt;tr&gt;&lt;th class="excell"&gt;5&lt;/th&gt;&lt;td&gt;&amp;#160;&lt;/td&gt;&lt;td&gt;Alice&lt;/td&gt;&lt;td&gt;100&lt;/td&gt;&lt;td&gt;&amp;#160;&lt;/td&gt;&lt;td&gt;&amp;#160;&lt;/td&gt;&lt;td&gt;&amp;#160;&lt;/td&gt;&lt;td&gt;&amp;#160;&lt;/td&gt;&lt;td&gt;&amp;#160;&lt;/td&gt;&lt;/tr&gt;
			&lt;/table&gt;&lt;p&gt;Let's sort by score. Fist we need to add a column to the left of the data, with the "&lt;span class="msexcel"&gt;RANK&lt;/span&gt;" of each row. We have to add +&lt;span class="msexcel"&gt;COUNTIF&lt;/span&gt;(C$2:C4;C5) if the sorted variable (score) is not necessarily uniqe.&lt;/p&gt;&lt;table class="excel" border="1" cellpadding="4"&gt;
			&lt;tr class="excelt"&gt;&lt;th class="excell"&gt;&amp;#160;&lt;/th&gt;&lt;th&gt;A&lt;/th&gt;&lt;th&gt;B&lt;/th&gt;&lt;th&gt;C&lt;/th&gt;&lt;th&gt;D&lt;/th&gt;&lt;th&gt;E&lt;/th&gt;&lt;th&gt;F&lt;/th&gt;&lt;th&gt;G&lt;/th&gt;&lt;th&gt;H&lt;/th&gt;&lt;/tr&gt;
			&lt;tr&gt;&lt;th class="excell"&gt;1&lt;/th&gt;&lt;td&gt;&amp;#160;&lt;/td&gt;&lt;td&gt;Name&lt;/td&gt;&lt;td&gt;Score&lt;/td&gt;&lt;td&gt;&amp;#160;&lt;/td&gt;&lt;td&gt;&amp;#160;&lt;/td&gt;&lt;td&gt;&amp;#160;&lt;/td&gt;&lt;td&gt;&amp;#160;&lt;/td&gt;&lt;td&gt;&amp;#160;&lt;/td&gt;&lt;/tr&gt;
			&lt;tr&gt;&lt;th class="excell"&gt;2&lt;/th&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;Mallory&lt;/td&gt;&lt;td class="select2"&gt;50&lt;/td&gt;&lt;td&gt;&amp;#160;&lt;/td&gt;&lt;td&gt;&amp;#160;&lt;/td&gt;&lt;td&gt;&amp;#160;&lt;/td&gt;&lt;td&gt;&amp;#160;&lt;/td&gt;&lt;td&gt;&amp;#160;&lt;/td&gt;&lt;/tr&gt;
			&lt;tr&gt;&lt;th class="excell"&gt;3&lt;/th&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;Bob&lt;/td&gt;&lt;td class="select2"&gt;120&lt;/td&gt;&lt;td&gt;&amp;#160;&lt;/td&gt;&lt;td&gt;&amp;#160;&lt;/td&gt;&lt;td&gt;&amp;#160;&lt;/td&gt;&lt;td&gt;&amp;#160;&lt;/td&gt;&lt;td&gt;&amp;#160;&lt;/td&gt;&lt;/tr&gt;
			&lt;tr&gt;&lt;th class="excell"&gt;4&lt;/th&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;Eve&lt;/td&gt;&lt;td class="select2"&gt;10&lt;/td&gt;&lt;td&gt;&amp;#160;&lt;/td&gt;&lt;td&gt;&amp;#160;&lt;/td&gt;&lt;td&gt;&amp;#160;&lt;/td&gt;&lt;td&gt;&amp;#160;&lt;/td&gt;&lt;td&gt;&amp;#160;&lt;/td&gt;&lt;/tr&gt;
			&lt;tr&gt;&lt;th class="excell"&gt;5&lt;/th&gt;&lt;td&gt;=&lt;span class="msexcel"&gt;RANK&lt;/span&gt;(&lt;span class="pointer1"&gt;C5&lt;/span&gt;;&lt;span class="select2"&gt;C$2:C$5&lt;/span&gt;)&lt;/td&gt;&lt;td&gt;Alice&lt;/td&gt;&lt;td class="target1"&gt;&lt;span class="select2"&gt;100&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&amp;#160;&lt;/td&gt;&lt;td&gt;&amp;#160;&lt;/td&gt;&lt;td&gt;&amp;#160;&lt;/td&gt;&lt;td&gt;&amp;#160;&lt;/td&gt;&lt;td&gt;&amp;#160;&lt;/td&gt;&lt;/tr&gt;
			&lt;/table&gt;&lt;p&gt;Then we add a column with the desired order of data, usually 1,2,3,.. or perhaps a descending order.&lt;/p&gt;&lt;table class="excel" border="1" cellpadding="4"&gt;
			&lt;tr class="excelt"&gt;&lt;th class="excell"&gt;&amp;#160;&lt;/th&gt;&lt;th&gt;A&lt;/th&gt;&lt;th&gt;B&lt;/th&gt;&lt;th&gt;C&lt;/th&gt;&lt;th&gt;D&lt;/th&gt;&lt;th&gt;E&lt;/th&gt;&lt;th&gt;F&lt;/th&gt;&lt;th&gt;G&lt;/th&gt;&lt;th&gt;H&lt;/th&gt;&lt;/tr&gt;
			&lt;tr&gt;&lt;th class="excell"&gt;1&lt;/th&gt;&lt;td&gt;&amp;#160;&lt;/td&gt;&lt;td&gt;Name&lt;/td&gt;&lt;td&gt;Score&lt;/td&gt;&lt;td&gt;&amp;#160;&lt;/td&gt;&lt;td&gt;Desired order&lt;/td&gt;&lt;td&gt;&amp;#160;&lt;/td&gt;&lt;td&gt;&amp;#160;&lt;/td&gt;&lt;td&gt;&amp;#160;&lt;/td&gt;&lt;/tr&gt;
			&lt;tr&gt;&lt;th class="excell"&gt;2&lt;/th&gt;&lt;td class="select2"&gt;3&lt;/td&gt;&lt;td class="select2"&gt;Mallory&lt;/td&gt;&lt;td class="select2"&gt;50&lt;/td&gt;&lt;td&gt;&amp;#160;&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;Bob&lt;/td&gt;&lt;td&gt;120&lt;/td&gt;&lt;td&gt;&amp;#160;&lt;/td&gt;&lt;/tr&gt;
			&lt;tr&gt;&lt;th class="excell"&gt;3&lt;/th&gt;&lt;td class="select2"&gt;1&lt;/td&gt;&lt;td class="select2"&gt;Bob&lt;/td&gt;&lt;td class="select2"&gt;120&lt;/td&gt;&lt;td&gt;&amp;#160;&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;Alice&lt;/td&gt;&lt;td&gt;100&lt;/td&gt;&lt;td&gt;&amp;#160;&lt;/td&gt;&lt;/tr&gt;
			&lt;tr&gt;&lt;th class="excell"&gt;4&lt;/th&gt;&lt;td class="select2"&gt;4&lt;/td&gt;&lt;td class="select2"&gt;Eve&lt;/td&gt;&lt;td class="select2"&gt;10&lt;/td&gt;&lt;td&gt;&amp;#160;&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;Mallory&lt;/td&gt;&lt;td&gt;50&lt;/td&gt;&lt;td&gt;&amp;#160;&lt;/td&gt;&lt;/tr&gt;
			&lt;tr&gt;&lt;th class="excell"&gt;5&lt;/th&gt;&lt;td class="select2"&gt;2&lt;/td&gt;&lt;td class="select2"&gt;Alice&lt;/td&gt;&lt;td class="select2"&gt;100&lt;/td&gt;&lt;td&gt;&amp;#160;&lt;/td&gt;&lt;td class="target1"&gt;4&lt;/td&gt;&lt;td&gt;=&lt;span class="msexcel"&gt;VLOOKUP&lt;/span&gt;(&lt;span class="pointer1"&gt;E5&lt;/span&gt;;&lt;span class="select2"&gt;A$2:C$5&lt;/span&gt;;2;FALSE)&lt;/td&gt;&lt;td&gt;=&lt;span class="msexcel"&gt;VLOOKUP&lt;/span&gt;(&lt;span class="pointer1"&gt;E5&lt;/span&gt;;&lt;span class="select2"&gt;A$2:C$5&lt;/span&gt;;3;FALSE)&lt;/td&gt;&lt;td&gt;&amp;#160;&lt;/td&gt;&lt;/tr&gt;
			&lt;/table&gt;&lt;p&gt;That's it!&lt;/p&gt;&lt;p&gt;Now, if score is updated in column C, the sorted list to the right will automatically update. Especially convenient if you want to sort the same data in different ways.&lt;/p&gt;&lt;p&gt;Read more and discuss this page &lt;a href="http://www.rictin.com/excel-sorting"&gt;here&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>JavaScript: RegExp Find</title><link>http://www.rictin.com/user-javascript-regexp-find</link><guid>http://www.rictin.com/user-javascript-regexp-find</guid><description>Find matches of regular expression patterns in web pages.</description><pubDate>Sat, 13 Dec 2008 10:51 +0000</pubDate><content:encoded>&lt;p&gt;This script is exactly what its name suggests: RegExp Find.&lt;/p&gt;&lt;p&gt;Works much like regular find in browsers, but is JavaScript and supports regular expressions.&lt;/p&gt;&lt;p&gt;Bookmarklet: &lt;a href="http://www.rictin.com/javascript:(function(){function%20a(a){a||(a=document.getElementsByTagName(%22body%22)[0]),this.rootNode=a,this.hits=0,this.selected=0,this.selection=[],this.build()}function%20b(){confirm(c.msg())%26%261%3Cc.hits%26%26(c.next(),setTimeout(b,0))}var%20c=null,e=%22rhtregexpfind%22;a.prototype.clr=function(){if(0!=this.hits){var%20a,b=[],d=0;for(a=0;a%3Cthis.hits;a++){var%20e;for(e=0;e%3Cthis.selection[a].nodes.length;e++)b[d++]=this.selection[a].nodes[e]}for(a=0;a%3Cd;a++){var%20f=b[a],g=f.parentNode,h=%22%22,k=f.previousSibling;null!=k%26%263==k.nodeType%26%26(h=k.textContent,g.removeChild(k)),h+=f.childNodes[0].textContent,k=f.nextSibling,null!=k%26%263==k.nodeType%26%26(h+=k.textContent,g.removeChild(k)),g.replaceChild(document.createTextNode(h),f)}this.selected=0,this.selection=[],this.hits=0}},a.prototype.build=function(){function%20a(a){var%20g=a.textContent;(%22\n%22!=g||%22\n%22!=f)%26%26(c[b]=a,d[b]=e.length,++b,e+=g,f=g.charAt(g.length-1))}var%20b=0,c=[],d=[],e=%22%22,f=%22\n%22;(function(a,b){function%20c(a){if(a){if(1==a.nodeType){if(%22TEXTAREA%22==a.tagName||%22SCRIPT%22==a.tagName||%22STYLE%22==a.tagName)return;}else%20if(3!=a.nodeType)return;3==a.nodeType%26%26b(a);for(var%20d=a.childNodes,e=0;e%3Cd.length;e++)c(d[e])}}c(a)})(this.rootNode,a),this.nodes=c,this.text=e,this.index=d,this.nodec=b},a.prototype.findr=function(a){var%20b;try{b=new%20RegExp(a,%22g%22)}catch(b){return%20void%20alert(a+%22\n\n%22+b)}this.query=a;for(var%20c,d=this.text;null!=(c=b.exec(d));)this.mark(c.index,b.lastIndex),this.selection.length%26%26(this.selection[this.selection.length-1].match=c);if(1%3Ethis.hits)alert(%22Not%20found:%20%22+a);else{this.selection.sort(function(c,a){var%20b=c.y-a.y;if(0==b)for(b=c.from-a.from;1%3C=b||-1%3E=b;)b/=10;return%20b});var%20e,f=this.selection[this.selected].nodes,g=f.length;for(e=0;e%3Cg;e++)f[e].setAttribute(%22style%22,%22background-color:%2300FF00%22)}},a.prototype.find=function(a){for(var%20b=-1,c=this.text;;){var%20d=-1==b%3Fc.indexOf(a):c.indexOf(a,b+a.length);if(-1==d){-1==b%26%26alert(%22Not%20found.%22);break}this.mark(d,d+a.length),b=d}},a.prototype.mark=function(a,b){function%20c(){var%20a=document.createElement(%22span%22);return%20a.setAttribute(%22style%22,%22background-color:%23FFFF00%22),a.className=e,g[f++]=a,a}var%20f=0,g=[],h=this.nodes,j=this.index,k=this.text,l=this.nodec-1,m=this.nodec-1,o=0;for(o=0;o%3Cthis.nodec;o++)if(j[o]%3Ea){l=o-1;break}for(o=l;o%3Cthis.nodec;o++)if(j[o]%3E=b){m=o-1;break}if(l==m){var%20d=document.createTextNode(k.substring(j[l],a)),p=c(),q=b-a;p.appendChild(document.createTextNode(h[l].textContent.substr(a-j[l],q)));var%20r=document.createTextNode(h[l].textContent.substr(a-j[l]+q)),s=h[l].parentNode;s.replaceChild(r,h[l]),s.insertBefore(p,r),s.insertBefore(d,p),h[l]=r,j[l]=b}else{var%20d=document.createTextNode(k.substring(j[l],a)),r=c();r.appendChild(document.createTextNode(h[l].textContent.substr(a-j[l])));var%20s=h[l].parentNode;for(s.replaceChild(r,h[l]),s.insertBefore(d,r),o=l+1;o%3Cm;o++){var%20t=h[o],u=c();u.appendChild(t.cloneNode(!0)),t.parentNode.replaceChild(u,t)}d=c(),r=document.createTextNode(h[m].textContent.substr(b-j[m])),d.appendChild(document.createTextNode(h[m].textContent.substring(0,b-j[m])));var%20s=h[m].parentNode;s.replaceChild(r,h[m]),s.insertBefore(d,r),h[m]=r,j[m]=b}this.nodes=h,this.index=j;var%20n={};n.nodes=g;var%20v=g[0],w=0;do%20w+=v.offsetTop,v=v.offsetParent;while(v);n.y=20%3C=w%3Fw-20:w,n.from=a,n.to=b,0==this.hits%26%26(this.position=w,window.scroll(0,n.y)),this.selection[this.hits++]=n},a.prototype.getSelection=function(){var%20a=this.selection[this.selected];return%20this.text.substring(a.from,a.to)},a.prototype.next=function(){if(!(2%3Ethis.hits)){var%20a=this.selection[this.selected].nodes,b=0;for(b=0;b%3Ca.length;b++)a[b].setAttribute(%22style%22,%22background-color:%23FFFF00%22);for(this.selected%3E=this.selection.length-1%3Fthis.selected=0:this.selected++,a=this.selection[this.selected].nodes,b=0;b%3Ca.length;b++)a[b].setAttribute(%22style%22,%22background-color:%2300FF00%22);window.scroll(0,this.selection[this.selected].y)}},a.prototype.msg=function(){var%20a=this.selection[this.selected].match,b=a[0]+%22\n%22;b+=1%3Ca.length%3F%22\n%22:%22%22;for(var%20c=1;c%3Ca.length;c++)b+=%22%20\u2022%20group%20%22+c+%22:%20%22+a[c]+%22\n%22;return%20b+=%22\nMatch%20%22+(this.selected+1)+%22%20of%20%22+this.hits+%22\n%22,b+=%22Expression:%20%22+this.query,b};for(var%20f=document.getElementsByClassName(e),g=0;g%3Cf.length;g++)f[g].removeAttribute(%22style%22);var%20d=prompt(%22RegExp%20Find:%22);null==d||%22%22==d||(null==c%3Fc=new%20a:(c.clr(),c.build()),c.findr(d),c.hits%26%26setTimeout(b,0))})();"&gt;Regex find&lt;/a&gt; (Drag to your bookmarks/toolbar)&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Was previously a Greasemonkey/user &lt;a href="http://data.rictin.com/files/regexp-find.user.js"&gt;script&lt;/a&gt;; &lt;del&gt;One can press (default) Ctrl + Shift + F to Find, Ctrl + Shift + N jumps to the Next match. 
			Tested in Firefox and Opera.&lt;/del&gt;&lt;/p&gt;&lt;del&gt;&lt;p&gt;Related, but different: &lt;a href="http://www.ibm.com/developerworks/opensource/library/os-customsearch-firefox/index.html"&gt;Beef up the Find command in Firefox&lt;/a&gt; - "Greasemonkey script to highlight search entries relative to nearby content."&lt;/p&gt;&lt;/del&gt;&lt;p&gt;Resources: &lt;a href="https://chriszarate.github.io/bookmarkleter/"&gt;Bookmarkleter&lt;/a&gt;&lt;/p&gt;</content:encoded></item><item><title>User JavaScript: Direct-Link</title><link>http://www.rictin.com/user-javascript-direct-link</link><guid>http://www.rictin.com/user-javascript-direct-link</guid><description>This Greasemonkey script creates links to in-URL URIs. For example, if a link points to www.foo.com?u=bar.com, a link to bar.com is created.</description><pubDate>Wed, 17 Oct 2007 08:38 +0000</pubDate><content:encoded>&lt;p&gt;This Greasemonkey script finds URIs in links on web pages and creates a direct link to them.&lt;/p&gt;&lt;p&gt;For example, if a page has a link to http://site1.com?u=site2.com, a link that has caption ^ and points to http://site2.com/ is created next to the original link.&lt;/p&gt;&lt;p&gt;&lt;a href="http://data.rictin.com/files/direct-link.user.js"&gt;Script file&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Version 0.22+:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Small syntactic improvements to URL regexp.&lt;/li&gt;&lt;li&gt;Better readability of URL regexp.&lt;/li&gt;&lt;li&gt;Handles Base64 encoded URIs.&lt;/li&gt;&lt;li&gt;Recursive check of in-URL URLs.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;You can discuss this script over at &lt;a href="http://userscripts.org/scripts/show/13079"&gt;userscripts.org&lt;/a&gt;.&lt;/p&gt;</content:encoded></item></channel></rss>