ingig.net

Ideas, problems and development of Fronturs websites

Links

clock January 29, 2005 22:21 by author ingig
http://www.stylegala.com/ http://www.scriptygoddess.com/ http://www.456bereastreet.com/ http://www.andybudd.com/presentations/skillswap05/accessibility/

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5


Domino áhrif - vítahringur sem myndast

clock January 28, 2005 22:18 by author ingig
Ég var að skella upp nýjum forsíðum á vefjunum og gera nokkra auka fítusa, einn sem ég mjög sáttur við og fer seinna útí. En eftir að ég gerði uppfærsluna þá hafa vefirnir verið að keyra eitthvað undarlega.

Dyraland.is var oft að keyra á 40% örgjörva og það var nánast engin heimsókn á síðuna, þannig að ég fór að skoða þetta og fann út að þetta var einhver smá villa í kóðanum, sem lét vefinn hlaða tungumála skránni alltaf aftur og aftur á ákveðnum stað á vefnum. Þetta hefur þau áhrif að vefurinn verður hægari þegar þessi hluti er keyrður. Þá hlóðst upp umferð á vefnum og á endanum þá byrjaði vefurinn að skila Time out villu á grunninn þar sem fólk var í biðröð eftir að fá efnið til sín en vélin hafði ekki við að senda út gögn.

Þegar ég var að reyna að finna út hvað var að valda þessum auka álagi þá keyrði ég meðal annars SQL Profiler, til að sjá hvort einhver sql setninginn væri að stríða mér. Ég sá hinsvegar annað nokkuð skemmtilegt, eftir að hafa keyrt Profiler-inn í smá tíma. Vefurinn virkar þannig að alltaf þegar kemur exception á hann þá skrifa ég hana niður í grunn til að ég geti skoðað ástæðuna fyrir villunni. Hinsvegar, núna voru allir notendur að fá Time out villu, vefurinn skrifaði þá villu niður, og var þar með að dæli inn hundrum og þúsundum Time out villum niður í grunninn. Sem svo setti gagngrunnsvélina í 100% sem svo skapaði bið eftir svari frá grunninum. Skemmitlegur vítahringur.

Lausnin á þessu er í raun einföld, láta Exception klasann minn tékka hvort þetta sé SQL Time out villa, ef svo er þá tékka hvenær slík villa var síðast skrifuð niður, ef lengur en X sekúndur þá má skrifa hana niður annars ekki.

Þetta einmitt svona hlutur sem maður verður að læra af mistökum(eða lesa eins og hérna) en fattar ekki þegar maður er að forrita, þó það meiki alveg sens svona eftir á.

Núna sýnist mér sem allt sé komið í eðlilegt horf, barnaland.is er að keyra < 30% örgjörva(95% af tímanum), og dyraland.is og bloggland.is keyra er á 0%-5% örgjörva.

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5


Makka maður aftur!

clock January 20, 2005 22:17 by author ingig
Heldurðu að það hafi ekki bara verið keyptur makki í dag, eftir 8. ára viðskilning. Mac mini var fyrir valinu, kemur eftir 3-4 vikur :(

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5


Þýðingakerfið tilbúið

clock January 20, 2005 22:16 by author ingig
Nú er ég búin að fara í gegnum öll skjöl í kerfinu og setja inn þýðingarkerfið þannig að hægt er að þýða kerfið á önnur tungumál. Þetta þýðir í raun að nú getum við byrjað að dæla út vefum á öðrum tungumálum.

Þetta er tvímælalaust eitt það leiðinlegasta verkefni sem ég hef gert. Mjög mikið Copy-Paste og ég er að drepastí litla putt og vísifingri út af Ctrl-C og Ctrl-P. Verst var dagbók barnsins, því það þarf að hafa input, textarea og select box inní miðri setningu. Þetta er t.d. í dagbókinni.
Ég vó <input class="babyDiary" name="thyngd" value="<%= thyngd %>" size="4" /> grömm og var <input class="babyDiary" name="lengd" value="<%= lengd %>" size="4" /> cm á lengd.
Notandinn skráir svo inn þyngdina og lengdina á barninu. Vandamálið er að tungumál eru með mismunandi setningarfræði, þannig að maður getur ekki stólað á að input boxin séu alltaf á sama stað. Þá er það þýðandans að velja hvar boxin eiga að vera svo þau passi í málfræðina.

Lausning gæti verið að setja input boxinn í þýðingarnar sjálfar, það hinsvegar gengur ekki alveg þar sem það þarf að fylla í boxin þegar notandinn fer inn og vill sjá sínar tölur í boxunum. Ég hef talað um þýðingarkerfið sem ég nota áður, þannig að endilega kíkja á það áður en lengra er haldið.

TMX skjalið lýtur svona út
... <tu tuid="MyWeightAndHeight"> <tuv xml:lang="is"> <seg>Ég vó {0} grömm og var {1} cm á lengd.</seg> </tuv> </tu> ...


Kóðin lítur svo svona út, það skemmtilegasta er að gera alla back-slashið
string input1 = "<input class=\"babyDiary\" name=\"thyngd\" value=\"" + thyngd "\" size=\"4\" /> string input2 = "<input class=\"babyDiary\" name=\"lengd\" value=\"" + lengd "\" size=\"4\" /> string output = string.Format(t["WeightAndLengthAtBirth"], input1, input2); Response.Write(output);


Þegar maður vill svo reyna að halda í xhtml staðalinn þá verður maður að hafa gæsalappir utan um öll attribute sem eru í elementunum og það eitt skapar fimmföld vandræði. Þannig að þegar maður þarf að fara í gegnum 300 svona input, textarea og select box(og þetta var einfallt dæmi) þá verður maður ansi leiður á því og vill helst gera eitthvað annað.

Eftir að hafa gert þetta einu sinni, þá sá ég í hillingum hvað ég ætti mikið eftir. Þannig ég bjó til nokkur föll sem flýta fyrir.
string createInput(string name, string value, int size) {...} string createRadio(string name, int value, int choose) {...} string createTextarea(string name, string value) {...} string createSelect(string name, string[] optionText, int choose) {...}


Þessi föll skiluðu kóðanum sem ég vildi, það tók ekki nema 4 tíma að klára dagbókina, nokkuð sáttur.
string input1 = createInput("thyngd", thyngd, 10); string input2 = createInput("lengd", lengd, 10); string output = string.Format(t["WeightAndLengthAtBirth"], input1, input2); Response.Write(output);
Niðurstaða: babyverden.dk opnar 1. febrúar.
Næst á dagskrá: Killer heimasíðukerfi.


Annars er random á winampinum og Vanilla Ice með Ice Ice Baby er alveg að gera það núna :)

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5


SQL Server Health and History Tool

clock January 19, 2005 22:15 by author ingig
Þarf að skoða þetta og set því linkinn hérna

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5


XML-RPC

clock January 14, 2005 22:12 by author ingig
Ég ætla að skella smá dæmi hvernig maður notar xml-rpc með javascript. Það er alveg ótrúlega auðvelt að nýta sér þennan möguleika.

Því miður þá er RPC ekki í .Net 1.x pakkanum, ég hef reyndar ekkert skoðað .Net 2.0 (skamm skamm) þannig að ég veit ekki hvort RPC sé þar. Það væri samt draumur ef það væri í 2.0 og þannig gert að maður mundi gera .asmx skrá líkt og með SOAP. Fyrst að þetta er ekki í .Net 1.x þá er ég að nota .dll frá Cook Computing. Hann virkar fínt.

Maður byrjar á því að búa til RPC þjónustuna á vefþjóninum.
//File: User.cs namespace Frontur { public struct User { public string name; public int id; public User(string name, int id) { this.name = name; this.id = id; } } [XmlRpcUrl("http://www.frontur.com/userrcpservice.rem")] public interface IUserService { [XmlRpcMethod("Frontur.GetUser", Description="Get username and id")] string GetUser(string username, string password); } public class UserRPCService : XmlRpcService, IUserService { [XmlRpcMethod("Frontur.GetUser", Description="Get username and id")] public User GetUser(string username, string password) { //Geri gagnagrunnskall sem sækir notanda eftir notendanafni og lykilorði DataRow dr = ... //sæki DataRow-ið um notandanann return new User((string) dr["username"], (string) dr["password"]); } } }
Svona lítur kóði út sem sækir notanda struct sem inniheldur nafnið á notandanum og id. Það verður að vera struct en getur ekki verið klasi þar sem RPC styður bara struct. Breyturnar í User þurfa að vera public þannig að hægt sé að nálgast þær, það er sem sagt ekki hægt að nota Properties eða Get föll.
IUserService er interface sem skilgreinir hvaða föll eru notuð í þessari RPC þjónustu. Klasinn UserRPCService erfir síðan þetta interface og XMLRpcService klasann.

Næst þarf að bæta við einni línu í web.config
<httpHandlers> <add verb="*" path="userrcpservice.rem" type="Frontur.UserRPCService, frontur" /> <httpHandlers>
path = slóðin á vefþjóninum, í þessu tilfelli http://frontur.com/userrpceservice.rem
type = nafnið á klasanum ásamt nafninu á dll-inum hann er compilaður í. Í þessu tilfelli heitir þjónustan Frontur.UserRPCService og er compile-aður í frontur.dll

Þá er það javascript hlutinn. Ég er að nota safn sem heitir vcXMLRPC


<script type="text/javascript" src="vcXMLRPC.js"></script>

Næst er það javascript kóðinn sem við setjum á síðuna.
<script> //búum til tilvik af RPC þjónustunni var userService= XMLRPC.getService('http://frontur.com/userrcpservice.rem'); //bætum við fallinu UserRPCService userService.add('Frontur.GetUser', 'GetUser'); //sækjum notandann var user = userService.GetUser("abc", "123"); //birtum gögnin alert("Nafn:" + user.name + " | Id:" + user.id); </script>
Það er semsagt mjög auðvelt að nota þennan javascript klasa til að sækja upplýsingar. Síðan er bara að hlaða gögnunum inní hin ýmsu hluti sem eru á síðunni(div, span, osfrv.).

Javascript kóðin er reyndar einfaldaður, það er t.d. hægt að nota proxy og grípa allar villur. Eitt gott sæmi sem ég hef séð af honum er þegar hann notar blogger.com þjónustuna en þú getur séð notkunina á honum á þessari slóð.

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5


Ný forsíða á löndunum

clock January 12, 2005 22:11 by author ingig
Ég er að dunda mér í því núna að búa til nýjar forsíður fyrir öll löndin sem við erum með. Að sjálfsögðu er barnaland.is efst á forgangslista og gengur það nokkuð vel. Eftir miklar pælingar í Photoshop (btw. ég kann ekki að búa til útlit) er ég orðin nokkur sáttur við útkomuna.

Hvað gerir maður eins og ég sem kann ekki búa til útlit. Jú ég fer inná fullt af síðum hér og þar um heimin og ræni útlitinu af þeim, mixa því saman eyði út og bæti við. Á endanum þá kemst maður allaf niður á einhverja lausn sem manni finnst sniðuga.

Markmiðið með að gera nýja forsíðu er að endurskipuleggja hana þannig að hún sé ekki eitthvað kraðak, t.d. hefur það nokkrum sinnum gerst hjá okkur að við höfum verið með tvo bannera efst á forsíðunni, það gengur að sjálfsögðu ekki. Greinarnar sem birst hafa á síðunni hafa passað illa inní útlitið. Auglýsingapláss hefur verið einum of random.

Það skemmtilega við að vera að gera nýja forsíðu er að nú hef ég tækifæri á að bæta við nýjum fítustum og það sem ég er að gera núna er að nota RPC en það er hægt að ná í alveg snilldar javascript library sem heitir vcXMLRPC. Þetta javascript RPC gerir það mögulegt að sækja gögn og hlaða þeim á síðuna án þess endurhlaða henni. Þá verður RPC-ið líklegast opið öllum þannig að hver sem kann að forrita getur notað þessi föll og búið til forrit sem nota þau. Það hljóta að vera slatti af forriturum að nota barnaland.is, dyraland.is eða bloggland.is.

Svo er spurningin, þarf ég á þessu að halda? Þ.e.a.s. þarf ég að setja gögn á síðuna án þess að endurhlaða henni. Svarið er einfalt: Nei. Þetta er bara svo helv. svalt. Þetta er t.d. mjög flott Google Suggestions

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5


Server To Busy - 503

clock January 10, 2005 22:09 by author ingig
Það hefur verið að koma upp núna upp á síðkastið að barnaland.is skili "Server To Busy - 503" villu. Ástæðurnar fyrir þessu geta verið fjölmargar, en það sem ég held að sé að gerast hjá okkur er jólamyndirnar eru að streyma inn.

Á þessum venjulega degi eru að koma um 350 MB(+/- 100MB) af myndum inn á sólahring, núna eftir áramótin hefur þetta alltaf verið yfir 650 MB á sólahring. Flestir notendur eru á vefnum eftir kl: 20 á kvöldin, þegar margir eru að senda inn myndir þá myndast biðröð á vefnum sem svo endar á því stundum að skila þessari villu.

Það er stilling í machine.config sem heitir processModel, þar er attribute sem heitir maxWorkerThreads og maxIoThreads. Sjálfgefin gildi er 20, sem þýðir að hægt er að senda inn 20 skrár á sama tíma. Ef fleiri eru að senda inn skrár í einu(þetta á við um stillinguna maxIoThreads) þá skilar vefurinn Server To Busy - 503 villu.

Lausnin er að sjálfsögðu að hækka þessa tölu, en max gildi þeirra er 100. Ég setti þetta gildi í 50, sjáum hvort það dugi ekki.

processModel stillingin er venjulega staðsett í machine.config en það er hægt að hafa hana einnig í web.config skránni, þá þarf hinsvegar fyrst að breyta allowDefinition="MachineOnly" í allowDefinition="MachineToApplication" fyrir <section name="processModel" í machine.config. Þá er hægt að bæta processModel við í web.config og yfirskrifa þá machine.config.

Einnig er sniðugt að bæta við appRequestQueueLimit og minFreeThreads, default gildi á þeim er 100 og 7. Gildin voru hækkuð uppí 300 og 13 fyrir barnalandið. Hinsvegar virðist vera sem nauðsynlegt sé að hafa maxWorkerThreads a.m.k. tvöfalt stærri en minFreeThreads því annars virðist koma óþarfa bið á request-ið hjá notandanum. Þannig að passa það. appRequestQueueLimit og minFreeThreads er bæði hægt að breyta í machine.config og web.config en ég mundi mæla með að breyta þessu í web.config.

Ég vil samt benda á að þetta á við um vef sem er að fá "töluvert" af sóttum síðum á mínútu(barnaland er núna í um 900 req/min þegar mest er), undir venjulegum kringumstæðum virka default stillingarnar fínt.

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5


Ég bara varð að skella þessu inn

clock January 5, 2005 22:06 by author ingig
Fyndasta ever þegar gaurinn byrjar að veifa höndunum

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5


Search

Twitter Updates

    Myndir

    Er.is

    Calendar

    <<  November 2008  >>
    SuMoTuWeThFrSa
    2627282930311
    2345678
    9101112131415
    16171819202122
    23242526272829
    30123456

    Archive

    Tags

    Categories


    Blogroll

    Disclaimer

    The opinions expressed herein are my own personal opinions and do not represent my employer's view in anyway.

    © Copyright 2008

    Sign in