Archive for the ‘Uncategorized’ Category

Automatgenererad kod med Roslyn

May 26th, 2024

The presentation I held at the p2p-k1darch conference

Ola Fjelddahl Göteborgskontoret
https://selfelected.com https://github.com/LosManos/

10. Me, myself and I

11. Me, myself and I

Idag skall vi prata om automatgenererad kod i allmänhet
och Roslyn code generator i synnerhet

20. T4

Kör när filer ändras. Minns inte hur man kopplar det.
Också Framework.
https://learn.microsoft.com/en-gb/previous-versions/visualstudio/visual-studio-2015/modeling/code-generation-and-t4-text-templates

30. Roslyn

Analyzer och Code generator

Vid “kompilering”

Känner endast till syntaxen.
Plus något sorts kompilierings-context

Skapa kod via sträng eller kod/syntaxträd.

Lägger endast till kod

Borde inte kunna användas för AOP

Gamla sättet

Vid kompilering, får allt. Du söker ut det intressanta.

Inkrementellt

Nya inkrementella sättet, får anrop vid kompilering.

40. Var man startar

https://learn.microsoft.com/en-us/dotnet/csharp/roslyn-sdk/source-generators-overview
Den skapar dock enligt gamla sättet.

Gå vidare till Andrew Lock
https://andrewlock.net/creating-a-source-generator-part-1-creating-an-incremental-source-generator/

Skapa kod med kod
https://carlos.mendible.com/2017/03/02/create-a-class-with-net-core-and-roslyn/
https://roslynquoter.azurewebsites.net

Min kod
https://github.com/LosManos/FactoryMethodCodeGenerato

100. Frågor på detta?

Och nu…
Kod!

I start Domain names with capital letter

July 12th, 2020

When writing comments, and documentation, I usually write domain names with a capital start letter.

// Persist the Customer in the next layer.

// Group all Orders by their Packaging-type.

The Customer database is co-located with the Project database. The common key is a string.

The three reasons to use an O/RM

December 20th, 2018
  1. Type security
  2. Data copying Entity/Recordset
  3. Faster turn around with a moving schema

If these 3 issues aren’t a problem in you case, be reluctant to use an O/RM as an O/RM brings a bunch of other problems.

Type security

When you get the Customer.Verified out of a database the code already knows it is a boolean. No explicit type casting or declaring is needed as it is done elswhere, once and for all.

Now this isn’t totally true but depends on whether LINQ or HQL (or for another O/RM) you are using. But basically it is true, because of solid Right-left copying

Right-left data copying

Copying data from a recordset to the Entity is done by the OR/M and configured once and for all. Unlike a programmer it won’t forget to copy a field in an obscure corner in your code base.

It isn’t hard to write a data copying function for this simple case and dragging a whole OR/M into the project is a lot of dependencies for little use.

Turn around

When the scheme is changing fast, like in the beginning of a project, or when prototyping, an O/RM is of great help to change in one place and let the coding tools and compiler do the rest of the changes in the project.

Schemes tend to solidify after a while and only change in small increments so speeding up the first 3 months for having a rucksack the coming 6 years might not be the best solution.

Recension av lådcykel Riese-Müller Packster 80

February 12th, 2018

[Det kommer komma mer information.]

Denna cykeln.

Sammanfattning

Cykeln är löser mina problem och jag använder den varje dag och är nöjd.
Prislappen är (för) hög (men det tycker jag för en premium-bil också).
Motorn och transmissionen från Bosch är dåligt konstruerad (inte gjord för utomhusbruk eller med last).

TL;DR

Cykelergonomi

Den är tung. Det är inte säkert det gör något.

Det är inget som känns så länge man cyklar. För mig som normal man är det inget ohanterbart när jag leder eller baxar runt den men jämfört med något som är lätt är den tung. Jag vet inte hur tung den är jämfört med andra lådcyklar.
Jag har tyvärr inte vägt den för att få en rättvisande siffra att jämföra med; en med batteriet på och lådan monterad.

Den är smidigare än den ser ut.

I tighta 90-gradershörn måste man planera lite och kanske ge sig ut i mötande fält. Vid tillfälle av 180-graderssväng är det stor risk man måste gå av och leda den fram och tillbaka för att få runt den. Att parkera den i cykelställ är som att parkera en bil, man tittar först och svänger sedan och lyckas på första eller andra försöket.
Det är inget problem att cykla eller leda med två 6-åringar.

Den vobblar när man cyklar utan att hålla i styret.

Lösningen är att hålla i styret så det är inte kritiskt men det antyder svaj i ramen. Jag har inte jämfört med någon annan lådcykel.
Jag har cyklat i 50+ km/h, utan barn, vilket känns tryggt, ingen vobbelkänsla alls. Det är bra, för jag vill ogärna ramla i den farten med barn i lådan. Med 2 6-åringar i lådan höll ja 40+ km/h och var inte det minsta orolig. Barnen tjöt av glädje och tyckte det var bättre än Liseberg.

Den ramlar långsamt.

Vi har ramlat med och utan barn. Högre fart i den förra och mer “tappa cykeln” för den senare. Barnen satt fastspända och undrade vad de skulle göra medan de väntade på att vi lyfte cykeln igen. Det kändes betydligt tryggare än att ha barn på stol på pakethållaren.
En egenskap med att ramla med cykeln är att den ramlar långsammare än en vanlig cykel. Jag kan inte säga exakt vad det är men jag upplever jag har mer tid på mig att parera och styrningsmekaniken hindrar fullt utslag så man slipper få styret i magen eller fastna mellan ram och styre.
Jag har också provocerat cyken med halka, sväng, nerförsbacke och fart till en ordentlig ramling (utan barn). Utan att kunna jämföra med samma ramling med en vanlig cykel (såå roligt är det inte att ramla) tyckte jag det kändes bra.

Man sitter inte framåtlutad.

Eftersom man inte trampar med kraft finns det väldigt lite som håller upp rumpan och ryggen. Att sadeln är fjädrad är ingen tillfällighet. Detta borde gälla alla elcyklar och mer ju mer bakåtlutad sittpositionen är.
En av orsakerna jag valde denna lådcykeln framför annan lådcykel är att denna var mindre bakåtlutad. Jag hade dock önskat ännu mer framåtlutning.

Stödet bra och lite dåligt.

Först det bra: Den är otroligt stabil. Jag låter 7-åringarna klättra i och ur den parkerade cykeln och leka i den utan att vara rädd eller ens behöva stå i närheten.
Den får dock inte stå i nerförsbacke då stödet har precis höjd för att den skall glida sakta framåt och eventuellt (jag har testat lite grann och inte råkat ut för det) fälla upp stödet. Uppförsbacke borde fungera bra. Eventuellt kan ett tjockt gummiband över bromshandtagen lösa det. Trehjuliga lådcyklar har en handbroms, kanske skulle denna ha det också. Eller lås bakhjulet.
Det är också ganska vanligt jag slår i smalbenet när jag ställer cykeln på stödet.

Framhjulsupphängningen.

Behövs verkligen fjädring fram? Jag kan inte avgöra det.
Däremot känner jag att hela framhjulsupphängningen, om det är styrlager, navlager, fjädring eller broms kan jag inte avägra, glappar vid bromsning. Det är inget problem men i en känslig svängande nerförsbacke är det svårt att känna hur bromsen tar.

Färg.

Roligare än svart. Tråkigare än orange.
Mycket fin röd färg på överdraget.

Motorn

Walk assist är undermålig.

Den är för klen, alldeles för klen. En unge i lådan och en liten uppförsbacke blir jobbigt, speciellt som det är jobbigare att leda en lådcykel som är tyngre än en vanlig cykel och man inte vill luta.
Den orkar precis dra sin egen vikt om det inte lutar mer än någon grad uppför.
Den är oergonomisk. Ett tryck på en liten plastknapp och sedan hålla inne en annan medan man samtidigt håller handen på handtaget är jobbigt. Lägg till ett par vantar, eftersom det finns några av oss som inte cyklar bara soliga varma dagar, och man känner inte ens knappen ordentligt.

Temperaturkänslig motor.

Specifikationen är några få minusgrader för motorn.
En cykel med en motor till det priset monterad borde inte få säljas i Sverige utan en varningsskylt.
Bosch ligger i Tyskland. Där finns det garanterat minusgrader.
Jag har cyklat i 5 cm snö och det fungerar bra. Hjulen är breda, vilket är både bra och dåligt i snö, men jag antar de breda hjulen behövs p.g.a. vikten.

Temperaturkänsligt batteri.

Jag kommer inte ihåg specen för batteriet men ett batteri för flera tusen skall hantera flera minusgrader. Det gör det inte enligt specifikation.

Mycket friktion i motorn och drivningen.

Att cykla utan batteri är bara att glömma. Det är riktigt, riktigt trögt att trampa runt pedalerna utan batterihjälp.
För en billig motor hade jag varit ok med det men för en såpass dyr som detta är, är jag inte nöjd. Det borde sitta en varningsskylt: Denna “cykel” har inget praktiskt bruk utan batteri.
[Det kommer komma mer information.]

Learn children to be a producer of content and not only a consumer on a tablet

November 30th, 2016

A tablet is not only for onsuming what other people have done. You can too. Also a kid can.

Bloxels

Create your own side scroller.

There is also hardware if you want.

http://www.bloxelsbuilder.com/

Coda game

I have not tested

http://filimundus.com/coda-game/

Daisy the dinosaur

There is not a clear goal, just fiddle around. For good and bad. It is like making movies in ScratchJr but only side scrolling and less effects.

http://daisythedinosaur.com/

The Foos

It is like Lightbot but side scrolling and with funnier characters. The goal is somewhat funnier compared to lightbot; getting a donut for a (US) police officer instead of just lighting a light bulb. To try it out there is an older? version on the web.

http://thefoos.com/play/

Hopscotch

Like Scratch.

https://www.gethopscotch.com/

Hour of code

Lots of stuff.

https://code.org/

Lego Minecraft

Hard to use computer interface.

Expensive.

Light bot

Make a little robot find her way around stairs and obstacles.

https://lightbot.com

Light bot looking but with famous figures like angry birds

https://studio.code.org/hoc/1

Minecraft (pocket edition)

https://minecraft.net/pocket

Scratch(Jr)

Unlogical user interface.

https://scratch.mit.edu/

Also see https://www.dexterindustries.com/BrickPi/program-it/scratch/ for using Scratch with Raspberrypi.

More mechanical than programming

Pettson and Findus

http://filimundus.com/pettsons-inventions/
http://filimundus.com/pettsons-inventions-2/
https://filimundus.com/pettsons-inventions-3/

Inventioneers

http://filimundus.com/inventioneers/

I have not tested

Cargo-bot

https://itunes.apple.com/us/app/cargo-bot/id519690804

Tynker

I have not tested.

https://www.tynker.com/

Move the turtle

itunes.apple.com/us/app/move-turtle.-programming-for/id509013878?mt=8

On a proper computer

Blockly

https://blockly-games.appspot.com/?lang=en

Upgrade problems Window 10 Surface 1

November 1st, 2015

Wireless/WLAN/Wifi did not work when I upgraded my Surface Pro Win8 to Win10.

My resolution was to go to the devices and remove a WLAN driver (Marvell Avastar 350N wireless network controller?) and right after that look for hardware changes in the same window. Unfortunately I did not take any screenshots and promptly forgot the accurate data.

How to set up IIS 7.5 to use an Apppool user to connect to Sqlserver

October 6th, 2014

Honor those who should.

Setting up a new Web site and then connecting it to Sqlserver is a breeze if one uses the development web server.
But if one wants to use the real McCoy, i.e. IIS, there is more work.

iis apppool: http://www.selfelected.com/iis-7-iisapppool-lightly-explained/

 

Why use the real IIS when it is so cumbersome?  Because it looks more like the real production environment.

How do I debug?  Like this:

Start Visual studio i in administrator mode. (if one doesn’t, VS is helpful with this)
Then ctrl-alt-p (menu:debug:attach to process) and choose the w3wp.exe process, with the right user name. Attach. Debug.

Visual Studio 2012 and Blend – the designer only shows XAML and the remedy

December 17th, 2012

With VS2010; Blend was shipped as a stand alone product. With VS2012; Blend was bundled. Almost.

The Blend that comes with VS2012 only does Win8 ModernUI apps.

But there is a remedy: download Blend preview from here: http://bit.ly/U3Opxh.  Login might be required.

Well written post about one reason why software patents are inherently bad

July 29th, 2011

The article linked below doesn’t touch my usual rant about innovation and that there are things that cannot be owned.

Instead it mentions that there is something built into software patents that make them unusable as patents.

http://www.juliansanchez.com/2011/07/28/good-defensive-patents-are-bad-patents/

Exception: Dapper throws Value cannot be null. Parameter name: con

July 18th, 2011

If you are using Dapper and try to select data into an object and don’t have a default constructor the exception

Value cannot be null.
Parameter name: con

might be thrown.

The stack is:

[ArgumentNullException: Value cannot be null.
Parameter name: con]
   System.Reflection.Emit.DynamicILGenerator.Emit(OpCode opcode, ConstructorInfo con) +9566558
   Dapper.SqlMapper.GetClassDeserializer(IDataReader reader, Int32 startBound, Int32 length, Boolean returnNullIfFirstMissing) in C:\pathtomyproject\SqlMapper.cs:1177
   Dapper.SqlMapper.GetDeserializer(IDataReader reader, Int32 startBound, Int32 length, Boolean returnNullIfFirstMissing) in C:\pathtomyproject\SqlMapper.cs:674
   Dapper.<QueryInternal>d__4`1.MoveNext() in C:\pathtomyproject\SqlMapper.cs:397
   System.Collections.Generic.List`1..ctor(IEnumerable`1 collection) +327
   System.Linq.Enumerable.ToList(IEnumerable`1 source) +58
   Dapper.SqlMapper.Query(IDbConnection cnn, String sql, Object param, IDbTransaction transaction, Boolean buffered, Nullable`1 commandTimeout, Nullable`1 commandType) in C:\pathtomyproject\SqlMapper.cs:348