Pappmaskin.no

Archive for the ‘Open Source’ Category

Playing with SnapCasa screenshots and del.icio.us

with 3 comments

http://img.skitch.com/20081016-es6718uspgixxfa8x8d7kbqm8y.jpg

Tonights nerdfest will include trying to use the SnapCasa and del.icio.us to generate a lovely page full of thumbnails, one for each url.

Ingredients:

1. My 100 latest bookmarked urls from del.icio.us: http://feeds.delicious.com/v2/rss/mskogly?count=100
2. A SnapCasa login account.
3. A server that supports xslt transformation. (I’m running MAMP on my macbook, and pappmaskin is hosted on One.com)
4. A text editor. I’m using Dreamweaver for this, since it has some pretty good tools for building xslt. (Take a look at the Adobe Livedocs for more info on using it).

(More after the break)

Read the rest of this entry »

Written by Morten Skogly

October 17th, 2008 at 12:28 am

Processing: Sketch_081001a

with 18 comments

Screenshot of processing app

I downloaded my first copy of Processing (Processing.org) a few years ago, but I have never gotten past the initial few demos and small tutorials. I’ve been interested in generative computer art for many years, evt since I first saw the work of Marius Watz in the mid nineties and had a stint reading dadaist poetry and cutups, but I’ve never had the time to play with this stuff myself. Or the brains to handle the math, hehe. But then I came across this tutorial in Computer Arts #149 (The June 2008 issue), where there are a few really interesting tutorials, which basically gives you enough info to understand the key consepts that you need to create some very interesting apps, like the one below (slightly modified of course, I added random colors among other things).

Read more and see the running java app after the break.
Read the rest of this entry »

Written by Morten Skogly

October 1st, 2008 at 7:50 pm

Open source flash-based sound sequenzer

with one comment

I’ve been thinking alot about making a soundbased installation in Adobe Flash, using sensors and switches, and I’ve gotten around to making a few small eksperiments/prototypes as research, which I’m planning to share on this site later.

But I also found this old experiment I wrote in Flash 5 (!) and wanted to share it. It is a visual sequenzer (*) / sound toy that lets you drag icons onto a “soundstage”, each icon representing a sample. As you press play a line starts moving vertically, and as the line hits one of the icons, the corresponding sound is played. You can also click, drag and hold an icon, and move it on top of the moving line to trigger the sound. There are two types of sounds. The yellow icons trigger different “wet finger on glass” sounds, and the greywhite icons trigger sonar ping sounds.

Open Source

The code is pretty old, and there are WAY better ways of making something like this with AS3, but still, here is the source code (fla) for it (it also includes the samples, which you are free to use in any way you like).

I still think it is a pretty nice little project, but I am toying with the idea of replacing the click and drag with a webcam mounted in the ceiling, and letting people moving around on the floor trigger the sounds. I have quite a lot to learn before I can make something like that, but I’ll get there!

* Ok, so I guess it is a stretch to call this a sequenzer, but I wanted to create a fun, easy and interesting way to generate a sound collage.

Written by Morten Skogly

September 26th, 2008 at 11:20 pm

Creating a youtube service using gdata and xslt with php

with one comment

Let’s start with a little demonstration. The section below is made by calling the php-script http://pappmaskin.no/opensource/youtube/youtube.php?s=super&max=9 within an iframe:

Why iframe?
Just to make it easier to reuse and embed Youtube videos on different sites, and because it makes it easier to try out new ideas without adding messy bits to a larger project. Sort of like rapid prototyping/proof of concept before “committing” to a feature and spending alot of time integrating something you might end up throwing out.

This solution currently consists of these files:
youtube.php, takes s=whateveryouwanttofind and max=number of videos to return as GET parameters
youtube5.xsl, does all the transformation of the xml from youtube into lovely xhtml.
youtube.js, javascript file that handles clicking on the thumbnails to load a new video, using innerHtml
youtube.css, minimalist styling to keep things pretty.
swfobject.js, for embedding flash

The xslt:

<?xml version=”1.0″ encoding=”UTF-8″?> <xsl:stylesheet version=”1.0″ xmlns:xsl=”http://www.w3.org/1999/XSL/Transform” xmlns:fn=”http://www.w3.org/2005/xpath-functions” xmlns:gd=”http://schemas.google.com/g/2005″ xmlns:media=”http://search.yahoo.com/mrss/” xmlns:n1=”http://www.w3.org/2005/Atom” xmlns:openSearch=”http://a9.com/-/spec/opensearchrss/1.0/” xmlns:xdt=”http://www.w3.org/2005/xpath-datatypes” xmlns:xs=”http://www.w3.org/2001/XMLSchema” xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance” xmlns:yt=”http://gdata.youtube.com/schemas/2007″ xmlns:altova=”http://www.altova.com”> <xsl:output method=”html” encoding=”ISO-8859-1″ doctype-public=”-//W3C//DTD XHTML 1.0 Transitional//EN” doctype-system=”http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”/> <xsl:param name=”SV_OutputFormat” select=”‘HTML’”/> <xsl:variable name=”XML” select=”/”/> <xsl:template match=”/”> <html> <head> <title>Pappmaskin.no – Youtube playlist</title> <link rel=”stylesheet” href=”youtube.css” media=”screen” /> <script type=”text/javascript” src=”youtube.js”></script> <script type=”text/javascript” src=”swfobject.js”></script> </head> <body> <div id=”youtube”> <h1>YouTube Playlist</h1> <xsl:for-each select=”$XML”> <xsl:for-each select=”n1:feed”> <xsl:if test=”n1:entry[1]“> <div class=”youtubevideo”><div id=”cur_video”> <xsl:for-each select=”n1:entry[1]/media:group/media:content”> <xsl:if test=”@type = ‘application/x-shockwave-flash’”> <embed> <xsl:attribute name=”src”> <xsl:value-of select=”@url”/> </xsl:attribute> <xsl:attribute name=”width”>480</xsl:attribute> <xsl:attribute name=”height”>385</xsl:attribute> <xsl:attribute name=”quality”>high</xsl:attribute> <xsl:attribute name=”bgcolor”>#000</xsl:attribute> <xsl:attribute name=”id”>cur_video_swf</xsl:attribute> <xsl:attribute name=”name”>cur_video_swf</xsl:attribute> </embed> </xsl:if> </xsl:for-each> </div> <!– ends cur_video –> <div id=”cur_video_title”> <xsl:value-of select=”n1:entry[1]/n1:title”/> </div> </div>    <!– ends youtubevideo –> </xsl:if> <div class=”youtubethumbs”> <xsl:for-each select=”n1:entry”> <xsl:if test=”position() > 1″> <xsl:for-each select=”media:group”> <div class=”youtubethumb”> <xsl:for-each select=”media:content”> <xsl:if test=”@type = ‘application/x-shockwave-flash’”> <a> <xsl:attribute name=”href”>#</xsl:attribute> <xsl:attribute name=”onmousedown”>PlayVideo(‘<xsl:value-of select=”@url”/>’,'http://img.youtube.com/vi/h8oBykb_Pqs/2.jpg’, ‘Youtube’, true);</xsl:attribute> <xsl:attribute name=”onclick”>return false;</xsl:attribute> <xsl:for-each select=”../media:thumbnail[1]“> <xsl:element name=”img”> <xsl:attribute name=”src”><xsl:value-of select=”@url”/></xsl:attribute><xsl:attribute name=”lowsrc”>lowsrc.gif</xsl:attribute><xsl:attribute name=”width”>100</xsl:attribute><xsl:attribute name=”height”>60</xsl:attribute> </xsl:element> </xsl:for-each> <xsl:value-of select=”../media:title”/> </a> </xsl:if> </xsl:for-each> </div> <!– ends avslutter class youtubethumb –> </xsl:for-each> </xsl:if> <!– end if on position > 0 –> </xsl:for-each> </div><!– ends class youtubethumbnails –> </xsl:for-each> </xsl:for-each> <div class=”youtubefooter” style=”clear: both; color: #999999; font-size: 0.8em;”>Disclaimer: These videos are retrieved from Youtube through a simple search. Even though the search is done with a filter to remove “inappropriate material”, it may still contain videos deemed offensive by some. Videos may or may not be in violation of international copyright law.</div> </div> <!– avslutter id youtube –> </body> </html> </xsl:template> </xsl:stylesheet>

The PHP

<?php
$searchterm = $_GET["s"];
$maxresults = $_GET["max"];

/* load the xml file and stylesheet as domdocuments */
$xsl = new DomDocument();
$xsl->load(“youtube5.xsl”);
$inputdom = new DomDocument();

//Example http://gdata.youtube.com/feeds/videos?format=1&vq=Ratchet+Clank:+Tools+of+Destruction&max-results=2

$inputdom->load(“http://gdata.youtube.com/feeds/videos?format=5&vq=” . $searchterm . “&max-results=” . $maxresults);

//$inputdom->load(“youtube.xml”);
//if you want to test with a local file

/* create the processor and import the stylesheet */
$proc = new XsltProcessor();
$xsl = $proc->importStylesheet($xsl);
//$proc->setParameter(null, “titles”, “Titles”);
//not in use, but needed if you want to pass variables into the xslt from php

/* transform and output the xml document */
$newdom = $proc->transformToDoc($inputdom);
print $newdom->saveXML();
exit;
?>

Written by Morten Skogly

September 16th, 2008 at 11:41 pm

Happy birthday to GNU!

with 3 comments

Just got a heads up that the wonderful people over at GNU used one of my pictures in their Happy Birthday to GNU-video. I am of course a big fan of open source in all shapes and forms, so this is simply an honor and a delight! I said jokingly to my wife that “it felt like as if the Dalai Lama had quoted me”, which of course is a SLIGHT exaggeration, but you get the point. I am not a great photographer, so when someone, anyone wants to use an image it simply makes me REALLY REALLY HAPPY!

See the video below, or go to http://www.gnu.org/fry/ to view or download the original.

It’s probably a coincidence, but this is the third time in just a few months where someone has used one of my images in some way. They are all on flickr.com and they all have Creative Commons licences, most of them for commercial use as well, making it easy for anyone to use them as they wish. I am not a professional photographer, so I really have no urge to sell them. If anyone want to use them, then fine!

So, these are the images that people have picked:

Hesttrøa 7 - New bathroom project
Creative Commons License photo credit: mskogly

Now, this image of my plumbing is just awful, and I suppose that was the point. I took it as documentation before renovation, it sure ain’t art. But still, it is wonderful to be wanted!

River Walk, San Antonio, Texas
Creative Commons License photo credit: mskogly

The San Antonio River Walk is quite a sight, it was a big surprise to find such a lush place in the middle of the city, and after having my senses numbed by the wasteland of the US highway system. A small version of this image is in use on a site called Scmap, go to
www.schmap.com/sanantonio/tours_tour3/p=2048D03/i=2048D03_10.jpg and take a look in the right hand corner. The image was also printed in the Fifth Edition of the Scmap San Antonio Guide. Schmap also makes their guide available in widget form, letting you embed the guide in your blog etc, looks something like this.

And the last image so far:

Highway, Houston
Creative Commons License photo credit: mskogly

This Highway-picture was used in an article about Houston in an online magazine for expatriates called Global Connection. I don’t have access to it, so I don’t know what the finished article looks like.

The open source principle VS. the need for an income
I have followed a few debates about how “amateur photographers” encrouch on the livelihood of professionals, making it harder to make a living. There might be some merit to this, but I also believe that there is room for both. The access to cheap or free images makes it easier for more people to create, to write about and promote good things. Just like Google Maps and other map apis created an explosion in new services and mashups, sites like Flickr with a well organized way to search for pictures published with a suitable creative commons licence will lead to a richer flora of online and printed works. And I believe that the work will be a better world for it. Imagine the price of creating a school textbook “in the old days”, it would cost a small fortune in royalties for the images used, often images used purely as illustration of a concept (like pollution). These days, a writer, teacher or pupil for that matter could do a quick search on Flickr and find just about anything they need, for free, and with the permission to use the material in eighter a commercial or non-profit setting. Magic!

Written by Morten Skogly

September 3rd, 2008 at 9:25 pm

Gameinfo + Gametrailers + Youtube Mashup

without comments

Norsk? Du finner en norsk versjon av denne artikkelen på NrkBeta.no

I recently made a Gameinfo service for spiller.no. It pulls in licenced gameinfo from our partner GameXplore though XML, and combines it with a search for related videoes from Youtube before it is presented on the page.

Example: FIFA STREET 3 Gameinfo – NRK Spiller

Youtube + Google Api
I made the Youtube part as a standalone page, and I include it with iframe. The reason I used Iframe was to make it easily reusable on other projects where it would fit to do something similar. I can for instance include it in my blog like this:

The page takes any search term as a GET, in this example it simply queries the youtube google api with the title of the game, with a few extra parameters (limit on the number of returned movies + a filter to remove “adult content”). I spent some time to create the XSLT to convert the xml from youtube/google to html, which is basically the same format for many of Googles services. I spent hours trying to find out if someone had created this already, but since I couldn’t find anything I had to create it myself. If you want to learn more about the youtube api I suggest starting at the Youtube Api group on Google Groups.

Open source

I have gotten some emails asking for the xslt for the youtube search, so I wanted to share it here:

This is my input, an example Youtube search

This is my example output:

http://pappmaskin.no/opensource/youtube/youtube.php

And here is the xslt I used to produce the above result:

http://pappmaskin.no/opensource/youtube/youtube3.xsl

If you have any questions, feel free to ask in the comments.

Spam? Porn? Nope!
I was of course a little worried about what the youtube search would return, so when testing I went through quite a few games to see if the search returned movies that were unrelated to the gametitle, or contained nudity, but so far it looks really good, the youtube videos are actually the most interesting part of the service, so I’m really happy with it!

Blip.tv gametrailers
Yesterday I also added gametrailers to the mix, check out the gamepage for Assassins Creed for an example (click on the huge image at the top of the page) to make it play. I have bought a lisence for the wonderful Jeroen FLV Media Player which I use to present the gametrailers.

New gametrailers page, based on blip.tv
After that I spent a few minutes to create a new page that lists all the latest gametrailers published through GameXplore. I use the Jeroen Flv Media Player for this page as well. I created this yesterday, so I have to debug it a little bit before we start to promote it, and I also have to consider to increase the video buffer time, it seems like blip.tv har pretty slow servers. Right now there is a five second buffer, which should be more than enough, but even with broadband connection the video stops and buffers every five second. I don’t want people to wait forever for the video to buffer, but it is super irritating when the video stops every 5 seconds to buffer, so I have to decide what to do with it. One (hard) solution could be to download all the .flv to my server and play them from there… I am a big fan of blip.tv, they have the best player around, and their cross posting abilities are great (at least in theory, I still haven’t gotten it to work with this blog or myspace), so I am a little dissapointed to discover that the blip.tv servers (or lines?) are so slow to deliver video. (to Norway at least).

Thickbox
I love the Jquery javascript library, and I love Thickbox, so I decided to use it on the Screenshots on the site, popping them up in their own little box. I modidied the thickbox script and css slightly, replacing the animated loading gif and moved things around a little bit, and I am really happy about the outcome.

Add the spiller.no Gameinfo search to your browser

Prøv også denne: Installere søkemotor for spiller.no

Spiller.no Gameinfo

Sjekk ut info, screenshots, trailers og anmeldelser på nye og kommende spill:

So there it is, hope you like it :)

To embed the search in your site:

<div class=”placeholder”><h3>Spiller.no Gameinfo</h3>
<span style=”color: #fff; width: 160px; font-size: 0.8em;”>Sjekk ut info, screenshots, trailers og anmeldelser på nye og kommende spill:</span>
<form id=”gamesearchform” name=”gamexploresearch” enctype=”application/x-www-form-urlencoded” method=”get” action=”http://www.nrk.no/spiller/gameinfo/?”>
<fieldset>
<input type=”hidden” value=”143″ name=”task”/>
<input style=”padding: 1px 0 2px 0; width:100px; border:1px solid #F7F7F7; border-width: 0pt 1px 1px 0pt;” type=”text” value=”" maxlength=”500″ name=”finn”/>
<button type=”submit”><span>Søk</span></button>
</fieldset>
</form></div>

Written by Morten Skogly

March 8th, 2008 at 8:35 am

Open source design – Vector Apple vs Pear logo

without comments

pear-logo2

I made a new header for my blog today, and I just wanted to share a few vector files for those interested in using it, or whatever.

The logo is, as you can see, based on the apple logo (duh!), but I changed it into a pear, and made the BITE larger. Why? Because I like pears. A lot! :)

The files:

pear-logo2.ai (for adobe illustrator)
pear-logo.fla (for adobe flash)

Design:

I’m using Adobe Flash more and more for pure design work, most of the sites I create are flash based, so I usually just start prototyping in Flash, not in Photoshop like most. I still use Photoshop exstensively of course, but very seldom for creating dummy layouts, it is just faster to do it in Flash. I suppose it’s a matter of preference, most designers will use Illustrator for creating their work, but since I work web and flash, using Illustrator just slows me down, it’s another tool to buy and learn, that doesn’t ad much value compared to Flash and Photoshop. For my use that is.

Licence:

Use it for whatever you want. :) I don’t mind (but Apple might.) But please drop me a line if you use it. Make my day!

Written by Morten Skogly

February 26th, 2007 at 11:41 pm

Podcastplayer in flash! Php script to convert RSS to XSPF

with 5 comments

Big Sound, Little Ears

Creative Commons License photo credit: …Tim

Create your own free flash based podcast / mp3 player

I like the flashbased XSPF mp3 player. I had planned to rewrite the actionscript so that it could read rss with enclosures instead, but I liked the possibility to have unique pictures on each track, and I wanted to check out the XSPF format.

So I wrote a PHP script that uses DOMXML and xpath to convert an existing rss to xspf, it even have a search function of sorts.

I’m going to use it on a project I’m working on after a little more tweaking but I wanted to share it with other people who has a podcast and want a quick open source way to present their podcasts on their website.

Localino meets elePHPant
Creative Commons License photo credit: Chregu

<?php

$path = “http://podkast.nrk.no/program/radioresepsjonen.rss”;

$showfile = file_get_contents($path);

if(!$doc = domxml_open_mem($showfile)) {

echo “Error while parsing the document…”;

exit;

}

$xpath = xpath_new_context($doc);

$root = $doc->document_element();

//debugging

//echo domxml_version();

//var_dump(xpath_eval_expression($xpath, ‘/rss/channel/item’)); //http://no.php.net/manual/sv/function.xpath-eval-expression.php

//debugging – memory dump

//echo $doc->dump_mem( true, ‘UTF-8′ ) ; //http://no.php.net/manual/sv/function.domdocument-dump-mem.php

//print ” Path: <a href=\”$path\”>$path</a><br>\n”;

//print ” Showfile: <a href=\”$showfile\”>$showfile</a><br>\n”;

//print ” domDoc: <a href=\”$domDoc\”>$domDoc</a><br>\n”;

//print ” root: <a href=\”$root\”>$root</a><br>\n”;

// playlist plus search function

$playlist = $xpath->xpath_eval(“/rss/channel/item[contains(translate(title,'abcdefghijklmnopqrstuvwxyzæøåö', 'ABCDEFGHIJKLMNOPQRSTUVWXYZÆØÅÖ'), '".strtoupper($_REQUEST["search"]).”‘)]”);

//debug

//print “playlist found: “.count($playlist->nodeset).”\n”;

print “<?xml version=\”1.0\” encoding=\”UTF-8\” ?>\n”;

print “<playlist version=\”0\” xmlns=\”http://xspf.org/ns/0/\”>\n”;

print ” <title>Put clever title here, or get it from the rss</title>\n”;

print ” <annotation>Description of some sort</annotation>\n”;

print ” <creator>Who made this</creator>\n”;

print ” <info>http://link to more info</info>\n”;

print ” <location>http://yourdomain.com/doesnreallymatter/rss2xspf.php</location>\n”;

print ” <license></license>\n”;

print “<trackList>\n”;

foreach ($playlist->nodeset as $tracklist) {

$description = “”;

$title = “”;

$enclosureurl = “”;

//$enclosureurl = $tracklist->get_attribute(“length”);

//$spor = $tracklist->get_attribute(“spor”);

//$sangid = “$arkivnr-$spor”;

foreach ($tracklist->child_nodes() as $child) {

if ($child->node_name() == “title”) $title = $child->get_content();

if ($child->node_name() == “description”) $description = $child->get_content();

if ($child->node_name() == “enclosure”) $enclosureurl = $child->get_attribute(“url”);

}

print “<track>\n”;

print ” <location>$enclosureurl</location>\n”;

print ” <image>hassan/bilder/else150.jpg</image>\n”;

print ” <annotation>$title</annotation>\n”;

print ” <info></info>\n”;

print ” <info_text>$description</info_text>\n”;

print ” </track>\n”;

}

print “</trackList>\n”;

print “</playlist>\n”;

?>

Copypaste the above code into a new file and save it as rss2xspf.php and upload it to your server to test if you have domxml support. (If you don’t it will say something like Call to undefined function: domxml_open_mem. In that case, tough luck, find a new host.)

Download the exellent XSPF flash based mp3 player here: XSPF Web Music Player (Flash) – Plays MP3 on your website

Read more about XSPF over at http://www.xspf.org/

And please drop a comment if you use it and like or have problems.

You can also send me an email at morten.skogly _at_ gmail dot com.

There’s a lot of room for improvement, like using the rss image in place of a staticly defined image, or inserting a random image, or doing som web2.0 stuff like snarfing the images from amazon or whatever, please let me know if you make something superclever with it :)

Idea for your site: You can use del.icio.us to make your own mp3 podcast, visit bands you like bookmark the mp3s you like with del.icio.us, go there to get the rss, and your set to go, you have the same music on your site as on your ipod :) (You might have to use feedburner.com as a gobetween to create the enclosures and make it itunes-compatible.)

Updated: 06.04.2008: Unless you really really digg the XSPF player linked up above, I suggest you use the superb Jeroen Media Player instead. It is open source and supports both XSPF and RSS directly. It takes up more space, but it has video support and a very cool javascript api.

Written by Morten Skogly

March 3rd, 2006 at 1:01 pm

Posted in Open Source

Tagged with , , , , , , , ,

Bomber Jack Clone

without comments

Valgfleskspillet

I spent a few weeks creating a Bomber Jack clone from scratch for a radio show at NRK, and ended up reskinning it at least 3 times for other projects (easy money). This version was made for the Norwegian election in 2003.

Valgfleskspillet.

And here is another, made for the childens pages at NRK:

Hopp med Fantorangen

Want the code? Drop me a line and I will prepare it for sharing!

Written by Morten Skogly

September 8th, 2003 at 1:54 pm