RSS
poniedziałek, 24 czerwca 2013
Visual Studio i nieczytelne bloki try...catch podczas debugowania

 

Ponieważ ostatnio sporo czasu spędzam w Visual Studio programując w C# doszedłem do wniosku, że korzystanie z domyślnych ustawień edytora (ciemne litery na jasnym tle) jest zbyt męczące dla oczu. Wybrałem więc jeden z wielu dostępnych ciemnych szablonów dla edytora Visual Studio - Moira (zmodyfikowana) i w zasadzie jestem ze zmiany bardzo zadowolony.

Problem pojawił się w momencie debugowania kody. Visual Studio uparcie podświetla cały blok try...catch powodując ze tekst staje się kompletnie nieczytelny.

Debugowanie bloku try...catch przed zmianą:
Blok try-catch przed zmianą 


Po krótkim eksperymentowaniu z ustawieniami (Tools/Options/Environment/Fonts And Colors) okazało się, że odpowiedzialne za to ustawienie jest pozycja “Read-Only Region”. Po zmianie wszystko wygląda znacznie lepiej (niekoniecznie jednak na ekranie ustawień :)

Blok try-catch ustawienia

 
Debugowanie bloku try...catch po zmianie:
Blok try-catch po zmianie

czwartek, 20 czerwca 2013
C# podstawowe operacje na plikach - ściąga

 

Poniżej kilka prostych przykładów w języku C# typowych operacji na plikach.

Zapisywanie teksu do pliku tak, aby plik był bądź utworzony, gdy nie istnieje, bądź jego zawartość nadpisana, gdy istnieje.

 

System.IO.File.WriteAllText(sciezka, zawartosc);

 

Odseparowanie nazwy pliku z pełnej ścieżki do pliku, z rozszerzeniem pliku i bez.


nazwa_pliku = System.IO.Path.GetFileName(plik_ze_sciezka);

nazwa_pliku = System.IO.Path.GetFileNameWithoutExtension(plik_ze_sciezka);


Usunięcie ostatniego znaku slash ze ścieżki, jeśli istnieje.



sciezka = sciezka.TrimEnd(System.IO.Path.DirecorySeparatorChar);

 

Utworzenie nowego katalogu, jeśli nie istnieje.

 

bool plikUtworzony = false;
try
{
   System.IO.File.WriteAllText(nazwa, zawartosc);
   plikUtworzony = true;
}
catch (System.IO.DirectoryNotFoundException)
{
   (new FileInfo(nazwa)).Directory.Create();
}
finally
{
   if (!plikUtworzony)
   {
      System.IO.File.WriteAllText(nazwa, zawartosc);
   }
}

czwartek, 13 czerwca 2013
Programowanie iPhone - nagrania wideo z sesji WWDC 2013

Apple, znacznie wcześniej niż zwykle (krążąca po sieci plotka okazała się wiec prawdziwa, choć nie do końca ;) udostępniło nagrania z sesji WWDC 2013 Apple Worldwide Developers Conference, konferencja ciągle trwa i nowe nagrania uaktualniane będą na bieżąco.

 

Nagrania dostępne są dla programistów zarejestrowanych programie Apple Developer Program.

Programowanie iPhone - Nagrania z sesji WWDC 2013

Blox - odzyskanie skasowanego wpisu

Dwa dni temu moja druga połówka, przypadkowo, porządkując kategorie skasowała kilka wpisów na swoim blogu http://caketime.blox.pl (kasując kategorie kasujesz wszystkie należące do niej wpisy). Blox nie oferuje opcji kosza, z którego usunięty przypadkowo wpis można by, odzyskać wiec musieliśmy z pomocą zwrócić się do Google.

 

Ponieważ Google archiwizuje indeksowane strony, wyszukiwarkę możemy wykorzystać do odzyskania naszych postów. Wystarczy w oknie wyszukiwarki wpisać nasz blox-owy login + site:link_d_bloga: 

anahitka9 site:caketime.blox.pl

 

Tak jak pokazuje to również poniższy ekran. W naszym wypadku, pamiętając tytuły usuniętych wpisów, wykorzystaliśmy je również do wyszukania interesujących nas stron.

 

caketime.blox.pl 

 

Ponieważ wpis już nie istniał, klikniecie na znalezionym przez Google linku przenosiło nas na główną stronę bloga. Aby zobaczyć i odzyskać faktyczny wpis, musieliśmy wykorzystać jego kopię klikając na małą strzałkę przy wpisie i wybierając Kopia (w przeglądarce z językiem angielskim Cached).

 

Oczywiście samo już przywrócenie wpisu polegało na skopiowaniu tekstu (zdjęcia na szczęście nie zginęły :) i utworzeniu nowego wpisu na bloxie.

 

caketime.blox.pl

 

Bez podania tytuły wpisu koniecznym byłoby przejście przez wiele, lub nawet wszystkie strony wyszukane przez Google. Możliwe jest również ze poszukiwany przez nas wpis nie znajduje się już w głównych rezultatach wyszukiwania Google, w takiej sytuacji wpisu musimy szukać pomiędzy stronami pominiętymi wtedy należy przejść na ostatnia stronę z rezultatami wyszukiwania i kliknąć w link powtórzenia wyszukiwania z uwzględnieniem pominiętych wyników.

 

Aby pokazać najbardziej trafne wyniki, pominęliśmy kilka pozycji bardzo podobnych do 420 już wyświetlonych.Jeśli chcesz, możesz powtórzyć wyszukiwanie z uwzględnieniem pominiętych wyników.

 

W przeglądarce z językiem angielskim będzie to wyglądało następująca:

 

In order to show you the most relevant results, we have omitted some entries very similar to the 418 already displayed. If you like, you can repeat the search with the omitted results included.

 

Tagi: blox
12:19, m0rt1m3r
Link Dodaj komentarz »
wtorek, 11 czerwca 2013
Programowanie iPhone - iOS7 Beta i nowa wersja Xcode 5 dostępne

 

Na stronach centrum deweloperów iOS Apple (iOS Developer Center) można pobrać wersje beta nowego systemu iOS 7, zapowiedzianą wczoraj podczas konferencji WWDC 2013, jak również nowe wersje środowiska programistycznego Xcode 5 Developer Preview.

 

czwartek, 06 czerwca 2013
Programowanie iPhone - jak wykonać określaną operację w aplikacji tylko raz

 

Operacje jak początkowa inicjalizacja parametrów naszej aplikacji, bądź kopiowanie plików roboczych (dostarczanych w application bundle, jako read only) w miejsce, w którym możliwa będzie ich modyfikacja są operacjami, które najczęściej wykonujemy tylko raz, podczas pierwszego uruchomienia aplikacji.

To czy nasza aplikacja została uruchomiona po raz pierwszy czy też nie możemy łatwo sprawdzić korzystając z klasy NSUserDefaults, tak jak pokazuje to poniższy kod (do umieszczenia w jednej z metod: application:willFinishLaunchingWithOptions: bądź application:didFinishLaunchingWithOptions:).

 

NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
if (! [defaults boolForKey:@"runOnce"]) {
  //kod do wykonania tylko raz...
  ...
  [defaults setBool:YES forKey:@"runOnce"];
}

 

Idea jest prosta, podczas pierwszego uruchomienia aplikacji sprawdza, czy klucz runOnce istnieje i czy jego wartość ustawiona jest na YES. Jeśli warunek nie jest spełniony, oznacza to, że nasz program uruchamiany jest po raz pierwszy i wykonywany jest odpowiedni kod. Na koniec klucza runOnce ustawiany jest na wartość YES, co sprawi, że przy kolejnym uruchomieniu nasz kod nie, będzie ponownie wykonany.

Dawniej po modyfikacjach instancji obiektu NSUserDefaults konieczne było wywołanie metody synchronize, aby trwale zapisać zmiany w bazie na naszym urządzenia. Obecnie metoda ta jest wykonywana automatycznie, co pewien czas przez system iOS.

Uwaga! Powyższe rozwiązanie nie sprawdzi się w wypadku, gdy chcemy, aby operacja wykonywana była po zaktualizowaniu naszej aplikacji. W takim wypadku konieczne jest zapisywanie numeru wersji naszego programu w bazie parametrów użytkownika, obsługiwanej przez klasę NSUserDefaults i porównywanie z faktyczna wersją uruchamianej aplikacji. Jeśli wersje się różnią, wykonać należy odpowiedni kod i zaktualizować wersję aplikacji w bazie parametrów.


O czym należy pamiętać, a o czym często autorzy aplikacji iOS zapominają, jest fakt, iż użytkownik może ‘przeskoczyć’ jedna, bądź nawet kilka wersji naszej aplikacji, co może prowadzić do krytycznych błędów wykonania. W takim wypadku konieczne jest, czasami krok po kroku, zaaplikowanie wszystkich zmian, niezbędnych do poprawnego działania nie tylko najnowszej wersji programu, ale też i wszystkich wcześniejszych nieinstalowanych uprzednio na urządzeniu użytkownika.

Tagi




PowerBuilder Tetris
D - Tetris



Programowanie iOS

C# ToolBox

SQL / TSQL / PLSQL ToolBox

Linux / Unix ToolBox





Zaprzyjaznione Strony

Sprite Bandits

Cake Time