fredag 9 augusti 2013

Starta Development Server manuellt

Du behöver inte starta igång Visual Studio om du ska testa ditt projekt! Ibland vill man visa upp sitt projekt för någon annan eller bara ha igång det i bakgrunden utan att man aktivt jobbar på det. Självklart kan man lägga upp det i IIS:en, men detta ger ett alternativ till det.

Det räcker med följande kommando i cmd:
"C:\Program Files\Common Files\microsoft shared\DevServer\9.0\WebDev.WebServer.exe" port:1337 /path:"C:\MyProjectFolder"

Förklaring

Du ska köra .exe-filen: WebDev.WebServer.exe med växlarna:
port - Den port du vill använda (valfritt - default är 80)
path - Mappadress till ditt projekt

Läs mer här:
http://blogsandip.wordpress.com/2008/04/05/starting-aspnet-development-server-manually/
http://stackoverflow.com/questions/286995/launch-asp-development-server-manually
http://blogs.msdn.com/b/irenak/archive/2006/11/30/sysk-250-how-to-start-asp-net-development-server-without-visual-studio.aspx

onsdag 7 augusti 2013

Post Antiforgerytoken manually

When you use the helper @Html.AntiForgeryToken() in a view this is the actual HTML result:
<input name="__RequestVerificationToken" type="hidden" 
value="{ long cryptic code }">
This input field is normally inside your <form>-element which means it will be attached to the request if you submit that form.
The problem occurs when this input field is outside of your form or if you are not submitting a form. Have no fear, there is a solution for this. The attribute [ValidateAntiForgeryToken] tells the server to look for a key with the name: "__RequestVerificationToken". Let's give the server what it wants!
First, get that value!
var antiforgeytoken = $('input[name=__RequestVerificationToken]').val();
Second, attach it to your AJAX-request (I use jQuery)
$.ajax({
  url: 'something/something',
  type: 'POST',
  contentType: 'application/x-www-form-urlencoded; charset=UTF-8', // Default
  data: { 'somekey': 'someval', 
          '__RequestVerificationToken', antiforgeytoken }
});
Now your server is happy, and you are too!
Update:
The content type is important because of how the MVC Binder validates the request. If you want to use another content type this solution How can i supply an AntiForgeryToken when posting JSON data using $.ajax? proposes to separate the antiforgery token and the postdata in two different parameters.

fredag 5 juli 2013

ORM jag hatar dig

En vecka senare har jag besegrat NHibernate och lyckats få en tabell i en databas att bli en användbar entitet i ett C# projekt. Kalla mig seg, men varför ska det vara så krångligt? Jag är uppenbarligen ny till ORM, men jag har tidigare använt Microsofts Entity Framework och tycker att den funkar som det borde funka.

När man jobbar med NHibernate och måste manuellt själv skriva ut alla kopplingar mot tabellerna istället för att skriva SQL kod måste man fråga sig om det är värt det. Om man istället låter det ske automagiskt likt Entity Frameworks lösningen tycker jag att det är värt det. Antagligen finns det liknande lösningar för NHibernate.

Det jag vill komma till är varför man, år 2013 fortfarande, måste bry sig om hur man sparar data i en databas?

Jag har börjat pilla med Node.js och ramlade över ett ramverk som heter Meteor.js. Det använder sig av MongoDb som är en NoSQL databas. Du skriver din data objekt i JSON, du sparar det i JSON, och hämtar det i JSON. Du behöver inte hålla på och konvertera, mappa, och bry dig om datatyper. Du använder dina entiteter hela vägen.

För mig känns detta helt naturligt att det är så här det borde funka. Jag tror att många som jobbat i branschen är inrutade på SQL-databaser och ORM. Det är så man har jobbat och det är så det funkar. Det är naturligt.

Det som jag tycker är det stora problemet med SQL och ORM är att så mycket tid går åt att göra saker som inte ger någon direkt nytta. Att göra så att databasen och applikationen kan prata med varandra är dötid. Det ger inget värde till beställaren. Fördelen med SQL är bättre prestanda. Men, det är på bekostnad av krånglighet. Jag tror att de allra flesta systemutvecklingsprojekten inte är beroende av den typen av prestanda som SQL ger. NoSQL är redo och har en en bra prestanda. Jag tror användaren kan vänta några extra millisekunder om de sparar pengar och tid på deras projekt!

torsdag 23 maj 2013

HTTP Headers

Hittade en grym sida som beskriver HTTP Headers

http://www.mobify.com/blog/beginners-guide-to-http-cache-headers/

Mina anteckningar:



cache-control

Exempel
Cache-control: private, max-age=0, no-cache

Förklaring
Nuvarande standard för att uppge cache egenskaper

Private | public
För specifik användare eller inte
max-age
tid att cachas i sek
s-maxage
samma som ovan, men delat cache
(används av CDN:er)
no-cache
ska ej cachas
no-store
ska ej lagras
no-transformation
ingen auto-formatering eller enkodning
för att spara bandbredd

expires

Exempel
Thu, 01 Dec 1983 20:00:00 GMT

Förklaring
Det gamla sättet att uppge sluttid för cache. Bra att ha för bakåtkompabilitet.

vary

Exempel
vary: User-Agent

Förklaring
Bestämmer vilka av headers som ska kontrollera cache emot

pragma

Exempel
pragma: no-cache
Samma sak som: cache-control: no-cache

Förklaring
Gammal. Används inte längre

etag

Exempel
ETag: "e6811cdbcedf972c5e8105a89f637d39-gzip"

Förklaring
Kort för "entity-tag". En ID-tag för en rersurs för att se om det är samma version


tisdag 14 maj 2013

Batch-tips

Några schyssta batch-tips:


Pausa skriptet i x antal sekunder
PING 1.1.1.1 -n 1 -w 15000 > NUL

Köra SQL-kommandon
osql eller sqlcmd (om SQL server)

Kolla om en parameter är NULL, och sätt ett defaultvärde
IF dummy==dummy%1 (
SET param1="Mitt default värde"
) ELSE (
SET param1=%1
)


Finns mer från källan:
http://weblogs.asp.net/jgalloway/archive/2006/11/20/top-10-dos-batch-tips-yes-dos-batch.aspx

och här:
http://www.robvanderwoude.com/batchfiles.php

måndag 13 maj 2013

En bakåtpil/-knapp i CSS!

Äntligen har jag hittat en schysst bakåtknapp i CSS som liknar iPhones och som stödjer CSS gradients!

Koden finns här:
http://lab.jeffbatterton.com/iphone-back-button/