För att slippa skriva in lösenord varje gång man loggar in på en dator via SSH så kan man använda en publik nyckel för att autentisera användaren.
Skapa först upp publik och privat nyckel:
$ ssh-keygen -t dsa
Följ instruktionerna och välj ett lösenord som skiljer sig från användarens lösenord
Den publika nyckeln hamnar här: /home/[user]/.ssh/id_dsa.pub
Den private nyckeln hamnar här: /home/[user]/.ssh/id_dsa
Flytta den publika nyckeln till den dator du vill logga in på:
$ scp ~/.ssh/id_dsa.pub [user]@[server]:.ssh/authorized_keys
Nu kan du logga in på den andra datorn utan att kunna lösenordet för kontot där
$ ssh [user]@[server]
$ scp [file] [user]@[server]:/[dir]
Dock måste du skriva in lösenordet till nyckelfilen varje gång.
För att slippa skriva in det lösenordet varje gång så skriver man:
$ exec /usr/bin/ssh-agent $SHELL
$ ssh-add
Klart! Nu kan du logga in utan att skriva några lösenord!
För att ändra lösenordet till nyckelfilen så skriver man:
$ ssh-keygen -f ~/.ssh/id_dsa -p
2012-02-02
Blockera besökare på Blogger/Blogspot
Googles bloggverktyg Blogger/Blogspot har inte någon blockeringsfunktion för enskilda användare. Det är allt eller inget genom inställningen under Inställningar - Basfunktioner - Tillstånd - Bloggläsare. Rättighetern som finns tillgängliga är Alla, Endast bloggskribenter och Enbart de här läsarna. Det fungerar bra för bloggar man vill hålla privata till ett begränsat antal läsare, men fungerar inte alls bra när man vill blockera några få.
Går det att blockera enskilda användare även fast det saknas stöd i Blogger?
Ja, med hjälp av lite javascript och klipp och klistra så löser man det genom att blockera vissa IP-adresser eller host-namn.
Det går hyffsat lätt att ta sig förbi skyddet genom att använda en proxy, men jag tror ändå att ett skydd byggt med javascript hindrar majoriteten av de man vill slippa. En proxy kräver ändå ett antal extrasteg och ofta att man betalar för tjänsten.
Hur gör man?
Jag har hämtat inspiration från följande sidor:
http://www.javascriptkit.com/script/script2/blockip.shtml
http://stackoverflow.com/questions/102605/can-i-lookup-the-ip-address-of-a-hostname-from-javascript
Gå till Blogger (kontrollpanelen för bloggarna på Blogspot) och klicka på din blogg.
Gå till menyvalet Layout och klicka på "Lägg till Gadget".
Rulla ner till "HTML/JavaScript" och tryck på +-knappen för att lägga till den.
Skriv ingen titel utan klistra endast in följande i rutan för Innehåll:
http://pastie.org/3301106 (Klicka på länken och hämta koden från Pastie)
Ändra följande rad och fyll i de IP-adresser du vill blockera (exempel på 2 olika adresser):
var bannedIps=["23.23.23.23", "11.11.11"]
Skriptet matchar början på en IP-adress så för att blockera alla IP-adresser som börjar med 23.23.23 skriver du följande:
var bannedIps=["23.23.23"]
Det går även att matcha hostname om du kör din egen tjänst för att slå upp IP-adresser och hostname. Blockera hostname genom att ändra följande rad:
var bannedHosts=["host1.se", "host2.se"];
Tryck slutligen på Spara
Det läggs nu till en gadget som heter "HTML/Javascript" och kommer skicka alla besökare med de inmatade IP-adresserna till http://www.google.com
Om du vill ändra adress till var de skickas så ändrar du adressen i följande rad:
window.location.replace("http://www.google.com");
Vad gör skriptet?
Den börjar med att se till att det garanterat finns en funktion för att hämta ut alla element via ett klassnamn. Vissa webbläsare har inte metoden getElementsByClassName.
Sedan kommer själva blockeringsfunktionen som matchar en lista med blockerade IP-adresser mot den IP-adress som skickades till funktionen. Om den får en träff så döljer den alla div:ar som har klassen "content" och skickar sedan vidare användaren till http://www.google.com
Därefter kommer en callback-funktion som används för att ta emot svaret från tjänsten som tar fram IP-adressen. Svaret är i json så den tar ut IP-adressen ur svaret och skickar den vidare till blockeringsfunktionen.
Allra sist kommer anropet till tjänsten som kollar upp IP-adressen på besökaren och genom att ange en callback-parameter så triggar den min callback-funktion som slutligen triggar blockeringsfunktionen.
Kända problem
Tjänsten för att kolla upp IP-adresser och sedan anropa min callback-funktion blir lätt överbelastad eftersom många använder den. Det som händer är att tjänsten ligger på Google App Engine och utvecklaren kör bara gratisvarianten vilket bara tillåter ett visst antal requester per dygn. När det inträffar så kommer blockeringsfunktionen att sluta fungera tills tjänsten får ny quota.
Min lösning på det är att tillhandahålla min egen tjänst skriven i PHP. Den är inte publik och om jag släpper URL:en dit så riskerar den att bli överbelastad. Det är enkelt att skapa det själv med följande PHP-kod:
http://pastie.org/3301306 (Klicka på länken och hämta koden från Pastie)
PHP-skriptet skickar först ut headers som anger att det är en response i JSON och att inget ska cachas. Sedan plockar det ut IP-adress, hostname och eventuell callback-parameter och skriver ut det i JSON-format. Om en callback-parameter är angiven så läggs JSON-svaret som ett argument till angiven funktion. Det gör att när man bäddar in skriptet i en webbsida så kommer den automatiskt anropa callback-funktionen.
Går det att blockera enskilda användare även fast det saknas stöd i Blogger?
Ja, med hjälp av lite javascript och klipp och klistra så löser man det genom att blockera vissa IP-adresser eller host-namn.
Det går hyffsat lätt att ta sig förbi skyddet genom att använda en proxy, men jag tror ändå att ett skydd byggt med javascript hindrar majoriteten av de man vill slippa. En proxy kräver ändå ett antal extrasteg och ofta att man betalar för tjänsten.
Hur gör man?
Jag har hämtat inspiration från följande sidor:
http://www.javascriptkit.com/script/script2/blockip.shtml
http://stackoverflow.com/questions/102605/can-i-lookup-the-ip-address-of-a-hostname-from-javascript
Gå till Blogger (kontrollpanelen för bloggarna på Blogspot) och klicka på din blogg.
Gå till menyvalet Layout och klicka på "Lägg till Gadget".
Rulla ner till "HTML/JavaScript" och tryck på +-knappen för att lägga till den.
Skriv ingen titel utan klistra endast in följande i rutan för Innehåll:
http://pastie.org/3301106 (Klicka på länken och hämta koden från Pastie)
Ändra följande rad och fyll i de IP-adresser du vill blockera (exempel på 2 olika adresser):
var bannedIps=["23.23.23.23", "11.11.11"]
Skriptet matchar början på en IP-adress så för att blockera alla IP-adresser som börjar med 23.23.23 skriver du följande:
var bannedIps=["23.23.23"]
Det går även att matcha hostname om du kör din egen tjänst för att slå upp IP-adresser och hostname. Blockera hostname genom att ändra följande rad:
var bannedHosts=["host1.se", "host2.se"];
Tryck slutligen på Spara
Det läggs nu till en gadget som heter "HTML/Javascript" och kommer skicka alla besökare med de inmatade IP-adresserna till http://www.google.com
Om du vill ändra adress till var de skickas så ändrar du adressen i följande rad:
window.location.replace("http://www.google.com");
Vad gör skriptet?
Den börjar med att se till att det garanterat finns en funktion för att hämta ut alla element via ett klassnamn. Vissa webbläsare har inte metoden getElementsByClassName.
Sedan kommer själva blockeringsfunktionen som matchar en lista med blockerade IP-adresser mot den IP-adress som skickades till funktionen. Om den får en träff så döljer den alla div:ar som har klassen "content" och skickar sedan vidare användaren till http://www.google.com
Därefter kommer en callback-funktion som används för att ta emot svaret från tjänsten som tar fram IP-adressen. Svaret är i json så den tar ut IP-adressen ur svaret och skickar den vidare till blockeringsfunktionen.
Allra sist kommer anropet till tjänsten som kollar upp IP-adressen på besökaren och genom att ange en callback-parameter så triggar den min callback-funktion som slutligen triggar blockeringsfunktionen.
Kända problem
Tjänsten för att kolla upp IP-adresser och sedan anropa min callback-funktion blir lätt överbelastad eftersom många använder den. Det som händer är att tjänsten ligger på Google App Engine och utvecklaren kör bara gratisvarianten vilket bara tillåter ett visst antal requester per dygn. När det inträffar så kommer blockeringsfunktionen att sluta fungera tills tjänsten får ny quota.
Min lösning på det är att tillhandahålla min egen tjänst skriven i PHP. Den är inte publik och om jag släpper URL:en dit så riskerar den att bli överbelastad. Det är enkelt att skapa det själv med följande PHP-kod:
http://pastie.org/3301306 (Klicka på länken och hämta koden från Pastie)
PHP-skriptet skickar först ut headers som anger att det är en response i JSON och att inget ska cachas. Sedan plockar det ut IP-adress, hostname och eventuell callback-parameter och skriver ut det i JSON-format. Om en callback-parameter är angiven så läggs JSON-svaret som ett argument till angiven funktion. Det gör att när man bäddar in skriptet i en webbsida så kommer den automatiskt anropa callback-funktionen.
2012-01-23
Portable Apps
Portable Apps
Keep your favorite apps with you at all times and run them from any computer without the need to install them.
Setup TrueCrypt volume
- Download and install Truecrypt: http://www.truecrypt.org/
- Choose Extract mode
- Select the USB drive as location.
- Start TrueCrypt.exe
- Press Create Volume and choose (use default values when you don't know what to choose):
- Create an encrypted file container
- Standard TrueCrypt volume
- Press Select File... and browse to the USB Drive and choose a name for the volume, for example: truecrypt_volume
- Set Volume Size to wanted size. Save some space for non encrypted files. Also consider the time it will take to move the volume between disks when you do backups
- Choose Yes for Large file storage
- Format the volume
- Create Traveler Disk Setup
- Choose Tools->Traveler Disk Setup
- Create traveler disk files in the root of the USB Drive
- Do not include TrueCrypt Volume Creation Wizard unless you need to create new volumes on the go
- In Autorun Configuration upon insertion of traveler disk "Auto-mount TrueCrype volume"
- In Mount Settings choose a suitable drive letter
- Mount the volume and continue with the setup for Portable Apps
Setup Portable Apps
- Download Portable Apps: http://portableapps.com/download
- Install Portable Apps on the mounted volume
- Start Portable Apps from the mounted volume (it should autostart)
- Press Manage Apps and choose the apps to install
Recommended appsDevelopment: Database Browser, Notepad++Graphics and pictures: GIMP, Inkscape, BlenderInternet: Chrome, Firefox, Filezilla, Pidgin, Skype, uTorrent, , PuTTY, WinSCPMusic and video: VLCSecurity: KeePassUtilities: 7-Zip, TeamViewer, WinMerge
Mount encrypted volume in computer to prevent latency
A USB Drive often has a lower data rate than the hard drive so you might experience some latency running apps from the USB Drive. A way to prevent latency but still get the benefits of Portable Apps is to move the encrypted volume with Portable Apps to the computer and mount it directly from a folder.
Benefits
- Decrease latency
- Backup of your encrypted volume
Drawbacks
- When you update Portable Apps with new apps or change settings in your current apps you need to move back the changed volume and update all local copies. It is just an easy copy-paste operation, but easy to forget.
2012-01-12
HTML5, apputveckling och programmering
Jag började skriva ett inlägg på Swedroid om HTML5 och apputveckling, men det svävade iväg och blev mer allmänna funderingar och åsikter kring programmering och systemutveckling, så det passade bättre här.
HTML5 ska man absolut satsa på och är ett naturligt steg när det gäller webbutveckling och kanske enklare apputveckling. När väl stödet från webbläsarna blir tillräckligt stort så kommer det bli riktigt användbart för att slippa skapa så många klienter. Det ständiga sorgebarnet Internet Explorer håller tillbaks takten. Inte ens IE9 har tillräckligt stort stöd för HTML5. Vad kommer i version 10? Förhoppningsvis gör de en stor satsning på HTML5 och kommer ikapp sina konkurrenter på det området i alla fall.
Jämförelse mellan olika webbläsares stöd av HTML5.
Det kommer dock aldrig ta bort behovet av att man kan programmera på "riktigt" också. Sen om koden hamnar i appen eller på servern är en annan fråga. En app består sällan bara av klienten på telefonen. Det tillkommer oftast webbklient i HTML, Javascript + js-ramverk (jQuery, Dojo...) och CSS tillsammans med alla tänkbara tekniker och ramverk både på klient och server (JSP, PHP, Velocity...). Sen kommer själva servern (ofta Java på JBoss, Tomcat... eller varför inte Python på App Engine) och databasen (oftast någon typ av relationsdatabas, men populärt är även olika typer av NoSQL-databaser).
Det är sällan företag bara vill ha en app och inget mer. Försök att kunna leverera hela kedjan så att man förstår alla delar av applikationen och inte begränsar sig till bara appen på klienten. Det betyder inte att man alltid ska leverera hela kedjan, men förståelsen skapar bättre produkter.
Grundläggande tekniker för mig när jag arbetar, som jag använder så gott som varje dag och som jag tycker är bra att behärska något så när i alla fall eftersom man stöter på dem hela tiden:
-HTML4 och 5, Javascript + jQuery, CSS, JSON
-Java (SE + EE), webservices (soap och rest), servlets
-SQL och design av relationsdatabaser
Kul och användbara tekniker jag tycker man bör kolla upp så man har vet på vad det handlar om:
-Git och SVN (subversion) - det finns säkert många företag som kör Clearcase, Mercurial och annat men med Git och SVN så får man koll på hur de flesta versionshanteringssystem fungerar
-Enhetstestning och mockramverk - jUnit + Mockito underlättar massor när man gör enhetstester
-Continuous build and integration - Jenkins
-NoSQL
-App Engine
2012-01-11
Uppgradera Nexus S till ICS (Android 4.0.3)
Nu tröttnade jag på att vänta på en OTA-uppdatering och gjorde ett försök att lägga på ICS, dvs. Android 4.0.3. Värt att nämna är att jag köpte min Nexus S i USA, men jag tror inte att något är annorlunda med den svenska varianten.
- Gör en backup av sånt du vill ha kvar + en kopia på hela SD-kortet/USB Storage
- Om du har 2-stegsverifiering kan det vara smart att stänga av det. Jag fick använda en av mina utskriva backupkoder för att komma in i telefonen efter uppgraderingen.
- Gör sedan en factory reset. Annars kommer mycket att strula vid uppstart av ICS. Jag gjorde en total factory reset med tömning av USB Storage efter att jag uppgraderat, men bättre att göra det innan så slipper ni allt strul.
- Ladda hem OTA-paketet från Google: länk (Det är version 4.0.3, 128 MB)
- Döp om filen till update.zip för enkelhetens skull
- Koppla telefonen till din dator och slå på USB storage
- Flytta update.zip till telefonen
- Slå av USB storage och stäng av telefonen helt (power off)
- Håll in Volym upp-knappen och slå på den igen
- Använd volym-knapparna och markera "recovery", gör valet med Power-knappen, nu startar telefonen om igen
- När varningstriangeln och Androiden dyker upp så håller du in Power-knappen och trycker Volym upp
- I menyn som dyker upp väljer du "apply update from /sdcard" med volym-knapparna och trycker på Power-knappen
- Välj update.zip från listan med filer och tryck återigen på Power-knappen
- Vänta och hoppas på det bästa....
- Klart! Det tog 3 minuter.
- Välj "reboot system now" och tryck på Power-knappen.
- Vänta på att rebooten ska bli klar...ny häftig boot-animation...flera upgrade-steg...som nog tog uppåt 10 minuter
- Klart!
De flesta av mina gamla appar återinstallerades. Så jag fick börja med att göra en storstädning av vad jag hade installerat. Funktionaliteten i en del gamla appar är numera inbyggd i operativsystemet så de behövs inte längre. Sen ville jag få en fräsch start så jag avinstallerade allt som jag inte använt på ett par veckor.
Första intrycket av Ice Cream Sandwich är att det känns väldigt fräscht och fungerar bra. Det kommer nog att ta några dagar innan jag vant mig vid de funktioner som flyttats runt, men allt känns välgjort och genomtänkt.
Browser to Android phone
Open links on your Android device from the browser. If any text is selected in the browser it will be copied to the Android clipboard.
- Install the browser extension/addon
- Install "Chrome to Phone" on your Android device
- Start the app on your phone to set it up
- Click the icon in your browser to set it up
- Done! It is ready to be used.
Notes:
- Android 2.2 (Froyo) or later required
2012-01-03
Prenumerera på:
Inlägg (Atom)