Gisteren vanalles geprobeerd om mijn oude spying klasse om te zetten zodat deze ook op de PDA zou werken. ILGenerator wordt namelijk niet ondersteund door .NET Compact Framework omdat dit te zwaar zou zijn voor de PDA’s. Nu was het idee om een wrapper rond de eventHandler te schrijven om zo extra argumenten mee te geven.
Code voorbeeld:
-
-
public EventHandler CreateHandlerWrapper(string concreteEventName)
-
{
-
return
-
delegate(object sender, EventArgs e)
-
{
-
Execute(sender, e, concreteEventName);
-
};
-
}
-
Hier zou dan het event dat juist getriggerd is aan kunnen meegegeven worden. Deze manier WERKT, MAAR (er is altijd een maar) het werk ook op de PDA’s die versie 2.0 hebben van het .NET Compact Framework. En UIML.NET werkt tot nu toe met versie 1.0. Deze versie ondersteund geen anonieme delegate of methods.
Nu zijn er 2 mogelijke oplossingen:
- Ik maak aparte code voor compact en voor pc’s, en ik ga er vanuit dat in het uiml document op PDA’s een event uniek is in het document (dus geen eenzelfde event in meerdere condities en slechts 1 event per conditie)
- Mijn begeleiders maken de keuze te updaten naar .NET CF 2.0
…I’ll keep you informed…
Posted in Problemen, Code, Analyse | No Comments »
Ik heb vandaag heel wat tijd besteed aan events op te vangen. Ik heb hiervoor een klasse gemaakt die ieder event opvangt. Ook heb ik de event arguments overschreven zodat de naam van het event dat getriggered wordt herin verschijnt alsook het part-name. Zo kan ik eventueel eenzelfde events onder verschillende condities ook opvangen. Het enige verschil met de oude code is dat er niet meer expliciet een event gekoppeld wordt aan een part van de interface, maar dat er meer gelijk een listener gewerkt wordt. Namelijk er wordt meegegeven voor wat het part geïnteresseerd is en enkel voor deze events wordt er dan een bepaald functie uitgevoerd. Ik ga morgen of overmorgen verder met te kijken naar events voor properties enzo….
..That’s all for today..
Posted in Code | No Comments »
Ik heb de laatste dagen geen tijd gehad om iets te doen, zowel niet voor school als buitenaf omdat mijn hond was geen lopen (1 van de 2) en ik heb die dus de laatste 2 dagen zitten zoeken. Hiervoor heb ik veel moeten opgeven. Ondertussen is ie wel terecht
Dus vanaf vandaag heb ik de draad terug opgenomen.
Ik zocht dus nog altijd een methode om de naam van een event dat getriggered was op te vangen. Maar ik vond / vind er geen oplossing voor. Maar met alle informatie dat ik online en in boeken heb gelezen, kreeg ik ineens een ander idee. Ik ben van plan om een omweg te nemen (tenzij iemand anders een methode weet om de event name te verkijgen nadat het event getriggerd is???). Ik maak een soort van ‘Spy’ klasse die dus aan een object (bv een widget) kan gekoppeld worden. Deze vangt dan alle events op die worden uitgestuurd. Aan de hand hiervan kan ik dus de naam van het event opvangen en verwerken. Ik weet, dit is een hele omweg, maar anders zit ik te lang stil op dit probleem. Het enige dat ik moet doen is kijken of al die dingen ook op het Compact Framework gaan werken.
Toen ik iets ging opzoeken over deze methode, heb ik een paar code voorbeelden gevonden van mensen die het zelfde al hebben gemaakt, dus hier kan ik wel een eindje mee verder (code is telkens gratis te gebruiken in eender welke applicatie). Het is natuurlijk niet mijn bedoeling deze code letterlijk over te nemen, het is slechts een referentie. Ik hoop dat het zo gaat lukken, want dan kan ik verder met het volgende gaan…
[Time for a break now, see you all next time]
Posted in Code | No Comments »
Waar ik van de week mij enorm aan stoorde was dat je dus geen comments kon toevoegen aan tussen <behavior></behavior>. Dus heb ik dit even aangepast. Hiervoor moest ik dus een extra variabele bijhouden of een Rule leeg was of niet. In het bestand Rule.cs is er dus een variabele private boolean m_empty bijgekomen die op true wordt geïnitialiseerd. Bij het linken in Behavior.cs (AttachPeers) heb ik dus een extra controle ingevoerd om te kijken of die Rule leeg is. Indien wel dan wordt deze niet verder geattached. Bij het runnen van dit zag ik dat de applicatie nog altijd crashte voor een NullException. Bij nader onderzoek, bleek ik dus vergeten in SWFEventLinker.cs ook vergeten deze controle in te bouwen. Maw vanaf nu kan je ook commentaar invoegen tussen deze tag, wat altijd handig is voor te debuggen etcetera…
Posted in Code | No Comments »
Het is mijn bedoeling om conditionele testen te ondertussen. Maw zodat dingen gelijk dit mogelijk zijn:
-
-
<condition>
-
<op name="&&">
-
<event name="Filled" part-name="city"/>
-
<op name="==">
-
<property name="value" part-name="city"/>
-
<constant name="city" type="string" value="’Los Angeles’"/>
-
</op>
-
<op name="==">
-
<property name="value" part-name="state"/>
-
<constant name="state" value="undefined"/>
-
</op>
-
</op>
-
</condition>
-
<rule>
-
<condition>
-
<equal>
-
<event part-name="List"
-
class="itemStateChanged" name="item"/>
-
<constant value="0"/>
-
</equal>
-
</condition>
-
<action>
-
<property part-name="DefnArea"
-
name="text">Carnivorous, domesticated mammal
-
that’s fond of rats and mice</property>
-
</action>
-
</rule>
-
Het is dus de bedoeling de tags <condition>, <op> en <equal> te ondersteunen. Momenteel ben ik nog aan het opzoeken wat exact de moeilijkheden zijn bij het implementeren van deze tags. I’ll get back to ya
:edit: specs op http://www.oasis-open.org/committees/download.php/5937/uiml-core-3.1-draft-01-20040311.pdf (p46 ev)
Posted in Algemeen | No Comments »
Ik heb gisteren de code nog eens volledig overlopen en met de bijkomende uitleg van Jo Vermeulen denk ik het meeste ervan te snappen. Daarna ben ik in de TODO eens gaan kijken wat er nog allemaal moet gebeuren. Alles lijkt zeer interessant om te doen, maar ik kan natuurlijk niet alles doen. Daarmee dat ik nu in de richting van de conditionele testen ben aan het kijken. Deze lijken enorm handig in een interface, waardoor dat ik deze graag zou implementeren. Ik zal dan ook volgende week proberen te achterhalen wat hiervoor allemaal moet gemaakt worden. De tags die worden ondersteund door deze conditionele testen zijn:
- <condition>
- <equal>
- <op>
- <when> - true
- <when> - false
Posted in Algemeen, Code, Analyse | No Comments »
Ik heb vandaag de code overlopen en ik moet zeggen dat het er goed gestructureerd uitziet. Alles is mooi opgesteld op ongeveer dezelfde manier. Een standaard UIML bestand bestaat uit de volgende delen:
-
-
<uiml>
-
<head><meta> … </meta></head>
-
<peers>
-
<presentation><component> … </component></presentation>
-
<logic><component> … </component></logic>
-
</peers>
-
<template> … </template>
-
<interface> … </interface>
-
</uiml>
-
Alle deze tags hebben hun eigen .CS bestand. De belangrijkste functie in dit bestand is de functie ‘Process’ die een deel van het uiml bestand verwerkt. Als alles verwerkt is, wordt een renderer aangemaakt. Mogelijke assemblies die nu ondersteund zijn:
- uiml-gtk-sharp
- uiml-wx-net
- uiml-swf
- uiml-compact-swf
Vervolgens wordt er een instantie aangemaakt van deze rendererm de libraries worden toegevoegd en de frontend wordt gekoppeld aan het uiml document. Als laatste wordt de GUI getoond indien mogelijk.
Posted in Code, Analyse | No Comments »
Het is me juist gelukt om de volledige code met succes te compileren. De fouten die ik had gemaakt waren: toen ik de visual studio 2003 bestanden / projecten was aan het aanpassen naar Visual Studio 2005 bestanden / projecten heb ik de bestanden van de linux versie in de correcte mappen gekopieerd. Dit moest gebeuren om zeker de laatste code te hebben. Nu is er bij het kopiëren een aantal dingen misgelopen. Er zijn bepaalde bestanden voor het compact framework overschreven waar nog defines in stonden die stukken code niet mee compileerde als het voor het compact framework bedoelt was. Door het opnieuw toevoegen van deze defines en het kopiëren en deleten van wat andere code is het mij dus gelukt de code met succes te compileren
Op naar de volgende stap: het analyseren van de code…
Posted in Code, Analyse | No Comments »
Vandaag nog eens een poging gedaan om de code te compileren onder Windows Vista. Zonder succes. Jo Vermeulen raadde me aan om Windows Mobile 5.0 SDK te installeren, dit heb ik ook gedaan. Ik heb het target platform aangepast van Pocket PC 2003 naar Windows Mobile 5.0 Pocket PC. Bij het installeren kwam er onmiddellijk de waarschuwing dat ik best ook Microsoft ActiveSync 4.0 zou installeren. Maar wat blijkt nu, ActiveSync bestaat niet meer, het is hernoemt in Vista naar Windows Mobile Device Center. Maar terug naar de code. Na het installeren van Windows Mobile 5.0 SDK heb ik geprobeerd de code nog eens te compileren. Een aantal fouten heb ik opgelost, dit waren nog fouten van bestanden die er niet bij in het project zaten (meestal bestanden voor exceptions). Maar nu zit ik nog met de volgende fouten waar ik voorlopig geen raad mee weet:
Error ‘System.Environment’ does not contain a definition for ‘Exit’ Uiml.net-Compact
Error ‘System.Environment’ does not contain a definition for ‘Exit’ Uiml.net-Compact
Error The type or namespace name ‘SortedList’ could not be found (are you missing a using directive or an assembly reference?) Uiml.net-Compact
Error The type or namespace name ’sortedProps’ could not be found (are you missing a using directive or an assembly reference?) Uiml.net-Compact
Error Metadata file ‘G:\Users\Ingo\Documents\_uiml\svn\visual studio\Uiml.net-Compact_System.Windows.Forms\bin\Debug\uiml-compact-swf.dll’ could not be found Uiml.net-Compact_FrontEnd
Error The type or namespace name ‘Reflection’ does not exist in the class or namespace ‘Uiml.Utils’ (are you missing an assembly reference?) Uiml.net-Compact_System.Windows.Forms
Voorlopig heb ik geen idee hoe ik deze moet oplossen…
Ik heb de code dan maar onder Ubuntu gecompileerd en dit lukte op 1 fout van xml-rpc na. Tijdens het testen of een voorbeeld werd gerenderd kreeg ik weer enorm veel fouten. Ik laat het even allemaal rusten om straks met een zuiver hoofd er nog eens naar te kijken. Ik zal dan ineens de errors die ik onder Ubuntu krijg hier posten.
[edit] De meeste fouten hebben te maken precies met het feit dat het Compacte deel van de referentie ‘mscorlib’ deze dingen niet ondersteund. Dus wat nu gedaan ? Hoe moet ik het dan compileren onder Windows Vista ?
[edit2]
Dit zijn de errors die ik krijg tijdens het compileren onder Ubuntu:
Rendering/GTKsharp/GtkRenderedInstance.cs(40,34): warning CS0612: `Gtk.Window.Window(GLib.GType)’ is obsolete
Unhandled Exception: System.ArithmeticException: No inverse!
in <0×0038b> Mono.Math.BigInteger+Kernel:modInverse (Mono.Math.BigInteger bi, Mono.Math.BigInteger modulus)
in <0×0000d> Mono.Math.BigInteger:ModInverse (Mono.Math.BigInteger modulus)
in <0×00213> Mono.Security.Cryptography.RSAManaged:DecryptValue (System.Byte[] rgb)
in <0×0002d> System.Security.Cryptography.RSACryptoServiceProvider:DecryptValue (System.Byte[] rgb)
in <0×0000e> Mono.Security.Cryptography.PKCS1:RSASP1 (System.Security.Cryptography.RSA rsa, System.Byte[] m)
in <0×00051> Mono.Security.Cryptography.PKCS1:Sign_v15 (System.Security.Cryptography.RSA rsa, System.Security.Cryptography.HashAlgorithm hash, System.Byte[] hashValue)
in <0×0002e> System.Security.Cryptography.RSAPKCS1SignatureFormatter:CreateSignature (System.Byte[] rgbHash)
in <0×000e2> Mono.Security.StrongName:Sign (System.String fileName)
in <0×00521> System.Reflection.Emit.AssemblyBuilder:Save (System.String assemblyFileName, PortableExecutableKinds portableExecutableKind, ImageFileMachine imageFileMachine)
in <0×00014> System.Reflection.Emit.AssemblyBuilder:Save (System.String assemblyFileName)
in <0×00038> Mono.CSharp.CodeGen:Save (System.String name)
in <0×00f30> Mono.CSharp.Driver:MainDriver (System.String[] args)
in <0×00041> Mono.CSharp.Driver:Main (System.String[] args)
make[1]: *** [gtk] Error 1
error CS0006: Cannot find assembly `wx.NET.dll’
make[1]: *** [wx] Error 1
error CS0006: Cannot find assembly `XmlRpcCS.dll’
make[1]: *** [xml-rpc] Error 1
Posted in Problemen, Code, Analyse | 1 Comment »
Vandaag is het de hoogste tijd om de code eens onder de loep te nemen. Ik ben ondertussen een Virtual Machine met Windows XP Professional (EN) aan te maken en volledig te updaten. Hier komt dan .NET framework 1.0 en 1.1 op te staan. Dit om problemen tijdens het coderen met 2.0 te vermijden. Ook installeer ik hierop Microsoft Visual Studio 2005 als programmeeromgeving.
Wat ik voorlopig al ondekt heb is dat alles bij het opstarten begint bij het bestand UimlTool.cs in het project Uiml.net_Compact_FrontEnd. Hierin wordt er gekozen of de interface als commandline of als GUI wordt opgestart.
[WORDT VERVOLGD ]
Posted in Code, Analyse | No Comments »