Nullable types

Något jag inte tänkt på innan är att man inte kan sätta värde-variabler till null i C#. Gjorde ett försök och fick då felet:

int x = null;
Cannot convert null to 'int' because it is a value type

När jag läst detta inlägget, fick jag lite bättre förståelse till hur det fungerar, och även hur man kan göra för att använda null även på värdetyper, så här:

int? x = null;

Användbart om man jobbar med en databas och man vill att sina variabler ska reflektera de null-värden som finns där.

Även CodeBetter skriver mer om saken. 

By Jesper Lind

Verktyg för att hitta lediga och bra domännamn

Har hittat lite olika verktyg för att söka info om domäner och tänkta samla dem här på ett ställe. Några har jag skrivit om tidigare här på sajten.

Bust a Name - Verktyg för att hitta lediga domännamn från nyckelord.

Deleted.se - Domäner som håller på att gå ut.

Domain Hacks - Visar finurliga varianter av domäner genom subdomäner och mappar.

Domainstream.se - Auktionstjänst för domännamn och webbplatser.

ExpiredDomains - Utgående .com-domäner i textfiler.

Hjalmars domänsök - En svensk klon på Bust a Name som istället visar .se.

Instant Domain Search - Visar om ord finns lediga samtidigt som man skriver dem.

Lediga.se - .se-domäner som snart blir lediga för nyregistrering.

Militz.nu - Hittar du utgående .se-domäner

PR Blaster - Visar PageRank-värden i bulk.

Randomainer - Man startar med att ange ett ord och tjänsten kommer med förslag på närliggande. Visar även lediga domäner som är relaterade till ämnet. 

Who Is Hosting This - kontrollera vilken webbhost en sajt ligger hos.

Fyller på här ifall jag hittar några fler. Eller nån som har tips?

By Jesper Lind

UpdatePanel - TinyMCE demo med nedladdningsbar zip-fil

TinyMCE är en skön HTML-Editor som har blivit väldigt populär. Den är oftast väldigt enkel att använda och har många konfigureringsmöjligheter.

Men att använda den tillsammans med Ajax och partial update är verkligen ingen lätt match. Jag lyckades tidigare i år, efter stor möda, men det var nog mest tur.

Skrev om det i bloggen, men den postningen blev inte så fullständig eller bra. Det var mest lite egna minnesanteckningar som jag fick till där. Jocke var inne och kollade på beskrivningen men fick inte till det. Så nu tänkte jag visa precis hur man kan göra med ett uppdaterad och fullständig kod.

Problemen

Problem 1. TinyMCE gör om textboxar till en Iframe, som My Portal Project förklarar. Detta leder till att det är svårt att ta emot värden (speciellt i Firefox). Waqas_badas visar hur man kan komma runt detta genom ett javascript på submit-knappen.

Problem 2. Vid Ajax-anrop ritas inte editorn upp igen. Här kan man anropa mceAddControl-kommandot, men det gäller att resetta id-räknaren innan man gör det, här är en som kommit på hur man gör.

Kodexempel

Nu tänkte jag låta koden förklara resten. Missa inte att ladda hem zip-filen längst ner som innehåller ett färdigt project som fungerar i IE7, FF2 och Opera.

Default.aspx

<%@ Page Language="C#" ValidateRequest="false" Trace="false" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>MS Ajax UpdatePanel - TinyMCE</title>
<script type="text/javascript">
function SaveMyPreciousValues()
{
tinyMCE.triggerSave(false,true);
TextBox1 = document.getElementById('TextBox1');
alert('Check value when posting: '+ TextBox1.value)
}
</script>
</head>
<body>

<form id="form1" runat="server">
<asp:ScriptManager ID="sm" EnablePartialRendering="true" runat="server">
</asp:ScriptManager>

<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<p>
<asp:Label ID="Label1" runat="server" Text="Welcome to the MS Ajax UpdatePanel - TinyMCE Demo, Enjoy!"></asp:Label>
</p>
<asp:TextBox ID="TextBox1" Rows="10" Columns="50" TextMode="MultiLine" EnableViewState="false" Text="Write something here..." runat="server"></asp:TextBox>

<p>
<asp:Button ID="Button1" runat="server" OnClick="Button1_OnClick" OnClientClick="SaveMyPreciousValues();" Text="Hit me" />
</p>
</ContentTemplate>
</asp:UpdatePanel>

</form>
</body>
</html>

Default.cs.aspx

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if(!Page.IsPostBack)
LoadTinyMCE();
}

private void LoadTinyMCE()
{

//Load tinyMCE
HtmlGenericControl Include = new HtmlGenericControl("script");
Include.Attributes.Add("type", "text/javascript");
Include.Attributes.Add("src", "js/tiny_mce/tiny_mce.js");
this.Page.Header.Controls.Add(Include);


//Config MCE
HtmlGenericControl Include2 = new HtmlGenericControl("script");
Include2.Attributes.Add("type", "text/javascript");
Include2.InnerHtml = "tinyMCE.init({mode : 'textareas' ,language : 'sv',entity_encoding : 'raw'});";
this.Page.Header.Controls.Add(Include2);

}

protected void Button1_OnClick(object sender, EventArgs e)
{

//Get the contect of the TextBox
string inputText = Request.Form["TextBox1"];

//Print all Form-values when testing
/*for (int i = 0; i<Request.Form.Count;i++ )
{
string itemName = Request.Form.AllKeys[i];
string itemValue = Request.Form.GetValues(i)[0];
Label1.Text = Label1.Text + "<br />" + itemName + ":" + itemValue;
}*/

Label1.Text = "Content posted from TextBox1: " + inputText;

//Register some javascript to redraw the editor.
//Very important to reset the id-counter to "0", or else strange things will happen..
ScriptManager.RegisterClientScriptBlock(UpdatePanel1, this.GetType(), "init", "tinyMCE.idCounter=0;tinyMCE.execCommand('mceAddControl', false, 'TextBox1');", true);
}
}

zip-icon UpdatePanelTinyMCE.zip (C#)

Uppdatering: Joakim har skrivit om exemplet till VB.NET, läs mer på hans blogg.

By Jesper Lind

XSS-attacken mot Lunarstorm

Communitysajten Lunarstorm har blivit attackerade av en XSS-mask och runt 5000 användare fick sina presentationer raderade. Dessa ersattes istället av en länk till den konkurrerande communityn Hamsterpaj. Skriptet la även in gästboksinlägg på nio utvalda profiler.

Via kommentarerna hos IDG hittade jag även en länk till gate 303 som också skriver om attacken och visar upp själva koden som användes.

Lunarstorm utvecklas i ASP.NET som är relativt känt för att ha bra skydd mot liknande attacker. När man studerar attackkoden ser man att _EVENTTARGET och _VIEWSTATE har modifierats. Kanske har Lunarstorms utvecklare varit oförsiktiga och stängt av validateRequest-attributet, men det kan ju inte jag svara på. Skulle vara intressant att höra mer om exakt hur denna attack kunde möjliggöras, så andra kan ta lärdom.

Ett tips till Lunarstorms utvecklare (och andra) kan vara att ta en koll på Microsofts Anti-Cross Site Scripting Library

By Jesper Lind

Smyglansering av Merchworld.eu

http://www.codeodyssey.se/upload/resource/blog/Merchworld.eu-launch.jpg

I helgen så smyglanserade vi äntligen ett projekt som vi vet att många har väntat på, nämligen Merchworld.eu.

De första artisterna som finns i nätbutiken är punk/rock bandet Kid Down, den aktuella soloartisten Salem Al Fakir samt soul-pop-bandet Fibes, Oh Fibes. Räkna med fler spännande band och märken inom kort. Håll koll på Merchworld-bloggen för framtida nyheter.

Än så länge är det mycket kvar att göra på sidan, men nu är de grundläggande funktionerna igång. I början erbjuder vi endast postförskott som betalningssätt och levererar bara inom Sverige. Senare kommer det gå att handla med kreditkort och då börjar vi även ta beställningar från övriga världen.

Presentation av Merchworld

Merchworld specialiserar sig på merchandise för musik- och underhållningsindustrin. Tanken bakom företaget växte fram när vi upplevde att den existerande marknaden i Sverige och Europa inte fullt ut tillfredställde artisters behov. Vi visste att vi kunde utveckla samt förbättra denna viktiga, men ofta förbisedda, aspekt av en artists karriär.

Merchworld är medvetna om att spridningen av musik på nätet innebär att fans kommer hitta andra vägar att stödja artister utöver att köpa deras skivor. Musikbranschen ser nerladdning som musikindustrins domedag. Merchworld ser istället det som en möjlighet att skapa nya relationer mellan konsumenter och musik- och underhållningsrelaterade produkter och tjänster. Till skillnad från andra tryckföretag ingår vi ett partnerskap med våra kunder. Detta partnerskap gör det möjligt för oss att skapa en marknadsplan och ett urval av produkter vilka på bästa sätt representerar artisten. Vi erbjuder inga förskott och det behövs bara ett enkelt kontrakt. Kunderna betalar bara för det de vill ha. När som helst kunderna inte är nöjda med våra tjänster kan de kontakta oss och produktionen av deras produkter upphör.

Design, tillverkning, lager samt distribution sköts via vår fabrik lokaliserad i Vänersborg, Sverige. Produkterna kan sedan säljas på konserter, turnéer, i butiker eller via artistens officiella nätbutik. Företaget består av personer vilka alla har bakgrund inom musikindustrin samt erfarenhet av merchandise på en nationell som internationell nivå.

Teknisk information

Webbplatsen är utvecklad i ASP.NET 2.0 C# och är har XHTML 1.1 som dokumenttyp. Databasen körs på SQL Server.

Credits

Logga: Markus Juhlin

Orginaldesign: Håkan Johansson och Shelby Cinca på Passkontroll

Koncept: Andreas Edlund och Mattias Foldemark

Programmering: Jesper Lind - Code Odyssey

By Jesper Lind

Layoutlösningar med nästade Masterpages

Den nuvarande versionen av Visual Studio stödjer inte nästade Masterpages i designläget. Men detta kommer det bli ändring på i den kommande VS 2008 som ScottGu förklarar.

Scott visas samtidigt på att visa en användbar teknik, för att skapa olika layouts, för sidor som har en kolumn respektive två.

Det ryktas för övrigt att Visual Studio 2008 Beta 2 kommer släppas inom tre veckor och då med en "go-live"-licens.

By Jesper Lind

Lista över alla element i HTML 3.2 till XHTML 2.0

Jens Meiert berättar att han har skapat en lista över alla element som finns i HTML 3.2, HTML 4.01 (alla dokumenttyper), XHTML 1.0 Strict, XHTML 1.1, HTML 5 och XHTML 2.0.

Även fast de sista tre två specifikationerna inte är klara, så ska tabellen representera de senaste rekommendationerna. Han förklarar att han ska fortsätta att uppdatera listan så fort några förändringar sker.

Rene Sarsoo har gjort en variant av listan med färgkodning, så man kan se vilka element som är på väg bort och vilka som är nytillkomna.

Uppdatering: W3C släppte nyligen ett utkast över förändringar mellan HTML 4 till HTML 5.

By Jesper Lind