Quick Tip: 07. Firefox – Smart keywords
gru 9, 2009 Quick Tips
Dzisiaj krótko na temat, jak ułatwić sobie pracę z Firefoxem.
Firefox posiada bardzo przydatny mechanizm – “Smart keywords“. Umożliwia on definiowanie słów kluczowych dla pól wyszukiwania na stronach.
Aby dodać nowe słowo kluczowe klikamy prawym przyciskiem myszki na danym polu i wybieramy: “Utwórz słowo kluczowe dla tej wyszukiwarki…“,

w nowym okienku “Nowa zakładka” podajemy nazwę zakładki oraz słowo kluczowe.
Dla google można zrobić tak:

po takiej konfiguracji w przeglądarce (jako adres) wpisujemy np. “g asp.net“ i uzyskujemy wyniki wyszukiwania dla asp.net :)
Takie skróty możemy definiować dla dowolnego pola na stronie www.
Ja np. często korzystam ze skrótu “b + numer issue” jako odwołanie do BugTrackera.
Proste i bardzo przydatne :)
Tags: firefox, improvement, smart keywords
Quick Tip: 06. zamieniamy URL na link
gru 4, 2009 Quick Tips
Dzisiaj prosty przykład jak w tekście zamienić url na link, czyli np. użytkownik wpisuje:
“Zapraszam na moją stronę http://gasior.net.pl”
a my wyświetlając ten tekst chcemy otrzymać coś takiego
“Zapraszam na moją stronę <a href=”http://gasior.net.pl”>http://gasior.net.pl</a>”
Z pomocą przychodzą wyrażenia regularne:
protected string ConvertUrlsToLinks(string msg)
{
Regex r = new Regex("(http://[^ ]+)");
return r.Replace(msg, "<a href=\"$1\">$1</a>");
}
Jeżeli zachodzi taka potrzeba możemy ten sam efekt uzyskać w JavaScripcie:
var objRegExp = /(http:[^ ]+)/g; var convertedValue = msg.replace(objRegExp, "<a href='$1'>$1</a>");
EDIT:
w nawiązaniu do słusznej uwagi z komentarza (użytkownik apl) podaję poprawioną, dokładniejszą metodę:
var reg = @"((www\.|(http|https)+\:\/\/)[_.a-z0-9-]+\.[a-z0-9\/_:@=.+?,##%&~-]*[^.|\'|\# |!|\(|?|,| |>|<|;|\)])";
Regex r = new Regex(reg, RegexOptions.IgnoreCase);
return r.Replace(msg, "<a href=\"$1\">$1</a>").Replace("href=\"www", "href=\"http://www");
Quick Tip: 05. waliduj dane w formacie w jakim je wyświetlasz
wrz 11, 2009 C#, Quick Tips
Często dane, które posiadamy musimy odpowiednio sformatować przed ich wyświetleniem.
Jeżeli takie dane musimy zwalidować, to warto zadbać, aby walidowane dane były w takim samym formacie jak je wyświetlamy.
Prosty przykład:
Powiedzmy, że mamy metodę pobierającą kwotę faktury:
var invoiceBalance = GetInvoiceBalance();
Kwotę tą otrzymujemy z dokładnością do 4 miejsc po przecinku.
Jednak przez wyświetleniem formatujemy ją:
litInvoiceBalance.Text = invoiceBalance.ToString("C");
Co w wyświetli nam np. 100,00 zł.
Jak widać nasza zmienna wyświetlana jest z dokładnością do 2 miejsc po przecinku.
Dodatkowo załóżmy, że jeżeli pobrana kwota jest większa od 0, umożliwimy użytkownikowi zaznaczenie RadioButton’a, czyli:
if (invoiceBalance > 0)
{
rbMakePayment.Enabled = true;
}
Niby wszystko ok – aplikacja działa. Jeśli kwota jest większa od 0 możemy zaznaczyć RadioButton’a, a jeśli nie to nie możemy.
Problem pojawi się w sytuacji, kiedy nasza procedura zwróci np. 0,0010.
Co wówczas zrobi nasz program? Wyświetli 0,00 zł, ale jednocześnie pozwoli zaznaczyć RadioButton’a :(
Dzieje się tak, ponieważ 0,0010 zaokrąglone do dwóch miejsc po przecinku da nam 0,00, ale podczas walidowania kwota jest większa od zera.
Tego typu błędy są czasami ciężkie do wykrycia – kompilator nic nie zgłosi, a i sam błąd występuje rzadko.
Rozwiązaniem w tym przypadku jest zaokrąglenie naszej kwoty przed wyświetleniem i zwalidowaniem, czyli:
var invoiceBalance = GetInvoiceBalance();
invoiceBalance = Math.Round(invoiceBalance, 2);
litInvoiceBalance.Text = invoiceBalance.ToString("C");
if (invoiceBalance > 0)
{
rbMakePayment.Enabled = true;
}
Warto zwrócić uwagę na takie sytuacje.
Tags: C#, Math.Round
Quick Tip: 04. przeszukuj kolekcje z where zamiast foreach
wrz 1, 2009 .NET Framework, C#, Quick Tips
LINQ udostępnia metodę where, która umożliwia przeszukiwanie kolekcji tak jak foreach.
Przykładowo, zamiast:
var polishCustomers = new List<Customer>();
foreach (var customer in customers)
{
if (customer.Country == "Poland")
polishCustomers.Add(customer);
}
możemy użyć
var polishCustomers = customers.Where(x => x.Country == "Poland");
czyli krótko, zwięźle i na temat :)
Oczywiście wcześniej musimy dodać using System.Linq;
Quick Tip: 03. Stosuj nagłówki
mar 6, 2009 ASP.NET, Quick Tips
Przeglądając źródła różnych stron www (HTML) często można znaleźć taki kod:
<span class="bigHeader">Mój Nagłówek</span> <span class="newsTitle">Mój News</span>
W ten sposób za pomocą CSS ustalamy wygląd nagłówków, tytułów artykłów, newsów, itp. Np. na codeguru.pl każdy news na stronie głównej wygląda tak:
<a class="bigWindowTitleLinked" title="tytuł" href='/url.aspx'>News</a>
Jednak pod względem optymalizacji SEO dużo lepszym rozwiązaniem jest stosowanie nagłówków <h1>, <h2>, <h3>, itd. W ten sposób określamy ważność tekstu na stronie (<h1> jest ważniejszy od <h2>). Dla podanych przykładów wyglądałoby to tak:
<h2>Mój Nagłówek</h2> <h2>Mój News</h2>
Składnia prostsza, krótsza i lepiej interpretowana przez wyszukiwarki.
A dlaczego <h2> a nie <h1>? Wszystko zależy od tego, jak chcemy ustalić hierachię informacji na stronie. Jestem zwolennikiem stosowania nagłówka dla nazwy strony np.:
<h1>Mój portal</h1>
Zmiana class=”bigHeader” na nagłówki trudna nie jest :), a zyskujemy bardzo dużo na jakości kodu w “oczach” przeglądarek.
Tags: (x)html, css, html, optymalizacja, SEO
Quick Tip: 02. Pamiętaj o Page.IsValid !!
lut 15, 2009 ASP.NET, Quick Tips
Każda strona posiadająca formularze powinna być walidowana. I każdy (mam nadzieję :)) to robi – choćby poprzez stosowanie kontrolki RequiredFieldValidator.
Walidacja odbywa się (przy parametrze Display=”Dynamic”) po stronie przeglądarki (java script) oraz po stronie serwera. Wszystko działa jak należy. Użytkownik nie wprowadza danych lub wprowadza je źle i formularz się nie wysyła :) – działa, jeżeli obsługa java script w przeglądarce użytkownika jest włączona!
Problem pojawia się, kiedy użytkownik korzystający z naszej strony ma wyłączoną obsługę java script, a my zapomnimy wywołać walidację po stronie serwera.
Dlatego tak ważne jest korzystanie z Page.IsValid. Właściwość ta zwraca nam true lub false w zależności od tego, czy walidacja przeszła poprawnie czy też nie.
protected void btnMyButton_Click(object sender, EventArgs e) {
if (!Page.IsValid) {
return;
}
// dalsze operacje
}
Jeżeli korzystamy z grup walidacji (ValidationGroup=”NazwaValidationGroup”), wtedy daną grupę walidujemy poprzez wywołanie metody Page.Validate(”NazwaValidationGroup”).
protected void btnMyButton_Click(object sender, EventArgs e) {
Page.Validate("MojaGrupa")
if (!Page.IsValid) {
return;
}
// dalsze operacje
}
Niby oczywiste, a tak często o tym zapominamy :)
Quick Tip: 01. C# operator ??
lis 18, 2008 .NET Framework, ASP.NET, Quick Tips
Podczas tworzenia oprogramowania jedną z częściej wykonywanych operacji jest sprawdzanie, czy dany obiekt nie jest nullem. Często wygląda to tak:
MyType result;
if(Object1 != null)
{
result = Object1;
}
else
{
result = Object2;
}
lub
MyType result = Object1 != null ? Object1 : Object2;
Kod ten możemy sobie uprościć stosując operator ?? (podwójny znak zapytania). Operator ten zwraca obiekt będący “z lewej strony”, jeżeli jest on różny od null lub jeżeli jest nullem obiekt będący z jego “z prawej strony”.
Podany przykład będzie wyglądał tak:
MyType result = Object1 ?? Object2;
lub
MyType result = Object1 ?? Object2 ?? Object3;
Oczywiście Object1 może być również funkcją zwracającą obiekt, np:
public MyType MyObject
{
get { return myObject ?? (myObject = objectFactory.Create()); }
}
zamiast:
public MyType MyObject
{
get
{
if (myObject == null) myObject = objectFactory.Create();
return myObject;
}
}
Korzystając z tego operatora należy pamiętać, że pusty string nie jest nullem!
