25 november, 2008

Cisco: Om Pagent (Paket Generator) i Dynamips

Förord
Den här artikeln kommer gå igenom lite om verktyget Pagent som används i Cisco routrar i labbmiljö för att simulera olika typer av nätverkstrafik genom nätverket. Du kommer inte kunna läsa om funktionerna som Pagent erbjuder, utan kommer istället att få reda på alternativ som går att använda istället. Det kan hända att jag skriver en senare artikel om hur man använder Pagent men jag är inte helt säker.

QoS - Quality of Service
De som läser Cisco CCNP och har kommit till delen om "Optimizing Converged Cisco Networks" (ONT) använder utrustning som ska klara av Quality of Service "Qos". Jag tänker inte gå igenom vad QoS är för något på djupet men jag kan beskriva det lite som att man prioriterar olika typer av trafik.

T.ex så kan man prioritera Voice-over IP "VoIP", alltså röstmeddelanden/röstsamtal/iptelefoni, högre än trafik som bara innehåller chattkonversationer, torrentnedladdningar m.fl. Detta gör man för att inte ett iptelefoni-samtal skall bli brusigt, att paketen ska komma i rätt följd, och att det inte ska bli några fördröjningar.

QoS har många användsningsområden men enkelt beskrivet kan man säga att QoS ger mer bandbredd åt högprioriterad nätverkstrafik för att man skall få en så bra tjänst (eng. service) som möjligt.

Lite om laborationer med QoS och Pagent
När man då skall laborera med QoS så skriver man kommandon som skickas till routrarna för konfiguration, men hur skall man testa att trafik verkligen prioriteras på rätt sätt? Man vill ju inte direkt laborera i en verklig produktionsmiljö så vad kan man göra istället?

Pagent är ett egetutvecklat verktyg, tillverkat av Cisco för internt bruk, för paket generering och test av nätverk och implementerade QoS lösningar. Pagent är en specialdesignad version av ett Cisco IOS och kan bara aktiveras med hjälp av ett "machine id" och en "license key", alltså ett id och en unik nyckel. Man kan alltså inte ta en Pagent IOS från sin skola/arbete och licensnyckel med sig hem och sedan testa i Dynamips. För då krävs en annan licensnyckel.

Låst till hårdvara
En Pagent licens är låst till den specifika hårdvaran och man måste fråga Cisco efter en giltig licensnyckel för att kunna gå vidare. Det är endast anställda inom Cisco, CCIE, samt vissa skolor/universitet som undervisar CCNP som har fått tillåtelse att använda Cisco Pagent IOS utanför Ciscoföretaget.

Andra lösningar istället för Pagent
En lösning för de som inte får Pagent att fungera kan istället skaffa en mjukvara som installeras lokalt på er dator och som genererar paket genom ett Microsoft Loopback gränssnitt via Dynamips.

Ett program som är Shareware är "Network Traffic Generator and Monitor" [1] som kan generera IP/TCP/UDP/ICMP från klienter till servrar för att testa bandbredd, policys, brandväggar mm i sitt nätverk. Man kan allstå stresstesta nätverket.

En annan lösning är att använda Cisco SLA som endast stöds av nyare versioner av IOS (v12.4+). Mer om det kan ni läsa om på Ciscos webbsida i pdf-format "sla_cr_book.pdf" [2]. Det jag kan berätta lite kort om SLA är att man konfigurerar responder och transmitter på Cisco routrar. En transmitter konfigureras till att skicka en viss typ av trafik till en responder (sv. svarare) som sedan skickar tillbaks trafiken. Sedan kan man gruppera flera transmitters (sv. sändare) och ställa in tid samt hur ofta man vill att paket skall skickas. Med hjälp av detta kan man då skicka flera typer av trafik mellan två Cisco routrar.

Sedan i Dynamips kan man då implementera de flesta QoS reglerna och identifiera om det lyckas eller inte. En viktig sak man ska tänka på i Dynamips är att hastigheten går inte att styra med clockrate på seriella gränssnitt. Dynamips kan inte emulera lager 1 i OSI-modellen (det fysiska lagret). Så därför kan det uppstå problem när man ska testa köer (eng. queue).

Pagent i Dynamips fungerar
Jag vill tillägga att om man får tag i en Pagent IOS samt en giltig licensnyckel så kommer det att fungera i Dynamips. Jag har nämligen fått tag i en giltig licens för modell c2611 som kan köras utan problem i Dynamips. Själv använder jag det grafiska verktyget GNS3 för hanteringen av Dynamips relaterade funktioner och det fungerar hur fint som helst.

Jag tänker aboslut inte dela med mig av "machine id" och "license key". Det får ni försöka få tag på själva. Så snälla kontakta inte mig via kommentarer eller epost angående detta.

Referenser
[1] http://www.topshareware.com/Network-Traffic-Generator-and-Monitor-download-51163.htm
[2] http://www.cisco.com/en/US/docs/ios/ipsla/command/reference/sla_cr_book.pdf (10MB)

22 november, 2008

WebbTips: Läs om verklighetens Minority Report

Det här är nog ett av det häftigaste jag någonsin har sett. Killen som var med under inspelningen av framtidsfilmen Minority Report har skapat ett gränssnitt som användes i filmen. Man använder händerna för att utföra saker i systemet. Jag har själv sett filmen och när jag såg detta kunde jag inte släppa blicken ifrån videon.

Jag läste om detta på Metros webbsida och här är länken till det coolaste jag har sett på länge. Läs artikeln "Minority Report" har blivit verklighet (Metro) I artikeln finns även en länkad Flashvideo som visar när systemet g-speak används av grundarna.

Det är verkligen ett teknikens under om man frågar mig. Wow!

21 november, 2008

WebbTips: Googles epost Gmail har fått snygga teman

Idag när jag skulle kolla min epost upptäckte jag att Gmail har fått en ny inställning som låter användarna ändra webb-tema, alltså ändra utseende på sin inkorg med mera. Jag gillar verkligen att de flesta av de nya temavalen är väldigt stilrena. Sedan fanns det ju ett tema som skilde sig markant med de andra - grön, svart och totalt förskräcklig är "Terminal". Visst att det är lite coolt med grönt och svart om man är datorintresserad men det temat är bara för mycket.

Mina fyra favoriter i nuläget är:
  • Minimalistiskt
  • Silverkant
  • Havsdröm (röd)
  • Planeter
Temat "Grafitti" var annars väldigt snyggt gjort men det var inget jag fastnade för.

Sammanfattningsvis kan jag säga att om ni har Gmail så tycker jag ni ska testa ändra ert tema till något snyggt, gulligt eller häftigt eller liknande som ni tycker om. Snyggt jobbat Google!

19 november, 2008

Webbdesign: Färgtips

Idag har jag tittat lite på Adobe Air och upptäckte en väldigt smidig applikation som heter Kuler [1]. Det är ett slags verktyg för att leta efter färgkombinationer som matchar, eller som helt enkelt har skapats av användarna som är registrerade.


(Klicka på bilden för att förstora)

Källor
[1] http://kuler.adobe.com/

07 november, 2008

Java: Bra tips för java programmerare

Förord
(090122) Först skall jag berätta att jag har bytt namn på inlägget samt ändrat innehållet. Inlägget riktar inte sig längre till nybörjare utan istället för de som lärt sig grunderna i Java.

Jag läser just nu (081107) Java Programmering Fortsättning på högskolan i Halmstad och nu är det lite svårare att hålla koll på allt man har lärt sig. Jag kan grunderna i Java men ibland får man hjärnsläpp eller så söker man efter lösningar på problem som verkar svåra men som egentligen har en smidig och enkel lösning.

Men vad ska då det här inlägget handla om?
Jo jag hade tänkt publicera lite Java tips under tiden som jag går utbildningen för att hjälpa mig själv och andra som har liknande problem. Tipsen lämpar sig väl för programmerare som redan känner till Java men som fortfarande inte riktigt känner sig som hemma. Inlägget är även till för de som vill fräscha upp minnet lite. Nybörjare får gärna göra ett försök att hänga men det är inget jag rekommenderar.

Själv använder jag detta inlägg som uppslagsverk för det jag inte kan i huvudet (i viss mån).

Viktigt att observera för er läsare
Detta inlägg kommer att uppdateras och redigeras allt eftersom när jag väljer att lägga till eller ta bort tips från listan. Ni själva får gärna skriva en kommentar och tipsa om era smidiga Java lösningar. Men tänk på att hålla det på en mycket grundläggande nivå.

Lista med Java tips
x Omvandla från int till String:
// Det snabbaste sättet att omvandla från heltal till textform
int tal = 5;
String text = ""+ tal;

x Använda reguljära uttryck (regular expressions) - Bra att använda om man t.ex vill matcha en text mot endast gemener, versaler och siffror (eng. alphanumeric) eller andra kombinationer:
import java.util.regex.*; // importera biblioteket

String s = "84peon68"; // Exempel på användarnamn som skall kontrolleras
Pattern p = Pattern.compile("^[A-Za-z0-9]+$");// Sök efter Versaler, gemener, siffror
if ( p.matcher(s).matches() ) {
// Träff
}

x Skapa en konstant (eng. constant) variabel:
// Notera att man måste initiera ett värde direkt vid deklarationen.
// Ett bra användningsområde är att man slipper ändra data överallt i koden och
// kan istället ändra på ett enda ställe.
final int MAX_ANTAL = 7;
final float RANTA = 0.25;

x Statiska metoder:
// Klassen Math är statisk (eng. static) för den kan
// användas för att anropa metoderna direkt:
double pi = Math.PI;
int power = Math.pow(2, 8);

x ...

Slutord
Så! Det här var en del av de tips jag kan ge till Java programmerare som precis lärt sig grunderna och vill ha lite tips. Tveka inte att titta tillbaks vid ett senare tillfälle för att se efter om listan med tips har blivit utökad.

Troligen kommer listan att utökas när jag nu (090122) läser kursen Algoritmer och Datastrukturer (Java).

Jag hoppas ni fick svar på några funderingar och att ni löste ert problem (ni som nu hade något). Om ni undrar över något och om ni är nybörjare inom Java får ni gärna skriva en kommentar och fråga om jag kan skriva om det. Jag hoppas att jag skall kunna ge er svar, men kan inte garantera något svar.


Referenser och källor
http://www.regular-expressions.info/

01 november, 2008

Javascript: Ändra bakgrundsbild dynamiskt på en webbsida

Javascript är ett smidigt skriptspråk när man vill ändra saker på en webbsida. Eftersom allt som visas på sidan är objekt så kan man komma åt dessa och ändra egenskaperna via Javascript. Det vi ska göra nu är att ändra en bild dynamiskt till vad vi vill.

Varför vill man göra detta?
Tänk dig att du t.ex har en webbsida som använder en CSS stilmall för att sköta design och layout. På sidan finns följande div-tagg innanför <body>:

filnamn: index.html
<div id="pageHeader">Titel här</div>

som innehåller en bakgrundsbild med följande kod inkluderad i stilmallen:

filnamn: styles.css
#pageHeader {
background-image: url(/images/headers/bigblue.png);
}

Då har alla undersidor med det div-ID samma bakgrundsbild och det kan vara lite krångligt att ändra manuellt. Då kom jag på att man kan ange i koden för den aktuella webbsidan en sökväg till den bild man vill ha som bakgrundsbild som då används istället för originalbilden.

Detta är användbart i följande exempel: Du har t.ex en webbsida om ett populärt resmål men vill även ha en undersida som innehåller historia om resmålet. Då tycker du att det hade passat med en annan bild som visar hur området såg ut förr.

Hur Javascriptet fungerar
Skriptet fungerar som så att det söker igenom den aktuella webbsidan efter ett unikt ID som innehåller en sökväg till en bild som ska byta ut den som redan visas på sidan. Om inget ID hittas så lämnas originalet oförändrad.

Placera följande kod som inkluderar skriptet innan taggen :
<script type="text/javascript" src="changeheader.js"></script>

Här är koden för skriptet:

filnamn: changeheader.js

//
// cross browser getElementById()
// -- väldigt smidigt sätt men det finns andra implementeringar --
function getObject(id) {
var object = null;
if( document.layers ) {
object = document.layers[id];
} else if( document.all ) {
object = document.all[id];
} else if( document.getElementById ) {
object = document.getElementById(id);
}
return object;
}

/**
* En funktion för cross-browser kompatiblititet när vi lägger till
* events på sidan.
* Den stödjer endast javascript funktioner som har 'on'
* framför (t.ex onLoad).
*/
function addEvent(element, evType, func, useCapture)
{
// Firefox?
if (element.addEventListener)
{
element.addEventListener(evType, func, useCapture);
return true;
}
// Internet Explorer?
else if (element.attachEvent)
{
var ret = element.attachEvent("on"+evType, func);
return ret;
}
else
{
// Visa ett meddelande för besökaren att webbläsaren
// måste uppgraderas för att stödja javascript
// funktionalitetet fullt ut.
var msg = "Your webbrowser doesn't support the Javascript used on this page.\n";
msg += "Please upgrade to be able to use full functionality.\n\n";
msg += "//Staff";
alert(msg);
}
}

//
// Change the headerbackground image
// -- Här är den specifika koden som ändrar bakgrunden --
//
// Copyright &copy 2008 - Waschman
// License: Open Source
//
function changeHeader()
{
// The div-header
headerBox = getObject("headerBox");
// The div that contains the path
headerPlaceholder = getObject("dynamicHeaderImage");

// Did we fint the right object?
if (headerPlaceholder == null) {
/*alert("Skriptet vet inte vilken bild som ska användas som sidhuvud!\nVar vänlig kontakta support");*/
return false;
}

// Get the path
pathToImage = headerPlaceholder.innerHTML;

// uncomment to hide placeholder if no inline-css is used
//headerPlaceholder.style.display = "none";

// change image
headerBox.style.backgroundImage = "url("+ pathToImage +")";
}

//
// Body onload
// -- Denna kod kör funktionen “changeHeader” vid body onLoad --
addEvent(window, "load", changeHeader);

Så, det var koden och nu återstår bara att lägga in följande kodsnutt innanför <body> som aktiverar ändringen. Tänk på att bara lägga in denna kod på de sidor som du vill ska ha en specifik bakgrundsbild som "header".

filnamn: historia.html
<div id="dynamicHeaderImage" style="display: none">/images/headers/new_header_red.png</div>

Det är här ni anger vilken ny bild ni vill använda. För att se ett exempel kan ni ladda ner ett komprimerat zip-paket med några testfiler.


(Tillägg 25/7-09) Flytande ramar - IFrame
Om man vill kunna komma åt dynamicHeaderImage som är placerad i en iframe, från huvudsidan, kan man använda följande changeheader.js istället.

Varning!
Observera att koden inte riktigt fungerar som den ska. Allt fungerar förutom att man måste ladda om index sidan manuellt för att bakgrundsbilden ska visas. Detta för att changeHeader() körs vid body onload(). Om något vet hur man fixar detta så skriv gärna en kommentar.

Filnamn: changeheader.js
Beskrivning: Används endast för de som använder iframes. Inte testad med vanliga ramar.
//
// cross browser getElementById()
// -- väldigt smidigt sätt men det finns andra implementeringar --
function getObject(id) {
var object = null;
if( document.layers ) {
object = document.layers[id];
} else if( document.all ) {
object = document.all[id];
} else if( document.getElementById ) {
object = document.getElementById(id);
}
return object;
}

function getIframeObject(oIframe, id) {

var newIframe = getObject(oIframe);
var innerDoc = newIframe.contentDocument || newIframe.contentWindow.document;

if( innerDoc.layers ) {
object = innerDoc.layers[id];
} else if( innerDoc.all ) {
object = innerDoc.all[id];
} else if( innerDoc.getElementById ) {
object = innerDoc.getElementById(id);
}
return object;
}

/**
* En funktion för cross-browser kompatiblititet när vi lägger till
* events på sidan.
* Den stödjer endast javascript funktioner som har 'on'
* framför (t.ex onLoad).
*/
function addEvent(element, evType, func, useCapture)
{
// Firefox?
if (element.addEventListener)
{
element.addEventListener(evType, func, useCapture);
return true;
}
// Internet Explorer?
else if (element.attachEvent)
{
var ret = element.attachEvent("on"+evType, func);
return ret;
}
else
{
// Visa ett meddelande för besökaren att webbläsaren
// måste uppgraderas för att stödja javascript
// funktionalitetet fullt ut.
var msg = "Your webbrowser doesn't support the Javascript used on this page.\n";
msg += "Please upgrade to be able to use full functionality.\n\n";
msg += "//Staff";
alert(msg);
}
}

//
// Change the headerbackground image
// -- Här är den specifika koden som ändrar bakgrunden --
//
// Copyright © 2008 - Waschman
// License: Open Source
//
function changeHeader()
{
// The div-header
headerBox = getObject('headerBox');
// The div that contains the path
headerPlaceholder = getIframeObject('iframeContent', 'dynamicHeaderImage');

// Did we fint the right object?
if (headerPlaceholder == null) {
//alert("Skriptet vet inte vilken bild som ska användas som sidhuvud!\nVar vänlig kontakta support");
return false;
}

// Get the path
pathToImage = headerPlaceholder.innerHTML;

// uncomment to hide placeholder if no inline-css is used
//headerPlaceholder.style.display = "none";

// change image
headerBox.style.backgroundImage = "url("+ pathToImage +")";
}

//
// Body onload
// -- Denna kod kör funktionen “changeHeader” vid body onLoad --
addEvent(window, "load", changeHeader);

Använd denna kod för att visa iframe:
<iframe id="iframeContent" name="iframeContent"></iframe>

Koden är nästan likadan som den förra men funktionen 'changeHeader' har modifierats och en ny funktion 'getIframeObject' har lagts till.

Lycka till!

Välkomna till bloggen

Välkomna ska ni vara kära besökare. Jag skriver om IT för att det är kul och för att jag vill dela med mig av information och kunskap. Jag försöker hålla bloggen så kategoriserad som möjligt för att ni enklare ska hitta intressanta länkar och artiklar.