228/2007

Tafiti – Ett experimentiellt sökkoncept baserat på Silverlight

http://www.codeodyssey.se/upload/resource/blog/tafiti.png

Ja nu börjar Silverlight-applikationerna mogna lite. Microsoft visar upp Tafiti, ett experimentellt sökkoncept, baserat på deras nya Silverlight-teknik och med Live som dataprovider.

Demot bjuder på en del roliga finesser, bland annat "trädet"som ni kan se en skärmdump på ovan. Inte helt användbar kanske, men ett fint exempel på hur visualisering kan göra sökning roligare.

(Via LiveSide)

Läs mer på Techcrunch och MacWorld 

Av Jesper Lind

Skriv kommentar

218/2007

Om det var roligare – hade jag städat skrivbordet oftare

När folk ser mitt skrivbord på min laptop får de ofta en chock pga hur överfullt och med filer det är. För ett tag sen såg det nästan så här illa ut. Killen som har skrivbordet i länken har som idé, att han vill ta vara på allt utrymme. Han tänker så att om jag fyller allt tomt utrymme, med så mycket grejer det bara går, så har han allt han behöver inom så kort räckvidd som möjligt.

Skälet till att mitt skrivbord har varit så hopplöst överbelagt, är inte det samma som hans, utan jag inser att det skulle vara lättare att jobba om jag hade bättre ordning på inkommande filer. Jag använder det som en slags dumpplats för filer som jag tar emot på mail och chattklienter. Och känner oftast inget behov att städa, tills det har gått över styr..

Nu har jag inspirerats av Coding Horror's "Discipline Makes Strong Developers" så har jag bestämt att det är dags för en ny regim. Ordning och reda på skrivbord, mail och källkod i projekten. Eftersom jag precis har installerat om XP, så är detta ett gyllende tillfälle att börja hålla bättre ordning.

Hur skulle det kunna bli roligare?

Ända sen jag såg Bumptop för första gången, insåg jag att om jag hade ett liknade interface på skrivbordet, så skulle det vara mycket roligare att hålla ordning. Missa inte det lustiga parodin som nån lagt upp på YouTube, som visar hur Bumptop skulle se ut om man använde det i verkliga livet.

En annan som gillade idéen är Doug Mccune och jobbar på att skapa samma slags UI med Flash/Flex/AIR/Actionscript Physics Engine och PaperVision 3D. Han kallar sin implementation tileUI och har redan ett enkelt demo som man kan prova på. Intressant är även att se filmen på hans blogg, där han har dokumenterat utvecklingen av projektet.

Städa upp webbplatser

(Några dar senare:) Inlägget handlade i första hand om att städa på sin lokala dator, men vill tipsa om en länk på ungefär samma ämne. Backend Media ger bra råd till hur man kan se över sin webbplats, och städa bort gamla sidor som inte är så välbesökta. Bra läsning.

Av Jesper Lind

4 kommentarer

208/2007

TreeSize – Visar filstorlek för mappar

Den inbyggda filhanteraren i XP har några begänsningar – den visar inte storleken på innehållet i flera mappar samtidigt. Man kan hålla muspekaren över varje mapp för att få reda på detta men det är inte så effektivt alla gånger.

Tänkte därför tipsa om ett litet program som heter TreeSize. Det finns i en gratis version med de grundläggande funktionerna och är bra att ha om man vill städa bort stora filer på sin dator. Fungerar på Windows 9x, 2000, XP och Vista. 

Av Jesper Lind

Skriv kommentar

198/2007

Validera CheckBox med CustomValidator

Försökte att lägga till en RequiredFieldValidator för att kontrollera att en CheckBox var ikryssad vid postning, men det gick inte så bra. Felet blev:

Control 'CheckBox1' referenced by the ControlToValidate property of
'RequiredFieldValidator1' cannot be validated.

Någonstans läste jag att man inte lagt till denna möjlighet på CheckBox för att "bägge värdena alltid är riktiga". Det kanske kan vara ett bra argument, men jag ville endå ha denna funktionelitet. I mitt fall gällde det en ruta som användaren måste kryssa i för att fortsätta.

Så jag gjorde det med en CustomValidator istället, så här ser uppmärkningen ut på sidan.

<asp:CheckBox id="CheckBox1" runat="server"></asp:CheckBox>
<br />
<asp:CustomValidator ClientValidationFunction="ValidateChecked"
Runat="server" ID="termsReadUnchecked" ErrorMessage="You must tick this box to continue"/>

Och i koden bakom lägger jag till JavaScript-funktionen för valideringen.

HtmlGenericControl validateCheckedScript = new HtmlGenericControl("script");
validateCheckedScript.Attributes.Add("type", "text/javascript");
validateCheckedScript.InnerHtml = "function ValidateChecked(src, args){args.IsValid=document.getElementById(\"" + ChckBox1.ClientID + "\").checked;}";
this.Page.Header.Controls.Add(validateCheckedScript);

Av Jesper Lind

Skriv kommentar

198/2007

Skicka mail med IIS på din lokala maskin

Har ägnat nån timme åt att försöka skicka mail med SMTP-servern i IIS 5.1 och nu lyckats få iväg några mail. Här går jag igenom de steg jag fick göra för att få det att fungera.

Mailkoden

Själva mailkoden jag använder i applikationen använder System.Net.Mail och ser ut ungefär så här:

SmtpClient smtpClient = new SmtpClient("localhost");
//smtpClient.DeliveryMethod = SmtpDeliveryMethod.PickupDirectoryFromIis;
MailAddress from = new MailAddress("from@dummysite.domain", "Alias from name");
MailAddress to = new MailAddress("to@dummysite.domain");
MailMessage mail = new MailMessage(from, to);
mail.IsBodyHtml = true;

mail.Subject = "From my local computer";
mail.Body = "Testing, testing";

smtpClient.Send(mail);

"SmtpDeliveryMethod.PickupDirectoryFromIis" var något jag trodde behövdes ett tag, eftersom jag läste om det på ett forum, men det visade sig att det gick bra att skicka även utan.

Ställa in SMTP-Server

Det problemet kom i form av ett felmeddelandet som såg ut så här:

Mailbox unavailable. The server response was: 5.7.1 Unable to relay for ...

Lösningen till detta hittade jag på CodeBetter och innebar att lägga till 127.0.0.1 som giltigt IP-nummer för att skicka mail från SMTP-server. (Egenskaper / Åtkomst / Anslutning / Endast datorer i listan nedan)

När detta var klart så försökte jag skicka igen, nu fungerade det i applikationen men mailen fastnade i C:\Inetpub\mailroot\Queue.

Lösningen på detta fann jag på Velocityreviews där medlemmarna förklarade att man behövde lägga till en giltigt SMTP från sin ISP. (Egenskaper / Leverans / Avancerat / Smart värd)

Hoppas detta kan hjälpa någon som vill kunna skicka mail från sin egen dator med ASP.NET.

Av Jesper Lind

Skriv kommentar

198/2007

Posta form-data till en extern URL

Jag kommer ihåg när man jobbade med klassisk ASP, och gick över till ASP.NET, att begreppet PostBack var rätt förvirrande. Typ: "Vadå ska varje sida posta tillbaks till sig själv?" Efter ett tag förstod man finessen och nu skulle skulle jag inte vilja byta tillbaks till hur föregångaren fungerade.

Ibland vill man dock kunna posta data från ett formulär till en annan URL, speciellt när man har att göra med betalväxlar (t ex Postens betalväxel), som ofta fungerar så.

PostBackUrl

I ASP.NET 1.1 var det rätt begränsade möjligheter men i 2.0 fick vi attributet PostBackUrl som kan sättas på Button, LinkButton och ImageButton. Har aldrig använt det själv men borde fungera bra.

HttpWebRequest

Med HttpWebRequest kan man skicka webbströmmar med data. Passar bäst om man vill att postningen ska ske i bakgrunden om jag förstått det rätt, och inte lika bra om man vill att webbläsaren ska följa URLen, som postningen sker till. Jag kan ha fel här för har inte provat så mycket med denna metod. Här är ett exempel som verkar rätt lätt att förstå.

Med JavaScript

Man kan lägga till ett extra formulär på sidan och posta detta genom att registrera ett javascript, från koden bakom, ungefär så här.

string sendScript = "<script language='javascript'>document.getElementById('paymentform').submit();<"+"/script>";
Page.RegisterStartupScript("SendPayment", sendScript);

På det extra formuläret anger man den externa URLen i action och variablerna som hidden-inputs.

<form id="paymentform" name="paymentform" action="https://thepaymentservice.domain" method="post">
<input type="hidden" id="Card_num" runat="server">
<input type="hidden" id="Currency" runat="server">
<input type="hidden" id="Amount" runat="server">
</form>

Eller så bygger man formuläret själv

Här är ett exempel på hur man kan använda HttpContext för att helt enkelt bygga ihop formuläret själv med html-taggar. Det är skrivet av Jigar Desai och finns att ladda hem på C# Corner.

Här kommer lätt modifierad variant:

using System;
using System.Web;
using System.Text;
using System.Collections.Specialized;

/// <summary>
/// Summary description for RemotePost
/// </summary>

public class RemotePost
{
private NameValueCollection inputs = new NameValueCollection();

private string url = string.Empty;
public string Url
{
set{ url = value; }
}
private string method = "post";
private string formName = "form1";

public void Add(string name, string value)
{
inputs.Add(name, value);
}

public void Post()
{
HttpContext.Current.Response.Clear();

StringBuilder sb = new StringBuilder();

sb.Append("<html><head>");

sb.Append(string.Format("</head><body onload=\"document.{0}.submit()\">", formName));
sb.Append(string.Format("<form name=\"{0}\" method=\"{1}\" action=\"{2}\" >", formName, method, url));

for (int i = 0; i < inputs.Keys.Count; i++)
{
sb.Append(string.Format("<input name=\"{0}\" type=\"hidden\" value=\"{1}\">", inputs.Keys[i], inputs[inputs.Keys[i]]));
}

sb.Append("</form>");
sb.Append("</body></html>");

HttpContext.Current.Response.Write(sb.ToString());

HttpContext.Current.Response.End();
}
}

Man anropar klassen så här:

RemotePost remotePost = new RemotePost();
remotePost.Url = "http://theRemoteDomain/Page.aspx";
remotePost.Add("field1","This is my first value");
remotePost.Add("field2","And another one");
remotePost.Post();

Av Jesper Lind

1 kommentarer

178/2007

Snart dags för uppdatering av PageRank?

Läste hos beNi att VI-SU har gjort en beräkning på när nästa uppdatering av Google PageRank färväntas ske.

Om man kollar på hur lång tid det vart mellan uppdateringarna innan så brukar det vara i genomsnitt 77,18 dagar mellan varje. Om Google hade följt denna takten så skulle uppdateringen skett igår den 16 aug. 

Av Jesper Lind

1 kommentarer

178/2007

Error-mail med Health monitor

Ett riktigt bra tips av Mads Kristensen, som förklarar hur man kan konfigurera health monotor i .NET så den skickar mail, när ett oväntat fel har uppstått i applikationen. Läs mer på MSDN.

Inställningarna i Web.config ser ut så här:

<?xml version="1.0"?>
<configuration>
   <appSettings/>
   <connectionStrings/>

   <system.web>
      <compilation debug="false" />
      <trace enabled="true" localOnly="false" />

      <healthMonitoring enabled="true">
         <providers>
            <add name="EmailProvider"
               type="System.Web.Management.SimpleMailWebEventProvider"
               from="you@domain.com"
               to="you@domain.com"
               subjectPrefix="Error: "
               buffer="true"
               bufferMode="Notification" />
         </providers>
         <rules>
            <add provider="EmailProvider" name="All App Events" eventName="All Errors" />
         </rules>
      </healthMonitoring>

   </system.web>
   <system.net>
      <mailSettings>
         <smtp from="you@domain.com">
            <network host="smtp.domain.com" />
         </smtp>
      </mailSettings>
   </system.net>
</configuration>

Av Jesper Lind

Skriv kommentar

178/2007

Första XSS-attacken mot vår blogg

Det här är inte speciellt dramatiskt egentligen, men lite kul med action. Någon postade för en stund sen en XSS-länk på den engelska delen av vår hemsida.

Jag visste att kommentarsfältet inte var skyddat mot HTML och har inte brytt mig om att fixa det förrän nu.

Attackvektorer

I kommentaren som postades låg följande html-tagg och det är alltså bara en test för att se ifall det gick att köra javascript genom kommentarerna på vår blogg.

<INPUT TYPE="IMAGE" src="javascript:alert('XSS');">

På ha.ckers.org's XSS (Cross Site Scripting) Cheat Sheet kan man läsa att denna vektor inte fungerar på IE7 eller FF2 men på IE6 och Opera. Där finns även fler referenser till andra vektorer.

Hur man skyddar man sig mot XSS (med .NET)

Det enklaste alternativet är att låta validateRequest vara på slaget som det är som standard. Nackdelarna är att det då inte går att posta taggar över huvudtaget och att ett error visas. Läs mer om för-/nackdelar ValidateRequest här. I vår blogg som handlar om webbutveckling vill vi ju kunna tillåta html-kod från våra besökare, så vi har detta skydd avstängt.

Istället ser vi till att använda Server.HtmlEncode på all text som kommer från besökaren (det var detta jag just la till).

En bra effekt är att det numera går att skriva htmlkod i kommentarerna och den visas som den ska. Vissa har ju märkt att det inte fungerat så bra tidigare och vi borde ha fixat det för länge sen.

Testning tillåtet

Om nån är intressarad får ni gärna försöka att posta XSS till detta inlägget. Jag antar att det är omöjligt men vem vet om det finns någon obskyr metod som inte HTMLEncode klarar av att filtera.

Har även lagt in en liten funktion som ska göra om url till länkar. Där kan jag tänka mig att det kan gå att få in någon XSS-variant. Så här ser funktionen ut ifall nån vill prova att "hacka" den.

public string ConvertUrlToHyperlink(string strInput)
{
string strPattern = @"(?<url>http://(?:[\w-]+\.)+[\w-]+(?:/[\w-./?%&~=]*[^.\s|,|\)|<|!])?)";
string strReplace = "<a href=\"${url}\" target=_blank>${url}</a>";
string strResult;
strResult = Regex.Replace(strInput, strPattern, strReplace);
strPattern = @"(?<!http://)(?<url>www\.(?:[\w-]+\.)+[\w-]+(?:/[\w-./?%&~=]*[^.\s|,|\)|<|!])?)";
strReplace = "<a href=\"http://${url}\" target=_blank>${url}</a>";
strResult = Regex.Replace(strResult, strPattern, strReplace);

return strResult;
}

Av Jesper Lind

1 kommentarer

158/2007

Exempel på enkel box-layout

Imorgon ska jag lära en kille grunderna i webb-design och html-programmering. Tänkte även att detta kan vara något att skriva om i bloggen, så andra läsare kan få nytta av detta.

Ett enkelt exempel i XHTML

Nu ikväll har jag förberett en enkel stuktur för en webbplats för att ha något att börja med. Denna kan ni se på följande länk:

Simple box-layout

Exempel-sajten är kodad i XHTML 1.0. Funderade ett tag på om det var bättre att använda HTML som första exempel, men vi kör med XHMTL till en en början så får vi se.

Layout utan tabeller

Sajten i exemplet är kodad utan tabeller använder istället <div>-taggar som positioneras med hjälp av CSS.

Validerad

Ofta stöter man på konstigheter med att olika webbläsare visar layouten olika. Det första man bör göra är att se till att korrekt CSS och HTML (länkarna går till valideringsverktygen hos W3C). Det är en förutsättning för att de olika webbläsarna ska få en chans att visa ditt innehåll som det var tänkt.

Övrigt

Till sajten har jag använt lite externa resurser. "Lorem Ipsum"-texterna har jag fått genererade här och bakgrundbilden lånade jag från Kaliber 10000.

Av Jesper Lind

10 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