Arkiv | Programmering RSS feed for this section

Android Apps med Appinventor

25 sep

1

Da jeg i år er startet i 3.g har jeg skulle vælge et yderligere valgfag. I overenstemmelse med mine interesser har jeg valgt faget Informations Teknologi hvilket i sin sag går ud på at forstå hvad der sker software mæssigt på en computer, telefon eller tablet. Vores lærer har i år valgt at vi skal lærer at lave Android applikation med Google’s begynder værktøj kaldet App Inventor. App Inventor bliver i skrivende stund udviklet og vedligeholdt af MIT.

App inventor er egentlige bare et Drag and Drop værktøj hvori man frit og enkelt kan lave simple og til deles også advancerede applikation til Google mobile styresystem Android. Værktøjet egner sig super godt til personer uden nogen dybdegående teknisk viden. Dette gør også at man ikke har helt lige så mange muligheder som man har hvis man satte sig for at lave en App med Google traditionelle developer SDK og derefter give sig i gang med noget Java kode. Specielt design delen i App inventor er rimelig dårlig og det er faktisk her at man støder på flest udfordringer, selvom det burde være i programmeringsdelen.

App inventor kører delvist i den almindelig browser (designeren) men når man ønsker at tilknytte funktionalitet til de objekter man har tilføjet i designere bliver man nød til at kører en lille java applikation på sin computer hvori man kan starte en emulator og egentlig programmere selve app’en.

Nå, ikke mere snak om selve udviklingsværktøjet dette kan du læse meget mere om her.

Til sagen.
Vi fik i skolen besked på at udvikle en applikation som man kunne bruge i skole sammenhæng. Langt størstedelen af klasse kammeraterne valgte at lave app’s til læring af f.eks. guder eller matematiske udtryk. Dette er også super smart og fungere fint. Jeg valgte dog at gå en lidt anden vej og lave en en historisk tidlinje over danmarks historien. Jeg synes selv at programmet blev super fint taget i betragtning af at jeg kun brugte 2 moduler på den (200 minutter.).

App’en havde føldende funktionaliteter:

  • Læse om begivenheder i  Danmarks Historien.
  • Læs mere om begivenheden ved at åbne browseren på telefonen og gå ind på den respektive Wikipedia hjmmeside med mere information om emnet.
  • Skrive noter til den enkelte begivenhed ved brug af TinyDb.
  • Sende og dele noter via. SMS.
  • Feedback på bruger handlinger ved hjælp af alert pop-up.

Jeg har lavet en lille præsentation om min app herunder:

Share

Sådan gemmer du Valutakurserne i en Database

31 jul

4

Til tider kan det være nødvendigt at have de nyeste valutakurser ved hånden når man laver online projekter. Heldigvis tilbyder nationalbanken en dagligt opdateret xml fil med de mest anvendte valutakurser. Jeg vil i dette indlæg vise dig hvordan man kan hente disse kurser ind i en mysql database, hvorfra kurserne kan hentes ud andre steder i din applikation hvor der er behov for dem.

Jeg anvender scriptet ved automatisk at kalde filen en gang i døgnet ved hjælp af et cron job på serveren. Dette betyder at jeg altid kan spole tilbage i tiden og tjekker hvad kursen var til en bestemt dag.

Jeg anvender en egen udviklet class til at snakke sammen med databasen. Denne får du selvfølgelig også med i pakken når du nu downloader og bruger min script :-)
For at anvende scriptet kræves det kun at du laver en database med en tabel ved navn valutakurser. Denne tabel skal indeholde 5 kolonner, som ser således ud:

  1. id (int) primær nøgle og auto increment.
  2. short (varchar 512)
  3. description (text)
  4. rate (float)
  5. time_date (timestamp)

Når denne tabel er oprettet og du har dine oplysningerne til databasen klar, er det nu til at sætte scriptet op.

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
<!--?php </p-->

// Inkluderer database klassen som bruges til at snakke med database
include('class.mysql.php');

// Forbinder til databasen. Du skal her rette i oplysningerne så
// de passer til dine database informationer
$mysql = new db( 'DATABASE SERVER', 'DATABASE BRUGER', 'DATABASE PASSWORD', 'DATABASE NAVN');

// Addresse til den xml fil som nationalbanken stiller til rådighed
$kurs_url = "http://www.nationalbanken.dk/dndk/valuta.nsf/valuta.xml";

$xml = simplexml_load_file($kurs_url);

foreach($xml-&gt;dailyrates as $dailyrates){

foreach($dailyrates-&gt;currency as $cur) {
$code = utf8_encode( $cur['code'] );
$description = utf8_encode($cur['desc'] );
$rate = utf8_encode(str_replace(',', '.', $cur['rate']));

$input = array(
'short' =&gt; $code,
'description' =&gt; $description,
'rate' =&gt; $rate
);

// Ret her navnet 'valutakurser' hvis din tabel har et andet navn
$mysql-&gt;input('valutakurser', $input);
}
}

endif;

Selvom filen som lagre kurserne kan ses ovenfor, anbefaler jeg at du downloader scriptet via. linket øverst i indlægget, da du hermed også vil få database klassen som bruges til at snakke sammen med din database og dermed lagre kurserne i din tabel.

Share

Hent Trustpilot ratings med php

30 jul

1

Jeg arbejder i øjeblikket på et nyt affiliat website ved navn billighosting.info hvor jeg har brug for automatisk at hente trustpilot scoren for forskellige udbydere af hosting løsninger og derefter vise det på hjemmesiden.

Derfor har jeg lavet et lille script som automatisk henter scoren fra trustpilot.dk og derefter gemme data i en database. Jeg har forsimplet scriptet en smule og du kan nu se der herunder. Brug det på eget ansvar. Bemærk dog at da scriptet bruger scraping teknologien virker det kun hvis trustpilot ikke foretager ændringer på deres website.

Desuden anvendes php værktøje “Simple Html Dom Parser” som gør det nemt og hurtigt at hente DOM elementer fra en html string. Du kan læse mere om og downloade det her.

Scriptet kan evt. køres som et cron og derefter gemme data i en database, hvorefter data kan trækkes ud hvor det skal bruges. Jeg anbefaler man cache eller gemmer data på en eller anden måde. Skriv dog endlig i kommentar feltet hvis du har problemer.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php

require( 'STI TIL SIMPLE HTML DOM PARSER FIL' );

$urls = array(
'TRUSTPILOT VIRKSOMHEDS URL 1',
'TRUSTPILOT VIRKSOMHEDS URL 2',
);

foreach( $urls as $url )
{
$html = file_get_html( $url );

foreach( $html->find( '.average' ) as $element)
{
$clean = strip_tags( $element );
$clean = trim( $clean );

echo $clean . "<br>";
}
}

Det script jeg selv har anvendt er en smule mere advanceret i og med jeg gemmer og modtager data fra en database. Dog er princippet fuldstændig det samme og jeg har valgt at bibeholde scriptet således at du nemt kan tilpasse det til dine behov.

Der hvor du ser linjen

1
echo $clean . "<br>";

kan du gøre hvad du vil med trustpilot scoren som har variablen $clea

Share

Php Slim Framework Opsætning

30 jul

1

Hej verden!

Det er efterhånden mange uger siden jeg sidst har skrevet her på bloggen, men da det jo er sommerferie har jeg haft massere af tid til at rode med en masse ting på computeren. Dette har resulteret i jeg har massere nyt at berette om og denne gang vil jeg forklarer lidt om hvordan jeg har anvendt et micro framework ved navn Slim.

I frameworket har jeg “integreret” to yderligere værktøjer som gør det nemmere at anvende frameworket og opsplitte de enkelte dele i en applikation. Ideén med et framework er at gøre det nemmere og hurtigere at udvikle applikationer. Dog er det ikke derfor jeg har valgt at anvende et framework til mine fremtidig projekter. Fordelene ved et framework er nemlig også at man naturligt får struktureret sin kode, sådan at man senere kan gå tilbage og lave rettelser, hvilket også gør det nemmere for andre at ændre og opdaterer koden hvis dette bliver nødvendigt.
Arbejder man på større projekter hvor man har en webdesigner til at lave frontend designet, kan han/hun nemt og hurtigt bruge funktioner fra det bagvedliggende system uden at skulle vide noget om hvad der sker unde rmotorhjelemen. Præcis dette vil jeg forklare mere om under afsnittet om RainPTL, som er en såkaldt template engine.

Slim Frameworket

Det er efterhånden blevet rimeligt udbredt blandt mange php udviklere at bruge de såkaldte frameworks. Frameworks gør det nemmere og hurtigere at udvikle applikationer og de kender måske allerede frameworks som Codeigniter, CakePhp, Symfony eller Zend Framework. Fælles for disse fire frameworks er at de alle anvender MVC strukturen til at holde styr på de forskellige aspekter af en applikation.

Dog er min synes jeg ikke at der er behov for at splitte koden så meget op som denne struktur ligger op til og derfor har jeg valgt at anvende et micro framework hvilke både har sine fordele og ulemper.

Der findes et hav af micro frameworks til php, et af de mere respekterede hedder Slim og det er præcis dette jeg har valgt at anvende. Før jeg tog denne beslutning legede jeg også med Flight som er rigtigt fedt og med mange muligheder for udvidelse. Men da alle methods and properties i dette framework er statiske valgte jeg i stedet Slim.

Slim’s mål er som navnet lyder at være utrolig minimalistisk og i princippet kun gøre en opgave nemlig, at danne den ydre ramme om applikationen og intet andet. Denne opgave udføres ved at lave en “route” i slim som fortælle hvilke funktion som skal vises når en bestemt url bliver kaldt i addresse baren. En meget simpel “hello world” funktion i Slim kan se således ud.

1
2
3
4
5
6
7
8
9
10
11
<?php

require( 'STI TIL DIN SLIM.PHP FIL' );
$app = new Slim();

$app->get( '/', function() {
echo "Hello World";
});

$app->run();
?>;

Den meget simple applikation ovenfor gør det følgende:

  1. Inkludere frameworket som er en fil man downloader for Slim’s hjemmeside. Denne fil er nødvendig hvis man ønsker at bruge frameworket. Det svarer lidt til at inkludere en stylesheet fil
  2. Variablen $app bliver tildelt slim frameworket, så man gennem denne kan anvende frameworket. Det er muligt at sætte en lang række instillinger i dette punkt, det har vi dog ikke valgt at gøre her.
  3. Nu kommer det spændende. Frameworket bliver bedt om at kører en bestemt funktion når addressen / bliver efterspurgt i browseren via. en GET request. Derefter kører funktionen mellem de krølede parenteser og heri bliver der skrevet Hello World til browseren. Har du ikke version 5.3.x versionen af php skal dene Hello World applikation skrives på en anden måde, det vil jeg dog ikke gå dybere ind i, i dette indlæg
  4. Afslutningsvist køres applikationen og frameworket starter programmet.

NotORM

Da Slim frameworket ikke kan meget andet end at kalde den funktion som browseren efterspørger, er det nødvendigt at integrerer sine egne klasser, funktioner, hjælpere eller hvad man ellers har behov for, hvis man ønsker yderligere muligheder. Dette har jeg ikke noget mod, for ønskede jeg et framework med alle muligheder i forvejen integreret havde jeg valgt et af de tidligere omtalte frameworks.

NotORM er en hjælper til at snakke sammen med din database. NotORM bruger pdo database laget til forbinde til databasen hvilket betyder at du gennem NotORm både kan anvende Mysql, SQlite og en række andre databaser uden problemer. Jeg bruger udelukkende Mysql, så dette vil jeg fokuserer på i dette indlæg.

Jeg har valgt NotORM fordi det er rimelig simpelt og har samtidig en flot syntax :)
Se bare her hvordan man kan få alle rows ud af en tabel hurtigt og nemt:

1
2
3
<?php
$result = $db->fiktiv_tabel->limit( 10 );
?>;

Linjen ovenfor modtager de første 10 rækker en den fiktive tabel. Mere simpelt kan det næsten ikke blive.

I den index fil som du kan se i bunden af dette indlæg, kan du se hvordan jeg har integreret NotORM i min Slim applikation.

RainTPL

RainTPL er den mest simple template engine som overhovedt findes. RainTPL har kun 8 forskellige metoder man skal huske, hvilket gør det super nemt for designere, hurtigt at designe frontend delen af din app.

RainTPL vil typisk modtage variable eller array fra dine routes, hvorefter designeren eller dig selv kan bestemme hvor variablen eller data fra et array skal vises. Frodelen ved RainTPL er at der ikke bruges php på nogen måde. Dette er faktisk lidt en løgn for man skriver faktisk php bare på html form. Dette kan bedre forklares med et lille eksempel.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// RainTPL - Vis en variable
{$variable_navn}

// Php - Vis en variable
echo $variable_navn

// RainTPL - Sådan laver man en løkke gennem et array og viser indholdet
{loop='$array_name'}
{key} .{value.name}
{/loop}

// Php - Sådan viser man indholdet af et array i php
foreach( $array_name as $key => $value)
{
echo $key . $value;
}

Selve opsætning

Nu når du ved en masse om hvad de tre værktøjer kan, er det tid til at se på hvordan man kombinerer det hele. Jeg har struktureret min applikation i følgende mapper, men følgende indhold.

Resources
- NotORM
- NotORM filer
- RainTPL
- RainTPL filer
- Yderligere ressourcer som f.eks. jQuery, LESS, yderligere klasser osv.

Slim
- Selve slim frameworket ligger i denne mappe.

Templates
- Alle template filer ligger i denne mappe.
- Udelukkeden html, css, js filer må ligge i denne mappe efter hensigten, altså kun de filer som viser selve applikationen.

Routes
- I denne mappe ligger alle php filer som bestemmer hvad applikationen skal gøre
- Det er disse filer som validerer data, snakker sammen med databasen osv.

- index.php
- config.php
- my_view.php

Index filen og alt dens magi

I index filen sker alt det magiske. Det er nemlig index filen som sørger for at binde applikationen sammen. Min index fil har jeg vedhæftet nederst i dette indlæg. Der er dog behov for at knytte en række kommentare til den for at forstå den.

Filen kan ikke fungerer uden config.php, da der i denne fil står oplysninger om databasen m.m.
I index filen inkluderes alle filer i mappen “Routes”. Dette gøres ved automatisk at scanne mappen Routes og derefter tjekke om indholdet er en fil eller en mappe. Hvis det er en fil inkluderes den. Denne metode er langsom hvis mappen indeholder rigtig mange filer. Derefter anbefaler jeg at man manuelt skriver inkluderingerne ind hvis man har mere end 10 filer i mappen, eller evt. cache filerne som bliver scannet evt. med memcached.

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
<?php

/**
* Includes the necessary files for the system to work
* 1. The Micro Framework Slim
* 2. The custom view class
* 3. The NotORM databasebase communicator helper
* 4. The configuration file
*/

require( 'Slim/Slim.php' );
require( 'my_view.php' );
require( 'config.php' );
require( 'Resources/Validator.php' );
require( 'Resources/ApiClient.php' );

/**
* Starts the app and instiates the Slim framework
*/

$slim_settings = array(
'mode' => 'development',
'templates.path' => './Templates',
'view' => new my_view(),
);
$app = new Slim( $slim_settings );

/**
* Connects to the database and instantiates the db object
*/

if( DB_CONNECTION ) {
require( 'Resources/NotORM.php' );
$pdo = new PDO( DB_TYPE . ":dbname=" . DB_NAME . ";" . DB_SERVER, DB_USER, DB_PASSWORD );
$db = new NotORM($pdo);
}

/**
* Defines the routes by including all files in the folder called Routes
* Consider to write out all the routes one by one if there are more than 10 routes, needed to be included.
* This will increase performance.
*/

$route_path = "./Routes/";
$dir = scandir( $route_path );
foreach( $dir as $item )
{
$file = $route_path . $item;
if( is_file( $file ) ) { require( $file ); }
}

/**
* Starts the app
*/

$app->run();
Share

Gratis Grooveshark API class

27 aug

0

Hej Alle, det er længe siden der har været noget aktivitet på siden, men nu er det tid til et lille indlæg igen. Jeg har for et par dage siden lavet en php klasse som gør at man nemt og hurtigt kan lave en applikation som samarbejder med Grooveshark.

Du kan downloade klassen her.

For at få url adressen på det første søgeresultat anvender du følgende metode:
getUrl(‘DIN SØGNING’);

For at modtage meta resultater for det første søgeresultat anvender du følgende metode:
getResult(‘DIN SØGNING’);
For at modtage meta informationer for helt op til 32 af søgeresultaterne anvender du denne metode, resultatet vil blive lageret som et php array.
getResults(‘DIN SØGNING’, ANTAL RESULTATER);

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
<!--?php /* * Client class to communicate with the Grooveshark/Tiny song. *  * Author: Gustav Svendsen * Website: www.gustavs.dk * Production time: 2011 * Requirements: TinySong Apikey, PHP and CURL extension   */ class grooveshark {          /*     * The methods are defined below     */     public $Apikey;     private $_Apiurl = 'http://tinysong.com/';     protected $_ApiFormat;               /*     * The constructor sets the ApiKey and the response format     */     public function __construct($Apikey, $ApiFormat = 'json') {                  //Defines the API key.         $this--->Apikey = $Apikey;

//Sets the format of the response
$this-&gt;_ApiFormat = $ApiFormat;

}

/*
* This functions returns only the link of the first search result
*/

public function getUrl($search = '') {

//Checks if the input has been set
if($search == '') { return false; }

//Constructing the URl of the GET request
$url = $this-&gt;_Apiurl . "a/" . urlencode($search) . "?format=" . $this-&gt;_ApiFormat . "&amp;key=" . $this-&gt;Apikey;

//Making the request
$result = $this-&gt;curl($url);

//Checks for valid result
if($result == '[]') { return false; }

//Returns the result of the request
return $result;

}

/*
* This functions return the number one search result with all the meta data
*/

public function getResult($search = '') {

//Checks if the input has been set
if($search == '') { return false; }

//Constructing the url for the call
$url = $this-&gt;_Apiurl . "b/" . urlencode($search) . "?format=" . $this-&gt;_ApiFormat . "&amp;key=" . $this-&gt;Apikey;

//Making the request
$result = $this-&gt;curl($url);

//Check if valid respond
if($result == '[]') { return false; }

//Converts the json object into a normal php array
$output = json_decode($result, true);

//Returns the result
return $output;

}

/*
* This function returns a number of search result, with the oppertunity to limit the output
*/

public function getResults($search = '', $limit = 32) {

//Checks the input
if($search == '') { return false; }

//Constructing the url for the request
$url = $this-&gt;_Apiurl . "s/" . urlencode($search) . "?format=" . $this-&gt;_ApiFormat . "&amp;limit=" . $limit . "&amp;key=" . $this-&gt;Apikey;

//Making the requet
$result = $this-&gt;curl($url);

//Checks if valid respond
if($result == '[]') { return false; }

//Converts json opj to php array
$output = json_decode($result, true);

//Returns the result
return $output;
}

/*
* This functions makes all the curl calls to the API and returns it to the requesting function
*/

protected function curl($input) {

//starts the curl session
$cl = curl_init($input);

//Sets the curl options
curl_setopt($cl, CURLOPT_HEADER, 0);
curl_setopt($cl, CURLOPT_AUTOREFERER, 1);
curl_setopt($cl, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0");
curl_setopt($cl, CURLOPT_RETURNTRANSFER, 1);

//Executes the curl call
$return = curl_exec($cl);

//Closes the curl session
curl_close($cl);

//Returns the value of the curl call
return $return;
}
}
Share

Nulled script

27 feb

0

Der findes et hav af fantastiske script ude på nettet som kan udføre alle mulige slags opgaver. Nogle af disse scripts er gratis og lanceret under open source eller andre licenser som tillader dig at bruge det kvit og frit. Der er dog også mange som koster penge og det er ofte disse scripts som er fede og som vi godt kunne tænke os at få fat på. De fleste søger derfor på google efter det script som man lige har set og som måske koster 100,500 eller flere tusinde kroner. Hvis man gør dette vil der typisk dukke en masse sider frem som påstår at du kvit og frit kan downloade scriptet uden at skulle betale en øre. Her er det du skal tænke dig om, for selvom mange mennesker desværre downloader ulovlig musik, film & spil skal man tænke sig ekstra godt om når det er noget som du skal bruge online. De fleste scripts du kan downloade ulovligt er nemlig det man kalder for nulled. Nulled betyder at en eller anden hacker, har fjernet de sikkerheds funktioner som skal sørge for at f.eks. kunderne ikke kan bruge scriptet uden at indtaste en aktiveringskode. Der er dog mange af disse hackers som ikke udføre sit hack ordentlig og efterlader sig kæmpe sikkerheds risikoer. Dette kan f.eks. være fejl i forbindelsen mellem script og database som gør det super nemt fra andre at opspore dit brugernavn og password til databasen.

Det korte af det lange er derfor: Download aldrig et nulled script fordi det er ulovligt.
Anvend aldrig et nulled script da det kan sætte dit websites sikkerhed i fare.
Jeg håber nu du ved hvad et nulled script er og hvorfor man ikke skal anvende det.

Share