Hi there non-swedish browser person.I see you dont use a swedish browser. I write most of the posts in swedish so if you want to read/understand them you can use the Google Translate-thing in the bottom of the right column. It works, sort of. Don't believe everything it translates for you thou.
Något jag ibland kan sakna som flashutvecklare är en enkel möjlighet att testa något man gjort i mer än en version av Flash Player. Oftast när ett problem dyker upp så har det i nio fall av tio att göra med en version av Flash Player man inte har installerad. Internet Explorer har sin version i IETester men jag har inte hittat något liknande för Flash, om det ens finns.
Adobe nämner att man kan ha flera versioner av Flash Player installerad och byta mellan dessa vilket får mig att dra slutsatsen om att det inte borde vara helt omöjligt att bygga ett gränsnitt som tar hand om att ändra vilken version som är den primära. Det är kanske en riktigt dum idé som drar med sig massor med problem, men om dessa problem skulle gå att undvika skulle jag gladeligen köra ett sådant program. Kanske inte är så användbart under utvecklingsfasen men när man börjar testa och framförallt letar buggar skulle det vara riktigt bra. För mig behöver det inte vara mer avancerat än skissen nedan.
Det har pratats mycket om iPad och vilken stor besvikelse den till stor del är. Jag är själv inte övertygad om dess plats och har svårt att motivera varför just jag ska köpa den. Jag satte mig ändå och försökte hitta något bra med iPad:en och det finns en del saker den gör bättre än både en iPhone och en laptop.
Ingen kan säga något om att den är smidig att ta med. Formatet är perfekt för till exempel en säljare i vilken affär som helst. Jag är säker på att både en och annan AD kommer visa sina skisser på en iPad senare i år och dess simpla gränssnitt gör att både farmor, barn, icke läskunniga och tekniskt okunniga kommer klara av den.
Men anledningen till att jag ändå ser lite hoppfullt på iPad:en är enkelheten att ta med den samt skärmstorleken. Många applikationer till iPhone känns ibland lite krystade på grunda av att skärmen inte är stor nog. De kan ibland vara svåra att styra antingen för att våra fingrar är för stora eller objekten i programmet för små.
Jag använder mig ofta av Jaadu VNC för att styra både min dator hemma och den på jobbet. Det är ett kanon program och det enda problemet är att det blir väldigt mycket zoomande och scrollande för att se vad som händer. Med en iPad kommer det bli mycket bättre.
Spel till iPhone är kul, inte mycket mer att säga om det. Speciellt den genre som värmer mitt 80-tals hjärta, point-and-click. Eller point-and-poke som det kanske borde döpas om till nu. Har testat både Monkey Island, Beneeth a steel sky, Broken Sword med flera men någonstans känns det inte som förr. Det är sjukt kul att kunna spela lite Monkey Island när man väntar på något men återigen blir det lite smått och svår styrt. Hej iPad och din stora skärm, dessa spel kommer bli underbara på dig.
En annan sorts program som blir väldigt plottriga är musikprogram. Många reglage och knappar men liten yta. På en iPad får man in minst två oktaver på ett piano samt knappar och effektreglage utöver det. DJ-applikationer, som även de lider av ”liten skärm”-syndromet, skulle få chansen att bli lite enklare. Även om de fortfarande bara skulle vara en leksak så blir de mer lätt använda. Och om jag får drömma lite så släpper Ableton en iPad-applikation för Ableton Live, skärmutrymmet skulle göra den till en perfekt budgetkontroll.
Skiss och mockup-program tror jag var och varannan designer skulle tycka om. Att enkelt men ändå tydligt kunna göra idéskisser utan att sitta vid datorn skulle i alla fall jag tycka om. Och då är inte ens jag designer. Men som kodare vill jag kunna göra flödesscheman för program och liknande, kanske inte lika hippt som designskisser men på en iPad ser man bra ut när man gör det. Sedan finns det mängder av program som skulle funka på en iPad. Foto- och videoredigering bara för att nämna några som mår bra av en större skärm.
Så när jag funderat lite mer än bara ”oj, det blev en stor iPod Touch” känns det som att iPad kanske kan vara något att ha ändå. Det enda som skulle förstöra det är att programen måste ha möjligheten att skicka filerna till en ”riktig” dator. Finns inte den kopplingen utan man är fast i iPad-världen är det dömt att misslyckas. Sett till hur iPhonen fungerar så hoppas jag att Apple tänkt till runt detta och behandlar iPad som det mellanting det faktikst är. I alla fall jag vill ha möjligheten att arbeta både på min dator och iPad:en, annars kommer jag bara jobba på datorn. Och då är iPad:en överflödig i vilket fall som helst.
Jag gick upp runt klockan sex i morse för att se Apples Keynote där de släppte sin tablet. Jag såg framför mig en liknande upplevelse som när de släppte den första versionen av iPhone för några år sedan. Gåshud, rysningar, jubel och hallelujamoments. 90 minuter senare kände jag bara ett stort ”jaha”. 90 minuter där vi fick se hur man använde kalendern, bildgalleriet, kollar på film och surfar. Och det var som på en iPhone. Fast större.
iPad:en ska tydligen fylla upp utrymmet mellan iPhone och MacBook. Jag förstår tanken och tycker den på pappret är helt perfekt. Sedan började Keynote:n. Det jag fick se var en iPhone modell större, utan telefon. Det är alltså en iPod Touch, med möjlighet till 3G-uppkoppling. Och större skärm. Allt annat fungerade så som det gör i min iPhone. Visst, kalendern, bildgalleriet, adressboken och Safari såg riktigt bra ut det erkänner jag, men det tillförde inget som jag saknar idag.
Med tanke på att jag jobbar med webbutveckling, då primärt Flash/Flex, är det nödvändigt för mig att kunna köra dessa program. Då pratar jag inte bara om avsaknaden av Flash Player utan utvecklingsmiljöerna. Att dessa skulle gå att köra på iPad förstod nog de flesta inte skulle hända men Flash Playern förstår jag inte hur Apple kan låta bli att skicka med. Jag förstår och respekterar att de vill kontrollera sina plattformar men någonstans måste användarens behov komma före egna eventuella behov och åsikter.
Men låt oss leka med tanken (och det är en ganska angenäm tanke) att jag köper en iPad. Detta gör att om jag är på resande fot så har jag med min iPad (i vilken jag också har kalender, kontakter m.m), min iPhone (i vilken jag också har kalender, kontakter m.m) och min MacBook (där jag för tredje gången har kalender, kontakter m.m). Jag har alltså med allting tre gånger om. Och dessutom kommer jag garanterat använda min laptop till majoriteten av ”vad-det-nu-är-jag-ska-göra”. Jag ser faktiskt inte hur iPad:en fyller upp ett tomrum mer än det eventuella tomrum den tar upp i min väska. För så fort jag tvingas ta med min laptop så försvinner nyttan med iPad:en. Den kan ungefär samma saker som min iPhone samtidigt som den kan mycket mindre än min MacBook. Och det får mig att tänka till både en och sjutton gånger innan jag ens vill prova den.
Jag ser inte hur detta kan lösas genom en systemuppgradering och även om jag tycker om iPhone OS så är det begränsande. Ett mellanting mellan OS X och iPhone OS hade varit det optimala. Att få någon form av multitasking, filsystemåtkomst etc. Men den första generationens iPhone var inte heller den optimala mobiltelefonen utan den växte till sig, jag hoppas det samma gäller för iPad. Dessutom behöver vi i Sverige kunna köpa och hyra film/serier via iTunes för att detta inte skall bli ytterligare ett fall av AppleTV-syndromet.
iPad är säkert jättebra för den tilltänkta målgruppen, de som inte har en iPhone eller inte använder sin dator till mer än att surfa och hålla koll på vardagen. Tills dess att målgruppen inkluderar oss som använder våra datorer till mer känns det som att jag står utanför den gruppen.
I was asked if is possible to use my inverted mask-class with a dynamic mask. The answer right now is ”not yet”. But it got me thinking and if you ask me again in a few days the answer might be ”of course, it always has”. So I Googled some stuff about dynamic masks and found that almost none suited what I wanted. I wanted the user to be able to double click somewhere inside the swf, add as many anchorpoints they want, be able to move them around and if they so choose, delete them.
Not as much Frankencode as I was affraid it would be but someone might find it useful so I thought I´d share it. The code is commented if you are new to AS3 and want to know what is going on.
package{
import flash.display.Sprite;
import flash.events.MouseEvent;
import flash.events.Event;
public class Main extends Sprite{
//Setup a some stuff
public var maskBG:Sprite = new Sprite();
public var cord:Array = [];
public function Main():void{
// The image that will appear thru the mask
var lemmyImage:Sprite = new Sprite();
lemmyImage.addChild(new Lemmy());
addChild(lemmyImage);
// An invisible sprite that tracks where the user click
var clickMe:Sprite = new Sprite();
clickMe.graphics.beginFill(0xFF0000,0);
clickMe.graphics.drawRect(0,0,stage.stageWidth,stage.stageHeight);
clickMe.graphics.endFill();
addChild(clickMe);
// Some eventhandlers to see where the user click and to update the mask
clickMe.doubleClickEnabled = true;
clickMe.addEventListener(MouseEvent.DOUBLE_CLICK,addCord);
stage.addEventListener(Event.ENTER_FRAME,updateMask);
addChild(maskBG);
// Set the mask layer to cover the image
lemmyImage.mask = maskBG;
}
private function moveStart(e:MouseEvent):void{
e.currentTarget.startDrag();
e.currentTarget.addEventListener(MouseEvent.MOUSE_MOVE, moveUpdate);
}
private function moveStop(e:MouseEvent):void{
e.currentTarget.stopDrag();
e.currentTarget.removeEventListener(MouseEvent.MOUSE_MOVE, moveUpdate);
}
private function moveUpdate(e:MouseEvent):void{
// Get the location in the array for the handler
var id:int = getHandleId(e.currentTarget.name);
// Update the array with the new values
cord[id] = {id:e.currentTarget.name,x:e.currentTarget.parent.mouseX,y:e.currentTarget.parent.mouseY};
}
private function removeHandle(e:MouseEvent):void{
// Get the location in the array for the handler
var id:int = getHandleId(e.currentTarget.name);
// Remove the part of the array by splicing it.
// Save the splica in a temporaryarray so that it is possible
// to merge the stuff after out deletedpart with the array again.
var a:Array = cord.splice(id,cord.length);
for(var i:int = 1;i<a.length;++i){
cord.push(a[i]);
}
e.currentTarget.parent.removeChild(e.currentTarget);
}
private function updateMask(e:Event):void{
// Clear the masklayer
maskBG.graphics.clear();
maskBG.graphics.lineStyle(2,0xffffff);
maskBG.graphics.beginFill(0xFF0000,1);
// If the value of i is 0 then we want to move to the locatino.
// If we use lineTo it will draw a line from the top left corner.
for(var i:int=0;i<cord.length;++i){
if(i==0){
maskBG.graphics.moveTo(cord[i].x,cord[i].y);
}else{
maskBG.graphics.lineTo(cord[i].x,cord[i].y);
}
}
maskBG.graphics.endFill();
}
private function getHandleId(val:String):int{
// Hack to find the location of the coordinate in the array
for(var i:int=0;i<cord.length;++i){
if(cord[i].id == val){
var id:int = i;
}
}
return id;
}
private function addCord(e:MouseEvent):void{
//Add handle
var handle:Sprite = new Sprite();
handle.graphics.beginFill(0xff0000,1);
handle.graphics.drawRect(0,0,10,10);
handle.graphics.endFill();
handle.x = e.currentTarget.mouseX-5;
handle.y = e.currentTarget.mouseY-5;
// I use the datemethod just cause it easy to get a uniquevalue.
// It's not close to perfect so you should rewrite this part.
// It was late when I did this, sorry I guess =)
var now:Date = new Date();
handle.name = String(now.getUTCMinutes()+now.getMilliseconds()*Math.random());
// Set up the listeners for the handler
handle.doubleClickEnabled = true;
handle.addEventListener(MouseEvent.MOUSE_DOWN, moveStart);
handle.addEventListener(MouseEvent.MOUSE_DOWN, updateMask);
handle.addEventListener(MouseEvent.MOUSE_UP, moveStop);
handle.addEventListener(MouseEvent.DOUBLE_CLICK, removeHandle);
handle.addEventListener(Event.ADDED_TO_STAGE,updateMask);
addChild(handle);
// Push the coordinate into the array
cord.push({id:handle.name,x:e.currentTarget.mouseX,y:e.currentTarget.mouseY});
}
}
}
With this plugin you can post your livestreams and older clips from Bambuser on your blog running Wordpress.
Installation
You can install the plugin from the administrationpanel or manually (the two steps below).
1. Unzip the zipfile and upload the files to the ‘/wp-content/plugins/’ directory
2. Activate the plugin.
Usage
1. Enter the ‘[bambuser id=”XXXXXX”]’ short code into your post. The id number is the numbers in the end of the bambuser url (ex. 012345 in the url ‘http://bambuser.com/channel/user/broadcast/012345′)
2. If you want, you can set the height and width of the player by adding the values to the shortcode like this, [bambuser id=”XXXXXX” height=”300″ width=”400″]
Source
<?php
/*
Plugin Name: Bambuser for Wordpress - Shortcode
Plugin URI: http://blog.mattiasnorell.com/2010/01/03/bambuser-for-wordpress/
Description: Allows the user to embed livestreams and videos from Bambuser.
Author: Mattias Norell
Version: 1.0
Author URI: http://blog.mattiasnorell.com/
License: GPL 2.0, @see http://www.gnu.org/licenses/gpl-2.0.html
*/
class mattiasnorell_com_bambuser_shortcode {
function shortcode($atts, $content=null) {
extract(shortcode_atts(array(
'id' => '',
'width' => '320',
'height' => '276',
), $atts));
if (empty($id)) return '<!-- Bambuser: You did not enter a stream id -->';
if (!is_numeric($id)) return '<!-- Bambuser: The stream id must be numbers only -->';
return '<object id="bplayer" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="'.$width.'" height="'.$height.'"><embed name="bplayer" src="http://static.bambuser.com/r/player.swf?vid='.$id.'" type="application/x-shockwave-flash" width="'.$width.'" height="'.$height.'" allowfullscreen="true" wmode="opaque"></embed><param name="movie" value="http://static.bambuser.com/r/player.swf?vid='.$id.'"></param><param name="allowfullscreen" value="true"></param><param name="wmode" value="opaque"></param></object>';
}
}
add_shortcode('bambuser', array('mattiasnorell_com_bambuser_shortcode', 'shortcode'));
?>
Download
I guess you know how this works by now, so click here to download the plugin. This will take you to the plugins page over at Wordpress.org so that you always get the latest version.
Det semiproffesionella möter det semiprivata. Oavsett vilket kommer det pratas mycket kod. Som en liten vänlig varning på vägen. Jag som skriver heter Mattias Norell och jobbar som flashutvecklare på webbyrån Two i Karlstad.