Habaritag:broken8.se,2012-05-06:atom/936337aa4d6e80d403ef1eac04825c93b60240f2Broken8Life goes fast, use a safety belt2010-12-07T00:00:53+01:00IoSand - The new themeJohan Stenehallhttp://broken8.setag:broken8.se,2010:iosand/12839767462010-12-07T00:00:53+01:002011-05-25T22:24:32+02:002010-11-08T21:12:26+01:00<p>Ok, this is the final time I remake this sites theme.</p> <p>At least this year. I really should be writing some content instead of remaking themes that's never used.</p>Autocomplete from any folder using <code>CDPATH</code>Johan Stenehallhttp://broken8.setag:broken8.se,2010:autocomple-from-any-folde/12893428602010-11-10T23:56:00+01:002011-07-07T22:23:57+02:002010-11-10T23:56:00+01:00<p>What I wanted was to quickly be able to navigate to any project in my <code>~/Sites</code> folder from within the terminal, preferably with autocomplete. The solution was a combination of three things. First I needed to add <code>~/Sites</code> to the <code>CDPATH</code> variable. Then I needed to install some kind of package managing system for OS X, I went with <a href="http://mxcl.github.com/homebrew/">Homebrew</a>. Homebrew let me intall bash-completion.</p> <!--more--> <h2>The magic of <code>CDPATH</code></h2> <p>Bashs man page describes what the <code>CDPATH</code> variable does.</p> <blockquote>The search path for the cd command. This is a colon-separated list of directories in which the shell looks for destination directories specified by the cd command. A sample value is ".:~:/usr".</blockquote> <p>This means that if we add our <code>~/Sites</code> folder to <code>CDPATH</code> we will be able to just type <code>cd project-name</code> instead of <code>cd ~/project-name</code>. OS X uses ~/.bash_profile to load predefined variables and function so this is where we'll add our <code>CDPATH</code> modifications.</p> <p>The code below will add your <code>~/Sites</code> to <code>CDPATH</code> keeping any other changes you might have done with it. After this you should be able to <code>cd project-name</code> from a terminal (remember that you'll need to restart terminal or do an export on the <code>CDPATH</code> changes before it will start working).</p> <p>Use your favorite code editor to open <code>~/.bash_profile</code> and add the following.</p> <pre class="prettyprint"><code>CDPATH=$CDPATH:~/Sites/</code></pre> <h2>bash-completion gives you back tab completion.</h2> <p>This is great! Now I just need to type the project name to go to it. But I'm actually even more lazy, I want tab completion as well. Enter bash-completion. Sadly bash-completion isn't installed by default to OS X (at least not my install of OS X 10.6). To install this we need some kind of ports system. I decided that this would be a great time to try out the new solution called <a href="http://mxcl.github.com/homebrew/">Homebrew</a>. From what I'd read about it it was supposed to be simpler than the alternatives <a href="http://www.finkproject.org/">Fink</a> and <a href="http://www.macports.org/">MacPorts</a>.</p> <h2>Homebrew, a great ports solution</h2> <p>Installing homebrew was extremely simple and I was up and running fast. Sadly homebrew have some requirements that might take you longer to get working (no exception for homebrew, the same goes for Fink as well as MacPorts). But instead of me copy/pasting the <a href="https://github.com/mxcl/homebrew/wiki/installation">homebrew installation instructions</a> just read them from homebrews page.</p> <p>Once you have Homebrew up and running installing bash-completion is as simple as</p> <pre class="prettyprint"><code>brew install bash-completion</code></pre> <p>The bash-completion installer wanted me to add a couple of lines to my <code>.bash_profile</code> file.</p> <pre class="prettyprint expand"><code>if [ -f `brew --prefix`/etc/bash_completion ]; then . `brew --prefix`/etc/bash_completion fi</code></pre> <h2>Credits and Disclaimers</h2> <p>I toke most of this information from either <a href="http://archive.robwilkerson.org/2009/01/14/tab-completion-for-cdpath-on-mac/index.html">Rob Wilkerson » Tab Completion for CDPATH on Mac</a> or <a href="http://mxcl.github.com/homebrew/">Homebrew — MacPorts driving you to drink? Try Homebrew!</a>. Thanks for an excellent post Rob and a great app Max!</p> <p>As always when it comes to playing with your toys. Everything is at your own risk, if you break something it's your fault not mine.</p>jQuery Show PasswordsJohan Stenehallhttp://broken8.setag:broken8.se,2010:jquery-show-passwords/12838083792010-09-06T23:26:19+02:002011-07-07T22:24:47+02:002010-09-06T23:26:19+02:00<p>A discussion with a friend over skype made me remember a podcast I listened to a while ago. In the podcast they talked about how stupid it is to not show password fields and how hard it makes it for people. With a simple checkbox "toggle stars" you could make it all so much simpler. So the idea to this plugin is in no way my own, sadly I cant remember where I heard the talk so I cant give creds to the right person.<!--read-more-link--></p> <h2>Simple idea, simple execution</h2> <p>It's a very simple idea, if the user have javascript enabled add a checkbox that will toggle the stars (*) and clear text. Include the javascript along with jQuery and than just run the function. All done!</p> <p><a href="http://github.com/stenehall/jQuery.showpasswords/zipball/master">Download showpasswords</a>, unzip and upload it you your homepage. Add this code, don't forget to modify the src to point to the showpasswords folder. If you already include jQuery just don't add that line.</p> <pre class="prettyprint expand"><code><script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script> <script type="text/javascript" src="/jQuery.showpasswords/jquery.showpasswords.js"></script></code></pre> <p>Almost done. Now all you have to do is execute the plugin. It takes three arguments, label, clearOnFocus and prefix. You might want to change label but prefix and clearOnFocus should be fine as it is.</p> <pre class="prettyprint expand"><code>jQuery(document).ready(function() { jQuery.showpasswords({'prefix': 'clear-', 'label': 'Toggle'}); });</code></pre> <h2>Demo and Download</h2> <p>For a demonstration and download of <a href="http://stenehall.github.com/jQuery.showpasswords/">showplugin head over to it's github page</a></p> Optimering av laddningstiden för broken8.seJohan Stenehallhttp://broken8.setag:broken8.se,2010:optimering-av-laddningstiden-for-broken8se/12829395872010-08-27T23:31:37+02:002011-02-09T23:09:54+01:002010-08-27T23:31:37+02:00<p>Laddningstiden för <a href="http://broken8.se">broken8.se</a> var inte dåligt ens innan jag optimerade den. Det betyder dock inte att sidan kan förtjäna lite optimering, eller att det kan vara roligt att försöka trimma laddningsiden.<!--read-more-link--></p> <h2>Kombinera och minimera javascript och css filer.</h2> <p>Det första steget i optimeringen var att kombinera alla javascript filer till en fil samt att se till att den hamnar i slutet av sidan istället för i <code><head></code>. Yahoo! skriver i sin artikel <a href="http://developer.yahoo.com/performance/rules.html#num_http">Best Practices for Speeding Up Your Web Site</a> att en viktig del av optimeringen är att kombinera filer. Att samtidigt minimera filerna sparar ännu mer tid.</p> <p>Men att ha all sin javascript kod i samma fil gör det jobbigare att arbeta och om man dessutom vill ha koden minimerad blir det ohållbart. Därför har ett antal olika lösningar för att kombinera och minifiera filer "on the fly" dykt upp. Min favoritlösning är <a href="http://code.google.com/p/minify/">minify</a>. Minify kan kombinera javascript och css filer samt minimera javascript, css och html. För att göra det ännu enklare för mig skrev jag ihop ett litet plugin för <a href="http://habariproject.org">Habari</a> som tar bort alla javascript och css filer som lagts till kör dem igenom minify och sedan sparar ut dem som minifierade filer.</p> <h2><a href="https://trac.habariproject.org/habari-extras/browser/plugins/minification/trunk">Minification.</a></h2> <p><a href="https://trac.habariproject.org/habari-extras/browser/plugins/minification/trunk">Minification</a> kombinerar och minifierar javascript, css och html. Genom att samtidigt se till att javascript laddas in sist på sidan upplevs laddningen ännu snabbare. En sida som är bra konstruerad behöver inte javascript för att fungera och det är därför helt ok att ladda in dessa sist.</p> <h2><a href="https://trac.habariproject.org/habari-extras/browser/plugins/minification/trunk">Imagesprites och jpeg kvalité</a></h2> <p>Yahoo! föreslår även att man ska optimera sin bilder. Det finns två sätt att förbättra laddningstiden, kombinera flera bilder i en större bild samt att ta ner kvalitén på bilderna och ta bort onödig information i dem. Då broken8.se enbart använder två bilder och dessa av väldigt olika typ kändes det inte vettigt att kombinera dessa. Istället riktade jag in mig på att ta ner kvalitén på bakgrundsbilden och det rejält. Den ursprungliga bilden var en jpeg bild som vägde 569 KB och det var på tok för mycket. Genom att försämra kvalitén från 100 till 40 gick filstorleken ner till 49 KB. Elva gånger mindre än den ursprungliga filen! Ok, att försämra kvalitén på bakgrunden så mycket resulterade i en bild med ganska tydliga jpeg artifakter, det är mycket möjligt att jag i framtiden förbättrar kvalitén något.</p> <h2>Tänk inte enbart på den faktiskt laddningstiden.</h2> <p>Även om den faktiskt laddningstiden kan snabbas upp när man kombinerar filer betyder det inte alltid att sidan upplevs snabbare. Att till exempel använda base64 encoding för att inkludera bilder i cssfilen resulterar i en större css fil. Det här innebär att man sparar in en eller kanske ett par förfrågningar men får istället en uppsjö negativa konsekvenser. <a href="http://www.nczonline.net/blog/2010/07/06/data-uris-make-css-sprites-obsolete/">Data URIs make CSS sprites obsolete</a> tar upp fördelarna med base64 lösningen men ett antal nackdelar diskuteras även i kommentarerna.</p> <h2>Nackdelar med base64 bilder - som jag ser det.</h2> <ul> <li>CSS filens storlek ökar, cssfilen behövs för att kunna visa sidan och ju längre tid det tar för den att ladda desto längre tid tar det innan sidan börjar visas.</li> <li>I CSS:en deklarerar man alla bilder som siten behöver. Det betyder dock inte att alla dessa bilder används på varje sida. Om en bild inte behövs på en sida kommer den heller inte att laddas. Det betyder att om du vet att visa bilder enbart kommer att användas på em speciell sida kan du ha en separat image sprite för den sidan. På så sätt kan man spara in många KB för en normal användare och ända kostnaden blir en extra bildinladdning.</li> <li>I Sverige är vi bortskämda med snabbt internet, snabba datorer och stora skärmar men det betyder inte att alla har dessa förmåner. Det finns många situationer där man inte kan eller vill visa grafik. Om man inkluderar bilderna i CSS:en tvingar man användaren att ladda dem. Min åsikt är att en eller två extra filladningar är bättre än att tvinga användaren att ladda allt.</li> </ul> <h2>Resultatet</h2> <p><a href="http://broken8.se/user/sites/broken8.se/files/loadingtimeimprovments.jpg" rel="lightbox" class="img"><img alt="Resultat av optimering" src="http://broken8.se/user/sites/broken8.se/files/loadingtimeimprovments_small.jpg"></a></p> Privat­kopierings­skatten betalar för pirat­kopieringen?Johan Stenehallhttp://broken8.setag:www.eighty4.se,2009:privatkopieringsskatten-betalar-for-piratkopieringen/12484859412010-05-05T22:48:23+02:002011-02-09T22:25:24+01:002010-05-05T22:48:23+02:00<p>I skuggan av FRA och IPRED debatten har jag funderat kring skatten på lagringsmedia som faktiskt finns i sverige, 54% i extra privatkopieringsskatt betalar vi till exempel på tomma dvd skivor (<a href="http://www.idg.se/2.1085/1.131367">http://www.idg.se/2.1085/1.131367</a>). Denna skatt går via Copyswede vidare till upphovsmännen vars upphovsrättsskyddade material jag just kopierat på min nyköpta dvd skiva. Om jag förstått <a href="https://lagen.nu/1960:729">1960:729 §12</a> korrekt är det fullt lagligt att göra en kopia av en cd eller dvdskiva för privat bruk. Det finns därför ingen anledning att betala en privatkopieringsskatt av denna anledning. Som jag ser det kvarstår därför enbart den så kallade piratkopieringen. Men om denna privatkopieringsskatt är tänkt att fungera som ersättning för piratkopiering bör väl inte längre piratkopiering ses som något olagligt? Jag betalar ju för mina dvdskivor, alltså betalar jag för en tänkt piratkopiering?</p> <h2>Skänker 100 dvd-skivor!</h2> <p>Jag skänker mer än gärna bort min rätt att piratkopiera 100 dvd-skivor till någon, jag använder dvd-skivorna som backup för alla foton jag tar och förbrukar alltså inte min piratkopieringsrätt.</p>