Kategori Teknik

Sommarpratare 2010

Idag avslöjades årets sommarpratare, eller sommarvärdar som det säkert heter numera.

Jag är barnsligt förtjust i de här programmen, och sen programmet började sändas som podcast har jag inte missat ett enda sommarprat. Kvalitetsskillnaden mellan de olika sommarvärdarna är enorm, och det är förstås en del av tjusningen. På förhand kittlande namn kan visa sig vara urtråkiga 2 timmar i radio och personer som man trodde skulle vara urtråkiga visade sig vara fullständigt trollbindande.

Jag har därför satt ihop en topplista över de namn som jag på förhand tror mest på, högst upp mest intressant och sen i fallande ordning. I höst återkommer jag med hur illa den här listan stämde med verkligheten.

Niklas Rådström – författare
Andres Lokko – skribent, manusförfattare
Per Morberg – programledare, kock, skådespelare
Birgitta Stenberg – författare, konstnär
Nicklas Lundblad – samhällspolitisk rådgivare, Google
Annika Linde – statsepidemiolog, professor
Mats Sundin – f.d. professionell ishockeyspelare
Annika Sörenstam – f.d. professionell golfspelare
Amanda Jenssen – artist, låtskrivare
Tommy Körberg – sångare, artist
Eva Dahlgren – artist, låtskrivare
Meta Velander – skådespelare
Micael Bindefeld – eventarrangör, pr-konsult
Natasha Illum Berg – professionell storviltsjägare, författare
Björn af Kleen – kulturjournalist
Håkan Lans – uppfinnare, ingenjör
Eva Gabrielsson – arkitekt, livskamrat Stieg Larsson
Per Holknekt – modedesigner, entrepenör
Babak Najafi – filmare, regissör
Ulf Danielsson – professor teoretisk fysik
Johanna Koljonen – programledare, filmkritiker
Rolf Ekéus – diplomat
Percy Barnevik – ordförande stiftelsen Hand in Hand International
Claudia Galli – skådespelare
Vanna Rosenberg – skådespelare
Anette Norberg – olympisk mästare curling, avdelningschef
Johan Rabaeus – skådespelare
Karin Johannisson – professor idéhistoria
Tina Jansson – lyssnarnas sommarvärd, lärare
Micael Dahlén – professor företagsekonomi
Lennart Jirlow – konstnär
Josephine Bornebusch – skådespelare, komiker
Therese Alshammar – världsmästare i simning
Johannes Anyuru – poet
Ulf Malmros – regissör, manusförfattare
Anna Carrfors Bråkenhielm – rådgivare Silverback
Maria Akraka – företagare, f.d. medeldistanslöpare
Henrik Hjelt – komiker, skådespelare
Anna Odell – konstnär
Staffan Scheja – konsertpianist, professor
Pija Lindenbaum – bilderboksskapare
Viveca Sten – deckarförfattare, chefsjurist
Jill Johnson – sångerska
Elisabeth Åsbrink – journalist, författare
Aris Fioretos – författare, översättare
Christer Sjögren – sångare
Anneli Alhanko – prima ballerina assoluta, hovdansare
Andreas Lundstedt – sångare, artist
Lars Jonsson – konstnär, ornitolog
Nils Landgren – trombonist, orkesterledare
Peter Andersson – skådespelare
Annika Östberg
Lena Olving – vice vd Saab
Ted Harris – teologie doktor, präst
Darin Zanyar – sångare, artist
Monika Fagerholm – författare
Christine Meltzer – programledare, komiker, skådespelare
Pär Johansson – grundare Glada Hudik-teatern

Tablån finns i följande format:
Utskriftsvänlig kylskåpsanpassad tablå
GCal
iCal
XML

Inline SVG och MathML i senaste Firefox, Minefield 3.7a5pre

I senaste firefox-alfan
kan man använda SVG och MathML inline i HTML5-dokument, utan XML-namespace.

Exempel, jag tog den här testkoden.

<!DOCTYPE html>
<math>
<mi>x</mi>
 
<mo>=</mo>
<mfrac>
<mrow>
<mo>&minus;</mo>
<mi>b</mi>
<mo>&PlusMinus;</mo>
<msqrt>
<msup>
 
<mi>b</mi>
<mn>2</mn>
</msup>
<mo>&minus;</mo>
<mn>4</mn>
<mo>&InvisibleTimes;</mo>
<mi>a</mi>
 
<mo>&InvisibleTimes;</mo>
<mi>c</mi>
</msqrt>
</mrow>
<mrow>
<mn>2</mn>
<mo>&InvisibleTimes;</mo>
<mi>a</mi>
 
</mrow>
</mfrac>
</math>
<br/>
<svg height=86 width=90 viewBox='5 9 90 86'>
<path stroke=#F53F0C stroke-width=10 fill=#F5C60C 
   stroke-linejoin=round d='M 10,90 L 90,90 L 50,14 Z'/>
<line stroke=black stroke-width=10 
   stroke-linecap=round x1=50 x2=50 y1=45 y2=75 />
</svg>

och körde den i Minefield 3.7a5pre

Resultat:

De 10 viktigaste applikationerna till Mac OS X

Att konfigurera en ny dator är ett angenämt bestyr. Jag har en ny MacBook Pro hemma (kopplat till att jag slutade på Allers och istället börjar på konsultfirman Epsilon Information Technology i Malmö.) och den måste förstås grundbestyckas med nödvändiga applikationer. Det är ganska mycket som ingår i snöleoparden, dessutom fanns iLife och iWork redan förinstallerade. Jag bestämde mig för att bara lägga in program när jag saknade dem och inte köra in allt jag kom på på en gång. Så det jag har installerat hittills (och som jag tydligen inte kan ”leva” utan) är:

  1. TextMate, min favoriteditor, förutom vim förstås :)
  2. Adium, IM-klient som kombinerar framförallt jabber och MSN i en klient.
  3. Google Chrome, webbläsare som knaprat uppåttjack.
  4. Skype, borde finnas i adium, men inte än i alla fall.
  5. TweetDeck, fulare än Tweetie och andra men den fungerar bra för mig.
  6. Spotify, kan inte leva utan pop, som NoIcE sjöng en gång. (lyssna)
  7. Firefox, bara för att jag är beroende av firebug
  8. VirtualBox, för att köra linux i virtualiserad miljö (gentoo/WordPress/nginx/spawn-fcgi).
  9. Plaxo, synkar adressboken automatiskt, oerhört praktisk tjänst.
  10. Dropbox, online backup, fildelning mellan datorer och fildelning med kontakter, helt fantastiskt

Och det är allt hittills. Jag tror iOrdning och Transmit står på tur.

Tillägg på jonasnordstrom.se

There are 43 plugins used: 30 active plugins and 13 inactive plugins.

Aktiverade tillägg

Akismet 2.3.0  Akismet 2.3.0
» Automattic (url)
Akismet checks your comments against the Akismet web service to see if they look like spam or not. You need an API key to use it. You can review the spam it catches under ”Comments.” To show off your Akismet stats just put <?php akismet_counter(); ?> in your template. See also: WP Stats plugin.

Analytics360 1.2.2  Analytics360 1.2.2
» Crowd Favorite (url)
Allows you to pull Google Analytics and MailChimp data directly into your dashboard, so you can access robust analytics tools without leaving WordPress. Compliments of MailChimp.

Clicky for WordPress 1.1.4  Clicky for WordPress 1.1.4
» Joost de Valk (url)
Integrates Clicky on your blog!

Contact Form 7 2.3  Contact Form 7 2.3
» Takayuki Miyoshi (url)
Just another contact form plugin. Simple but flexible.

FaceBook Share (New) 1.9.2  FaceBook Share (New) 1.9.2
» Appointy.com (url)
Adds a button which allows you to share post and also shows the number of times the post or page has been shared through out the Facebook just like tweetmeme button does for twitter.

FD Feedburner Plugin 1.42  FD Feedburner Plugin 1.42
» John Watson (url)
Redirects all feeds to a Feedburner feed

Fix Image Margins 1.0.2  Fix Image Margins 1.0.2
» Justin Adie (url)
removes the arbitrary 10px margin from the new caption based images

Flickr Gallery 1.4.0  Flickr Gallery 1.4.0
» Dan Coulter (url)
Use easy shortcodes to insert Flickr galleries and photos (and videos) in your blog.

flickrRSS 5.1  flickrRSS 5.1
» Dave Kellam and Stefano Verna (url)
Allows you to integrate the photos from a flickr rss feed into your site.

FollowMe 2.0.4  FollowMe 2.0.4
» WPburn.com (url)
WP FollowMe is a wordpress plugin that allow you to add a twitter Follow me badge on your wordpress blog.

Google Analyticator 6.1.1  Google Analyticator 6.1.1
» Ronald Heft (url)
Adds the necessary JavaScript code to enable Google’s Analytics. After enabling this plugin visit the settings page and enter your Google Analytics’ UID and enable logging.

Google Friend Connect Integration 0.9.7.4  Google Friend Connect Integration 0.9.7.4
» Social Mind (url)
Easily integrate Google Friend Connect with Wordpress. To get started, please enter your Google Friend Connect Site Id number in the GFC Integration admin page and choose whether to turn on the social bar or not. You can add Google Friend Connect gadgets to your sidebars by visiting the widgets page. For help and support see the official Google Friend Connect integration for WordPress page.

Google XML Sitemaps 3.2.4  Google XML Sitemaps 3.2.4
» Arne Brachhold (url)
This plugin will generate a special XML sitemap which will help search engines like Google, Yahoo, Bing and Ask.com to better index your blog.

HeadSpace2 3.6.33  HeadSpace2 3.6.33
» John Godley (url)
Meta-data manager on steroids, allowing complete control over all SEO needs such as keywords/tags, titles, description, stylesheets, and many many other goodies.

Inline Google Docs 0.9  Inline Google Docs 0.9
» Lim Jiunn Haur (url)
Inline Google Docs allows the user to display contents of his google documents in his pages/posts, using shortcode for markup. Requires PHP 5, Prototype, and jQuery.

IntenseDebate 2.8  IntenseDebate 2.8
» IntenseDebate & Automattic (url)
IntenseDebate Comments enhance and encourage conversation on your blog or website. Full comment and account data sync between IntenseDebate and WordPress ensures that you will always have your comments. Custom integration with your WordPress admin panel makes moderation a piece of cake. Comment threading, reply-by-email, user accounts and reputations, comment voting, along with Twitter and friendfeed integrations enrich your readers’ experience and make more of the internet aware of your blog and comments which drives traffic to you! To get started, please activate the plugin and adjust your IntenseDebate settings .

Kill ie6 1.07  Kill ie6 1.07
» Jonk (url)
Adds a warning at the top of each page visible to users that are still using Internet Explorer 6.

Last.fm Recently Played Tracks 1.0.7  Last.fm Recently Played Tracks 1.0.7
» Justin Turner (url)
Last.fm widget that supports customization for showing album art, how many tracks, and username. More customization to come soon! On load, uses jQuery (if JS enabled browser) to decrease page load time, but is still backwards compatible for non JS browsers. Shows track name, artist, and time played. No pesky ”Support us” links.

Recommended Reading: Google Reader Shared 4.0.4  Recommended Reading: Google Reader Shared 4.0.4
» Jacob M Goldman (C. Murray Consulting) (url)
Pulls shared items from your Google Reader account for display in a sidebar widget or within pages or posts. Easily customized with friendly interface. Embed in page or post via shortcode; can always show newest, or start at post publication date!

ServerBuddy 0.1.6  ServerBuddy 0.1.6
» Dustin Bolton (url)
Tests server & hosting configuration to determine problems & compatibility with various WordPress themes and plugins. By PluginBuddy.

Smart Youtube 3.7  Smart Youtube 3.7
» Vladimir Prelovac (url)
Insert YouTube videos in posts, comments and RSS feeds with ease and full customization.

Twitter Tools 2.3.1  Twitter Tools 2.3.1
» Alex King (url)
A complete integration between your WordPress blog and Twitter. Bring your tweets into your blog and pass your blog posts to Twitter. Show your tweets in your sidebar, and post tweets from your WordPress admin.

W3 Total Cache 0.9.1.1  W3 Total Cache 0.9.1.1
» Frederick Townes (url)
The fastest and most complete WordPress performance plugin. Dramatically improve the speed and user experience of your site. Add browser, page, object and database caching as well as minify and content delivery network (CDN) to WordPress.

WordPress Beta Tester 0.93  WordPress Beta Tester 0.93
» Peter Westwood (url)
Allows you to easily upgrade to Beta releases.

WordPress Related Posts 1.2  WordPress Related Posts 1.2
» Denis (url)
Generate a related posts list via tags of WordPress

WP-Infobox 0.7  WP-Infobox 0.7
» Jonas Nordstrom (url)
Add an info box to posts. You can add title, ingress, a bullet list and ”more text”

WP-PluginsUsed 1.50  WP-PluginsUsed 1.50
» Lester 'GaMerZ' Chan (url)
Display WordPress plugins that you currently have (both active and inactive) onto a post/page.

WP-Stats 2.50  WP-Stats 2.50
» Lester 'GaMerZ' Chan (url)
Display your WordPress blog statistics. Ranging from general total statistics, some of my plugins statistics and top 10 statistics.

WP-Syntax 0.9.8  WP-Syntax 0.9.8
» Ryan McGeary (url)
Syntax highlighting using GeSHi supporting a wide range of popular languages. Wrap code blocks with <pre lang="LANGUAGE" line="1"> and </pre> where LANGUAGE is a geshi supported language syntax. The line attribute is optional.

Yo Status 0.1  Yo Status 0.1
» Jonas Nordstrom (url)
Display your yo.se status in sidebar

Inaktiva tillägg

FeedBurner FeedSmith 2.3.1  FeedBurner FeedSmith 2.3.1
» FeedBurner (url)
Originally authored by Steve Smith, this plugin detects all ways to access your original WordPress feeds and redirects them to your FeedBurner feed so you can track every possible subscriber.

Fix Rss Feeds 2.0  Fix Rss Feeds 2.0
» flyaga li (url)
fix wordpress rss feed error ”Error on line 2: The processing instruction target matching ”[xX][mM][lL]” is not allowed.” while you burn wordpress rss feed from http://www.feedburner.com, also fix error ”XML or text declaration not at start of entity” in firefox, and fix error ”XML declaration not at beginning of document” in opera.

Hello Dolly 1.5.1  Hello Dolly 1.5.1
» Matt Mullenweg (url)
This is not just a plugin, it symbolizes the hope and enthusiasm of an entire generation summed up in two words sung most famously by Louis Armstrong: Hello, Dolly. When activated you will randomly see a lyric from Hello, Dolly in the upper right of your admin screen on every page.

MaxBlogPress Ping Optimizer 2.2.5  MaxBlogPress Ping Optimizer 2.2.5
» MaxBlogPress (url)
Saves your wordpress blog from getting tagged as ping spammer by installing this plugin. Adjust your settings here.

RSS Cloud 0.4.1  RSS Cloud 0.4.1
» Joseph Scott (url)
Ping RSS Cloud servers

SharedItems2WP 2.0.4  SharedItems2WP 2.0.4
» Craig Fifield (Google Tutor), Jonas Skovmand, Joakim Jardenberg and Marcus Fridholm (url)
Scheduled automatic posting of Google Reader Shared Items.

Twitter Avatar 1.1  Twitter Avatar 1.1
» BusinessXpand.com (url)
Allows a User to enter their Twitter username when posting a comment on your blog and a link to their Twitter page will appear next to their comment. This plugin will also replace the avatar on the comment with their picture on Twitter.

Twitter Tools - Bit.ly URLs 2.3.1  Twitter Tools - Bit.ly URLs 2.3.1
» Crowd Favorite (url)
Use Bit.ly for URL shortening with Twitter Tools. This plugin relies on Twitter Tools, configure it on the Twitter Tools settings page.

Twitter Tools - Exclude Category 2.3.1  Twitter Tools - Exclude Category 2.3.1
» Crowd Favorite (url)
Exclude posts in certain categories from being tweeted by Twitter Tools. This plugin relies on Twitter Tools, configure it on the Twitter Tools settings page.

Twitter Tools - Hashtags 2.3.1  Twitter Tools - Hashtags 2.3.1
» Crowd Favorite (url)
Set #hashtags for blog post tweets sent by Twitter Tools. This plugin relies on Twitter Tools, configure it on the Twitter Tools settings page.

WP-Referer 1.0  WP-Referer 1.0
» Henry Lu (url)
Add referer to Comments list

WP-Yo-status 0.1  WP-Yo-status 0.1
» Jonas Nordström (url)
Display Yo-status

WUN Usertags 0.4  WUN Usertags 0.4
» Jonas Nordstrom (url)
User tags

Mindpark 100 på Listen to Blogs.com

Mindpark pågår just nu en form av bloggstafett, där ett särdeles begåvat bloggteam beskriver 100 händelser som påverkat mediebranschen. Det publiceras ett blogginlägg om dagen under årets 100 sista dagar.

Efter första veckan skrev Joakim Jardenberg på mindpark så här:

Fler krafter kommer att introduceras efter hand, men jag saknar en sak. Någon med uthållighet och bra ”radioröst” som vill läsa in alla 100 inläggen på Listen To Blogs. Mitt enkla experiment gjorde mig förtjust i formen, men inte i min egen röst ;) och att varje författare ska göra det själv blir för svåradministrerat.

Min sambo Malin nappade på den förfrågan, det gjorde även David Hall. Malin och David har turats om att läsa in inläggen, jag har hjälpt Malin med uppladdning och taggning och småsaker i den stilen. David föreslog ett inläggningsschema som vi la upp på Google Docs. Det har fungerat utmärkt även om det kanske släpat efter några dagar ibland. Än ska vi inte ropa hej, det är mer än hälften kvar.

Du kan alltså lyssna på Mindpark 100 på Listen To Blogs, eller prenumerera på podcasten i iTunes eller liknande.

Skapa enkel widget i WordPress

Det är enkelt att göra en widget i WordPress. Man kan givetvis göra den hur avancerad som helst, men själva grunden är enkel och jag ska visa hur det går till.

Du vet säkert att en widget är en plugin-liknande funktion som man kan placera någonstans på sin WordPress-sajt, ofta hamnar den i sidomenyn. Vanliga exempel är ”Arkiv”, ”Taggmoln” eller ”Senaste flickr-bilderna”.

Det fungerar så att man i ett tema har definierat ett antal utrymmen där man kan placera widgets, dessa utrymmen kallas för ”sidebars”. Sidebars kan man placera i sidomenyn, footern eller egentligen var som helst i temat. I varje ”sidebar” kan sen sajt-administratören dra in en eller flera widgets.
Hos mig ser det ut så här, under ”Utseende” -> ”Widgets”.

Widgets i WordPress dashboard

Widgets i WordPress dashboard

Från och med WordPress 2.8 har det blivit lättare att skapa egna widgets. Man utgår från basklassen WP_Widget och implementerar en del av metoderna.
De här metoderna måste man implementera:

class My_Widget extends WP_Widget {
	function My_Widget() {
		// widget actual processes
	}
 
	function widget($args, $instance) {
		// outputs the content of the widget
	}
 
	function update($new_instance, $old_instance) {
		// processes widget options to be saved
	}
 
	function form($instance) {
		// outputs the options form on admin
	}
}
register_widget('My_Widget');

Jag tänkte bygga en widget som visar min senaste status-uppdatering från sajten Yo!. Genom att logga in på yo.se och gå till URL:en http://yo.se/widget/, får man en HTML-snutt som egentligen gör hela jobbet åt oss när det gäller att visa senaste status. den ser ut så här:

<div class="yo-widget" id="_yo_windyjonas">
  <h1><a href="http://windyjonas.yo.se/" title="Jonas Nordström">Windyjonas</a></h1>
  <script src="http://yo.se/widget/1/w.js" type="text/javascript" charset="utf-8"></script>
  <script type="text/javascript" charset="utf-8">
    _yo.username = "windyjonas";
    _yo.hostname = "http://yo.se";
    _yo.style = "http://yo.se/widget/1/w.css";
    _yo.init();
  </script>
</div>

Det allra enklaste hade förstås varit att klippa in den här koden i en text-widget, men då hade det här inte blivit ett exempel på hur man skapar en WordPress-widget, så vi struntar i det och går vidare :)

Jag kallar widgeten för ”Yo Status”, så min widgetklass ska få namnet ”Yo_Status_Widget” och de metoder jag ska implementera blir följaktligen:

  • Yo_Status_Widget() – konstruktor
  • widget() – funktionen som ska skicka ut widget-koden till webbläsaren
  • update() – Det ska gå att konfigurera widgeten. update() ser till så att man kan ändra aliasnamn (yo-användare)
  • form() – Skapar formuläret för att ändra aliasnamn

Yo_Status_Widget()

Skapa ett WP_Widget-objekt med rätt metainfo och options. ”classname” nedan är alltså css-klassen i det omslutande HTML-elementet.

function Yo_Status_Widget() {
	$widget_ops = array('classname' => 'widget_yo_status', 
            'description' => 'Display status from Yo! (http://yo.se)' );
	$this->WP_Widget('yo-status', __('Yo Status'), $widget_ops);
}

widget()

function widget($args, $instance) {
	extract($args, EXTR_SKIP);
 
	echo $before_widget;
	$alias = empty($instance['alias']) ? '&nbsp;' :
          apply_filters('widget_alias', $instance['alias']);
   ?>
    <div class="yo-widget" id="_yo_<?php echo $alias ?>">
		  <h1><a href="http://<?php echo $alias ?>.yo.se/">
                 <?php echo $alias ?></a></h1>
		  <script src="http://yo.se/widget/1/w.js" 
                     type="text/javascript" charset="utf-8"></script>
		  <script type="text/javascript" charset="utf-8">
		    _yo.username = "<?php echo $alias ?>";
		    _yo.hostname = "http://yo.se";
		    _yo.style = "http://yo.se/widget/1/w.css";
		    _yo.init();
		  </script>
		</div>
		<?php
	echo $after_widget;
}

update()

Den här funktionen anropas efter att användaren matat in ett yo-alias och klickat på ”Spara”

function update($new_instance, $old_instance) {
	$instance = $old_instance;
	$instance['alias'] = strip_tags($new_instance['alias']);
 
	return $instance;
}

Formuläret som möjliggör ändring av yo-användare.

form()

	function form($instance) {
		$instance = wp_parse_args( (array) $instance, array( 'alias' => '') );
		$alias = strip_tags($instance['alias']);
?>
		<p>
			<label for="<?php echo $this->get_field_id('alias'); ?>">Alias på yo.se: 
				<input class="widefat" id="<?php echo $this->get_field_id('alias'); ?>" 
					name="<?php echo $this->get_field_name('alias'); ?>" type="text" 
					value="<?php echo attribute_escape($alias); ?>" />
			</label>
		</p>
<?php
	}

Resultat

Till slut bakar jag ihop alltihop till en ny plugin. Det hade i och för sig gått att deklarera hela widgeten i functions.php, men jag föredrar att inte röra temafilerna så mycket.
Jag gjorde en plugin av alltihop genom att skapa filen /wp-contents/plugins/yo-status/yo-status.php. En del av outputen i widget()-metoden är här utbruten i en egen metod.

<?php 
/* 
Plugin Name: Yo Status
Plugin URI: http://jonasnordstrom.se/yo-status-widget 
Description: Display your yo.se status in sidebar
Version: 0.2
Author: Jonas Nordstrom
Author URI: http://jonasnordstrom.se
*/
 
add_action( 'widgets_init', 'yo_status_load_widgets' );
 
function yo_status_load_widgets() {
	register_widget( 'Yo_Status_Widget' );
}
class Yo_Status_Widget extends WP_Widget {
	function Yo_Status_Widget() {
		$widget_ops = array('classname' => 'widget_yo_status', 'description' => 'Display status from Yo! (http://yo.se)' );
		$this->WP_Widget('yo-status', __('Yo Status'), $widget_ops);
	}
 
	function yo_status($alias) {
		?>
		<div class="yo-widget" id="_yo_<?php echo $alias ?>">
		  <h1><a href="http://<?php echo $alias ?>.yo.se/"><?php echo $alias ?></a></h1>
		  <script src="http://yo.se/widget/1/w.js" type="text/javascript" charset="utf-8"></script>
		  <script type="text/javascript" charset="utf-8">
		    _yo.username = "<?php echo $alias ?>";
		    _yo.hostname = "http://yo.se";
		    _yo.style = "http://yo.se/widget/1/w.css";
		    _yo.init();
		  </script>
		</div>
		<?php
	}
 
	function widget($args, $instance) {
		extract($args, EXTR_SKIP);
 
		echo $before_widget;
		$alias = empty($instance['alias']) ? '&nbsp;' : apply_filters('widget_alias', $instance['alias']); 
        $this->yo_status($alias);
		echo $after_widget;
	}
 
	function update($new_instance, $old_instance) {
		$instance = $old_instance;
		$instance['alias'] = strip_tags($new_instance['alias']);
 
		return $instance;
	}
 
	function form($instance) {
		$instance = wp_parse_args( (array) $instance, array( 'alias' => '') );
		$alias = strip_tags($instance['alias']);
?>
			<p><label for="<?php echo $this->get_field_id('alias'); ?>">Alias på yo.se: <input class="widefat" id="<?php echo $this->get_field_id('alias'); ?>" name="<?php echo $this->get_field_name('alias'); ?>" type="text" value="<?php echo attribute_escape($alias); ?>" /></label></p>
<?php
	}
}
?>

Resultatet syns längst ner i högersplaten, eller om jag ändrat något, så såg det en gång ut så här:

Exempel på hur Yo Status kan se ut

Exempel på hur Yo Status kan se ut

Blogga från din iPhone till WordPress

Du vet väl att du kan WordPress-blogga från din iPhone? Det mesta som går att göra i den vanliga administrationspanelen går också att göra via en applikation för iPhone. Saker som att skriva inlägg och sidor, förhandsgranska, redigera, välja bilder, välja kategorier med mera.
Så här gör du för att komma igång, jag förutsätter att du har en iPhone och att du har en fungerande WordPress-blogg, antingen på wordpress.com eller på egen domän.

Ladda hem programmet WordPress for iPhone från iTunes app store (antingen från iTunes eller direkt från app store i telefonen)

Om du använde iTunes, så måste du förstås synka telefonen nu, så att programmet hamnar på din iPhone.

Starta WordPress-programmet på iPhone
Första bilden ser ut något i stil med:

Programmets startbild

Programmets startbild

Välj ”Set up your blog”, och du hamnar här:

Lägg till ny blogg

Lägg till ny blogg

Fyll i adressen till din blogg, och användaruppgifterna, och välj ”Save”. Om allt har fungerat så kommer du tillbaka till startsidan igen, men nu har din blogg lagts till som ett av alternativen i listan. Om du får felmeddelandet “We could not find the XML-RPC service for your blog”, så måste du gå till administrationspanelen för din blogg och aktivera protokollet XML-RPC, det gör du under ”Inställningar” -> ”Skriva” -> ”Fjärrstyrd publicering” -> ”XML-RPC”, kryssa i den rutan där det står ”Aktivera WordPress, Movable Type, MetaWeblog och Blogger XML-RPC publiceringsprotokoll.”. Om du fortfarande har problem, se om du kan hitta en lösning i FAQ:n.
När allt fungerar kommer det att se ut så här:

Bloggen finns nu med i listan

Bloggen finns nu med i listan

Välj din blogg, då hamnar du här:

Inne i bloggen, startsida

Inne i bloggen, startsida

Härifrån kan du alltså välja att skapa eller redigera inlägg och sidor, du kan också granska kommentarer härifrån.
Välj ”posts” för att komma till inläggen.

Blogginläggen

Om du vill skapa ett nytt inlägg, så väljer du ikonen längst ner till höger i bilden här ovanför.

Skapa nytt blogginlägg

Skapa nytt blogginlägg

Så, nu är det bara att fylla i titel, kategorier, etiketter och innehåll precis som vanligt.
Du kan lägga till bilder via knappen ”Photos”.
Välj sen ”Save” för att publicera, syns inte i bilden ovan, men den dyker upp när man börjar lägga till innehåll.

Lycka till! Mer instruktioner kan man få via videoklippen WordPress for iPhone och Introducing WordPress for iPhone 1.2 eller via den officiella hemsidan för WordPress for iPhone.

Facebook blockerar slopsbox.com i statusmeddelanden

Slopsbox är en tjänst för att regga temporära mailadresser, perfekt att använda när man till exempel registrerar sig för en webbtjänst och behöver verifiera via mail att man är den man utger sig för att vara. Inte lika perfekt för den som äger webbtjänsten förstås. Men det är inte rätt att göra som facebook, som censurerar statusmeddelanden om man nämner till slopsbox.com. Det är grundarna av pirate bay som ligger bakom slopsbox, men i min bok motiverar det inte censur.

Exempel:

facebook fail slopsbox.com

Följ diskussionen här, här eller här

Mobilblogga med WordPress och Flickr

Flickr and WordPress, a perfect match

Flickr and WordPress, a perfect match


För de som vill blogga via sin telefon finns det en mycket enkel lösning, skaffa en iPhone och installera WordPress for iPhone. Men nu är det inte alla som har en iPhone och även med en sådan vill man ibland ha en enklare lösning. Om du exempelvis bara vill mobilblogga en bild snabbt och smidigt, så vore det perfekt om det gick att helt enkelt eposta den bilden och få den att automatiskt komma upp på bloggen.
Det finns en sådan lösning för bloggar på wordpress.com, med funktionen Post by email. Tyvärr finns det inte för wp-org-bloggar (även om Matt antyder att det kan vara på gång).

Det finns ett inbyggt sätt att blogga via email för wordpress.org-bloggar, men det är krångligt och det stöder inte bilder.

Det är här Flickr kommer in i bilden, man kan eposta bilder till sitt flickr-konto och låta dem automatiskt hamna på en blogg.

Så här gör du:

  1. Skaffa ett flickr-konto
  2. Logga in till ditt nya flickr-konto och lägg till din blogg
  3. Gå till sidan för att ladda upp via epost, där får du en hemlig epostadress för att ladda upp bilder antingen bara till flickr eller direkt till din blogg (bilderna kommer förstås att hamna på flickr också). Du kan välja hur stora bilderna ska bli och hur de ska placeras i blogginläggen. Tyvärr kan man inte välja bredd helt fritt, utan det är 100×75, 240×180 eller 500x375px som gäller.
  4. Prova. Ta en bild och maila den till din hemliga epostadress och se om den dyker upp på bloggen. Glöm inte att aktivera xmlrpc-protokollet i admin-panelen.

Blogga via Flickr

Blogga via Flickr

GR2WP – Google reader shared items till WordPress

I kategorin Tips så delar jag med mig av intressanta inlägg som jag hittat via mina RSS-flöden i Google Reader.

Det finns flera andra som har liknande funktion på sina bloggar, de använder då exempelvis FeedWordPress, SharedItems2WP eller WP-o-Matic. Av olika anledningar passade ingen av dessa lösningar mig perfekt, mest för att jag ville ha full kontroll över flödet och för att det var så länge sen jag programmerade i perl …

Som jag nyss avslöjade, så skrev jag alltså ett perl-script som hämtar min shared items-feed från google reader (via XML::Atom::Syndication::Feed) och sen trycker jag in en post med de senaste bloggtipsen i WordPress (via XMLRPC::Lite).

Effekten blir den här.

Gå till Google reader, hitta ett intressant inlägg och välj ”Share with note”.

Share with note i google reader

Share with note i google reader

Lägg till en anteckning och spara.

Kör sen perlscriptet gr2wp.pl (Google Reader To WordPress).
Då skapas ett WP-inlägg med alla nya utdelade bloggposter.

Resultatet i WordPress

Resultatet i WordPress

Alla ”Jonas tipsar”-inlägg

Här kommer perlscriptet. Du får gärna använda och modifiera det helt fritt. Jag har utgått från ett script som postade google-reader shared items till delicious.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
#!/usr/bin/perl -w
 
use strict;
use LWP::Simple;
use XML::Atom::Syndication::Feed;
use XMLRPC::Lite;
use XML::XPath;
use WordPress::XMLRPC;
use HTML::Entities;
use Time::Local;
 
######## CONFIGURATION ########
my $debug = 0;
# Your Google Shared Items Feed URL
my $feed_url = 'yourgoogleshareditemsfeedurl';
 
# A local file location for the feed
my $feed_file = '/path/to/localfeedfile.xml';
 
# Timestamp file
my $ts_file = "/path/to/gr2wp_timestamp.lis";
 
# Wordpress post title
$wp_title = "post title";
 
# Wordpress post categories (example: ['Fashion','Beauty'])
# (The categories must exist before posting)
@wp_categories = ['category'];
 
# Wordpress user
$wp_user = 'username';
 
# Wordpress password
$wp_pwd = 'password';
 
# Wordpress proxy (URL to xmlrpc.php, don't forget to activate xmlrpc protocol in blog!)
$wp_proxy = 'http://sitename/xmlrpc.php';
 
######## END CONFIGURATION ########
 
# start time handling
my @now = localtime;
my $time = timelocal(@now);
 
# Subtract one week (default if no timestamp file found)
my $default_start = $time - 7 * 24 * 60 * 60; 
 
my $start_date;
 
# fetch last startdate or, if not found, pick a date one week ago
if (-e $ts_file) {
	open FP, "<$ts_file" or die "Could not open file $ts_file: $! \n";
	$start_date = ()[0];
	close FP;
	chomp $start_date;
	$start_date =~ s/\s//g;
} else {
	$start_date = $default_start;
}
 
print "Start date: ", $start_date, "\n" if $debug;
print "now: ", $time, "\n" if $debug;
 
# Set the google reader namespace URI
my $gr = 'http://www.google.com/schemas/reader/atom/';
 
#snag a local copy of the shared items feed
my $status = getstore($feed_url,$feed_file);
	die "Error $status fetching the Google Reader feed." unless is_success($status); 
 
# Init the wordpress API
my $o = WordPress::XMLRPC-&gt;new({
username => $wp_user,
password => $wp_pwd,
proxy => $wp_proxy,
});
 
#parse the shared items feed
my $feed = XML::Atom::Syndication::Feed->new($feed_file);
my @entries = $feed->entries;
 
# loop through items in the feed
my $buf = "<ul>";
my $post_count = 0;
foreach my $entry (@entries) {
	# grab the title, link, and source title
	my $postTitle = encode_entities($entry->title->body);
	my $postLink = $entry->link->href;
	my $sourceTitle = encode_entities($entry->source->title->body);
 
	# get the time this item was shared
	my $shareTime = $entry->get_attribute($gr,'crawl-timestamp-msec');
 
	# convert from milliseconds to seconds
	$shareTime = $shareTime/1000;
 
	# skip item if it was shared before the start date
	next if $shareTime < $start_date;
  	$post_count++;
 	#grab any notes
 	my $xp = $entry-&gt;as_xml;
 
	# get the notes, this should probably be simplified ...
	my $notes = encode_entities($1, "\200-\377")
		if $xp =~ m/annotation>(.*?)<\/content>/;
 
	# Remove the "CDATA" bit, if present
	$notes = $1 if $notes =~ m/<!--\[CDATA\[(.*)\]\]-->/s;
 
	print "Title: $postTitle\n" if $debug;
	print "Link: $postLink\n" if $debug;
	print "Source: $sourceTitle\n" if $debug;
 
	# Create the post content
	$buf .= "<li class="\&quot;tipsitem\&quot;">$sourceTitle: <a href="$postLink">$postTitle</a></li>";
	if ($notes) {
		$buf .= "<blockquote>";
		$buf .= "$notes";
		$buf .= "</blockquote>";
	}
}
$buf .= "</ul>";
 
#Delete the local copy of the feed
unlink($feed_file);
 
# timestamp
my $ymd = sub{sprintf '%04d-%02d-%02d',
    $_[5]+1900, $_[4]+1, $_[3]}-&gt;(localtime);
 
my $content_hashref;
$content_hashref->{title} = "$wp_title - $ymd";
$content_hashref->{categories} = @wp_categories;
$content_hashref->{description} = $buf;
 
# Post to wordpress
if ($post_count > 0) {
	$o->newPost($content_hashref, 1);
 
	open FP, ">$ts_file" or die "Could not open file $ts_file for writing: $!\n";
	print FP $time;
	close FP;
} else {
	print "No posts\n";
}
 
# Debugging purposes, write post to local file gr2wp_debug.lis
if ($debug) {
	open OFP, ">gr2wp_debug.lis";
	print OFP $buf;
	close OFP;
}

För enkelhetens skull kör jag perl-scriptet en gång om dagen, via crontab.

Get Adobe Flash playerPlugin by wpburn.com wordpress themes

Copyright © Jonas Nordström
Teknik och media

Byggt på Notes Blog Core
Powered by WordPress