wtorek, 29 grudnia 2009

Formatowanie double

using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Double value = 14231891.32111;
            Console.WriteLine(String.Format("{0}", value));
            Console.WriteLine(String.Format("{0:00}", value));
            Console.WriteLine(String.Format("{0:n0}", value));
            Console.ReadLine();
        }
    }
}


wynik:

14231891,32111
14231891
14 231 891

poniedziałek, 21 grudnia 2009

Problemy z Accessem w VisualStudio

W przypadku problemów z użyciem bazy danych Access (poprzez OLE DB) w Visual Studio i uzyskiwaniem komunikatu polecam zainstalowanie:

MDAC 2.7 sp1

u mnie to pomogło :)

Property (właściwości) kontrolki - problem z ustaleniem wartości w aspx

Objawy:
- mimo prawidłowego ustawienia wartości dla właściwości nie jest ona widoczna w code-behind,
- wartość zmiennej występuje w kolekcji Attributes danej kontrolki,
- sprawa dotyczy strony (aspx) lub kontrolki (ascx)

to polecam (rozwiązanie):
- zmienić dostępność właściwości w code-behind na public. Protected, internal, private niestety powodują nieprawidłowe działanie.

czwartek, 3 grudnia 2009

DropDownList wewnątrz FormView

W sytuacji, kiedy załadowanie danych do DropDownList w FormView stanowi problem dobrym rozwiązaniem jest podpięcie się pod zdarzenie OnLoad konkretnej kontrolki DropDownList, a następnie tam wypełnienie jej. Np. w następujący sposób:

    protected void PeriodDropDownList_Load(object sender, EventArgs e)
    {
        DropDownList list = (DropDownList)sender;
        list.DataSource = EnumsHelper.IntoDictionary(typeof(Period));
        list.DataTextField = "Value";
        list.DataValueField = "Key";
    }

Jeszcze lepszym rozwiązaniem jest wykorzystanie OnDataBinding - zdarzenie wywoływane przed przypięciem danych. Dla OnLoad podczas zagnieżdżania FormView pojawił się problem z nadpisywaniem danych wybranych przez użytkownika.

poniedziałek, 16 listopada 2009

lxml - python 2.6, windows

Instalacja lxml (w najnowszej wersji) dla python 2.6 jest co najmniej irytująco trudne. Rozwiązanie (częściowe) to skorzystanie nie z wersji 2.2.4 tylko z wersji 2.2. O dziwo, tam instalator dla pythona 2.6 istnieje..

Adres: http://pypi.python.org/pypi/lxml/2.2

poniedziałek, 9 listopada 2009

Christopher Alexander - idea wzorców projektowych

Nie Alexandrescu, tylko Alexander. Christopher Alexander. Andrei Alexandresu to rumuński programista(ekspert) od C++. Zajmuje się wyrafinowanymi technikami w metodach szablonowych (template methods).

ACID - what does it mean?

[za wikipedią]


ACID jest skrótem od angielskich słów:
- atomicity - atomowość,
- consistency - spójność,
- isolation - izolacja,
- durability - trwałość.

czwartek, 5 listopada 2009

IHttpHandler - sesja, null

Czasem pojawia się potrzeba użycia sesji z poziomu własnego IHttpHandler. Próba bezpośredniego dostępu do kontenera poprzez HttpContext często kończy się wyjątkiem/zwróconym nullem - mimo, że kilka sekund wcześniej ustawiona została z poziomu strony aspx zmienna. Dlaczego tak się dzieje?

ASP.NET wymaga oznaczenia handlera korzystającego z sesji w jeden z dwóch sposobów:

- IReadOnlySessionState - kiedy potrzebna jest tylko opcja odczytu danych z sesji,
- IRequiresSessionState - kiedy również zapis się przyda.

środa, 4 listopada 2009

FormView - inserting obiektów, DropDownList, nullable

Przy wstawianiu obiektów, jeżeli jedno z jego pól może być null-em pojawiają się problemy. W moim wypadku było to index out of... Poszukiwania w Google nic nie dały (żadnych konkretnych odpowiedzi).

Znalezione rozwiązanie polega na dodaniu metody OnItemInserting, która zawiera +/- następujący kod:

protected void AddProductFormView_ItemInserting(object sender, FormViewInsertEventArgs e)
{
    if (e.Values["CalculationMethodId"] == "-1")
        e.Values["CalculationMethodId"] = null;
}

dodaniu do FormView atrybutu oniteminserting="AddProductFormView_ItemInserting" .

DropDownList powinien wyglądać +/- następująco:

<asp:dropdownlist id="ProductCalculationMethodList" runat="server" selectedvalue='<%# Bind("CalculationMethodId") %>' DataSourceID="CalculationMethodsDataSource" DataTextField="Name" DataValueField="Id" AppendDataBoundItems="true" Width="100%"> 
          <asp:listitem selected="True" text="" value="-1"></asp:listitem>
</asp:DropDownList>


Elementy istotne zaznaczone kolorem czerwonym :-)

poniedziałek, 2 listopada 2009

Siłomierz towarzyski - pierwsze kroki

Co istotne:

- dłuższa nóżka diody LED wskazuje miejsce połączenia z '+',
- jeśli ma się tylko dużą, domyślną wiertarkę, warto kupić płytkę uniwersalną z dziurkami,
- elementy można montować przy pomocy 3 rączki oraz taśmy papierowej (podtrzymanie elementów, które dopiero zostaną przylutowane - grawitacja nie odpuszcza),

piątek, 30 października 2009

Aplikacja serwera jest niedostępna

Czasem podczas korzystania z asp.net otrzymujemy inteligentny komunikat:

Aplikacja serwera jest niedostępna

jeżeli rozwiązania proponowane przez MS nie pomagają to polecam zrobić sobie listę aktualnie uruchomionych procesów w systemie (CTRL+SHIFT+ESC) a następnie ubijać po kilka i próbować odświeżyć stronę z interesującym komunikatem. Jeżeli po którymś ubijaniu ruszy - znaleziono przyczynę.

Sugerowane aplikacje do ubicia:
- Skype - skubany na porcie 80 coś tworzy (bodajże aktualizuje się?),
- IndicatorUty.exe - coś związanego z Fujitsu Siemens. Teoretycznie portu 80 nie przejmuje (przynajmniej netstat nie wskazuje nic na ten temat) jednak odpalić aplikacji nie można.

Gdyby komuś udało znaleźć się inny interesujący syf, to proszę o informację w komentarzach.

asp:Images w kontekście App_Themes

Zgodnie z dokumentacją MS (MSDN) w przypadku umieszczenia na stronie taga w postaci:

<asp:image runat="server" ImageUrl="graphics/info.jpg" id="test">

oraz skonfigurowanych styli następuje pobranie obrazka z katalogu aktualnego stylu. Niestety tak się nie dzieje.

Aby było możliwe dodanie grafiki w zależności od szablonu należy:

Opcja 1. Umieścić ją w klasie css (poprzez background-image), a klasę umieścić w jednym z plików css znajdujących się we właściwym podkatalogu katalogu App_Themes. Następnie klasę należy podpiąć do kontrolki. W efekcie powinien być widoczny zamierzony efekt.

Opcja 2. Utworzyć plik *.skin we właściwym podkatalogu katalogu App_Themes i opisać w nim 'wzór' kontrolki (wszystkie pola d/t wyglądu, bez np. ID, dodać należy runat="server") dodając atrybut SkinId. Ten sam atrybut należy umieścić we właściwym tagu na stronie aspx/w kontrolce ascx. Wtedy wszystko powinno zadziałać :)

(zakładam, że skonfigurowane jest w web.config używanie styli)

czwartek, 29 października 2009

Radary

Radar (samolot, statek, łódź?):
- bardzo kierunkowy - mała ilość "błyśnięć" wzajemnych pomiędzy 2 radarami,
- czasem nadaje liczbę losową - jeśli wróci coś innego, to nie my to wysłaliśmy.

Obsługa błędów przez ASP.NET

W ASP.NET często rzucane wyjątki warto ładnie obsługiwać. Brak jakiegokolwiek zajęcia się nimi prędzej czy później skończy się fatalnie dla programisty: poprzez wyjawienie newralgicznych danych lub też po prostu poprzez zyskanie złej opinii.

Jednym ze sposobów ukrycia błędów przed użytkownikiem jest prawidłowe skonfigurowanie sekcji customErrors w pliku web.config. Niestety mimo wielu prób nie udało mi się uzyskać tam informacji o ostatnim błędzie poprzez metodę:

Server.GetLastError();

Rozwiązaniem znalezionym przy pomocy google jest skorzystanie z Global.asax i metody application_Error.Tam wyjątek można zserializować i wrzucić do sesji, a następnie przekierować użytkownika do ładnie wyglądającej strony.

Może rozwiązanie nie idealne, ale dotychczas spełniające swoje zadanie.

Burza magnetyczna

Znalezione:
Burza magnetyczna

A co z ludźmi posiadającymi rozruszniki serca?

Klucze:
- zniszczenie całościowe (lub częściowe) sieci elektrycznych krajów uprzemysłowionych,
- brak zapasów w postaci transformatorów gotowych do użycia,
- czas produkcji jednej sztuki to 12 miesięcy (sic!)

Duża, odnotowana burza magnetyczna:
- przy burzy średniej wielkości szacowana ilość ludzi bez prądu - 130 milionów... 4x Polska.
- miała miejsce w roku 1859 (na przełomie sierpnia i września)
- prąd indukowany w przewodach pozwalał na przesyłanie wiadomości telegraficznych mimo odłączonych baterii
- zaczęło się od plam na Słońcu - po 18h dotarły do Ziemii
- burza takiej wielkości występuje średnio raz na 500 lat