Archive for February 8th, 2008

Zoals jullie kunnen zien zijn er heel wat posts verdwenen, alsook alle comments, en heel wat info.

Door een verkeerd stuk code ben ik een heel deel van m’n database kwijt geraakt, ik heb geprobeerd te redden wat er te redden viel, en dat is me ook goed gelukt :)

De website ziet er bijna hetzelfde uit als vroeger. Nu nog even een plugin zoeken die automatisch m’n database backupped ;)

Comments No Comments »

Deze post is eigenlijk een hack, een soort van bypass voor een bug in Windows Vista.

In Windows Vista zit, gelijk in XP en zijn voorgangers, de optie ‘map instellingen voor alle mappen onthouden’. Standaard staat dit aan, zodat ge 1 map op afbeeldingen kunt instellen, 1 map op details, 1 map op lijst.

Voor sommige mensen is dit fijn, maar voor mij niet. Ik wil alles gesorteerd hebben op type, gegroepeerd per type, en ik wil details zien! Zo dus:

Vista Folder

Dit werkt dus niet in Vista, ge stelt het in, en iedere keer vergeet hij het. Daarom deze oplossing, bestaande uit drie stappen:

Stap 1: Open de register-editor: Winkey + R , en dan regedit, en dan Enter duwen.

Stap 2: Verwijder deze twee keys:

HKEY_CURRENT_USER\Software\Classes\Local Settings\Software\Microsoft\Windows\Shell\Bags

en

HKEY_CURRENT_USER\Software\Classes\Local Settings\Software\Microsoft\Windows\Shell\BagMRU

Stap 3: Plak dit bestand in een nieuw tekstdocument, en verander de extensie van .txt naar .reg (rechtermuisknop -> naam wijzigen).

Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\Classes\Local Settings\Software\Microsoft\Windows\Shell\Bags\AllFolders\Shell]
"FolderType"="NotSpecified"
[HKEY_CURRENT_USER\Software\Microsoft\Windows\Shell]
"BagMRU Size"=dword:00020000

Het resultaat is dat nu de instellingen altijd hetzelfde blijven!

Comments 4 Comments »

Daarnet was ik mijn harde schijf aan het uitpluizen, en kwam dit oude documentje tegen:

");
	print("
");
	print("...");
	print("

");

	//en dan bij de submit checken of empty($_POST['zpam']); ja->user->ok, nee->spambot->die();
	//voordeel: geen userintereactie
	//nadeel: wat als de spambot css ondersteund?
	//nadeel2: user MOET css hebben, anders vult hij het ook in. Eventueel er een label bijzetten 'Vul dit niet in'
	//en die ook hidden met css

	//----------------------------------------------------------------------------------
	//deze is ook soms fijn :+
	print("
"); print("..."); print("
"); //dus de eerste keer als op het form wordt geklikt, veranderd de action. //voordeel: geen userinteractie //nadeel: wat als de bot JS heeft? //nadeel2: wat als de user geen JS heeft? //---------------------------------------------------------------------------------- print("
"); print("..."); print("
"); //en op het einde van u pagina doet ge dit: ?>

Laat me weten wat ge ervan vind :)

Comments No Comments »

Vandaag mijn examen Java zitten te leren, eigenlijk gewoon alle oefeningen opnieuw maken, zodat ik terug de feel van Java te pakken krijg (veel gewerkt met C++ laatste tijd), toch gek, die syntax van klasses in Java, t.o.v. die van C++.

Een voorbeeldje:

//Java
public class ProfileTest extends Test
{
	public ProfileTest()
 	{
 		super();
 	}
}
//C++
public class ProfileTest : Test
{
 	public ProfileTest() : Test()
 	{
 	}
}

Veel verschil is er niet, doch vind ik het gek, waarom ze werken met die super();, omdat die toch op de eerste regel MOET staan, voordat er iets anders wordt uitgevoerd. Dan is de syntax van C++ duidelijker, omdat er daar geen verwarring kan bestaan, op welke regel in de constructor deze moet komen.

Een ander onderdeel, waar een compleet andere gedachtengang nodig voor is, is het schrijven van een GUI, neem het simpele voorbeeld van een knop:

In Java doet men:

JButton b = new JButton();
b.addActionListener(new Listener());
public class Listener implements ActionListener
{
	public void actionPerformed(ActionEvent e)
	{
	}
}

In .NET (Windows Forms) doet met het zo:

Button^ b;
b->Click += gcnew System::EventHandler(this, &button_Click);
System::Void button_Click(System::Object^ sender, System::EventArgs^ e)
{
}

Weer is .NET veel meer to the point, het enige wat er moet gebeuren, is een functie schrijven, met de code wat er moet gebeuren, en dan een bepaald event aan de knop hangen, die de functie triggert, itt Java, daar moet de code worden geschreven, eventueel een class, of innerclass, die weer bepaalde klassen implementeert, en wat voor een namen: addActionListener(), actionPerformed()… in .NET is het Click. Simpeler kan toch niet?

Comments No Comments »

Voor een TextBox puur numeriek te maken is er de volgende simpele code in het .NET 2.0 framework:

InputModeEditor.SetInputMode(textBox, InputMode.Numeric);

Dan kunt ge nog steeds # en * invoeren, ik wou dat deze 2 veranderd werden in een comma, dus ik ben tot de volgende code gekomen:

Windows.Forms.TextBox textBox = new Windows.Forms.TextBox();
this.textBox.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.Numeric_KeyPress);

/* ... */
private void Numeric_KeyPress(object sender, KeyPressEventArgs e)
{
	char decimalSeperator = System.Globalization.CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator.ToCharArray()[0];

	if ((e.KeyChar == '#' || e.KeyChar == '*'))
	{
		if (((TextBox)sender).Text.IndexOf(decimalSeperator) == -1)
			((TextBox)sender).SelectedText += decimalSeperator;

		e.Handled = true;
	}
}

Enjoy :)

Comments No Comments »

Wat als ge een form hebt, met een button, die een nieuw form opent. Ge klikt erop, nieuw form opent, en ge hebt mooi 2 forms. Maar als ge dan op de knop duwt opent zich een nieuw form. Ongewenst gedrag. Hier een oplossing:

U popup:

public partial class Popup : Window
{
	static Popup instance;

	static Popup()
	{
	}

	public Popup()
	{
		InitializeComponent();
	}

	public static Popup Instance
	{
		get
		{
			if (instance == null)
				instance = new Popup();

			return instance;
		}
	}

	private void Popup_Closed(object sender, EventArgs e)
	{
		instance = null;
	}
}

En u mainform:

public partial class Main : Window
{
	public Main()
	{
		InitializeComponent();
	}

	private void clicky_Click(object sender, RoutedEventArgs e)
	{
		Popup popup = Popup.Instance;
		popup.Show();
		popup.Focus();
	}
}

Comments No Comments »

Op een dag hebt ge een sloot aan code, zo traag als wat. En dan wilt ge gaan controleren waar hij traag is.

Dus we gaan op zoek, Google: Visual Studio 2005 profile code. Leuk, ge moet de Team Edition hebben. En hoe moet ik daar nu aan geraken als zijnde student? MSDN subscription kopen? Sorry maar dat is me net wat te duur.

Ik vind het jammer, de Professional kost ~1000 euro / licentie, dus als ik deze na mijn studies zou aanschaffen, zou ik nog niet eens een profiler hebben. Hier slaat Microsoft toch een beetje de plank mis :)

Dadelijk eens mailen naar de MSDNAA-maintainer bij ons op school, eens zien of ik via dat systeem kan krijgen. Ook zou ik graag Visual Studio 2008 hebben, maar dat zal nog even duren eer we die kunnen krijgen.

Momenteel ben ik bezig aan een agenda-applicatie, die communiceert met een MySQL database via PHP, zodat ge de agenda overal kunt bekijken. Waarom niet via een online applicatie? Veiligheid, en het ziet er gewoon wat gelikter uit, die mooie venstertjes. Dat is iets waar .NET in uitblinkt, alles ziet er hetzelfde uit. Daar kunnen de devvers van WLM nog wat van leren, aangezien zij hun vensters er standaard anders laten uitzien.

Ik post straks even een tutorial over WLM, hoe dat ge alle vensters er hetzelfde kunt laten uitzien!

Comments No Comments »

Ik verveelde mij, dus heb ik maar even een functie geschreven die de tijd tot u volgende verjaardag berekend:

 $verjaardag)
        {
            //verjaardag is al geweest -> on to the next year
            $verjaardag = mktime(0, 0, 0, $maand, $dag, (date("Y", time()) + 1));
        }

        $seconden = $verjaardag - $nu;

        $minuten = $seconden / 60;
        $minuten = (int)$minuten;

        $seconden = $seconden - ($minuten * 60);

        $uren = $minuten / 60;
        $uren = (int)$uren;

        $minuten = $minuten - ($uren * 60);

        $dagen = $uren / 24;
        $dagen = (int)$dagen;

        $uren = $uren - ($dagen * 24);

        return sprintf("Nog %d dagen, %d uren, %d minuten en %d seconden tot verjaardag", $dagen, $uren, $minuten, $seconden);
    }

    if(isset($_POST['dag']) && isset($_POST['maand']) && is_numeric($_POST['dag']) && is_numeric($_POST['maand']))
    {
        printf("Uw verjaardag: %s", tijdTotVerjaardag($_POST['dag'], $_POST['maand']));
    }
?>
Dag:
Maand:
Bereken:

Ik denk niet dat ik moet uitleggen hoe dat ge het moet gebruiken :)

Online voorbeeld vind ge hier.

Comments No Comments »

Ik schrijf deze tutorial voor personen, die net als ik heel wat problemen hebben met een programma als dit te installeren. Gemakkelijk is het niet.

We hebben een aantal dingen nodig:

  • Een werkende Apache 2 installatie
  • Een werkende PHP installatie
  • (eventueel) een MySQL installatie

Voor de bovenstaande dingen kan ik u verwijzen naar XAMPP.

Anyway, on to the next requirement: de Zend debugger.

Download deze hier. Als ge de zip opent krijgt ge dit:

Zend Debugger Zip

De dummy.php die ik heb geselecteerd zet ge in de root van u webserver. Going on:

Let’s assume dat u PHP is geinstalleerd in C:\PHP. (of C:\xampp\php\ als ge XAMPP gebruikt)

In de map 5_2_x_comp vind ge ZendDebugger.dll. (nog steeds in het archief) Zet deze file in C:\PHP\. (of C:\xampp\php\)

Open u php.ini (in C:\PHP\php.ini, of C:\xampp\php\php.ini), en plak dit er op het einde aan vast:

zend_extension_ts=c:/php/ZendDebugger.dll
;of, als ge xampp gebruikt, comment de regel hierboven, en uncomment de regel hieronder
;zend_extension_ts=C:/xampp/php/ZendDebugger.dll
zend_debugger.allow_hosts=127.0.0.1
zend_debugger.expose_remotely=always

Mooi, nu is de debugger geinstalleerd!

Nu downloaden we Zend Neon: klik hier!

Ga nu naar de keuken, zet een tas koffie, en als die klaar is, zal u download klaar zijn :)
De installatie is eigenlijk perfect, ge opent de installer, en klikt constant op next, next, next, …, finish.

Next up: Zend Neon opstarten, wat verschrikkelijk moeilijk is! Dubbelklikken op het icoontje op de desktop!

Ok, Zend is normaal opgestart, en ge krijgt een mooi welkomscherm. Sluit dat, zinloos! Dan krijgt ge dit:

Zend Neon Mainscreen

Zonder code natuurlijk :)

Nu gaan we een nieuw project aanmaken:

File > New > PHP Project. Geef het een naam, en dan komt het ‘moeilijke’: ge moet het pad aanpassen, dus ipv het default pad te kiezen, past ge het pad aan, en zet ge da in de root van u webserver (c:\Apache\htdocs\, wat ge hebt gekozen bij de installatie van Apache)

Zend Neon New PHP Project

En dan gewoon op Finish klikken :) Project klaar.

Nog wakker? Ja -> lees verder. Nee? Dan komt de koffie van pas. Nu verder lezen!

Windows > Preferences. En dan onder: General > Webbrowser. Use external browser.

Nu kunt ge code schrijven, breakpoints toevoegen en dergelijke, en dan via de toestencombinatie ‘Control + Shift + X‘, en dan ‘W‘ het script debuggen in de webbrowser.

Ook is dat mogelijk via de Zend Toolbar, die is meegeinstalleerd, waarmee ge POST kunt debuggen en derlijke. Succes!

Met dank aan Jan voor te testen, en voor het verwijzen naar XAMPP.

Comments No Comments »

Let’s say dat we een form hebben, met allerhande mogelijkheden, en een daarop een knop met de instellingen. Deze instellingen worden in %appdata% of HKCU opgeslagen, daar kan dus geen andere user aankomen / ondertussen aanpassen.

Normaal doet ge het zo: knop wordt ingedrukt, en dan worden de instellingen ingelezen, en die worden dan weer ‘geplakt’ in het form. Maar wat als ge zoiets hebt, maar dan met veel MEER data, wat telkens moet ingelezen en geparsed moet worden.

Of als ge gewoon een venstertje wilt wat zijn inhoud onthoud?

Simpel eigenlijk:

private FormOpen form;
public MainForm()
{
    form = new FormOpen();
}

Creeer het form in de constructor.

En dan het Closing (niet Closed!!!!!) event in het nieuwe form:

private void FormOpen_FormClosing(object sender, FormClosingEventArgs e)
{
    e.Cancel = true;
    ((Form)sender).Hide();
}

Klik hier voor het volledige project (.rar)

Comments No Comments »

And shepherds we shall be, for thee my Lord for thee, power hath descended forth from thy hand, that our feet may swiftly carry out thy command. We shall flow a river forth to thee, and teeming with souls shall it ever be. In nomine Patris, et Filii, et Spiritus Sancti.