David Steinsland – informatikkstudent og webutvikler

Innlegg merket med «windows»

Kompilere Java-prosjekter med Apache Ant

| Ingen kommentarer »

Javaprat

Når en jobber med store Java-prosjekter som inneholder mange klasse- og kildefiler, kan det være et mareritt å holde styr på alle disse. For ikke å snakke om å sørge for å kompilere alle, én etter én. Apache Ant ble laget for akkurat dette formålet, og har mange likhetstrekk med Make (for de som er kjent med Unix). Ant er et automatisert kompileringsverktøy som kan brukes for å kompilere hele Java-prosjekter med én kommando.

Programmet tar utgangspunkt i en konfigurasjonsfil som er formatert i XML, og styrer hvilke filer som kan kompileres og hvor klassefilene skal ligge. Du kan også velge om du skal opprette JAR-filer for hele prosjektet.

Installasjon

Gå til nedlastningssiden for Apache Ant og last ned siste versjon. Pakk ut mappen til for eksempel C:\ant\.

Sørg deretter for at du har en miljøvariabel kalt JAVA_HOME med verdien tilsvarende mappen som inneholder JDK. For eksempel slik:
c:\Progra~1\Java\jdk1.7.0\

Du må også huske å inkludere C:\ant\bin\ i miljøvariabelen PATH.

Forberedelse

Opprett en helt enkelt Java-klasse med en main-metode, som du lagrer i en mappe kalt src.

Deretter oppretter du en XML-fil som du kaller build.xml med følgende innhold:

<?xml version="1.0"?>
<project name="MySQL" default="compile">

	<!-- Configuration -->
	<property name="src.dir"     value="src"/>
    <property name="build.dir"   value="build"/>
    <property name="classes.dir" value="${build.dir}/classes"/>
    <property name="jar.dir"     value="${build.dir}/jar"/>
    <property name="main-class"  value="Test"/>
	<!-- End Configuration -->

	<target name="clean">
        <delete dir="${build.dir}"/>
    </target>

   <target name="compile">
        <mkdir dir="${classes.dir}"/>
        <javac srcdir="${src.dir}" destdir="${classes.dir}"/>
    </target>

	<target name="jar" depends="compile">
        <mkdir dir="${jar.dir}"/>

		<jar destfile="${jar.dir}/${ant.project.name}.jar" basedir="${classes.dir}">
            <manifest>
                <attribute name="Main-Class" value="${main-class}"/>
            </manifest>
        </jar>
    </target>

	<target name="run" depends="jar">
		<java jar="${jar.dir}/${ant.project.name}.jar" fork="true"/>
    </target>
</project>

I starten trenger du ikke tenke på mer enn å endre «TestApp» til prosjektets navn, samt endre «main-class» til den klassen som inneholder main-metoden.

De ulike target-blokkene utgjør kommandoene du kan gjøre med Ant. For eksempel vil vi med denne filen ha følgende kommandoer tilgjengelige:

ant compile
ant jar
ant run
ant clean

Dersom du legger merke til linje nummer to, så står det blant annet default=»compile». Dette gjør at dersom vi kjører kommandoen:

ant

Så vil den kjøre compile-oppgaven.

Konfigurasjonsfilen skal lagres i prosjektmappen, slik at du ender opp med følgende mappestruktur;

TestApp
+ src/
|	Test.java
+ build.xml

Gjennomføring

Nå er det lille prosjektet vårt klar til å kompileres.
Start opp kommandolinjen og endre mappe til prosjektet.

For å kompilere prosjektet, skriver du inn kommandoen:

ant

Denne kommandoen gjør oppgaven som er spesifisert under <target name=»compile»>.
Den oppretter mappen build\classes og lagrer klassefilene der.

For å lage en JAR-fil for videre distribusjon, utfører vi kommandoen:

ant jar

Denne er avhengig av at prosjektet først er kompilert, men dette sørger Apache Ant for å gjøre dersom du ikke har gjort det.
Det vil si at vi faktisk ikke trenger å utføre kommandoen ant compile på forhånd.

For å teste at JAR-filen fungerer, kan vi bruke kommandoen ant run.

Skrive og kompilere LaTeX i Notepad++

| Ingen kommentarer »

notepad_plus_plus-banner

Flere ganger har jeg skrevet om Notepad++ og hvordan du enkelt kan utvide funksjonaliteten til programmet. Forrige gang skrev jeg om hvordan du kunne kompilere og kjøre Java-applikasjoner.
Denne gangen handler det om LaTeX og hvordan du kan skrive LaTeX-dokumenter i Notepad++, samt hvordan du får dem over til PDF- eller PostScript-format.

Før vi går i gang …

For at ting skal gå knirkefritt for deg så bør du helst leste artikkelen jeg skrev om kompilering av Java i Notepad++, spesielt om hvordan du installerer NppExec.
Deretter må du sørge for at du har installert MiKTeX, som er nødvendig for å kunne kompilere LaTeX.

Steg 1: Opprette batch-filer

Innstikket NppExec gir oss muligheten til å kjøre kommandoer direkte i Notepad++, og gjerne med en hurtigtast. Vi skal bruke dette innstikket til å kjøre to forskjellige batch-filer, som skal stå for å kompilere LaTeX til PDF eller PostScript.

Opprett en batch-fil med navnet «latex-pdflatex.bat». I denne filen skriver du inn følgende kode:

cd %1
pdflatex.exe %2

Denne batch-filen har som oppgave å kompilere et TeX-dokument direkte til PDF.

Deretter må du opprette en ny batch-fil med navnet «latex-postscript.bat». Denne filen skal brukes dersom LaTeX-dokumentet inneholder vektorgrafikk, for da må dokumentet gjøres om til PostScript først (PostScript-filer kan enkelt konverteres til PDF senere).

Filen må inneholde følgende kode:

cd %1

latex.exe -src-specials %2.tex
dvips.exe %2

Dette programmet sørger for at LaTeX-dokumentet blir gjort om til en .dvi-fil, for så til PostScript.

Steg 2: Opprette makroer i Notepad++

For å finne ut hvordan du oppretter makroer i Notepad++, anbefaler jeg deg å lese forrige artikkel jeg skrev om emnet. Du følger samme prosedyre som beskrevet der, bare du bytter ut navnet på makroen samt kommandoen. Det er også beskrevet hvordan du kan tilegne tastatursnarveier til makroene.

LaTeX: til PDF

latex-pdflatex.bat "$(CURRENT_DIRECTORY)" $(NAME_PART)"

LaTeX: til PDF (grafikk)

latex-postscript.bat "$(CURRENT_DIRECTORY)" $(NAME_PART)"

Dersom du har fått alt på plass, så er det bare til å begynne å skrive!

Daglig backup av MySQL med PHP (Windows)

| Ingen kommentarer »

PHP tips og triks

Dersom du drifter din egen server eller har en utviklingsserver på PC-en din, har du nok vært i situasjoner hvor du tenker: «Hvor er sikkerhetskopien når jeg trenger den?».

Jeg var der selv for omtrent en úke siden, hvor jeg ved en feiltakelse kjørte en gammel PHP-fil som overskrev hele Postnummer-databasen min. Heldigvis hadde jeg mange sikkerhetskopier av databasen, så det gikk bra.

Men hva om jeg ikke hadde hatt kopier? Da hadde faktisk hele arbeidet mitt vært ødelagt! Mangfoldige timer bortkastet, bokstavelig talt.

Hver dag (midnatt) blir livredderen utført: en planlagt oppgave i Windows kjører et PHP-skript som tar backup av MySQL.

I mine siste artikler har jeg skrevet litt om planlagte oppgaver i Windows, og vist flere ting du kan gjøre.

Teori

Når du installerte MySQL, fikk du med et program som heter mysqldump. Programmet brukes til å ta backup av MySQL; du kan selv spesifisere én eller flere databaser, eller om du ønsker å ta backup av alle.

Videre kommer jeg til å ta i bruk  PHP fra kommandolinjen, som muliggjør at vi kan bruke PHP-tolkeren til å kjøre en bestemt PHP-fil. Dette programmet ligger i installasjonsmappen til PHP, og heter php.exe

Jeg refererer til disse programmene som henholdsvis mysqldump og php fra kommandolinjen. Dette er fordi jeg har lagt til PHPs installasjonsmappe og bin-mappen til MySQL til miljøvariabelen PATH. Dette forteller Windows at når du skriver inn et program i CMD, skal den også leite etter det programmet i de plasseringene.

Dersom du ikke har gjort dette, må du spesifisere til programmene med full sti, eks: c:\php\php eller skrive inn følgende i CMD:

SET PATH = %PATH%;C:\PHP;C:\MySQL\bin

(jeg antar PHP og MySQL er installert i C:\).

Ved default ligger «.EXE» i miljøvariabelen PATHEXT, som medfører at du slipper å skrive «.exe» bak programnavnet.

PHP-filen

Gjør klar en PHP-fil som du navngir backup.php og plasser denne utenfor ServerRoot (altså en plass den ikke kan nåes via en nettleser).

ServerRoot hos meg er \www\public_html\, slik at jeg har plassert PHP-filen ett steg opp, i \www\ (Med baklengs-skråstrek foran stien, tolker Windows dette som C:\).

Lag så en mappe du kaller for backup i samme mappe hvor du har plassert PHP-filen. Dette er plassen hvor backupene våre kommer til å ligge.

Det første vi gjør i PHP-filen vår er å definere et par runtime-innstillinger, som databasetilkoblingen, plasseringen til backup-filene og hvordan filnavnet skal utformes.

// MySQL host
define ('HOST', 'localhost');
// MySQL username
define ('USER', 'username');
// MySQL password
define ('PW', 'password');

define ('DUMP_FILENAME', date ('Y-m-d-H-i') . '.sql'); // i.e. 2010-10-30-23-00.sql

define ('SELF_DIR', __DIR__ . DIRECTORY_SEPARATOR);
define ('BACKUP_DIR', 'backup' . DIRECTORY_SEPARATOR);

Backupfilene våre får navnet sitt basert på dagens dato og tidspunktet for når filen blir kjørt.

Neste steg er å kalle opp mysqldump:

passthru (sprintf ('mysqldump -h %s -u %s -p%s -A -r "%s"', HOST, USER, PW, SELF_DIR . BACKUP_DIR . DUMP_FILENAME));

Her trenger du ikke endre noe, bortsett fra stien til mysqldump om du ikke har endret PATH i Windows.

Argumentforklaring:

-h
Spesifiserer host-adressen til MySQL
-u
Brukernavnet til MySQL
-p
Passordet ditt MySQL-brukeren (-p og passordet skal ikke ha mellomrom mellom hverandre).
-A
Spesifiserer at vi skal ta backup av alle databasene. Alternativt –all-databases.
-r
Den fulle stien (plassering + filnavn) til hvor backupen ligger

Det neste jeg har valgt å gjøre, er å komprimere SQL-filen i et Zip-arkiv, som medfører at filstørrelsen blir endel mindre (noe som er bra!).

$Zip = new ZipArchive;
$Zip->open (SELF_DIR . BACKUP_DIR . DUMP_FILENAME . '.zip', ZipArchive::CREATE);
$Zip->setArchiveComment ('This database dump was automatically taken at ' . date ('H:i, d.m.Y') . ' by a Windows Scheduled Task');
$Zip->addFile (DUMP_FILENAME, SELF_DIR . BACKUP_DIR . DUMP_FILENAME);
unlink (SELF_DIR . BACKUP_DIR . DUMP_FILENAME);
$Zip->close();

Den planlagte oppgaven

Det siste steget vårt, er å opprette oppaven som skal kjøre PHP-skriptet. Jeg har valgt å kjøre denne oppgaven hver dag ved midnatt.

Opprett den planlagte oppgaven ved å skrive dette inn i CMD:

SCHTASKS /Create /SC DAILY /MO 1 /ST 00:00 /TN "MySQL Backup" /TR "php \www\backup.php"

Tips

Uten PHP

Dersom du ikke ønsker å komprimere filene med Zip, trenger du heller ikke anvende PHP til denne jobben. Da kjører du rett og slett bare mysqldump direkte i oppgaven:

SCHTASKS /Create /SC DAILY /MO 1 /ST 00:00 /TN "MySQL Backup" /TR "mysqldump -h <host> -u <brukernavn> -p<passord> -A -r \www\backups\database_dump.sql"

Husk at det ikke skal være mellomrom mellom -p og passordet!

Én eller flere databaser istedenfor alle

Erstatt -A i mysqldump-kommandoen med:

--database <database>

eller

--databases <database 1> <database 2> ... <database N>

Garbage Collector

Det tar ikke lange tiden før backup-mappen blir full av filer; og strengt talt så trenger du ikke backups som ble tatt for måneder siden. Derfor kan det være lurt å sette opp en søppelsamler, som sletter gamle filer.
Da oppretter du en planlagt oppgave som kjører for eksempel \www\garbage.php hver uke. Innholdet i PHP-filen er å loope gjennom backup-mappen, og sjekke datoen på når filene sist ble modifisert (opprettet). Slik har jeg gjort det:

// How long we are keeping each file, since its creation date
// (in seconds)
define ('MAX_FILE_AGE', (60 * 60 * 24 * 7)); // 7 days

$data = glob (__DIR__ . DIRECTORY_SEPARATOR . 'backup' . DIRECTORY_SEPARATOR . '*.zip');

foreach ($data as $file)
{
	if (time() - filectime ($file) > MAX_FILE_AGE)
	{
		unlink ($file);
	}
}

Wamp: Opprette underdomener

| 3 kommentarer »

Veldig konsis guide på hvordan du kan opprette underdomener lokalt på datamaskinen din, om du bruker Wampserver. Orker du ikke en haug med tekst? Sjekk ut videoen i bunnen!

1. Gå til mappen: C:\Windows\System32\Drivers\etc\

Der ligger det en fil som heter «hosts». Ja, det er riktig: den har ingen filendelse. Høgreklikk på filen, velg «åpne med …» og velg en tekstredigerer (type Notepad).

Under linjen

127.0.0.1     localhost

legger du til:

127.0.0.1     underdomene.localhost

«Underdomene» kan du endre til hva du vil: dette blir da navnet på underdomenet ditt.

PS: Dersom det er et nummertegn (#) foran «127.0.0.1     localhost», så er du nødt til å fjerne dette tegnet.

 

2. Klikk på Wamp-ikonet i tray, velg Apache og trykk på «httpd.conf«

Bla ned (nesten til bunns) i filen, til du kommer til følgende linje:

# Virtual hosts
#Include conf/extra/httpd-vhosts.conf

Fjern nummertegnet fra siste linje.

3. Gå til C:\wamp\bin\apache\Apache2.2.11\conf\extra\

Her åpner du filen «httpd-vhosts.conf«. Dette er konfigurasjonsfilen som styrer de virtuelle serverinnstillingene i Apache.

Fjern de to <VirtualHost *:80>-blokkene, og legg til følgende kode:

<VirtualHost *:80>
 DocumentRoot C:/wamp/www/
 ServerName localhost
</VirtualHost>

<VirtualHost *:80>
DocumentRoot C:/wamp/www/underdomene/
ServerName underdomene.localhost
</VirtualHost>

Dette forteller Apache at alle  forespørsler skal sendes til www-mappen, såfremt det ikke eksisterer et underdomene. I praksis betyr det at http://underdomene.localhost/ vil vise deg samme innhold som http://localhost/underdomene/.

4. Restart Wampserver — You are Good to Go!

Husk selvsagt å endre «underdomene» til hva du ønsker (gjelder alle kodene).

 

Som vanlig følger det også med en video som viser fremgangsmåte.

Wamp: Hvordan installere ffmpeg (Windows)

| 8 kommentarer »

Noen ganger kan det være ganske ålreit å kunne konvertere videoer via PHP, eller for eksempel hente ut miniatyrbilder fra en film. Da er det også ganske ålreit at ffmpeg finnes.

Med ffmpeg kan du gjøre slike ting lekende lett, men veien der til er ikke alltid like grei. Heldigvis har jeg i den sammenheng laget en liten guide til hvordan du kan gjøre det!

Før vi begynner …

Sørg for at du har:

Når du har de to punktene under kontroll er du klar til å gå videre.

Hva vi trenger

Da er tiden inne for å laste ned ffmpeg-arkivene. Last ned de to arkivene under, og plasser dem f. eks på skrivebordet ditt.

FFmpeg:  http://sourceforge.net/projects/mplayer-win32/files/FFmpeg/(last ned en .7z-fil)
FFmpeg-php: http://sergey89.ru/files/ffmpeg-php/ffmpeg-php-win32-all.zip (kun kompatibel med PHP 5.2.5)

La oss begynne

Pakk ut innholdet fra den første zip-filen, og kopier filen ffmpeg.exe til C:\ffmpeg\. Det er denne filen PHP kommer til å sende kommandoene til.

Pakk så ut innholdet fra det siste arkivet (ffmpeg-php). Her vil det være totalt 5 filer som vi trenger. Kopier filene avcodec-51.dll, avformat-51.dll, avutil-49.dll og pthreadGC2.dll og lim dem inn i: C:\WINDOWS\System32\.

Dersom du kjører et 64-bits operativsystem, må du også legge de samme filene i: C:\WINDOWS\SysWOW64\.

Da gjenstår det én fil igjen, og det er: php_ffmpeg.dll.  Dette er utvidelsefilen for PHP; denne må du plassere i C:\wamp\bin\php\php5.2.5\ext\ som da er PHPs mappe over utvidelser. Siste punktet du må gjøre er å endre PHPs konfigurasjonsfil, php.ini. Denne kan du nå på to måter:

  • Trykke på Wampserver-ikonet i Tray, klikke på PHP og så velge php.ini
  • Gå til C:\wamp\bin\php\php5.2.5\

Åpne konfigurasjonsfilen i en teksteditor (f. eks Notepad), og bla ned til du kommer til «Windows extensions». Her kommer det opp en liste over mange ulike utvidelser; lag en ny linje, og lim inn følgende kode:

extension=php_ffmpeg.dll

Nå trenger du bare starte Wampserver om igjen, ved å trykke på Wampserver-ikonet i tray og deretter velge «Restart all services».

Nå kan du åpne din favoritt-nettleser, og lime inn følgende adresse:

http://localhost/?phpinfo

Dersom installasjonen har vært vellykket, vil du kan kunne finne ffmpeg på den listen (se bilde).

Sluttord

Nå er det bare til å sette i gang med å konvertere videoer, hente ut stillbilder, lyd eller hva det måtte være. Du kan teste installasjonen ved å kjøre følgende kode:

<?php
    $clip = 'clip.mp4'; // Which video to extract from
    $frame = '00:00:10'; // ... and at which frame
    $dimensions = '640x480'; // Image dimensions (width x height)
    $output = 'myscreen.png'; // path to captured image

    $command = 'C:\ffmpeg\ffmpeg.exe -y -i ' . $clip . ' -vframes 1 -ss ' . $frame . ' -an -vcodec png -f rawvideo -s ' . $dimensions . ' ' . $output;
    exec ($command);
?>

Den vil hente ut et bilde fra videoen clip.mp4 ti sekunder ut i filmen, og lagre bildet som myscreen.png. Legg spesielt merke til at vi må spesifisere fulle stien til hvor vi har plassert ffmpeg.exe-filen. De fleste plasser på Internett, så står det som regel bare «ffmpeg», istedenfor full sti; slik må du ikke gjøre det!

Du kan også teste installasjonen ved å skrive denne koden:

<?php
    echo shell_exec ('C:\ffmpeg\ffmpeg.exe -formats');
?>

Om du har innspill, kommentarer eller lignende, så er du velkommen til å kommentere artikkelen!
Video som viser hva jeg gjør — i dårlig kvalitet — er å se under: