Hierbij alles dat interessant is in javascript in 5 minuten.
Alleen geschikt voor ervaren programmeurs met java/c++ of c# kennis.
//JScript File
//call function Object and create a new one from the return value
var temp = new Object();
var book = {}; //zelfde
book.bladzijden = 500;
book.title = 'a book title';
book['title'] = 'book title changed';
for(var p in book)
{
alert('name:' + p + ' value:' + book[p]);
}
//create a new array
var arr = new Array();
var a = [];
arr[0] = 'appel';
arr[1] = new Object();
arr.push(42);
Array.enqueue(arr,"indextwee");
Array.addRange(arr,arr);
function add(a,b)
{
return a+b;
}
var calc = {};
calc.add = function(a,b)
{
return a+b;
}
calc.multiply = function(a,b)
{
return a*b;
}
//a closured function
function parent(args)
{
var test = "a test var";
function nested()
{
alert(args + test);
}
return nested; //starting parent starts nested function
}
parent("This is a ");
var dynamic = parent("This is a dynamic ");
dynamic(); //currying / templating
function Cat()
{
this._name = '';
this._age = 0;
}
Cat.prototype.speak = function(){
alert(this._name + " says Meeeowww!");
}
Cat.registerClass('Cat'); //only a single cat can exists
//Cat.registerClass('Cat'); //ajax exception
var cat = new Cat();
cat.speak();
//quick construction
var p = { firstName: 'John' , lastName:'Doe'} //basis voor JSON
var a = [1,2,3,4,5];
var group = {
name:'',
members:['jack','smith','andrew'] ,
count:function() { alert('a strange construction'); }
}
//"zestig"
var getal = parseInt('600'); //resolve naar 600 number
for( var i=0;i<10;i++)
{
//dummy for
}
while(false)
{
//dummy while
}
//a recursive function (watch out for infinite loop)
var counter = 0;
function rec()
{
counter ++;
alert(counter);
if(counter < 10)
{
setTimeout(rec(),100);
}
}
//asp.net ajax only document.getElementById browser onafhankelijk
//$get("lbl1").innerHTML
//asp.net ajax only manier om dom events toe te voegen en verwijderen
//$addHandler(domobject,eventname,eventfunction);
//$removeHandler(domobject,eventname,eventfunction);
vrijdag 9 mei 2008
dinsdag 25 maart 2008
een nieuwe andere Taal
Een paar maanden geleden heb ik een Ajax .Net cursus gegeven. De javascript omgeving die daar bij hoort is voor mij redelijk nieuw. Het leren van de javascript omgeving was redelijk eenvoudig.
De afgelopen maand heb ik een cursus Flex gegeven. Een ontwikkel omgeving van Adobe die met gebruik van flash het mogelijk maakt om makkelijk een UI te maken en te gebruiken in de browser omgeving (flex library als componenten flash als runtime en actionscript/javascript als code). Hierover volgt als tijd het toestaat binnenkort nog een blog. Het is best raar om in een managed omgeving te werken zonder daar 'alles' van te weten zoals ik met de .Net omgeving werk.
Na het oppakken van 2 nieuwe talen was ik wel weer toe aan een nieuwe uitdaging.
Ik speel zelf graag world of warcraft en speel daarin een hunter. Een hunter loopt samen met zijn 'pet' (meestal krijgen ze een naam) door de wereld om daar allerlei avonturen te beleven.
Het leven van een pet is redelijk eenvoudig, ze zeggen nooit iets en laten alleen af en toe merken dat ze minder blij zijn. Als je ze vervolgens wat te eten geven worden ze weer blijer en doe ze ook meer schade aan monsters om hun heen.
Om een 'pet' wat meer leven te geven bestaat er een wow-addon. De wow engine draait custom script code die allerlei eenvoudige akties kan uitvoeren (niets 'complex' omdat je dan makkelijk een wow-hack kan maken). Een van de akties die een wow addon mag uitvoeren zijn het vertellen van berichtjes nav een aktie in de wereld.
Een mede add-on bouwer heeft een addon geschreven die als je je 'Pet' voerd laat merken dat hij blij is met het eten. Zelf heb ik deze addon uitgebreid met functionaliteit om de pet meer te laten zeggen. Als de pet een tegenstander mist laat hij blijken dat hij dat verveldn vind en als ik in gevecht ben wilt mijn pet mij helpen mijn target te vermoorden.
De taal waar de add-ons in geschreven zijn heet Lua en is een scripting taal. Het herladen van een add-on kan met het commando /reloadui.
Een voorbeeld stukje Lua:
bestand PetEmote.lua:
function PetEmote_OnLoad ()
this:RegisterEvent("UNIT_HAPPINESS");
this:RegisterEvent("CHAT_MSG_SPELL_TRADESKILLS");
this:RegisterEvent("CHAT_MSG_COMBAT_PET_MISSES");
end
--dit is commentaar
--deze functie word aangeroepen bij elk event
--waarschijnnlijk worden meerdere events in een function call verwerkt dus daarom geen if else
function PetEmote_OnEvent()
if (event == "UNIT_HAPPINESS") then
PetEmote_HappinessChanged();
end
if (event == "CHAT_MSG_SPELL_TRADESKILLS") then
MarsMessageParser_ParseMessage("PetEmote", arg1);
end
if(event == "") then
end
if(event == "CHAT_MSG_COMBAT_PET_MISSES") then
--do not spam messages every event
if(random(1,5) > 2) then
if (PetEmote_HasPet()) then
PetEmote_Miss();
end
end
end
end
-this function is called on pet miss
--this function is abused to force random emotes other then misses
function PetEmote_Miss()
local arandom = random(1, 6);
--PetEmote_DoEmote(arandom);
local missEmotes = getn(PetEmote_MissMessages["default"]);
--PetEmote_DoEmote(missEmotes);
local randomEmote = random(1 , missEmotes);
--PetEmote_DoEmote(randomEmote);
local pName = UnitName("player");
local pTarget = UnitName("target");
local petTarget = UnitName("pettarget");
local emptyMessage = PetEmote_MissMessages["default"][randomEmote];
local replacedEmote = "";
--if we dont have any targets
if( pName ~= nil and pTarget ~= nil and petTarget ~= nil) then
replacedEmote = gsub(emptyMessage, "$n", pName);
replacedEmote = gsub(replacedEmote, "$t", pTarget);
replacedEmote = gsub(replacedEmote, "$x", petTarget);
end
if( pName ~= nil and pTarget ~= nil and petTarget ~= nil) then
PetEmote_DoEmote(replacedEmote);
end
end
bestand localization.lua
PetEmote_MissMessages={
["default"] = {
"is sad he missed",
"growls at missing his target",
"hits the empty air",
"looks at $n for some help",
"wants to hit $t very hard",
"wants to help $n kill $t",
},
["Debug"] = {
"looks at $n for some help",
"wants to hit $x very hard",
"wants to help $n kill $t",
},
-- ["Bat"] = {},
}
addon definitie bestand Petemote.xml
span style="font-style:italic;"> Script file="MarsMessageParser.lua"/
Script file="PetEmote.lua"/>
Frame name="PetEmote" parent="UIParent" hidden="false">
Scripts>
OnLoad> PetEmote_OnLoad();
OnEvent> PetEmote_OnEvent();
/Scripts>
/Frame>
/Ui>
Het leuke aan deze taal is dat er een VS.2005 plug in voor is met syntax highlighting auto complete en een gedeeltelijke intellisense.
www.codeplex.com/WarcraftAddOnStudio
De afgelopen maand heb ik een cursus Flex gegeven. Een ontwikkel omgeving van Adobe die met gebruik van flash het mogelijk maakt om makkelijk een UI te maken en te gebruiken in de browser omgeving (flex library als componenten flash als runtime en actionscript/javascript als code). Hierover volgt als tijd het toestaat binnenkort nog een blog. Het is best raar om in een managed omgeving te werken zonder daar 'alles' van te weten zoals ik met de .Net omgeving werk.
Na het oppakken van 2 nieuwe talen was ik wel weer toe aan een nieuwe uitdaging.
Ik speel zelf graag world of warcraft en speel daarin een hunter. Een hunter loopt samen met zijn 'pet' (meestal krijgen ze een naam) door de wereld om daar allerlei avonturen te beleven.
Het leven van een pet is redelijk eenvoudig, ze zeggen nooit iets en laten alleen af en toe merken dat ze minder blij zijn. Als je ze vervolgens wat te eten geven worden ze weer blijer en doe ze ook meer schade aan monsters om hun heen.
Om een 'pet' wat meer leven te geven bestaat er een wow-addon. De wow engine draait custom script code die allerlei eenvoudige akties kan uitvoeren (niets 'complex' omdat je dan makkelijk een wow-hack kan maken). Een van de akties die een wow addon mag uitvoeren zijn het vertellen van berichtjes nav een aktie in de wereld.
Een mede add-on bouwer heeft een addon geschreven die als je je 'Pet' voerd laat merken dat hij blij is met het eten. Zelf heb ik deze addon uitgebreid met functionaliteit om de pet meer te laten zeggen. Als de pet een tegenstander mist laat hij blijken dat hij dat verveldn vind en als ik in gevecht ben wilt mijn pet mij helpen mijn target te vermoorden.
De taal waar de add-ons in geschreven zijn heet Lua en is een scripting taal. Het herladen van een add-on kan met het commando /reloadui.
Een voorbeeld stukje Lua:
bestand PetEmote.lua:
function PetEmote_OnLoad ()
this:RegisterEvent("UNIT_HAPPINESS");
this:RegisterEvent("CHAT_MSG_SPELL_TRADESKILLS");
this:RegisterEvent("CHAT_MSG_COMBAT_PET_MISSES");
end
--dit is commentaar
--deze functie word aangeroepen bij elk event
--waarschijnnlijk worden meerdere events in een function call verwerkt dus daarom geen if else
function PetEmote_OnEvent()
if (event == "UNIT_HAPPINESS") then
PetEmote_HappinessChanged();
end
if (event == "CHAT_MSG_SPELL_TRADESKILLS") then
MarsMessageParser_ParseMessage("PetEmote", arg1);
end
if(event == "") then
end
if(event == "CHAT_MSG_COMBAT_PET_MISSES") then
--do not spam messages every event
if(random(1,5) > 2) then
if (PetEmote_HasPet()) then
PetEmote_Miss();
end
end
end
end
-this function is called on pet miss
--this function is abused to force random emotes other then misses
function PetEmote_Miss()
local arandom = random(1, 6);
--PetEmote_DoEmote(arandom);
local missEmotes = getn(PetEmote_MissMessages["default"]);
--PetEmote_DoEmote(missEmotes);
local randomEmote = random(1 , missEmotes);
--PetEmote_DoEmote(randomEmote);
local pName = UnitName("player");
local pTarget = UnitName("target");
local petTarget = UnitName("pettarget");
local emptyMessage = PetEmote_MissMessages["default"][randomEmote];
local replacedEmote = "";
--if we dont have any targets
if( pName ~= nil and pTarget ~= nil and petTarget ~= nil) then
replacedEmote = gsub(emptyMessage, "$n", pName);
replacedEmote = gsub(replacedEmote, "$t", pTarget);
replacedEmote = gsub(replacedEmote, "$x", petTarget);
end
if( pName ~= nil and pTarget ~= nil and petTarget ~= nil) then
PetEmote_DoEmote(replacedEmote);
end
end
bestand localization.lua
PetEmote_MissMessages={
["default"] = {
"is sad he missed",
"growls at missing his target",
"hits the empty air",
"looks at $n for some help",
"wants to hit $t very hard",
"wants to help $n kill $t",
},
["Debug"] = {
"looks at $n for some help",
"wants to hit $x very hard",
"wants to help $n kill $t",
},
-- ["Bat"] = {},
}
addon definitie bestand Petemote.xml
span style="font-style:italic;">
Script file="PetEmote.lua"/>
Frame name="PetEmote" parent="UIParent" hidden="false">
Scripts>
OnLoad> PetEmote_OnLoad();
OnEvent> PetEmote_OnEvent();
/Scripts>
/Frame>
/Ui>
Het leuke aan deze taal is dat er een VS.2005 plug in voor is met syntax highlighting auto complete en een gedeeltelijke intellisense.
www.codeplex.com/WarcraftAddOnStudio
donderdag 24 januari 2008
Eigen fout
Iedereen maakt wel eens fouten, opzich geen probleem maar ik maak ook wel eens fouten.
Deze week geef ik de advanced .net framework cursus met daarin een hoofdstuk over security. In een van de voorbeelden die ik gemaakt heb gebeurd het volgende:
Er is een gebruiker met de naam Dummy
De Dummy gebruiker heeft geen rechten op de c:\
De code maakt en verwijderd vervolgens een bestand in de de temp directory -> securtiy exception
Via een stukje code krijgt de Dummy gebruiker rechten op de c:\temp\ directory
De code maakt en verwijderd vervolgens een bestand in de de temp directory zonder exception
Na het aanmaken van de dummy gebruiker zag ik dat deze gebruiker volledige rechten had op de c:\ schijf omdat de dummy gebruiker Administrator rechten had. Toen kon ik twee dingen doen:
De dummy gebruiker 'normal' user maken
De Administrator groep als rechthebbende van de c:\ schijf verwijderen.
Slim als ik ben heb ik natuurlijk gekozen voor beide oplossingen. Vervolgens was er geen gebruiker meer op het systeem die volledige rechten had op de c:\ schijf. De administrators hadden geen 'Full' rechten meer en alle users van het systeem hadden read en write rechten op de c:\ schijf.
Omdat ik VS.net 2008 geinstalleerd heb met de setup /q is de installatie verlopen onder het system account met 'Full' rechten op het hele systeem (is dat geen vunerability?)
Nadat ik dus het probleem van de rechten had gevonden moest ik het ook nog oplossen. Helaas was er geen gebruiker meer met voldoende rechten op de c:\ schijf om de rechtenstructuur aan te passen. Er was geen gebruiker meer met 'Full' rechten. Anders dan de system gebruiker en met de system gebruiker kan je niet inloggen.
Onder windows is er echter een tooltje met de naam TAKEOWN dat gebruikt kan worden om de ownership van bestanden over te nemen zolang je maar als administrator draait. De Takeown heeft ook een UI verstopt bij:
drive->properties->advanced->owner
En dan maar kiezen voor "change owner to"
De code die je kan gebruiker om een overzicht van rechten te maken:
DirectoryInfo di = new DirectoryInfo(Path.GetDirectoryName(tbFileLocation.Text));
DirectorySecurity ds = di.GetAccessControl();
AuthorizationRuleCollection rules = ds.GetAccessRules(true, true, typeof(NTAccount));
textBox1.Text = "";
foreach (FileSystemAccessRule fr in rules)
{
textBox1.Text += fr.IdentityReference + br;
textBox1.Text += fr.AccessControlType + br;
textBox1.Text += fr.FileSystemRights + br;
textBox1.Text += fr.InheritanceFlags + br;
textBox1.Text += fr.PropagationFlags + br;
textBox1.Text += fr.IsInherited + br;
textBox1.Text += br;
}
}
-----------------------------------------------
De code die je kan gebruiken om rechten toe te voegen:
DirectoryInfo di = new DirectoryInfo(Path.GetDirectoryName(tbFileLocation.Text));
DirectorySecurity ds = di.GetAccessControl();
removeUserRights(ds, "Dummy");
FileSystemRights fsRights = FileSystemRights.FullControl;
FileSystemAccessRule accessRule = new FileSystemAccessRule("Dummy", fsRights, AccessControlType.Allow);
ds.AddAccessRule(accessRule);
di.SetAccessControl(ds);
-----------------------------------------------
DirectoryInfo di = new DirectoryInfo(Path.GetDirectoryName(tbFileLocation.Text));
DirectorySecurity ds = di.GetAccessControl();
removeUserRights(ds, "Dummy");
FileSystemRights fsRights = FileSystemRights.Write;
FileSystemAccessRule accessRule = new FileSystemAccessRule("Dummy", fsRights, AccessControlType.Deny);
ds.AddAccessRule(accessRule);
di.SetAccessControl(ds);
-----------------------------------------------
En de helper functie
private void removeUserRights(DirectorySecurity ds, string username)
{
AuthorizationRuleCollection rules = ds.GetAccessRules(true, true, typeof(NTAccount));
foreach (FileSystemAccessRule fr in rules)
{
if (fr.IdentityReference.ToString().IndexOf(username) >= 0)
{
ds.RemoveAccessRule(fr);
}
}
}
Deze week geef ik de advanced .net framework cursus met daarin een hoofdstuk over security. In een van de voorbeelden die ik gemaakt heb gebeurd het volgende:
Er is een gebruiker met de naam Dummy
De Dummy gebruiker heeft geen rechten op de c:\
De code maakt en verwijderd vervolgens een bestand in de de temp directory -> securtiy exception
Via een stukje code krijgt de Dummy gebruiker rechten op de c:\temp\ directory
De code maakt en verwijderd vervolgens een bestand in de de temp directory zonder exception
Na het aanmaken van de dummy gebruiker zag ik dat deze gebruiker volledige rechten had op de c:\ schijf omdat de dummy gebruiker Administrator rechten had. Toen kon ik twee dingen doen:
De dummy gebruiker 'normal' user maken
De Administrator groep als rechthebbende van de c:\ schijf verwijderen.
Slim als ik ben heb ik natuurlijk gekozen voor beide oplossingen. Vervolgens was er geen gebruiker meer op het systeem die volledige rechten had op de c:\ schijf. De administrators hadden geen 'Full' rechten meer en alle users van het systeem hadden read en write rechten op de c:\ schijf.
Omdat ik VS.net 2008 geinstalleerd heb met de setup /q is de installatie verlopen onder het system account met 'Full' rechten op het hele systeem (is dat geen vunerability?)
Nadat ik dus het probleem van de rechten had gevonden moest ik het ook nog oplossen. Helaas was er geen gebruiker meer met voldoende rechten op de c:\ schijf om de rechtenstructuur aan te passen. Er was geen gebruiker meer met 'Full' rechten. Anders dan de system gebruiker en met de system gebruiker kan je niet inloggen.
Onder windows is er echter een tooltje met de naam TAKEOWN dat gebruikt kan worden om de ownership van bestanden over te nemen zolang je maar als administrator draait. De Takeown heeft ook een UI verstopt bij:
drive->properties->advanced->owner
En dan maar kiezen voor "change owner to"
De code die je kan gebruiker om een overzicht van rechten te maken:
DirectoryInfo di = new DirectoryInfo(Path.GetDirectoryName(tbFileLocation.Text));
DirectorySecurity ds = di.GetAccessControl();
AuthorizationRuleCollection rules = ds.GetAccessRules(true, true, typeof(NTAccount));
textBox1.Text = "";
foreach (FileSystemAccessRule fr in rules)
{
textBox1.Text += fr.IdentityReference + br;
textBox1.Text += fr.AccessControlType + br;
textBox1.Text += fr.FileSystemRights + br;
textBox1.Text += fr.InheritanceFlags + br;
textBox1.Text += fr.PropagationFlags + br;
textBox1.Text += fr.IsInherited + br;
textBox1.Text += br;
}
}
-----------------------------------------------
De code die je kan gebruiken om rechten toe te voegen:
DirectoryInfo di = new DirectoryInfo(Path.GetDirectoryName(tbFileLocation.Text));
DirectorySecurity ds = di.GetAccessControl();
removeUserRights(ds, "Dummy");
FileSystemRights fsRights = FileSystemRights.FullControl;
FileSystemAccessRule accessRule = new FileSystemAccessRule("Dummy", fsRights, AccessControlType.Allow);
ds.AddAccessRule(accessRule);
di.SetAccessControl(ds);
-----------------------------------------------
DirectoryInfo di = new DirectoryInfo(Path.GetDirectoryName(tbFileLocation.Text));
DirectorySecurity ds = di.GetAccessControl();
removeUserRights(ds, "Dummy");
FileSystemRights fsRights = FileSystemRights.Write;
FileSystemAccessRule accessRule = new FileSystemAccessRule("Dummy", fsRights, AccessControlType.Deny);
ds.AddAccessRule(accessRule);
di.SetAccessControl(ds);
-----------------------------------------------
En de helper functie
private void removeUserRights(DirectorySecurity ds, string username)
{
AuthorizationRuleCollection rules = ds.GetAccessRules(true, true, typeof(NTAccount));
foreach (FileSystemAccessRule fr in rules)
{
if (fr.IdentityReference.ToString().IndexOf(username) >= 0)
{
ds.RemoveAccessRule(fr);
}
}
}
dinsdag 22 januari 2008
Visual Studio 2008 van Beta naar Full Version (problemen onder vista)
Van de week heb ik de volledige versie van VS2008 gescoord een nodige upgrade vanaf mijn Beta 2 versie.
Zoals het upgraden van alle Beta's naar Full versions is het nogal een monniken werkje.
Eerst moeten een flink aantal onderdelen van de Beta geuninstalled worden en vervolgens moet de full version geinstalleerd worden.
De beta bestaat uit de volgende onderdelen die ook in DEZE volgorde geuninstalled moeten worden:
Remove "MSDN Library for Visual Studio 2008 Beta"
Remove "Microsoft SQL Server Compact Edition 3.5"
Remove "Microsoft SQL Server Compact Edition 3.5 Design Tools"
Remove "Microsoft SQL Server Compact Edition 3.5 for Devices"
Remove "Microsoft Visual Studio Performance Collection Tools"
Remove "Windows Mobile 5.0 SDK R2 for Pocket PC"
Remove "Windows Mobile 5.0 SDK R2 for Smartphone"
Remove "Crystal Reports 2007"
Remove "Visual Studio Asset System"
Remove "Microsoft Visual Studio Web Authoring Component / Microsoft Web Designer Tools"
Remove "Microsoft Visual Studio 2005 Tools for the 2007 Microsoft Office System Runtime"
Remove "Microsoft Visual Studio 2005 Tools for the 2007 Microsoft Office System Runtime Language Pack" (non-English editions only)
Remove "Microsoft Visual Studio Tools for Office Runtime 3.0"
Remove "Microsoft Document Explorer"
Remove "Microsoft Document Explorer 2005 Language Pack" (non-English editions only)
Remove "Microsoft Device Emulator 3.0"
Remove "Microsoft .NET Compact Framework 3.5"
Remove "Microsoft .NET Compact Framework 2.0 SP1"
Remove ".NET Framework 2.0 SDK"
Remove "Microsoft Visual Studio Codename Orcas Remote Debugger"
Remove "Microsoft Visual Studio 64bit Prerequisites Beta" (64-bit platforms only)
Remove "Microsoft .NET Framework 3.5"
Natuurlijk las ik dit pas na het uninstallen van VS 2008 Beta (ook wel orcas release) en moest ik daarna gaan puinruimen.
Eerst ben ik begonnen met het uninstallen van een aantal updates (3x zo'n KB nummer)
Vervolgens heb ik het .Net 3.0 en 3.5 framework geuninstalled (en dat onder vista)
Na mijn systeem goed opgruimd te hebben en een keer of 3 een reboot kreeg ik de volgende melding bij het selecteren van de VS2008 onderdelen.
Some component must be installed in C:\Program Files\Microsoft Visual Studio 9.0\ directory. Check that you have write permissions and enough space in that directory
Verder kon ik mijn c:\ schijf niet selecteren als doelstation en kreeg ik soms een foutmelding in de trant van:
Illegal disk check if there is enough disk space or the drive isnt write-protected
Hierna dus maar mijn hele schijf read/write gemaakt voor de gebruiker Everyone en zoveel mogelijk ruimte vrij gemaakt (door de beta installatie files te verwijderen :()
Dit werkte dus allemaal niet. Na een uurtje googlen en nog het een en ander uninstallen zat ik met een systeem zonder VS2008 en flink wat projecten in 2008 geschreven.
De installatie van VS maakt in je %temp% directory allerlei error logs aan waarin alle foutmeldingen staan vermeld. Na het legen van de temp directory niet nog meer succes. (een transient upgrade check allerlei foutmeldingen niet dubbel, als bij de eerste install er bijvoorbeeld onvoldoende schijfruimte vrij is checked hij dat niet nog een keer, op zich al vervelend maar bij een OS upgrade storend dat hij niet nog een checked (yeah MS examens))
Het log bestand waar je nog eens rustig kan lezen wat er allemaal fout ging heet :
dd_install_vs_vstscore_90.txt
Een van de eerste regels hierin is (op mijn systeem):
[01/21/08,15:12:38] Setup.exe: Command line: D:\VS2008\setup\setup.exe /LAUNCHER="C:\Users\Barfield\AppData\Local\Temp\" /HWND="721870" /NoExclude
Hierna kwam ik dus al snel tot de conlusie als de UI bombed dan maar via de command line installen.
Met de opdracht setup /q (van quiet) verliep de installatie zonder problemen en ik kan nu weer VS2008 gebruiken. Het nadeel hiervan is wel dat je vervolgens een uur lang niet kan zien dat de installatie succesvol verloopt. Updates van de log bestanden kunnen lang duren, tijdens de installatie van het 3.5 framework was de isntaller bijvoorbeeld 15 minuten stil. Onder de taskmanager was wel te zien dat er allerlei setup.exe threads draaieden maar niet dat ze bijvoorbeeld IO in en uitvoer hadden of dat ze veel processort tijd vroegen.
Verder heeft mij quit installer geen SQL express geinstalleerd :D
Al met al een nutteloze dag met veel vallen en opstaan, maar eindelijk mijn VS 2008 geinstalleerd.
Zoals het upgraden van alle Beta's naar Full versions is het nogal een monniken werkje.
Eerst moeten een flink aantal onderdelen van de Beta geuninstalled worden en vervolgens moet de full version geinstalleerd worden.
De beta bestaat uit de volgende onderdelen die ook in DEZE volgorde geuninstalled moeten worden:
Remove "MSDN Library for Visual Studio 2008 Beta"
Remove "Microsoft SQL Server Compact Edition 3.5"
Remove "Microsoft SQL Server Compact Edition 3.5 Design Tools"
Remove "Microsoft SQL Server Compact Edition 3.5 for Devices"
Remove "Microsoft Visual Studio Performance Collection Tools"
Remove "Windows Mobile 5.0 SDK R2 for Pocket PC"
Remove "Windows Mobile 5.0 SDK R2 for Smartphone"
Remove "Crystal Reports 2007"
Remove "Visual Studio Asset System"
Remove "Microsoft Visual Studio Web Authoring Component / Microsoft Web Designer Tools"
Remove "Microsoft Visual Studio 2005 Tools for the 2007 Microsoft Office System Runtime"
Remove "Microsoft Visual Studio 2005 Tools for the 2007 Microsoft Office System Runtime Language Pack" (non-English editions only)
Remove "Microsoft Visual Studio Tools for Office Runtime 3.0"
Remove "Microsoft Document Explorer"
Remove "Microsoft Document Explorer 2005 Language Pack" (non-English editions only)
Remove "Microsoft Device Emulator 3.0"
Remove "Microsoft .NET Compact Framework 3.5"
Remove "Microsoft .NET Compact Framework 2.0 SP1"
Remove ".NET Framework 2.0 SDK"
Remove "Microsoft Visual Studio Codename Orcas Remote Debugger"
Remove "Microsoft Visual Studio 64bit Prerequisites Beta" (64-bit platforms only)
Remove "Microsoft .NET Framework 3.5"
Natuurlijk las ik dit pas na het uninstallen van VS 2008 Beta (ook wel orcas release) en moest ik daarna gaan puinruimen.
Eerst ben ik begonnen met het uninstallen van een aantal updates (3x zo'n KB nummer)
Vervolgens heb ik het .Net 3.0 en 3.5 framework geuninstalled (en dat onder vista)
Na mijn systeem goed opgruimd te hebben en een keer of 3 een reboot kreeg ik de volgende melding bij het selecteren van de VS2008 onderdelen.
Some component must be installed in C:\Program Files\Microsoft Visual Studio 9.0\ directory. Check that you have write permissions and enough space in that directory
Verder kon ik mijn c:\ schijf niet selecteren als doelstation en kreeg ik soms een foutmelding in de trant van:
Illegal disk check if there is enough disk space or the drive isnt write-protected
Hierna dus maar mijn hele schijf read/write gemaakt voor de gebruiker Everyone en zoveel mogelijk ruimte vrij gemaakt (door de beta installatie files te verwijderen :()
Dit werkte dus allemaal niet. Na een uurtje googlen en nog het een en ander uninstallen zat ik met een systeem zonder VS2008 en flink wat projecten in 2008 geschreven.
De installatie van VS maakt in je %temp% directory allerlei error logs aan waarin alle foutmeldingen staan vermeld. Na het legen van de temp directory niet nog meer succes. (een transient upgrade check allerlei foutmeldingen niet dubbel, als bij de eerste install er bijvoorbeeld onvoldoende schijfruimte vrij is checked hij dat niet nog een keer, op zich al vervelend maar bij een OS upgrade storend dat hij niet nog een checked (yeah MS examens))
Het log bestand waar je nog eens rustig kan lezen wat er allemaal fout ging heet :
dd_install_vs_vstscore_90.txt
Een van de eerste regels hierin is (op mijn systeem):
[01/21/08,15:12:38] Setup.exe: Command line: D:\VS2008\setup\setup.exe /LAUNCHER="C:\Users\Barfield\AppData\Local\Temp\" /HWND="721870" /NoExclude
Hierna kwam ik dus al snel tot de conlusie als de UI bombed dan maar via de command line installen.
Met de opdracht setup /q (van quiet) verliep de installatie zonder problemen en ik kan nu weer VS2008 gebruiken. Het nadeel hiervan is wel dat je vervolgens een uur lang niet kan zien dat de installatie succesvol verloopt. Updates van de log bestanden kunnen lang duren, tijdens de installatie van het 3.5 framework was de isntaller bijvoorbeeld 15 minuten stil. Onder de taskmanager was wel te zien dat er allerlei setup.exe threads draaieden maar niet dat ze bijvoorbeeld IO in en uitvoer hadden of dat ze veel processort tijd vroegen.
Verder heeft mij quit installer geen SQL express geinstalleerd :D
Al met al een nutteloze dag met veel vallen en opstaan, maar eindelijk mijn VS 2008 geinstalleerd.
donderdag 17 januari 2008
Netmeeting onder vista
Onder vista is Netmeeting verdwenen. Opzich geen probleem was het niet dat je dan ook niet kan inloggen op bestaande Netmeetings.
De nieuwe vista cardspace bied allerlei opties aan, maar niet de mogelijkheid om een verbindign te maken met een shared desktop vanaf een XP sessie.
Normaal gesproken kan netmeeting niet geinstalleer worden onder Vista. Maar de compatability modus biedt uitkomst. Draai de isntaller onder een lichtere comp mode en hij zal gewoon installeren.
http://joshmaher.wordpress.com/2007/02/21/netmeeting-on-vista/
De nieuwe vista cardspace bied allerlei opties aan, maar niet de mogelijkheid om een verbindign te maken met een shared desktop vanaf een XP sessie.
Normaal gesproken kan netmeeting niet geinstalleer worden onder Vista. Maar de compatability modus biedt uitkomst. Draai de isntaller onder een lichtere comp mode en hij zal gewoon installeren.
http://joshmaher.wordpress.com/2007/02/21/netmeeting-on-vista/
maandag 14 januari 2008
Good Books
Pragmatic Programming
Wat als je programmeerd voor honderduizend gebruikers.
Hoe schrijf ik herbruikbare code.
Hoe maak ik goed en snel documentatie.
Wat is versie beheer
Head first design patterns
Wat is een design patterns
Hoe leer ik zelf design patterns gebruiken
Wat als je programmeerd voor honderduizend gebruikers.
Hoe schrijf ik herbruikbare code.
Hoe maak ik goed en snel documentatie.
Wat is versie beheer
Head first design patterns
Wat is een design patterns
Hoe leer ik zelf design patterns gebruiken
The Ten Commandments for C Programmers
The Ten Commandments for C Programmers
by Henry Spencer
- Thou shalt run lint frequently and study its
pronouncements with care, for verily its perception and
judgement oft exceed thine. - Thou shalt not follow the NULL pointer, for chaos and
madness await thee at its end. - Thou shalt cast all function arguments to the expected
type if they are not of that type already, even when
thou art convinced that this is unnecessary, lest they
take cruel vengeance upon thee when thou least expect
it. - If thy header files fail to declare the return types of
thy library functions, thou shalt declare them thyself
with the most meticulous care, lest grievous harm befall
thy program. - Thou shalt check the array bounds of all strings
(indeed, all arrays), for surely where thou typest
"foo" someone someday shall type "supercalifragilisticexpialidocious". - If a function be advertised to return an error code in
the event of difficulties, thou shalt check for that
code, yea, even though the checks triple the size of
thy code and produce aches in thy typing fingers, for
if thou thinkest "it cannot happen to me", the gods
shall surely punish thee for thy arrogance. - Thou shalt study thy libraries and strive not to
re-invent them without cause, that thy code may be short
and readable and thy days pleasant and productive. - Thou shalt make thy program's purpose and structure
clear to thy fellow man by using the One True Brace
Style, even if thou likest it not, for thy creativity
is better used in solving problems than in creating
beautiful new impediments to understanding. - Thy external identifiers shall be unique in the first
six characters, though this harsh discipline be irksome
and the years of its necessity stretch before thee
seemingly without end, lest thou tear thy hair out and
go mad on that fateful day when thou desirest to make
thy program run on an old system. - Thou shalt foreswear, renounce, and abjure the vile
heresy which claimeth that "All the world's a VAX",
and have no commerce with the benighted heathens who
cling to this barbarous belief, that the days of thy
program may be long even though the days of thy current
machine be short.
Abonneren op:
Reacties (Atom)