Archiwum kategorii: Programowanie

Parsowanie ciągu znaków do double w C++

Parsowanie ciągu znaków do typu double jest osiągalne dzięki funkcji strtod.

Przykład:

char* pEnd;
double d1;

d1 = strtod ("3.14", &pEnd);
cout << d1 <<endl;//3.14

d1 = strtod ("12,34", &pEnd);
cout << d1 <<endl;//12

d1 = strtod ("-1.55211e-016", &pEnd);
cout << d1 <<endl;//-1.55211e-16

d1 = strtod ("8.67548e-017", &pEnd);
cout << d1 <<endl;//8.67548e-17

d1 = strtod ("8.67548e+1017", &pEnd);
cout << d1 <<endl;//inf

d1 = strtod ("abc", &pEnd);
cout << d1 <<endl;//0

d1 = strtod ("", &pEnd);
cout << d1 <<endl;//0

d1 = strtod (NULL, &pEnd);
cout << d1 <<endl;//exit!

Jaki framework do PHP?

Jakiego frameworka użyć? To pytanie często pada na początkowym etapie projektu. Przyjrzyjmy się rozwiązaniom dla języka PHP.

Od jakiegoś czasu najpopularniejszym frameworkiem dla PHP jest Laravel. Widać to np. na porównaniu SitePoint:

php framework popularity 2015Inny sposób sprawdzenia popularności danej technologii to np. sprawdzenie ilości pytań na StackOverflow 😉 Wiadomo, nie jest to miarodajne porównanie, ale daje jakiś ogląd sytuacji.

  • Laravel – 49.306
  • CodeIgniter – 49.135
  • Symfony – 43.769
  • CakePHP – 27.412
  • Yii – 15.315
  • Kohana – 2.177

Są to jednak dość rozbudowane narzędzia. Alternatywą są te dwa frameworki. Ich autorzy zapewniają, że zależy im na zachowaniu prostoty użycia. Mogą być więc dobrym wyborem na początek przygody z używaniem frameworków w PHP:

Lista TODO w Visual Studio

Visual Studio posiada całkiem ciekawą funkcjonalność. Umożliwia budowanie listy zadań w oparciu o linijki kodu oznaczone komentarzem:

//TODO

Visual Studio wyświetla je w zakładce „Task List”. Zadania można filtrować po projekcie i pliku.

todo_visual

Pamiętajmy jednak, że tego typu komentarze stanowią antywzorzec;) Jeżeli natomiast przed wrzuceniem kodu do repozytorium rozwiążemy wszystkie zadania oznaczone tym tagiem – nie widzę przeciwwskazań, by korzystać z tej funkcji.

MySQL – dump tylko określonych wierszy

MySQL umożliwia wykonanie dumpa tylko określonych danych. Dzięki temu można np. podzielić dumpa jednej, dużej tabeli na parę mniejszych części. Służy temu przełącznik --where.

Przykład 1 – wykonujemy dump tabeli myVeryBigTable, lecz tylko takich wierszy, które mają id 1, 2 lub 3:

mysqldump myDatabaseName --host 127.0.0.1 --port=3306 
--user=myUserName --password
myVeryBigTable
--where="id in (1,2,3)"
> .\mySimpleDump.sql

Przykład 2 – możliwe jest także wykonanie nieco bardziej skomplikowanego zapytania:

mysqldump myDatabaseName --host 127.0.0.1 --port=3306
--user=myUserName --password
myVeryBigTable
--where="id in (select id from myOtherTable where objectId in (123,558,6987))"
> .\myDump.sql

Netbeans nie aktualizuje aplikacji www

Pracując przy aplikacji webowej (napisanej w Javie) natknęłam się na problem nieaktualizowania aplikacji przez Netbeans. Proces kompilacji udawał się, jednak na serwerze nadal była stara zawartość. Z jakiegoś powodu nie udało się zaktualizować kodu.

Rozwiązaniem było ręczne usunięcie folderu web/web-inf/classes. Po usunięciu katalogu i przebudowaniu projektu Netbeans aktualizował zawartość plików.

Qt i problemy z atof()

W projekcie, nad którym aktualnie pracuję, natknęłam się na pewien problem, który spowodował nieprawidłowe działanie dużego fragmentu aplikacji napisanej w C, dołączonej do interfejsu implementowanego w Qt (używam wersji 4.8.0, choć nie ma to zbyt wielkiego znaczenia).

Okazało się że część analityczna programu używała  w wielu miejscach funkcji atof() do przekształcania liczb zapisanych w pliku w postaci ddd.ddd (separatorem była zatem kropka).

#include <cstdlib>
double atof( const char * str );

Funkcja nie odczytywała części dziesiętnych z powodu nieprawidłowego traktowania separatora. Ten poważny błąd, uniemożliwiający działanie całego programu wystarczyło naprawić jedną linijką:

setlocale(LC_NUMERIC,"C");

Linijkę tę należy umieścić w pliku main.cpp, tuż po utworzeniu obiektu typu QApplication. Teraz mój plik wygląda następująco:

#include <QtGui/QApplication>
#include "mainwindow.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    setlocale(LC_NUMERIC,"C");

    MainWindow w;
    w.show();

    return a.exec();
}

I – wszystko działa 🙂

Bazy danych – ściągawka

Szybka, w pełni teoretyczna „ściągawka” z baz danych. Nie wszystkie z prezentowanych tutaj zapytań mają taką samą składnię w każdej bazie danych. Zależy to od implementacji.

Sumy zbiorów wyników

Jeśli dwa zapytania zwracają wyniki w tej samej formie (te same kolumny), możliwe są operacje na zbiorach typu suma, różnica zbiorów.

Zakładając, że:

  • zapytanie nr 1 (Q1) zwraca następujący zestaw danych: A, B, C,
  • zapytanie nr 2 (Q2) zwraca następujący zestaw danych: C, D, E,

z wyników zapytania można złożyć:

Union

Q1 union Q2 – suma zbiorów. Elementy powtarzające się zarówno w Q1 jak i w Q2 zostają usunięte. Wynikiem są pogrubione elementy (tu: A, B, C, D, E)

[A B [C] D E] Czytaj dalej

C# – jak używać nullable i parsować je do typów prostych

Typy nullable to bardzo sympatyczne zwierzęta. Poza klasycznymi wartościami umożliwiają przypisanie zmiennym prostym niedozwolonej dla nich wartości null – zupełnie jak dla typów referencyjnych.

Do czego można tego użyć? Pierwsza moja styczność z nullable miała miejsce w zamierzchłych czasach studenckich praktyk. Używałam wtedy nullable do przechowywania wartości z pól w formatce (we współpracy z TryParse). Niedawno natomiast zastosowałam nullable int w liście argumentów do metody – użytkownik ma możliwość pominięcia niektórych wartości (wstawienie -1 czy 0 nie rozwiązywało sprawy, gdyż były to również wartości znaczące).

Jak zachowują się takie nullable w prawdziwym życiu? Jak najprościej skonwertować je do typu prostego?

Proste demo – dzięki zastosowaniu default nie ma konieczności używania Parse ani TryParse:

var nullables = new List<int?> {null, -1, 0, 1};
foreach (var nullable in nullables)
{
  var intable = nullable ?? default(int);//magiczna linia
  Console.WriteLine("{0} \t-> {1}", nullable, intable);
}

Oraz wynik:
null -> 0
-1 -> -1
0  -> 0
1  -> 1

C# – Mierzenie czasu wykonania metod

Mierzenie czasu wykonania metod w C#. Bardzo proste i sprawnie działające. Ostatnimi czasy używam głównie do porównywania wydajności implementacji różnych podejść, które przyjdą mi do głowy.


var watch = Stopwatch.StartNew();

//tu metody, których czas mierzysz

watch.Stop();

var elapsedMs = watch.ElapsedMilliseconds;

var czekaj = true;//tu ustaw sobie pułapkę* i odczytaj wartość ze zmiennej elapsedMs

* pułapka – niezmiennie cieszy mnie to polskie tłumaczenie breakpointa 😉