title: Konflikty adresów drzewa binarnego

text: Napisałem wczoraj post na podobny temat dotyczący mojego destruktora dla mojego programu klasy drzewa Huffmana. Od tego czasu wyizolowałem problem z budowaniem mojego drzewa, który w tej chwili mnie dość zdziwił. Poniżej przedstawię kod wraz z tym, co dokładnie program wypluwa do pamięci. To moja aktualna teoria dotycząca mojego dziwnego problemu z lokalizacją pamięci (która jest omówiona poniżej), że coś dziwnego dzieje się z listą, której używam. Lokalizacje pamięci są zamieniane. Na przykład, gdy tworzony jest węzeł nadrzędny, ten węzeł nadrzędny powinien pojawić się ponownie, gdy zostanie usunięty z listy, ale wychodzi z inną lokalizacją pamięci. Czy to może być źródło mojego problemu? Ale dlaczego to robi? Huffman :: Huffman (lista <BTree> węzłów) { nodes.sort(); //Ustaw w porządku rosnącym Btree *jeden, *dwa, *temp; while (nodes.size() > 1) { jeden = &nodes.front(); węzły.pop_front(); dwa = &węzły.front(); węzły.pop_front(); temp = wstaw(jeden, dwa); węzły.push_back(*temp); węzły.sort(); //resetuj(temp); //resetuj(jeden); //resetuj(dwa); } korzeń = temp; //utwórzKody(); węzły.pop_front(); } Btree* Huffman :: reset(BTree *in) { in->setData(0); in->setLeft(0); w->ustawPrawo(0); powrót w; } BTree* Huffman :: insert(BTree *niższy, BTree *wyższy) { BTree *drzewo = new BTree; drzewo->ustawLeft(niższy); drzewo->ustawPrawo(wyższy); drzewo->setData(niższe->getData() + wyższe->getData()); drzewo zwrotu; } Aha, a oto główny, który umieszcza węzły na liście: int main() { ifstream fin("assign15.in"); lista węzłów <BTree>; częstotliwość int; litera znaku; if (fin.fail()) { cout << "Błąd podczas otwierania 'assign15.in'... Zakończenie...\n"; wyjście (1); } for (int i = 0; i < 26; i++) { fin >> częstotliwość; litera = „a” + i; BTree *temp = nowy BTree; temp->setData(częstotliwość); temp->ustawLitera(litera); węzły.push_front(*temp); } fin.zamknij(); Drzewo Huffmana(węzły); zwróć 0; } Poniżej znajduje się szczegółowa funkcja krok po kroku. Pętla ładuje dwa węzły z połączonej listy do zmiennych tymczasowych „jeden” i „dwa”. Podane są adresy do każdego z tych węzłów. Następnie tworzony jest nowy węzeł tymczasowy z „jeden” i „dwa” jako dzieci. Węzeł temp jest następnie umieszczany na liście. **Uwagi:** adresy wszystkich węzłów „temp” są unikalne. Wygląda jednak na to, że ten adres nie jest zapisywany na liście. Wiele adresów powtarza się w danych wyjściowych, pokazując problemy, ale dlaczego to robi? Jeden ustawiony na 9(0xdb7650) Dwa ustawiony na 10(0xdb7a50) pchający węzeł nadrzędny z wartościami: (0xdb6a40)P: 19 - L: 9 - R: 10 Jeden ustawiony na 19(0xdb7a50) Dwa ustawione na 20(0xdb76d0) pchający rodzic węzeł z wartościami: (0xdb6a70)P: 39 - L: 19 - R: 20 Jeden ustawiony na 20(0xdb7890) Dwa ustawiony na 39(0xdb76d0) pchający węzeł nadrzędny o wartościach: (0xdb6aa0)P: 59 - L: 20 - R : 39 Jeden ustawiony na 52(0xdb7a10) Dwa ustawiony na 59(0xdb76d0) pchający węzeł nadrzędny z wartościami: (0xdb6ad0) P: 111 - L: 52 - R: 59 Jeden ustawiony na 93(0xdb7750) Dwa ustawione na 111(0xdb76d0) wypychanie węzła nadrzędnego z wartościami: (0xdb6b00)P: 204 - L: 93 - R: 111 Jeden ustawiony na 161(0xdb7b10) Dwa ustawione na 162(0xdb7c50) wypychanie węzła nadrzędnego z wartościami: (0xdb6b30)P: 323 - L: 161 - R: 162 Jeden ustawiony na 188(0xdb7690) Dwa ustawiony na 203(0xdb7710) pchający węzeł nadrzędny z wartościami: (0xdb6b60)P: 391 - L: 188 - R: 203 Jeden ustawiony na 204(0xdb76d 0) Dwa ustawione na 225(0xdb7990) pchający węzeł nadrzędny z wartościami: (0xdb6b90)P: 429 - L: 204 - R: 225 Jeden ustawiony na 228(0xdb7b50) Dwa ustawione na 229(0xdb78d0) pchający węzeł nadrzędny z wartościami: ( 0xdb6bc0) P: 457 - L: 228 - R: 229 Jeden ustawiony na 310 (0xdb7790) Dwa ustawione na 320(0xdb7c10) pchający węzeł nadrzędny z wartościami: (0xdb6bf0)P: 630 - L: 310 - R: 320 Jeden ustawiony na 323(0xdb7c50) Dwa ustawione na 365(0xdb7bd0) wypychający węzeł nadrzędny z wartościami: (0xdb6c20)P: 688 - L: 323 - R: 365 Jeden ustawiony na 391(0xdb7710) Dwa ustawione na 403(0xdb79d0) wypychający węzeł nadrzędny z wartościami : (0xdb6c50)P: 794 - L: 391 - R: 403 Jeden ustawiony na 429(0xdb7990) Dwa ustawiony na 457(0xdb78d0) pchający węzeł nadrzędny z wartościami: (0xdb6c80)P: 886 - L: 429 - R: 457 Jeden ustawiony na 514(0xdb7ad0) Dwa ustawione na 603(0xdb7850) pchający węzeł nadrzędny z wartościami: (0xdb6cb0)P: 1117 - L: 514 - R: 603 Jeden ustawiony na 630(0xdb7 c10) Dwa ustawione na 659(0xdb7810) pchający węzeł nadrzędny z wartościami: (0xdb6ce0)P: 1289 - L: 630 - R: 659 Jeden ustawiony na 688(0xdb7bd0) Dwa ustawione na 718(0xdb7a90) pchający węzeł nadrzędny z wartościami: ( 0xdb6d10)P: 1406 - L: 688 - R: 718 Jeden ustawiony na 719(0xdb7950) Dwa ustawiony na 794(0xdb79d0) pchający węzeł nadrzędny z wartościami: (0xdb6d40)P: 1513 - L: 719 - R: 794 Jeden ustawiony na 794(0xdb7910) Dwa ustawione na 805(0xdb7c90) pchający węzeł nadrzędny z wartościami: (0xdb6d70)P: 1599 - L: 794 - R: 805 Jeden ustawiony na 886(0xdb78d0) Dwa ustawione na 959(0xdb77d0) pchający węzeł nadrzędny z wartościami : (0xdb6da0)P: 1845 - L: 886 - R: 959 Jeden ustawiony na 1117(0xdb7850) Dwa ustawiony na 1231(0xdb7b90) pchający węzeł nadrzędny z wartościami: (0xdb6dd0)P: 2348 - L: 1117 - R: 1231 Jeden ustawiony na 1289(0xdb7810) Dwa ustawione na 1406(0xdb7a90) pchający węzeł nadrzędny o wartościach: (0xdb6e00)P: 2695 - L: 1289 - R: 1406 Jeden ustawione na 1513(0xdb79d0) Dwa ustawione na 1599(0xdb7c90) pchający węzeł nadrzędny z wartościami: (0xdb6e30)P: 3112 - L: 1513 - R: 1599 Jeden ustawiony na 1845(0xdb77d0) Dwa ustawione na 2348(0xdb7b90) pchający węzeł nadrzędny z wartościami: (0xdb6e60)P: 4193 - L: 1845 - R: 2348 Jeden ustawiony na 2695(0xdb7a90) Dwa ustawiony na 3112(0xdb7c90) pchający węzeł nadrzędny z wartościami: (0xdb6e90)P: 5807 - L: 2695 - R: 3112 Jeden ustawiony na 4193(0xdb7b90) Dwa ustawiony na 5807(0xdb7c90) pchający węzeł nadrzędny o wartościach: (0xdb6ec0)P: 10000 - L: 4193 - R: 5807


title: Sugerowana metoda wyodrębniania samodzielnej biblioteki C z istniejącego pakietu R?

text: Moja grupa rozwija pakiet R do symulacji wzrostu roślin (zobacz repozytorium GitHub). Pakiet R używa `.Call` do łączenia się z C. Zdecydowaliśmy, że warto byłoby stworzyć samodzielną bibliotekę C. Dwa kluczowe powody to 1) używanie znanych narzędzi do debugowania języka C oraz 2) duża część społeczności programistów/użytkowników jest zaznajomiona z językami kompilowanymi (głównie modele w klasie są napisane w języku C lub Fortran). Jednak pakiet R jest dostępny dla wielu osób spoza tej społeczności, więc chcemy zachować jego funkcjonalność. Przejrzałem kilka powiązanych pytań, m.in. http://stackoverflow.com/q/12328156/199217, które omawiają pakiety R z zależnościami od biblioteki C, ale nie znaleziono takiego, który zajmuje się konkretnie oddzieleniem istniejącego pakietu R. ### Proponowane podejście (co do tej pory wymyśliliśmy... słomka) 1. Napisz testy istniejących funkcjonalności 2. Trzymaj bibliotekę C w folderze `src/` 3. Umieść kod C specyficzny dla R ( np. `SEXP`, ładowanie bibliotek R, itp.) do plików 'R wrapper' poprzedzonych `R_*` 4. stwórz oddzielne funkcje do odczytu plików konfiguracyjnych w C 5. stwórz 'main' funkcję C, aby zastąpić funkcjonalność w R 6. napisz plik makefile dla biblioteki C, który ignoruje pliki wrapperów R 7. Gdy biblioteka C działa niezależnie i równoważnie z pakietem R, możemy rozważyć przeniesienie funkcji C do oddzielnego repozytorium, co byłoby zależnością dla pakietu R ## # Pytania: 1. Czy ten wysiłek jest błędny? 2. Czy przeoczamy jakiekolwiek potencjalne pułapki? 3. Czy istnieje lepszy sposób na równoległe rozwijanie obu bibliotek R i C? 4. Czy są jakieś przykłady bibliotek C, które zostały oddzielone od pakietów R? 5. Jak możemy napisać testy, aby porównać równoważne funkcje w R i C?


title: Korzystanie z oprogramowania AGPL na serwerze z oprogramowaniem o zamkniętym kodzie źródłowym

text: Muszę użyć jakiegoś oprogramowania na licencji AGPL, aby zapełnić bazę danych pewnymi danymi. To oprogramowanie ma interfejs sieciowy, który wyłączę. Następnie dane będą wykorzystywane „na wyciągnięcie ręki” za pomocą oprogramowania o zamkniętym kodzie źródłowym poprzez odczytanie bazy danych. Mogę również użyć niektórych IPC, takich jak gniazda datagramowe, aby zapewnić pomost między oprogramowaniem AGPL a innym oprogramowaniem. To oprogramowanie o zamkniętym źródle zapewni użytkownikowi interfejs sieciowy. Czy mam rację, że posiadanie tego oprogramowania jako zamkniętego źródła nie jest łamaniem AGPL? Jeśli zmodyfikuję oprogramowanie AGPL, czy jestem w stanie ukryć te modyfikacje tak długo, jak oprogramowanie nie zapewnia interfejsu sieciowego innym użytkownikom?


title: Dodać identyfikator w każdej tabeli, nawet jeśli nie jest potrzebny?

text: Czy to dobry czy zły projekt, aby domyślnie dodawać pole ID w każdej tabeli w bazie danych, nawet jeśli nie widzisz obecnie użycia tego identyfikatora (na przykład w tabeli MxN)?


title: Diagram klas UML: Jak mogę reprezentować „ortogonalne” uogólnienia (lub dziedziczenie wielokrotne)?

text: Staram się przedstawić na diagramie klas UML następujący obiekt i cechy: * Obiekt: System (np. urządzenie elektroniczne), który może być typu A, B lub C * Jeśli system jest typu A, ma specyficzny dodatkowy atrybut (powiedzmy „podtyp”, którego wartości mogą być A1 lub A2) Utworzyłem klasę o nazwie „System” i: 1. Utworzyłem klasę „System_TypeA”, która zawiera dodatkowy atrybut o nazwie „subSystem”, który może przyjmować dowolny wartość w granicach A1 i A2. 2. Utworzono relację uogólnienia między dwiema klasami („System_TypeA” _to a_ „System”) Jak dotąd, tak dobrze. Teraz każdy System może być systemem zapasowym dla innych Systemów. Jeśli tak jest, system powinien przechowywać zbiór referencji systemów, których kopie zapasowe są tworzone. W związku z tym dla tej funkcji stworzyłem również klasę o nazwie „Backup_System” i stworzyłem uogólnienie między dwiema klasami, ponieważ „Backup_System” _jest system". Jak więc przedstawić na diagramie klas fakt, że mogą istnieć systemy typu A, które są systemami zapasowymi (czyli problem wielokrotnego dziedziczenia)? (Dla informacji, implementacja powinna być wykonana w javie, więc ten sam problem z multi-dziedziczeniem pojawi się podczas implementacji.)


title: Dlaczego implementacja kopiowania i wklejania w smartfonie z ekranem dotykowym jest tak wielką sprawą?

text: Kiedy Apple nie zaimplementowało kopiowania i wklejania na iPhonie od wersji 1, po prostu założyłem, że to problem z interfejsem użytkownika (np. czekali, aż wymyślą dobry interfejs użytkownika). Teraz jednak pomysł jest już dostępny, a Microsoft nadal wypuszcza Windows Phone 7 bez funkcji kopiowania i wklejania, obiecując, że będzie gotowy za _kilka miesięcy_. Moje pytanie brzmi: Dlaczego wdrożenie tego zajmuje kilka miesięcy? Czy istnieją jakieś wyzwania technologiczne, które są unikalne dla programowania ekranu dotykowego, których nie znam? Jeśli o to chodzi, jakie są wyjątkowe wyzwania związane z robieniem X w aplikacji na ekranie dotykowym?


title: Jaki jest związek między czasem potrzebnym na opracowanie N linii kodu a 4N linii kodu?

text: T zajęło mi trochę czasu, aby stworzyć program A, który jest mierzony na 1000 linii kodu (SLOC), w pewnym języku i domenie oraz o pewnej złożoności. Czy istnieje metoda określenia, ile czasu zajmie napisanie programu B, który szacuje się na 4000 wierszy, który ma ten sam poziom złożoności, jest w tej samej domenie i jest napisany w tym samym języku programowania? Spodziewam się, że czas, który mi zajmie, będzie większy niż 4T. Czy istnieje wzór do oszacowania, jak rośnie T wraz ze wzrostem liczby SLOC?


title: Czas realizacji w firmie, w której przełożeni nie znają się na programowaniu

text: Jesteśmy w małej firmie z około 10 programistami. Jestem liderem zespołu i odpowiadam za proces rozwoju. Przełożeni i sprzedawcy są nam bliscy, ponieważ jesteśmy małym zespołem, ale nie mają pojęcia, jak powstaje oprogramowanie. Kiedy pytają mnie, ile czasu potrzebuję na zmianę (poprawki błędów/funkcje) w produkcie, moja odpowiedź brzmi „pozwól mi to obliczyć”. Po przekazaniu im harmonogramu, zaczynają od powiedzenia OK, możesz to zrobić za XX, co bardzo różni się od mojego planu. Używamy modelu bliskiego podstawowym zasadom Agile i robimy kółka tygodniowo lub co trzy dni. Oczywiście spieram się i mówię, że nie da się tego zrobić. Wygląda na to, że nie mają pojęcia, jaki wysiłek podejmujemy. Nie chcą widzieć „DLACZEGO” mój harmonogram jest na taki okres czasu. Wiem, że to zachowanie jest głupie, ale jak mogę sprawić, by zobaczyli problem?


title: Strategia rozgałęziania środowiska testowego

text: W tym miesiącu rozpoczynamy nowy projekt. Projekt będzie trwał 1 rok, a wdrożenie produkcyjne nastąpi dopiero pod koniec projektu. Będziemy tworzyć iteracyjne (1 miesiąc na iterację), co oznacza, że pod koniec każdej iteracji będziemy umieszczać funkcje w środowisku testowym w celu przeprowadzenia testów QA. Nasza strategia rozgałęziania to: 1. Trunk - Cały rozwój będzie się odbywał na trunku. 2. Gałąź funkcji — odgałęzienia poza magistralą będą tworzone w zależności od potrzeb w celu opracowania dużych funkcji, które potencjalnie mogą ulec uszkodzeniu, jeśli zostaną wykonane na magistrali 3. Gałęzie wydania QA — na końcu każdej iteracji zostanie utworzona gałąź łącza . Ta gałąź (zawierająca numer wersji) zostanie wydana w środowisku testowym. Wszystkie błędy krytyczne i blokujące znalezione w tej wersji zostaną naprawione w tej gałęzi, a poprawki będą musiały zostać scalone z trunkiem. Błędy niekrytyczne/trywialne nie będą usuwane w gałęzi wydania QA i zostaną naprawione tylko w linii głównej, ponieważ gałąź wydania QA zostanie wyrzucona po zakończeniu następnej iteracji, w której nowa gałąź wydania zostanie utworzona poza linią główną. 4. Oddział produkcyjny - będzie to najnowsza gałąź wydawnicza QA na koniec projektu. Zostanie to oznaczone, a wszystkie poprawki błędów produkcyjnych zostaną umieszczone w tej gałęzi i połączone z magistralą. Czy to właściwa strategia rozgałęziania? Czy jest coś jeszcze, co przegapiliśmy do rozważenia? Używamy SVN.


title: Ogólne wskazówki dotyczące pisania specyfikacji dla programistów Java

text: Znalazłem się w marynacie po napisaniu specyfikacji dla niezależnych programistów, których zatrudniam. Wygląda na to, że brakuje mi jakiejś podstawowej struktury i nie umieszczam punktów na tyle jasno, aby programista mógł to zrozumieć. Każda rada, która pomogłaby mi lepiej przekazać specyfikacje przeciętnemu programiście Java, byłaby bardzo pomocna. **Na przykład:** * * * Mam projekt wiosenny, który jest w tym momencie bardzo złożony. I zatrudniam ludzi do integracji wszelkiego rodzaju interfejsów API płatności, społecznościowych i uwierzytelniających. (jest to strona w moim profilu, jeśli chcesz mieć przykład wizualny) Jeśli chodzi o nich, będą pracować tylko z małym segmentem projektu, więc nie ma potrzeby robienia dużego obrazu. Potrzebuję pierwszej przykładowej aplikacji, która wykona to, czego potrzebuję, poza wiosennym pojemnikiem. Następnie mam programistę zintegrować logikę z istniejącym systemem. W specyfikacji zwykle przechodzę dane wejściowe z interfejsu użytkownika do bazy danych, z małymi przykładami tu i tam. To, co znalazłem, jest pomocne, gdy po prostu sporządzisz szkic specyfikacji i poprosisz programistę o umieszczenie w nim swojego wkładu, a następnie dostosowanie specyfikacji. * * *


title: żądanie funkcji w projektowaniu języka?

text: W jaki sposób projektanci języków decydują, kiedy _`funkcja`_ powinna znaleźć się w bibliotece jako rozszerzenie, a kiedy musi być wspierana przez język podstawowy?


title: Nie rozumiem definicji skutków ubocznych

text: > **Możliwy duplikat:** > Co to jest „efekt uboczny”? Nie rozumiem artykułu wikipedii na temat skutków ubocznych: > W informatyce mówi się, że funkcja lub wyrażenie ma efekt uboczny > jeśli oprócz zwracania wartości, również 1.) Modyfikuje jakiś stan lub 2.) > Ma obserwowalną interakcję z funkcjami wywołującymi lub światem zewnętrznym. Znam przykład pierwszej rzeczy, która powoduje, że funkcja lub wyrażenie ma skutki uboczne - **modyfikowanie stanu** Funkcja i wyrażenie **modyfikowanie stanu** : 1.) foo(int X) { return x = x % x; } a = a + 1; Co oznacza 2.) – **Ma obserwowalną interakcję z funkcjami wywołującymi lub światem zewnętrznym”?** \- Proszę podać przykład. W dalszej części artykułu czytamy: „Na przykład funkcja może modyfikować zmienna statyczna, zmodyfikuj jeden z jej argumentów, zgłoś wyjątek, zapisz dane do ekranu lub pliku, przeczytaj dane lub wywołaj inne funkcje powodujące efekty uboczne...” Czy wszystkie te przykłady są przykładami 1.) - **Modyfikowanie niektóre stany** , czy też są częścią 2.) - **Czy istnieje obserwowalna interakcja z funkcjami wywołującymi lub światem zewnętrznym?**


title: MapReduce wyjaśniony za pomocą diagramów?

text: Szukam wyjaśnienia, jak MapReduce współpracuje z wizualizacjami. W szczególności schemat blokowy działań i obrazy przedstawiające, jak radzi sobie z informacjami na stosie/pamięci równolegle do powrotu. Czy ktoś ma na to źródło?


title: Parser angielski (dla Hobbita 1982)

text: Byłem zafascynowany czytaniem o tekstowej grze przygodowej The Hobbit, która zawierała niesamowicie solidny parser o nazwie „Inglish”: > ...Angielski pozwalał na pisanie zaawansowanych zdań, takich jak „zapytaj Gandalfa o > ciekawą mapę, a następnie weź miecz i zabij trolla za pomocą to". Parser był > złożony i intuicyjny, wprowadzając zaimki, przysłówki ("wściekle atakuj > goblina"), znaki interpunkcyjne i przyimki oraz pozwalając graczowi > na interakcję > ze światem gry w sposób, który wcześniej nie był możliwy. Zastanawiam się, czy ktoś zna historię i/lub spuściznę silnika parsera języka angielskiego i programistów, którzy go opracowali.


title: Zakodowany interfejs użytkownika do pomiaru wydajności

text: Otrzymałem zadanie użycia zakodowanego interfejsu użytkownika do pomiaru wydajności w zastrzeżonej aplikacji komputerowej systemu Windows. Trzeba zmierzyć, ile czasu zajmuje wyświetlenie następnej strony/ekranu po kliknięciu przez użytkownika kontrolki. Na przykład – użytkownik wpisuje swój identyfikator i PW i klika logowanie. Trzeba zmierzyć, ile czasu zajmuje wyświetlenie następnego ekranu, gdy użytkownik kliknie przycisk logowania. Rozumiem potrzebę zdefiniowania, co wskazuje, że ekran jest załadowany i gotowy do użycia. Jednym z podejść jest użycie control.WaitForControlReady i użycie BeginTimer/EndTimer. Czy kodowany interfejs użytkownika jest niezawodnym i dokładnym sposobem mierzenia czasu? Czy WaitForControlReady jest najlepszą metodą określania, kiedy kontrolka jest gotowa do użycia?


title: Czy istnieje sposób na tworzenie zagnieżdżonych wyrażeń obliczeniowych?

text: W F# chcę zbudować hierarchiczną strukturę danych w sposób z minimalną ilością szumu języka. Rzeczywistym problemem jest próba zbudowania frameworka inspirowanego RSpec przy użyciu F#. RSpec umożliwia konstruowanie testów w sposób zagnieżdżony. Na przykład. opisz Order do context "bez elementów" do it "zachowuje się w jeden sposób" do # ... end end context "z jednym elementem" zrób to "zachowuje się w inny sposób" do # ... end end end Coś tu działa, ale istnieją pewne potencjalne problemy z obecnym rozwiązaniem. W szczególności ogólny kod konfiguracji/rozrywania może stać się nieco brzydki. Moją główną troską jest napisanie API, które pozwoli użytkownikowi pisać testy/specyfikacje w sposób, w którym język będzie jak najmniej przeszkadzał. Myślę, że użycie wyrażeń obliczeniowych pozwoliłoby mi stworzyć lepsze API, ale mam problem z implementacją zagnieżdżonych kontekstów. Obecnie posiadam builder, który pozwala mi pisać: let specs = description "Some feature" { to "ma pewne zachowanie" (fun() -> // Kod testowy idzie tutaj) } Ale aby mieć zagnieżdżone konteksty, potrzebuję aby móc napisać coś takiego: niech specs = opisać "Jakaś cecha" { opisać "w pewnym kontekście" { to "zachowuje się" (zabawa () -> // Kod testowy idzie tutaj ) } opisać "w jakimś innym context" { to "ma pewne zachowanie" (fun() -> // Kod testowy idzie tutaj ) } } Nie mam pojęcia, jak zaimplementować zagnieżdżony kontekst. Albo nawet jeśli da się wygiąć F# w taki sposób, żebym mógł stworzyć takiego konstruktora. Zrobiłem eksperyment, który pozwolił mi napisać to: let specs = desribe "Some feature" { child (describe "in some other" { to "ma pewne zachowanie" (fun() -> // Kod testowy idzie tutaj ) }) child (opisz "w pewnym kontekście" { to "ma pewne zachowanie" (fun() -> // kod testowy idzie tutaj) }) } Ale dodane nawiasy i jawna konstrukcja konstruktora są dokładnie tym, czego chcę uniknąć w pierwsze miejsce. type DescribeBuilder(name : string) = [<CustomOperation("it")>] member __.It (x, name, test : unit -> unit) = let t = TestContext.createTest name test x |> TestContext.addTest t [<CustomOperation("child")>] element członkowski __.Child(x, child :TestContext.T) = x |> TestContext.addChildContext element podrzędny __.Yield y = TestContext.create element członkowski nazwy __.Delay (x) = x () opiszmy name = new DescribeBuilder(name)


title: Jak zwolennicy programowania funkcjonalnego odpowiedzieliby na to stwierdzenie w Code Complete?

text: Na stronie 839 drugiego wydania Steve McConnell omawia wszystkie sposoby, w jakie programiści mogą „przezwyciężyć złożoność” w dużych programach. Jego wskazówki kończą się stwierdzeniem: „Programowanie zorientowane obiektowo zapewnia poziom abstrakcji, który stosuje się jednocześnie do **algorytmów i danych** , rodzaj abstrakcji, której nie zapewniła sama dekompozycja funkcjonalna”. W połączeniu z jego wnioskiem, że „zmniejszenie złożoności jest prawdopodobnie najważniejszym kluczem do bycia efektywnym programistą” (ta sama strona), wydaje się to być wyzwaniem dla programowania funkcjonalnego. Debata między FP i OO jest często formułowana przez zwolenników FP wokół kwestii złożoności, która wynika konkretnie z wyzwań współbieżności lub paralelizacji. Jednak współbieżność z pewnością nie jest jedynym rodzajem złożoności, którą programiści muszą pokonać. Być może skupienie się na redukcji jednego rodzaju złożoności znacznie zwiększa ją w innych wymiarach, tak że w wielu przypadkach zysk nie jest wart swojej ceny. Gdybyśmy przesunęli warunki porównania między FP i OO z poszczególnych kwestii, takich jak współbieżność lub ponowne użycie, na zarządzanie globalną złożonością, jak wyglądałaby ta debata? **EDYTUJ** Kontrast, który chciałem podkreślić, polega na tym, że OO wydaje się hermetyzować i abstrahować od złożoności zarówno danych, jak i algorytmów, podczas gdy programowanie funkcjonalne wydaje się zachęcać do pozostawiania szczegółów implementacji struktur danych bardziej „odsłoniętych” w całym programie. Zobacz na przykład Stuart Halloway (zwolennik Clojure FP) mówiący, że „nadmierna specyfikacja typów danych” jest „negatywną konsekwencją idiomatycznego stylu OO” i faworyzuje konceptualizację książki adresowej jako prostego wektora lub mapy zamiast bogatszego obiektu OO z dodatkowymi (niewektorowymi i niemapowymi) właściwościami i metodami. (Również zwolennicy OO i Domain-Driven Design mogą powiedzieć, że wystawienie książki adresowej jako wektora lub mapy nadmiernie eksponuje enkapsulowane dane na metody, które są nieistotne lub nawet niebezpieczne z punktu widzenia domeny).


title: Jaka jest dobra praktyka programistyczna przy konstruowaniu projektu java?

text: Mam projekt Java, który staje się stosunkowo duży (w sumie kilka tysięcy linijek). Jest zdecydowanie o wiele większy niż to, z czym miałem do czynienia wcześniej, ponieważ wciąż jestem stosunkowo nowym programistą. Mam strukturę klas z moimi komponentami swingu i innymi klasami, które stworzyłem, co coraz bardziej staje się zagmatwane. Nawet jako początkujący mogę powiedzieć, że nie byłoby to uważane za „dobrą praktykę programistyczną”. Jest to nieco trudne do wytłumaczenia i nie mogę po prostu skopiować/wkleić kodu, ponieważ tak naprawdę dotyczy to całego programu. Ale zrobię co w mojej mocy, aby wyjaśnić... Jako przykład mam klasę "Minion", a obiekty Minion czasami robią coś, co wymaga aktualizacji "levelGUI", rozszerzonego JPanel. Jak uzyskują dostęp do tego poziomu GUI? Powiem im coś w stylu "Game.getLevelGUI().someMethod()" i to wygląda po prostu niechlujnie. Czy się mylę? Problem polega na tym, że wyprzedziłem siebie w rzeczywistym programowaniu, w odniesieniu do mojego zrozumienia, jak działa struktura wspomnianego programu. Myślę, że jeśli będę podążał tą ścieżką, skończę z programem, który działa tak, jak zamierzałem, ale ze słabą czytelnością i dużymi trudnościami w wprowadzaniu zmian. Jeśli na to pytanie trudno odpowiedzieć, linki do artykułów, które mogłyby wyjaśnić, w jaki sposób duża hierarchia obiektów skutecznie „wchodzi w interakcję” lub coś w tym stylu… BARDZO pomocne (nie jestem leniwy, patrzyłem i patrzyłem , próbując coś znaleźć).


title: Jaki jest zalecany sposób przenoszenia dużych baz kodu?

text: Obecnie przenoszę dużą bibliotekę (ponad 150 plików, ponad 15 tys. LOC) z JavaScript do Javy. Na szczęście oryginalna biblioteka jest już bardzo zorientowana obiektowo, więc w dużej mierze była to kwestia przeformułowania istniejącego kodu na klasy. Prawdę mówiąc jestem trochę nowicjuszem i jest to jeden z moich pierwszych projektów na dużą skalę. W przeszłości pisałem, testowałem i debugowałem projekty stopniowo — uruchamiałem coś, dodawałem funkcję, sprawdzałem, czy nadal działa, i powtarzam. W takim przypadku nie mogę skompilować całej biblioteki, dopóki nie zostanie prawie ukończona, co sprawia, że sprawdzanie połączeń między klasami jest trudne i czasochłonne. Po zaimportowaniu projektu do Intellij, udało mi się przeprowadzić pewną statyczną analizę kodu, aby sprawdzić proste błędy w składni i stylu, ale jest to często niewystarczające i nie wychwytuje wielu błędów, które kompilator zrobiłby, zwłaszcza tych spoza zakresu pojedynczy plik. Jaki jest tutaj najlepszy plan ataku? Próbowałem podzielić go na mniejsze, kompilowalne części, ale kod jest w większości ściśle powiązany, więc może to nie zmniejszyć problemu.


title: Skaluj obraz z nieskalowanymi częściami

text: Krótki opis problemu: wyobraź sobie, że masz obrazki wektorowe i adnotacje tekstowe po bokach poza obrazami. ![tutaj podaj opis obrazka](http://i.stack.imgur.com/KwO9Z.png) Teraz zadaniem jest przeskalowanie całej kompozycji przy zachowaniu proporcji, aby zmieścić się w widoku. Trudną częścią jest to, że tekst nie jest skalowalny, tylko obraz(y). Odległość między tekstem a obrazem jest nadal względna w stosunku do całego obrazu, ale rozmiar tekstu jest zawsze stały. Przykład: załóżmy, że nasza całkowita kompozycja jest dwa razy większa niż rzutnia. Następnie możemy po prostu przeskalować go przez `1/2`. Ale ponieważ części tekstowe mają stały rozmiar czcionki, staną się większe niż się spodziewamy i nie zmieszczą się w widoku. Jedną z opcji, o której mogę pomyśleć, jest proces iteracyjny, w którym wielokrotnie skalujemy naszą kompozycję, aż delta między nią a okienkiem obserwacyjnym osiągnie pewną precyzję. Ale ten algorytm jest dość kosztowny, ponieważ wymaga pracy z grafiką, a obraz może składać się z wielu elementów, co prowadzi do wielu obliczeń macierzowych. Co więcej, to rozwiązanie wydaje się trudne do debugowania, rozbudowy itp. Czy istnieją inne podejścia do rozwiązania tego problemu ze skalowaniem?


title: co to jest specyfikacja języka?

text: Albo jestem dzisiaj totalnym n00b, albo po prostu nie z tym, ale ostatnio czytałem kilka blogów i mówią o specyfikacjach językowych. Czym właściwie jest specyfikacja językowa? Czy php.net jest specyfikacją językową? Najlepszym artykułem jaki do tej pory przeczytałem jest Grokbase na temat specyfikacji języka PHP.


title: Ilu deweloperów faktycznie ma prywatne biura?

text: Więc wiem, że wszyscy tutaj skupiają się na prywatnych biurach, ilu deweloperów je faktycznie posiada. Jestem trochę sceptyczny. Mogę uwierzyć, że mają je główni programiści, ale zwykle jest to tylko jedna osoba w przeciętnym biurze. Gdyby nie było zbyt wiele zapytać: * Pracujesz w totalnie niesamowitym biurze, czy w paskudnej starej kostce? (lub gdzieś pomiędzy) * Jaka jest twoja względna pozycja w biurze? (junior, programista II, senior, lider itp.) * Czy tworzysz oprogramowanie wewnętrzne, czy pracujesz w środowisku zorientowanym na oprogramowanie? (ogólna myśl wydaje się być taka, że wewnętrzni programiści dostają kostki, podczas gdy inni mieszkają w „Joel-Spolsky-Programmer-Candyland”)


title: Jakie czynniki należy wziąć pod uwagę przy wyborze środowiska wykonawczego/języka dla aplikacji komputerowych Windows?

text: Wszyscy moi użytkownicy mają system Windows. Niektórzy z nich używają Linuksa lub Maca, ale jeśli tak, to generalnie są w stanie używać czegoś takiego jak Mono, Wine, Parallels lub dual-boot. Mój zespół programistów (w tym ja) ma duże doświadczenie zarówno w pisaniu aplikacji Swing w Javie jak i Windows Forms w C#. „Obszerny” oznacza, że opracowaliśmy i dostarczyliśmy ponad trzy aplikacje w obu środowiskach wykonawczych. Aplikacje są aplikacjami do analizy technicznej, tak łagodnymi w interakcji z bazą danych, ale obciążającymi niestandardowy interfejs użytkownika i rozmiary zestawów danych. Zbliżamy się do punktu, w którym naprawdę chcemy podjąć decyzję, na której platformie skupić się od teraz, ponieważ wspieranie obu stron staje się ciężarem (jeśli pracujesz w Swingu przez pół roku, to za dużo kłopotów aby ponownie przyzwyczaić się do Windows Forms i na odwrót) i chcemy, aby wszyscy w naszym zespole mogli pracować nad wszystkimi naszymi aplikacjami. * Windows Forms zazwyczaj wymaga mniej pracy, aby rozpoznać aplikacje Windows. Żadna ilość skórek i niestandardowych kontrolek w Javie nie rozwiązała tego przez lata. Jednocześnie nigdy nie mieliśmy klienta, który nie mógłby korzystać z aplikacji Swing. * Java miała znacznie bogatszy ekosystem pod względem bibliotek i zautomatyzowanych narzędzi do budowania, ale to się szybko zmienia (Java nie upada, to bardziej .NET nadrabia zaległości). * W rzadkich przypadkach, w których preferowana jest wieloplatformowość, Java pokonuje .NET. Mono jest wspaniałe, ale to wciąż więcej pracy niż Java. Jeśli wybierzemy .NET, możemy zacząć skupiać się na WPF, ale także zacząć używać F#. Jeśli wybierzemy Javę, możemy zacząć skupiać się na RCP, ale też zacząć używać Scali. Czy ktoś musiał podjąć podobną decyzję? Jeśli tak, to co to było i co najbardziej na ciebie wpłynęło? Jakieś główne obawy, których mi brakuje? (Uwaga: na Programrs.SE jest już kilka podobnych pytań, ale są one albo niekonstruktywne, albo pod innym kątem.)


Dlaczego przeglądarki nie mają możliwości rozróżnienia między zdarzeniami wywoływanymi przez urządzenia wejściowe i skrypty, np. element.onEvent()? Czy nie byłby to bardzo prosty sposób na przeciwdziałanie botom spamu internetowego? Czy jestem daleko od tego?


title: Czy istnieje wyraźne słowo określające klasę nieabstrakcyjną?

text: W moim projekcie mam głównie klasy abstrakcyjne i jest kilka innych klas, które ich używają/dziedziczą. Kiedy piszę dokumentację, chciałbym zaznaczyć, że jej część dotyczy tylko zachowania tych nieabstrakcyjnych klas, ale użycie tego słowa uznałem za głupie. Mógłbym po prostu powiedzieć, że jest to klasa, jednak klasa abstrakcyjna też jest klasą. Zastanawiałem się więc **_czy istnieje wyraźne słowo/synonim klasy nieabstrakcyjnej?_** Aktualizacja SEO: Jaka jest ogólna nazwa klas nieabstrakcyjnych?


title: Jakie są wady Pythona?

text: Python wydaje się w dzisiejszych czasach bardzo wściekły, i to nie bezpodstawnie – jest to bowiem język, z którym prawie cieszy się, gdy otrzymuje się nowy problem do rozwiązania. Ale, jak powiedział kiedyś „mądry człowiek” (nazywając go „mądrym człowiekiem” tylko dlatego, że nie mam pojęcia, kto to właściwie powiedział; nie jestem pewien, czy w ogóle był aż tak mądry), aby naprawdę znać język, nie tylko znamy jego składnia, projekt itp., zalety, ale także wady. Żaden język nie jest doskonały, niektóre są po prostu lepsze od innych. Więc jakie byłyby twoim zdaniem obiektywne wady Pythona. _Uwaga: Nie proszę tutaj o porównanie języka (tzn. C# jest lepszy od Pythona, ponieważ... yadda yadda yadda) - bardziej obiektywna (do pewnego stopnia) opinia, które funkcje językowe są źle zaprojektowane, czy, jakie są może niektórych brakuje w tym i tak dalej. Jeśli trzeba użyć innego języka jako porównania, ale tylko w celu zilustrowania punktu, o którym trudno byłoby inaczej rozwinąć (tj. dla ułatwienia zrozumienia)_


title: Czy domknięcia są wystarczające do scharakteryzowania programowania funkcjonalnego?

text: Wszystkie znane mi funkcjonalne języki programowania (np. Haskell, Scala, Scheme, Clojure, SML, OCaml, ...) obsługują pojęcie domknięć. Poza tym często czytam, że język X można uznać za funkcjonalny, ponieważ obsługuje domknięcia. Z drugiej strony istnieją języki programowania, które mają domknięcia, ale **nie** są uważane za funkcjonalne. Najlepszym przykładem, jaki znam, jest Smalltalk: Smalltalk ma bloki (które w większości implementacji zachowują się jak domknięcia, patrz np. tutaj), ale jest uważany za czysty język obiektowy. Tak więc, chociaż domknięcia są bardzo powszechną (a nawet podstawową) konstrukcją w programowaniu funkcjonalnym, czy naprawdę są wystarczające do scharakteryzowania programowania funkcyjnego? Jeśli obsługa domknięć jest wystarczająca do rozważenia funkcjonalności językowej, dlaczego Smalltalk również nie jest uważany za funkcjonalny? Czy też pojęcie domknięcia jest ortogonalne zarówno w stosunku do programowania funkcjonalnego, jak i obiektowego?


title: Czy ktoś zarabia na gotowych wersjach oprogramowania kosztownego oprogramowania?

text: Załóżmy na przykład, że tworzę oprogramowanie biznesowe. Sprzedaję to za 100 dolarów. Konkurenci pobierają za swoją wersję tysiące. Czy taki model działa? Czy firma kiedykolwiek kupuje takie oprogramowanie pod klucz? Bez wsparcia. Nie nic. Po prostu wydają 100 dolarów. Jasne, że trwają wysiłki w celu ulepszenia produktu, ale nie ma gwarancji itp. Nie chcę, aby był to open source. Nie chcę oferować wsparcia poza bardzo drobnymi rzeczami, takimi jak fora wsparcia. Nie chcę robić śmieci. Nie mogę rzucić pracy na pełny etat, aby podróżować po kraju wspierając oprogramowanie. edit: Mogą nawet zobaczyć kod, poprawić go itp. Nie mogą go jednak sprzedać. Blisko niektórych licencji CC, które widziałem, ale mam nadzieję, że masz dryf.


title: Co zrobić, gdy wszystkie rozwiązania są równie złe?

text: Czasami, po przeprowadzeniu bardzo dokładnej analizy/badania, możesz wymyślić kilka rozwiązań problemu, ale wszystkie mają poważne wady. Co robisz w takiej sytuacji? Na przykład mogę wymyślić kilka opcji: * Losowo wybierz jedno z rozwiązań. * Odłóż problem, w międzyczasie zrób coś innego i wróć do niego kilka miesięcy później. * Znajdź kogoś, kto zechce podjąć decyzję (a tym samym odpowiedzialność) za Ciebie? * Uparcie szukaj alternatywnych rozwiązań. * Znajdź ludzi, z którymi możesz o tym porozmawiać i miej nadzieję na chwilę jasności. * Pozostaw obecną sytuację bez zmian; to znaczy: w ogóle nie rozwiązuj problemu.


title: Dlaczego jest tak, że historia MS Data Access jest tak podzielona? Czy jest to natura dostępu do danych, czy tylko MS?

text: To pytanie StackOverflow pyta "gdzie mogę zdobyć Microsoft.Data.Objects" Okazuje się, że odpowiedź brzmiała prawdopodobnie, że jest to wersja CTP4 (code first) Entity Framework 4 Jednak jest wiele domysłów. W tym * System.Data * Entity Framework * Microsoft.ApplicationBlocks.Data * Microsoft.Practices.EnterpriseLibrary.Data 10 lat temu, gdyby ktoś zadał podobne pytanie, ponieważ mógł uzyskać DAO, RDO, ADO. Czy to właśnie natura bestii czy to stwardnienie rozsiane. Czy taki schemat występuje u innych dostawców? Gdzie podstawowa strategia dostępu do danych jest opakowana lub zmieniona?


title: Dobra analogia do pamięci komputera?

text: Jestem więc specjalistą z informatyki i jestem także wielkim fanem nieaktualnego już programu telewizyjnego, Numb3rs. Teraz, gdy rozmawiam ze znajomymi, zadają mi też sporo pytań o programowanie i komputery (i jak one działają). Teraz, na Numb3rs, oni (Charlie, a czasami Amita lub Larry) często robili krótkie, ale dobrze wyjaśnione i dobrze wypowiadane streszczenia matematycznego tematu. Chociaż mieli zalety grafiki, często same ich głosy były wiele do wyjaśnienia. Zasadniczo przyjmowali złożone koncepcje i przedstawiali je w kategoriach laików. Był krótki, zwięzły, łatwy do zrozumienia i bardzo interesujący. Zasadniczo szukam czegoś takiego. Po prostu świetna, krótka, interesująca analogia do pamięci komputera. Dzięki więc każdemu, kto potrafi wymyślić krótką, ciekawą, wciągającą, przyjemną, ale edukacyjną i poprawną analogię/podsumowanie pamięci komputera!


title: Czy istnieje ustalona konwencja oddzielania nazw plików systemu Windows w ciągu?

text: Mam funkcję, która musi wyprowadzać ciąg zawierający listę ścieżek plików. Mogę wybrać znak rozdzielający, ale nie mogę zmienić typu danych (np. nie mogę zwrócić `List<string>` lub czegoś podobnego). Chcąc użyć jakiejś dobrze ustalonej konwencji, moją pierwszą intuicją było użycie średnika, podobnie do tego, co robią zmienne środowiskowe `PATH` w Windows i `CLASSPATH` (w Windows): C:\somedir\somefile.txt;C:\ someotherdir\someotherfile.txt Ze zdziwieniem zauważyłem jednak, że `;` to _poprawny znak_ w nazwie pliku NTFS. Tak więc, ustanowioną najlepszą praktyką jest * ignorowanie tego faktu (tj. „żadna rozsądna osoba nie powinna używać `;` w nazwie pliku, a jeśli tak, to z własnej winy”) lub * czy istnieje jakiś inny _ustalony_ znak oddzielający Windows ścieżki lub pliki? (Rura (`|`) może być dobrym wyborem, ale nie widziałem jej jeszcze nigdzie w tym celu.)


title: Entity Framework i "ViewModel"

text: Wcześniej zadałem pytanie o "Entity Framework i separację warstw" i dowiedziałem się, że niektórzy ludzie używają ViewModel do pokazywania swoich danych w interfejsie użytkownika. Na przykład, jeśli mamy tabelę „Osoba” i „Adres”, a chcę pokazać kombinację tych dwóch tabel. Następnie utworzyłbym ViewModel, nazwijmy go PersonAddress i pokażmy go w interfejsie użytkownika. Mam kilka pytań dotyczących tego: 1. Jak najlepiej zapisać obiekt "PersonAddress" w bazie danych, ponieważ nie istnieje w moim kontekście EF? 2. Gdybym chciał tylko pokazać obiekt "Person", czy nadal utworzyłbym identyczny obiekt "ViewModel" do tego, który EF tworzy dla mnie (oczywiście bez specyficznych właściwości EF) 3. Czy ludzie używają właściwości "EntityState" i czy stało się bezużyteczne, jeśli wchodzisz w interakcję tylko z "ViewModel"?


title: jak umieszczenie rekordu wpływa na sekwencyjny czas odczytu w następujących przypadkach

text: Kiedy studiuję ze slajdów wykładów z Internetu w (lekcja Struktury plików), ułożyłem poniższe pytanie, nie mogłem tego zrozumieć. Na slajdzie i w sieci szukałem tematu, ale nie mogę znaleźć żadnego wyjaśnienia na ten temat. Czy ktoś mógłby wyjaśnić odpowiedź ze szczegółami? > Biorąc pod uwagę plik zawierający 30000 rekordów, każdy po 1600 bajtów i rozmiar bloku 2400 bajtów, > w jaki sposób rozmieszczenie rekordów wpływa na sekwencyjny czas odczytu w następujących > przypadkach? Omów: > > 1. Pusta przestrzeń w blokach – fragmentacja wewnętrzna. > 2. Rekordy nakładają się na granice bloków. > Slajd jest dostępny pod linkiem: http://tr.scribd.com/doc/14991462/24/Fast-Sequential-Reading


title: Czy scrum master może upomnieć swój zespół?

text: Scrum master jest facylitatorem dla zespołu dostarczającego i działa jako pomost między Project Management a zespołem. Z biegiem czasu, jeśli zda sobie sprawę, że jego zespół nie dostarcza produktów w pełni możliwej do osiągnięcia kompetencji jego zespołu, czy może zapytać członków swojego zespołu, dlaczego tak się nie dzieje? To bardziej jak ogłoszenie dla nich. Wie, dlaczego tak się nie dzieje np.: spędzanie czasu na portalach społecznościowych czy marnowanie czasu na mniej ważne sprawy. Czy to w porządku, gdy mówi „naganę” zespołowi dostarczającemu za ich styl pracy? A może należy go eskalować i pozostawić kierownikom funkcjonalnym, aby się tym zajęli? Ważną rzeczą do zapamiętania jest to, że zwykle w organizacji, scrum master jest dobrym przyjacielem ze swoim zespołem, więc tym bardziej niezręcznie jest reagować na taką sytuację.


title: Jak przedłużyć wstrzyknięcie konstruktora?

text: Załóżmy, że mam `MyClass` z bardzo prostą zależnością. Wykorzystuje wstrzykiwanie konstruktora. public class MyClass : IMyClass { prywatne IA A; public MojaKlasa(IA a) { A = a; } } Ten kod został wysłany i niektórzy inni programiści go używają. W pewnym momencie w przyszłości muszę dodać drugą zależność, na IB. **Jak dodać tę zależność od IB?** Niektóre opcje i dlaczego się nie zgadzam: * Wystarczy dodać to do konstruktora * Zmiana hamowania. * Dziedziczenie lub wzór dekoratora. * Dodatkowe zajęcia i rozdęcie kodu. * Nowa klasa będzie miała kod standardowy, który będzie przechodził przez IA. * Nie mam gwarancji, że inni programiści przejdą na używanie nowej klasy. * Użyj lokalizatora usług, aby wypełnić nowe pole IB. * Teraz używam dwóch różnych rodzajów iniekcji, aby uzyskać dodatkowe zamieszanie. Wydaje mi się, że wstrzykiwanie konstruktora po prostu nie jest łatwo rozszerzalne.


title: W jaki sposób wzmocnienie warunków wstępnych i osłabienie warunków końcowych narusza zasadę substytucji Liskov?

text: Przeczytałem, że zasada substytucji Liskov jest naruszona, jeśli: 1. Zaostrzone są warunki wstępne. 2. Warunki pocztowe są złagodzone. Ale nie rozumiem jeszcze w pełni, w jaki sposób te dwa punkty naruszałyby zasadę substytucji Liskova. Czy ktoś może wyjaśnić na przykładzie. W szczególności, w jaki sposób którykolwiek z powyższych warunków spowodowałby sytuację, w której obiekt podklasy nie może zostać zastąpiony obiektem nadklasy?


title: Jak poradzić sobie z sytuacją, w której programista kradnie kredyt na Twój projekt?

text: Jest współpracownik, który ukradł kredyt za moją pracę. Stworzyłem system, który pokaże na żywo stany maszyn poligraficznych w całym zakładzie. Była w tym jedna usterka, więc współpracownik dokonał ulepszeń, a następnie przepisał cały system (kopiując 90% mojego kodu, ale dodał nowy sprzęt, a następnie przejął projekt). Teraz od czasu do czasu zadaje mi pytania programistyczne. Nie mam nic przeciwko uczeniu współpracowników, jak programować, ale ponieważ w przeszłości ukradł moje pomysły i zasługi, niechętnie uczę go wszystkiego, co wiem. Dziś prosi mnie o szczególnie wymagający algorytm dla tego systemu. Jego kod wygląda teraz dokładnie tak, jak bym programował! Jak poradziłbyś sobie z tą sytuacją? Jak mogę odmówić mu pomocy, nie sprawiając wrażenia, że nie jestem graczem zespołowym?


title: Jak radzić sobie z zadaniami, które prawdopodobnie nie są historyjkami użytkownika, ale nadal wymagają wykonania?

text: Mamy wiele zadań, które trzeba wykonać, ale prawdopodobnie nie są to prawdziwe historyjki użytkownika, a jeśli tak, to są to historyjki użytkownika bardzo skupione na programistach, które nigdy nie będą widoczne dla użytkowników końcowych. Problem polega na tym, że nie są one szacowane w ramach sprintu i niewiele się z nimi robi. W końcu staje się wystarczającym problemem, że ktoś traci czas ze sprintu, aby sobie z nimi poradzić, ale to wpływa na postęp w „oficjalnej” pracy sprintowej, co sprawia, że niektórzy ludzie są trochę nieszczęśliwi. Nalegałem, aby te zadania stały się oficjalnymi historyjkami użytkowników, ale wydaje się, że nikomu to się nie podoba. Jak inaczej mógłbym poprosić o oficjalne uznanie tych zadań, abym mógł przydzielić im pełne dni bez poczucia, że mam wpływ na resztę sprintu? Kilka przykładów zadań, aby dać ci pomysł: * Napisz małe, niestandardowe wtyczki maven, aby uprościć określone (i szeroko stosowane w organizacji) konfiguracje kompilacji. * Refaktoryzuj stare projekty do zbudowania za pomocą Maven i nowszego zestawu narzędzi. * Refaktoryzuj nadmiarowy (w wielu projektach) kod do niezależnych bibliotek — może być potencjalnie używany przez _wiele_ projektów.


title: Co oznacza litera „R” w nazwach rejestrów x64?

text: Wiem, że rejestry 32-bitowe zostały nazwane tak, jak rejestry 16-bitowe z prefiksem „E”, co oznacza rozszerzone. Zawsze zakładałem, że oznacza to rozszerzenie z 16 do 32 bitów, chociaż nigdy nie widziałem tego wprost. Próbowałem dowiedzieć się, co oznacza „R”, ale moje umiejętności Google zawiodły mnie. Ktoś wie?


Jakie są cechy Pythona, które czynią go wyjątkowym jako jego własny język? Szukam wszelkiego rodzaju cech, od dobrych do złych, użytecznych do utrudnień, składni do rzeczywistego użycia, ale niejasne obserwacje byłyby najbardziej przydatne dla przeciętnego programisty. Jestem tu nowicjuszem, więc intuicyjne rzeczy mogą wymagać wyjaśnienia .....


title: Python: Jaki jest sens używania „importu”?

text: Nie mam jasności w tym aspekcie. Załóżmy, że masz kilka plików .py, które są osobnymi modułami. Dlaczego każdy plik .py musi importować inne, gdy używają tej klasy? Czy oni? Ponieważ byłem prawie pewien, że inne języki (na przykład Java) nie wymagają importu przy odwoływaniu się do klas/plików w tym samym katalogu. Mogę się mylić.


title: Obsługa wyjątków DAL w aplikacji MVP

text: W aplikacji formularzy wygranych MVP radzę sobie z wyjątkami w następujący sposób w DAL. Ponieważ komunikaty użytkownika nie są obowiązkiem DAL, chcę przenieść je do mojej klasy Presentation. Czy możesz pokazać mi standardowy sposób na zrobienie tego? public bool InsertAccount(IBankAccount ba) { string selectStatement = @"JEŚLI NIE ISTNIEJE (WYBIERZ ac_no FROM KontoBankowe WHERE ac_no=@ac_no) BEGIN INSERT INTO BankAccount ..."; using (SqlConnection sqlConnection = new SqlConnection(db.ConnectionString)) { using (SqlCommand sqlCommand = new SqlCommand(selectStatement, sqlConnection)) { try { sqlConnection.Open(); sqlCommand.Parameters.Add("@ac_no", SqlDbType.Char).Value = ba.AccountNumber; // // sqlCommand.ExecuteNonQuery(); zwróć prawdę; } catch (Wyjątek e) { MessageBox.Show(("Błąd: " + e.Message)); } if (sqlConnection.State == System.Data.ConnectionState.Open) sqlConnection.Close(); zwróć fałsz; } } } **EDIT2 :** Tak więc na podstawie odpowiedzi ponownie edytowałem post i teraz mój kod obsługi wyjątków wygląda tak... **DAL** public bool InsertAccount(IBankAccount ba) { try { sqlConnection.Open( ); // } catch (SqlException) { throw new Exception("Wystąpił wyjątek związany z bazą danych"); } catch (Wyjątek) { wrzucić nowy Wyjątek("Wystąpił wyjątek"); } } **PrezenterKontaBankowego** private void SaveBankAccount() { try { _DataService.InsertAccount(_model); } catch (Wyjątek e) { MessagingService.ShowErrorMessage(e.Message); } } Powodem, dla którego złapałem wyjątki w DAL, jest to, że nawet w tej chwili nie rejestruję błędów, być może będę musiał to zrobić w przyszłości. A także w ten sposób mogę odróżnić komunikaty błędów w DAL, czy to związane z sql, czy ogólne. Podczas wyświetlania komunikatów o błędach korzystałem z usługi przesyłania wiadomości w moim prezenterze. Czy to znaczenie jest pełne? Czy można to uprościć?


title: Błędy w mojej konfiguracji programowania PHP - udostępnianie źródeł powodujące lagi

text: Mam następujące ustawienia programistyczne dla moich projektów PHP: * Stacja robocza działająca na Windows 7 z PhpStorm IDE. * GIT do kontroli wersji. * CentOS na maszynie wirtualnej (VirtualBox) z Apache i MySQL (kopia serwera produkcyjnego). Do tej pory udostępniałem foldery źródłowe projektu między systemami hosta i gościa i działało to całkiem dobrze tylko bardzo wolno. Powodem tego jest to, że Apache odczytywał pliki ze zdalnego folderu (montowane lokalnie). Po przeprowadzeniu pewnych badań dowiedziałem się, że tę konfigurację można ulepszyć, używając mapowania dysku (Samba) zamiast udostępniania folderów. Więc dokonałem tej zmiany. Skonfigurowałem mój PhpStorm do automatycznego wdrażania plików na zmapowany dysk. Wszystko działa teraz jak czar, z wyjątkiem jednego problemu - kiedy zmieniam gałęzie, muszę zsynchronizować folder lokalny projektu z tym na zmapowanym dysku, a to zajmuje dużo czasu (jak rozgałęzianie w SVN). Czy istnieje inny sposób na poradzenie sobie z tym, niż praca na plikach bezpośrednio na zmapowanym dysku?


title: Wiązanie danych MVC

text: Używam MVC, ale przeczytałem, że MVVM jest czymś w rodzaju wiązania danych i posiadania czystego znacznika w widokach, które łączą się z backendem za pośrednictwem atrybutów data-*. Spojrzałem na knockout, ale wygląda na dość niski poziom i czuję, że mogę stworzyć bibliotekę, która to robi i jest znacznie łatwiejsza w użyciu, gdzie zasadniczo wystarczy wywołać 1 funkcję javascript, która powiąże dane z całą stroną ze względu na atrybuty data-* przypisane do elementów html. Korzyścią z tego (które widzę) jest to, że widok jest w 100% oddzielony od zaplecza, dzięki czemu dany widok nigdy nie musi być zmieniany, jeśli zmieni się zaplecze (tj. dla osób z asp.net nie ma już brzytwy w twoim pogląd, który sprawia, że twój pogląd jest specyficzny dla MS). Moje pytanie brzmi: wiem, że istnieje nokaut, ale czy są jakieś inne, które zapewniają tę funkcję wiązania danych dla aplikacji typu MVC? Nie chcę odtwarzać czegoś, co może już istnieć, ale chcę zrobić coś „lepszego” i łatwiejszego w użyciu niż nokaut. Aby dać przykład tego, co mam na myśli, to cały kod, który byłby potrzebny, aby uzyskać wiązanie danych w mojej bibliotece. To nie jest ostateczne, ale pokazuje tylko ideę, że wszystko, co musisz zrobić, to wywołać 1 funkcję javascript i ustawić kilka wartości atrybutów data-* i wszystko jest ze sobą powiązane. Czy warto to przejrzeć? <script> $(function () { // to wszystko, co musisz wywołać, aby wykonać wiązanie z danymi dla POST lub GET do pracy DataBind(); }); </script> <form id="addCustomer" data-bind="Klient" data-controller="Home" data-action="CreateCustomer"> Nazwa: <input type="text" data-bind="Name" data -bind-type="text" /> Urodziny: <input type="text" data-bind="Urodziny" data-bind-type="text" /> Adres: <input type="text" data-bind= „Adres” data-bind-type="text" /> <input type="prześlij" value="Zapisz" id="btnSave" /> </form> ============= ==================================== // akcja kontrolera [HttpPost] ciąg publiczny CreateCustomer(Customer customer) { if(customer.Name == "Rick") return "sukces"; zwróć "niepowodzenie"; } // model public class Klient { public string Name { get; ustawić; } public DateTime Urodziny { get; ustawić; } ciąg publiczny Adres { get; ustawić; } }


title: Dziedziczenie publiczne czy prywatne, gdy trzeba ujawnić niektóre metody rodzicielskie?

text: Dziedziczenie publiczne oznacza, że wszystkie pola z klasy bazowej zachowują swoją zadeklarowaną widoczność, podczas gdy prywatne oznacza, że są zmuszone do „prywatnego” w zakresie klasy pochodnej. _Co zrobić, jeśli niektórzy członkowie rodzica (powiedzmy, metody) muszą być publicznie ujawnieni?_ Przychodzą mi do głowy dwa rozwiązania. Dziedziczenie publiczne nieco przełamuje hermetyzację. Co więcej, gdy chcesz dowiedzieć się, gdzie jest zdefiniowana metoda foo(), musisz przyjrzeć się łańcuchowi klas bazowych. Dziedziczenie prywatne rozwiązuje te problemy, ale wprowadza obciążenie związane z pisaniem opakowań (więcej tekstu). Co może być dobrą rzeczą w linii gadatliwości, ale sprawia, że zmiany interfejsów są niezwykle uciążliwe. Jakich rozważań mi brakuje? Jakie ograniczenia dotyczące typu projektu są ważne? Jak wybrać między tymi dwoma (nie wspominam nawet o „chronionym”)? Pamiętaj, że celuję w metody niewirtualne. Nie ma takiej dyskusji o metodach wirtualnych (albo jest).


title: Jak znaleźć kod JavaScript, który jest wywoływany po kliknięciu przycisku lub łącza na stronie internetowej (część projektu eksploracji danych)?

text: Próbowałem użyć 'inspect element' dodatku firebug dla Firefoksa, ale nie daje mi to żadnego linku do javascriptu. Na przykład dostałem to z dodatku firebug: <a href="javascript:"> tekst linku </a> Ale nie ma linku do właściwego javascriptu ani niczego, czego mogę użyć, aby bezpośrednio przejść do wspomnianego połączyć. Jak to zrobić? Potrzebuję tego w ramach projektu eksploracji danych osobowych, który robię.


title: Czym różni się szybkość przeglądania w aplikacjach natywnych, aplikacjach internetowych i witrynach internetowych?

text: Przeczytałem artykuł online, do którego podaję odniesienie poniżej, które porównuje między aplikacjami natywnymi i aplikacjami internetowymi, oprócz standardowej strony internetowej. Z tego artykułu wynika, że aplikacje natywne są szybsze niż aplikacje internetowe i strony internetowe. Nie było to jednak dla mnie jasne. > ![tutaj podaj opis obrazu](http://i.stack.imgur.com/Pym4H.png) Czy można zbudować natywną aplikację, która będzie używana dokładnie jako strona internetowa? to znaczy, czy funkcje na przykład w serwisie społecznościowym można zaprogramować jako aplikację natywną? Czy w takim razie nie będzie to używać języka po stronie serwera? Co zatem przyspieszyć, jeśli nawet strona internetowa i aplikacja internetowa korzystają z tego samego? http://www.mobi-cart.com/native-vs-web.jsp


title: Jak JavaScript stał się popularny?

text: W starożytności Brendan Eich projektował język, aw dzisiejszym świecie JavaScript jest popularnym językiem implementowanym i używanym w wielu różnych miejscach. Co spowodowało, że język stał się popularny? Czy była to składnia podobna do C, znana poprzednim programistom? Czy Netscape miał wystarczającą kontrolę nad rynkiem, aby zmusić go do użycia? A może istnieje jakiś głębszy powód, dla którego JavaScript jest popularny, a inne języki nie? W szczególności, gdybyś musiał stworzyć język tak popularny jak JavaScript, jakie warunki początkowe byłyby potrzebne, aby odtworzyć jego wzrost popularności?


title: Implementacja wielu ogólnych interfejsów w java

text: Potrzebuję interfejsu, który zapewnia, że dostępna jest pewna metoda, w tym konkretny podpis. Do tej pory jego jest to, co mam: interfejs publiczny Mappable<M> { M mapTo(M mappableEntity); } Problem pojawia się, gdy klasa powinna być mapowana na wiele innych jednostek. Idealnym przypadkiem byłby ten (nie java): public class Coś implementuje Mappable<A>, Mappable<B> { public A mapTo(A someObject) {...} public B mapTo(B someOtherObject) {...} } Jaki byłby najlepszy sposób, aby to osiągnąć, pozostając tak „ogólnym” jak to tylko możliwe?


title: Czy wzorce projektowe są niezależne od języków programowania?

text: Ostatnio pracowałem nad Objective C i natknąłem się na użycie wzorca Delegate. Widziałem wszystkie wzorce teoretycznie w Javie dzięki książce Head First. Ale czasami patrząc na różnice w językach dynamicznych i skryptowych, nie wiem, czy potrzebne są pewne wzorce projektowe. Na przykład weźmy przykład wzorca Adapter. Ma już dwie implementacje: Object adapter[java] i Class Adapter[C++]. w zależności od tego, czy język obsługuje dziedziczenie wielokrotne, czy nie. Ale w przypadku języków dynamicznych, takich jak Objective-C, możliwe jest pisanie kaczką, a także mamy metody, takie jak respondsToSelector, aby sprawdzić, czy obiekt faktycznie obsługuje metodę, czy nie. Dlaczego więc mamy tutaj protokoły, nawet jeśli musimy użyć wzorca delegatów? Jeśli możemy założyć, że cokolwiek jest czymkolwiek. w dynamicznym języku, czy potrzebujemy w ogóle koncepcji abstrakcyjnej klasy lub interfejsu, aby zaimplementować kilka wzorców? bardziej przypominają narzędzia dla statycznie typowanych języków, które zapewniają dynamiczne zachowanie. specjalnie nie rozumiem potrzeby abstrakcyjnego słowa kluczowego w PHP. Czy ktoś może wskazać kilka ważnych szczegółów, jestem w tym stosunkowo nowy.


title: Dlaczego Python po prostu nie ustanowi formatu deklarowania szerokości tabulacji?

text: Czytałem wojny płomieni o użycie spacji i tabulatorów. Podczas pracy z dowolnym językiem znaczników (gdy zakres nie jest bardzo ważny, a _gdy_ naciśnięcie spacji 4 razy jest PITA), staram się minimalizować szerokość tabulacji do spacji lub dwóch, ale płynnie zmieniam na cztery pełne tabulatory dla mojego innego programowania praca. Przez większość czasu jest to kwestia wygody i przekłada się tylko na realne błędy podczas udostępniania lub miksowania kodu. Dlaczego więc nie deklarują po prostu formatu opcjonalnych nadpisań, takich jak `#tab = 2` na początku pliku? Nie byłoby problemów z ustalaniem zakresu i można by to obsłużyć za pomocą 2 wierszy kodu. # Zaktualizuj Whoa, nie wyjaśniłem się zbyt jasno: używam tylko edytorów, które automatycznie obsługują konwersję tabulacji/spacji. Jedynym **przekonującym** punktem, który mogę zrozumieć w krytyce, którą przeczytałem na temat używania białych znaków w Pythonie, jest to, jak obłąkana staje się konwencja spacji / tabulacji podczas udostępniania kodu. Być może moje zamieszanie związane z używaniem „4 spacji” wynika z mojego wcześniejszego życia w branży wydawniczej i używania przez nas tabulatorów nie jako jednostki spacji, ale jako abstrakcyjnego elementu używanego do opisania struktury dokumentu, a nie sposobu wyświetlania. Zastąpienie go 4 spacjami ma więcej wspólnego z gównianą 8-spójną konwencją Uniksa niż z elegancją. Gdyby Python ujednolicił domyślnie używanie tabulatorów, wyeliminowalibyśmy warstwę abstrakcji (dosłowne wizualne _spaces_ -> abstract _tab_ ), która gubi się, gdy wychodzimy z obszaru IDE i przechodzimy do obszaru Usenet/chat/email. Pomyślałem, że `#tab=2` będzie dobrym sposobem na zapewnienie, że wszelkie różnice wynikające z wygodnego formatowania nie zepsują wszystkiego gdzie indziej.


title: Hosting projektu (zawierający inżynierię wsteczną) + licencja

text: **Zrobiłem wiele narzędzi do wyodrębniania formatów plików, które można znaleźć w (komercyjnych) grach. Gdzie powinienem przechowywać kod? (np. Google Code, Sourceforge,....)** Normalnie byłoby to wszędzie uważane za „nielegalne”, ale w większości przypadków są one ignorowane. Gdzie mam go hostować i jaką licencję wybrać, aby projekt był „po bezpiecznej stronie”. _[Zadałem to pytanie na SO i zostało zamknięte, meta zasugerowała, że pasowałoby tu trochę bardziej, jeśli nawet tu nie pasuje, pomóż mi przynajmniej je przeformułować]_ Edytuj: Przykład: Gra się skleiła razem skompresowane pliki GZip z binarnymi metadanymi na nich umieszczonymi. (nazwijmy je plikami .archive) Wiem, że nie wolno mi używać tych danych do niczego innego niż granie w grę, ale jestem zainteresowany modowaniem tych plików, więc napisałem paker/rozpakowywanie dla tego archiwum . Teraz chcę to upublicznić na stronie projektu, którą mam wybrać? Wszystkie narzędzia do modowania, które do tej pory widziałem, mają to „TYLKO DO UŻYTKU EDUKACYJNEGO NIEZALEŻNEGO OD DOCHODÓW” i zwykle nie są usuwane. Ale chcę mieć pewność, że wybrałem rzeczywistą licencję na kod źródłowy.


title: Czy istnieje struktura danych dla tego typu listy/mapy?

text: Być może istnieje nazwa na to, czego chcę, ale nie jestem tego świadomy. Potrzebuję czegoś podobnego do `LinkedHashMap` w Javie, ale gdzie zwraca wartość 'poprzednią', jeśli nie ma wartości w określonym kluczu. Oznacza to, że mam listę obiektów przechowywanych przez klucz całkowity (który w moim przypadku jest w jednostkach czasu): ; klucz->wartość 10->A 15->B 20->C Tak więc, jeśli miałbym zapytać o wartość dla klucza 0-9, zwróciłby on `null`. Specjalna część polega na tym, że jeśli zapytam o coś 10 <= i <= 14, zwróci A. Lub, dla i >= 20, zwróci C. Czy jest do tego struktura danych?


title: Konwencja nazewnictwa tablic, liczby mnogiej czy pojedynczej?

text: Załóżmy, że mamy klasę reprezentującą siatkę Sudoku. W tej siatce mamy kolekcję _komórek_. Teraz, gdybym po prostu udostępnił kolekcję tych komórek za pośrednictwem klasy, nazewnictwo byłoby całkiem proste. Użyłbym liczby mnogiej: Public List<CellClass> Cells Ale co, gdybym chciał użyć tablicy kwadratowej, aby móc łatwo uzyskać komórkę o określonej współrzędnej. Czy będzie to: Public CellClass[,] Cells czy Public CellClass[,] Cell Użycie liczby mnogiej _dźwięków_ jest wystarczająco intuicyjne, ponieważ jest to kolekcja, ale uzyskujesz do niej dostęp w następujący sposób: x = myBoard.Cells[2,3] Który nie wygląda prawie tak ładnie (i poprawnie gramatycznie) jak: x = myBoard.Cell[2,3] Więc jak myślisz, co byłoby lepsze? Liczba mnoga czy pojedyncza?


title: Matematyka musiała zrozumieć teorię stojącą za systemem typów Haskella?

text: Ostatnio bardzo zainteresowałem się Haskellem. Próbując nauczyć się nowych pojęć (np. słowa kluczowego forall i monady ST) oraz ogólnie systemu typów Haskella, ciągle natykam się na pojęcia z teorii kategorii i rachunku lambda. Zastanawiam się więc: 1. Jakie inne gałęzie matematyki są ważne dla dobrego zrozumienia systemu typów Haskella? 2. Czy mogę zrezygnować z rygorystycznego studiowania tej matematyki i zamiast tego skupić się na pewnych istotnych pojęciach? (np. kwantyfikatory w rachunku lambda). Jeśli tak, które pojęcia są niezbędne? Mam nadzieję, że wkrótce zajmę się typami i językami programowania, jednak proszę zasugeruj alternatywne źródła do czytania, które uważasz za odpowiednie.


title: Projektowanie systemu poczty e-mail w celu zagwarantowania dostawy

text: Zamierzamy rozszerzyć nasze wykorzystanie poczty e-mail do celów powiadamiania. Rozumiemy, że wygeneruje to większą objętość skrzynki odbiorczej, ale staramy się wybierać zdarzenia, o których uruchamiamy powiadomienia, aby utrzymać wysoki stosunek sygnału do szumu. Wielkim pytaniem, z którym się zmagamy, jest zaprojektowanie systemu, który zagwarantuje dostarczenie wiadomości e-mail. Jeśli wiadomość e-mail nie zostanie dostarczona, uznamy to za zdarzenie wyjątkowe, które należy zbadać. W rzeczywistości mówię _prawie_ gwarancje, ponieważ w przypadku poczty e-mail nie ma żadnych prawdziwych gwarancji. Szukamy tylko praktycznego rozwiązania, aby upewnić się, że e-mail dotarł do celu, oraz doświadczeń, jakie inni mieli z różnymi podejściami do zagwarantowania dostarczenia. Dla tłumu **TL;DR** – jak zaprojektować system gwarantujący dostarczanie e-maili? Jakie techniki powinniśmy wziąć pod uwagę, aby wiedzieć, że e-maile zostały dostarczone? Naszym największym problemem jest to, jakich technik użyć, abyśmy wiedzieli, kiedy wiadomość jest wysłana, że albo trafia do skrzynki odbiorczej, albo się nie powiodła i musimy zrobić coś innego. Dodatkowe wymagania: * Nie jesteśmy na etapie włączania odpowiedzi na eskalację, ale będziemy tego chcieli w przyszłości, a przynajmniej tak nam się wydaje. * Większość powiadomień będzie miała charakter wewnętrzny w naszym przedsiębiorstwie, ale niektóre powiadomienia będą wysyłane do klientów zewnętrznych. * Niektóre z naszych aplikacji działają w środowisku hostowanym. Nie ustaliliśmy, czy te serwery mogą uzyskiwać dostęp do naszych firmowych serwerów poczty e-mail w celu przekazywania, czy też będą działać jako własne serwery poczty. Projekt bazowy / moduły (obecnie): Moduł do przypisywania identyfikacji śledzenia Moduł do wysyłania wiadomości e-mail Moduł do otrzymywania powiadomień o doręczeniu (być może to samo co moduł e-mail) Moduł sprawdzający wysłane wiadomości z powiadomieniami o dostarczeniu i alertami w niedostarczonej wiadomości e-mail. Kilka odniesień: Atwood: Wyślij e-mail Śledzenie e-maili Niektóre podejścia: * Poproś o odpowiedź (aka potwierdzenie odczytu lub powiadomienie o dyspozycji wiadomości). Wydaje się podatny na niepowodzenie, ponieważ mamy problemy z kompatybilnością krzyżową z powodu różnych serwerów pocztowych i oprogramowania. * Potwierdzenie zwrotu (aka Powiadomienie o stanie dostawy). Nie jestem pewien, czy wszystkie serwery pocztowe uznają to żądanie, czy nie * Wymagaj działania, a zatem udowodnij odpowiedź. Uciążliwe wydaje się zmuszenie odbiorców do wykonania dodatkowego zadania, niezwiązanego z rozwiązaniem problemu. I nie, nie wymyśliliśmy sposobu na powiązanie rozwiązania problemu z otrzymaniem wiadomości e-mail. * Wymuś logowanie po kliknięciu / w innej witrynie. Podobnie jak wymaganie jakiegoś działania, wydaje się to dodatkowym obciążeniem i irytuje użytkowników. Z drugiej strony wydaje się najbardziej prawdopodobne, że ktoś otrzymał powiadomienie. * Ukryte śledzenie obrazu. Nie wszyscy dostawcy poczty e-mail automatycznie ładują obraz i w jaki sposób powiążemy obraz(y) z identyfikatorem śledzenia poczty e-mail? * Dostawa zlecona na zewnątrz. To wyprowadza nas z biznesu e-mailowego, ale wraca do tego, jak zagwarantować odbiór przez outsourcera, a następnie dostarczenie go do końcowego odbiorcy. Powiązanym problemem będzie relacja n:n między powiadomieniem o problemie a odbiorcami. Problem 1: podzbiór n odbiorców nie jest tak dużym problemem, chociaż gdybyśmy mieli awarię dostawy, chcielibyśmy zbadać i naprawić podstawowy problem. Większym problemem jest n spraw: 1 odbiorca, a szczególnie zależy nam na upewnieniu się, że odbiorca otrzymał wszystkie n spraw. W jaki sposób oprogramowanie forum lub oprogramowanie do śledzenia problemów radzi sobie z tym wymogiem? Jeśli używany jest identyfikator śledzenia, gdzie jest on umieszczany w wiadomości e-mail? W temacie, czy w ciele?


title: Ile logiki można umieścić w klasie fabryki puli obiektów, zanim wyrządzi ona więcej szkody niż pożytku?

text: Głównym językiem, w którym jestem zainteresowany łączeniem obiektów, jest AS3, o którym wiadomo, że w wielu przypadkach go potrzebuje. W przeszłości zawsze tworzyłem zupełnie nową klasę fabryczną dla każdego typu, który chciałem połączyć, parametry jego funkcji "produkującej obiekty" były takie same jak parametry konstruktora tego typu. Zasadniczo: static public function produce(<lista parametrów>):<typ> { if (m_arryPool.length) { var obj:<typ> = m_arryPool.pop(); // zrób coś z argumentami przekazanymi do produce() return obj; } return new obj(<argumenty przekazane do produce()>); } Ale ostatnio próbowałem wymyślić sposób na uniknięcie ponownego pisania tego rodzaju kodu wzorcowego dla każdego typu, który chcę połączyć, ale prawdopodobnie bez utraty pomysłu przekazywania argumentów do zwracanych obiektów, jak w powyższy przykład i zdecydowanie bez umieszczania w nim tak dużej dynamicznej funkcjonalności i innych rzeczy, które po prostu zbytnio spowalniają działanie. Nadal jestem trochę zielony w łączeniu obiektów. Wiem, że uniwersalna fabryka poolingu prawdopodobnie nie zadziała we wszystkich przypadkach (na przykład `Function.apply()` w AS3 nie obsługuje konstruktorów), ale kiedy dojdzie do punktu, w którym 'po prostu przekazujesz tak wiele argumentów do funkcji `produce()`, używając tylu nieopisanych zmiennych, przechodząc przez tak wiele słowników i list itp., że po prostu nie jest już tego warte? Wiem, że to pytanie może być nieco subiektywne, ale wierzę, że są na nie w dużej mierze obiektywne odpowiedzi. Interesuje mnie głównie to, jak miałoby to zastosowanie do AS3, ale interesuje mnie również (i proszę) odpowiedź ogólna. Czy najlepszym sposobem na radzenie sobie z tym ogólnie jest po prostu napisanie kodu wzorcowego dla każdego typu, który planujesz połączyć, czy coś w tym rodzaju? Dziękuję!


title: Mały projekt języka asemblera do ćwiczeń

text: Uczę się języka asemblera dla architektury x86. Ale nie jestem w stanie znaleźć żadnych problemów z praktyką, abym mógł sprawdzić swoje umiejętności. Czy możesz zasugerować mi jakieś problemy z praktyką lub mały projekt w języku asemblera, aby poprawić moje umiejętności? Z góry dziękuję


title: Wydanie mapy drogowej za pomocą scrum

text: Muszę przygotować wewnętrzną mapę drogową wydania produktu dla produktu budowanego za pomocą metodologii scrum i mam pewne trudności z skorelowaniem sprintów z mapą drogową. Główny problem polega na tym, że nie mam szacunków nakładu pracy dla każdej historii, ponieważ są one przygotowywane bezpośrednio przed każdym sprintem, więc nie wiem, co będzie składać się na który sprint. Nie mam nic przeciwko zmienianiu mapy drogowej w miarę rozwoju, ale potrzebuję tego, aby dać przynajmniej pewną wskazówkę, kiedy coś ma zostać wydane. Więc jaki byłby najlepszy sposób na zrobienie tego, poza gościnnością całego zaległości? Dzięki za każdy pomysł.


title: Dlaczego utworzono ContentProvider dla Androida?

text: Tytuł podsumowuje moje pytanie, ale aby wyjaśnić w zasadzie to, co chcę zrozumieć, dlaczego projektanci Androida chcą, aby aplikacje, które muszą współpracować z udostępnionymi danymi, korzystały z dostawcy treści, a nie tylko bezpośrednio uzyskiwać dostęp do bazy danych SQLite? Jedynym powodem, jaki przychodzi mi do głowy, jest bezpieczeństwo, ponieważ do niektórych plików można uzyskać dostęp tylko z określonych procesów, a w ten sposób dostawca treści jest strażnikiem, który zapewnia, że każda aplikacja ma odpowiednie uprawnienia, zanim zezwoli na dostęp do odczytu i/lub zapisu do pliku bazy danych. Czy to główny powód, dla którego utworzono ContentProvider?


title: Jak zaimplementować aplikację do przetwarzania poleceń?

text: Chcę utworzyć prostą aplikację do weryfikacji koncepcji (REPL), która pobiera numer, a następnie przetwarza polecenia na tym numerze. Przykład: zaczynam od 1. Potem piszę „`dodaj 2`”, to daje mi 3. Potem piszę „`mnóż 7`”, to daje mi 21. Następnie chcę wiedzieć, czy jest to liczba pierwsza, więc piszę "`jest liczbą pierwszą" (przy obecnej liczbie - 21), daje mi fałsz. „jest dziwne” dałoby mi prawdę. I tak dalej. Teraz, dla prostej aplikacji z kilkoma poleceniami, wystarczy zwykły `przełącznik` do przetwarzania poleceń. Ale jeśli chcę rozszerzać, jak powinienem zaimplementować funkcjonalność? Czy używam wzorca poleceń? Czy zbuduję prosty parser/tłumacz dla języka? Co zrobić, jeśli potrzebuję bardziej złożonych poleceń, takich jak „`mnożenie 5 do >200`” ? Jaki byłby prosty sposób na jego rozszerzenie (dodawanie nowych poleceń) bez ponownej kompilacji? Edycja: żeby wyjaśnić kilka rzeczy, moim celem końcowym nie byłoby stworzenie czegoś podobnego do WolframAlpha, ale raczej procesor listy (liczb). Ale najpierw chcę zacząć powoli (od pojedynczych liczb). Mam na myśli coś podobnego do sposobu, w jaki używa się Haskella do przetwarzania list, ale bardzo prostą wersję. Zastanawiam się, czy wystarczyłoby coś takiego jak wzorzec poleceń (lub odpowiednik), czy też muszę zrobić nowy mini język i parser, aby osiągnąć moje cele? Edit2: Dzięki za wszystkie odpowiedzi, wszystkie były dla mnie bardzo pomocne, ale najbardziej pomogła mi Emmad Kareem, więc wybiorę to jako odpowiedź. Dzięki jeszcze raz!


title: Jaka jest użyteczność zachęcania użytkowników do nauki języka SQL i możliwości jego wykonywania?

text: W obliczu sytuacji, w której nie mogę uzyskać wszystkich funkcji wymaganych w każdej obsługiwanej przeze mnie wersji LOB, opracowałem wiele szablonów zapytań SQL, które użytkownicy mają i wysyłają do mnie, które następnie wykonuje. Doprowadziło to następnie do chronionego hasłem okna dialogowego wykonywania SQL, które użytkownicy z dostępem do zapisu mogą wykonać samodzielnie, ze świadomością, że jeśli popełnią niewłaściwą literówkę, mogą wyrządzić szkody. Chociaż to mnie denerwuje, zalety posiadania funkcji przewyższają ryzyko w tej sytuacji. Następnie następuje zmiana w sposobie, w jaki ludzie postrzegają funkcjonalność. Wydaje się to mniej magiczne, gdy lepiej rozumieją, jak działa baza danych. Jednak z drugiej strony nowi użytkownicy mogą potencjalnie wejść do kultury, w której język zawiera coś zupełnie obcego im. Jakieś porady dotyczące tego, czy ten kierunek ma względną użyteczność?


title: SQL Server Management Studio Pokaż ostatnio wykonane zapytanie

text: Poszukuję sposobu, aby studio SQL Server Management pokazało mi ostatnie zapytanie SQL, które zostało uruchomione. Na przykład, gdy dokonuję modyfikacji tabeli w trybie projektanta, ostatecznie będę chciał wprowadzić te same zmiany w produkcyjnej bazie danych bez ponownego tworzenia całej tabeli. Szukam funkcjonalności podobnej do PHPMyAdmin for MySQL, która informuje o ostatnim uruchomionym zapytaniu i wynikach zapytania u góry strony po zakończeniu modyfikacji.


title: Wzór kompozytowy i naruszenie SRP

text: Ostatnio zauważyłem, że implementuję wzorzec podobny do opisanego poniżej. Zaczynając od interfejsu: public interface IUserProvider { User GetUser(UserData data); } Czystym zadaniem metody `GetUser` jest w jakiś sposób zwrócenie użytkownika (byłoby to _operacją_ mówiącą w kategoriach złożonych). Może istnieć wiele implementacji `IUserProvider`, które robią to samo - zwracają użytkownika na podstawie danych wejściowych. To naprawdę nie ma znaczenia, ponieważ są to tylko _liście_ w kategoriach złożonych, a to jest dość proste. Teraz moje _liście_ są używane przez jedną klasę kompozytową _własne wszystkie_, która w tej chwili jest zgodna z tą implementacją: public interface IUserProviderComposite : IUserProvider { void RegisterProvider(Predicate<UserData> predicate, IUserProvider provider); } public class UserProviderComposite : IUserProviderComposite { public User GetUser(SomeUserData data) ... public void RegisterProvider(Predicate<UserData> predykat, dostawca IUserProvider) ... } Idea `UserProviderComposite` jest prosta. Rejestrujesz dostawców, a ta klasa działa jako punkt wejścia wielokrotnego użytku. Podczas wywoływania `GetUser` użyje dowolnego zarejestrowanego dostawcy pasującego do predykatu dla żądanych danych użytkownika (jeśli to pomoże, przechowuje wewnętrznie mapę klucz-wartość predykatów i dostawców). Teraz dezorientuje mnie, czy metoda `RegisterProvider` (przywodzi na myśl operację _add_ kompozytu) powinna być częścią tej klasy. W pewnym sensie rozszerza swoje obowiązki z dostarczania użytkownika do zarządzania windykacją dostawców. W moim rozumieniu narusza to zasadę pojedynczej odpowiedzialności… czy też się mylę? Pomyślałem o wyodrębnieniu części rejestru do osobnej jednostki i wstrzyknięciu jej do kompozytu. Tak długo, jak wygląda przyzwoicie na papierze (pod względem SRP), wydaje się trochę niezręczne, ponieważ: * Zasadniczo wstrzykiwałbym słownik (lub inną mapę klucz-wartość) * ...lub głupie zawijanie wokół niego, nie robiąc nic więcej niż dodawanie całych * To nie będzie już zgodne z kompozytem (ponieważ _add_ nie będzie częścią kompozytu) Jak dokładnie nazywa się prezentowany wzorzec? Composite wydawało się naturalne w porównaniu z nim, ale zdaję sobie sprawę, że to nie jest dokładnie ten, ale nic innego nie dzwoni. Które podejście byś wybrał - trzymać się SRP czy trzymać się "kompozytu"/wzoru? A może projekt tutaj jest wadliwy i biorąc pod uwagę problem, można to zrobić w lepszy sposób?


title: Jakie są najpopularniejsze systemy kontroli wersji?

text: Dostępnych jest wiele opcji dotyczących kontroli wersji (SVN, CVS, GitHub itp.). Jakie są główne opcje? Jakie są obecnie najpopularniejsze (chociaż nie jestem pewien, czy nowe systemy kontroli wersji zostaną wprowadzone w najbliższej przyszłości)? Z góry dziękuję za opinię, chociaż nie jestem pewien, czy jest to odpowiednie miejsce, aby zapytać.


title: Czy wykorzystujesz zalety zasady otwarte-zamknięte?

text: Zasada open-closed (OCP) mówi, że obiekt powinien być otwarty na rozszerzenie, ale zamknięty na modyfikację. Wierzę, że to rozumiem i używam w połączeniu z SRP do tworzenia klas, które robią tylko jedną rzecz. I staram się stworzyć wiele małych metod, które umożliwią wyodrębnienie wszystkich kontrolek zachowania do metod, które mogą być rozszerzone lub nadpisane w jakiejś podklasie. W ten sposób kończę z klasami, które mają wiele punktów rozszerzeń, czy to przez: wstrzykiwanie zależności i kompozycję, zdarzenia, delegowanie itp. Rozważmy następującą prostą, rozszerzalną klasę: class PaycheckCalculator { // ... protected decimal dziesiętny GetOvertimeFactor() { powrót 2,0 mln; } } Teraz powiedzmy na przykład, że `OvertimeFactor` zmienia się na 1.5. Ponieważ powyższa klasa została zaprojektowana z myślą o rozszerzeniu, mogę łatwo podklasy i zwrócić inny `OvertimeFactor`. **Ale**... pomimo tego, że klasa została zaprojektowana z myślą o rozszerzeniu i przestrzeganiu OCP, zmodyfikuję pojedynczą metodę, o której mowa, zamiast tworzyć podklasy i zastępować daną metodę, a następnie ponownie łączyć moje obiekty w moim kontenerze IoC . W rezultacie naruszyłem część tego, co próbuje osiągnąć OCP. Czuję się tak, jakbym był po prostu leniwy, ponieważ powyższe jest nieco łatwiejsze. Czy źle rozumiem OCP? Czy naprawdę powinienem robić coś innego? Czy w inny sposób wykorzystujesz zalety OCP? **Aktualizacja** : na podstawie odpowiedzi wygląda na to, że ten wymyślny przykład jest kiepski z wielu różnych powodów. Głównym założeniem przykładu było zademonstrowanie, że klasa została zaprojektowana do rozszerzenia poprzez dostarczenie metod, które po nadpisaniu zmieniałyby zachowanie metod _public_ bez konieczności zmiany kodu _wewnętrznego_ lub prywatnego. Mimo to zdecydowanie źle zrozumiałem OCP.


title: Czy powinniśmy stworzyć historię na wakacje?

text: Mieliśmy sytuację ze scrum sprintem, w którym członek zespołu wyjechał na kilkudniowy urlop na początku sprintu. Doprowadziło to do tego, że na początku sprintu pozostaliśmy za idealnym trendem na wykresie wypalania, chociaż nadrobiliśmy zaległości później, ponieważ wiedzieliśmy, że mamy nieco mniej zasobów i w rezultacie zobowiązaliśmy się dostarczać nieco mniej. W naszej retrospekcji Właściciel Produktu zasugerował stworzenie wakacyjnej opowieści. Pozostały czas zostanie skrócony po zakończeniu wakacji. W rezultacie wykres wypalania zostałby skorygowany o „dziurę”, która pojawiłaby się w wysiłku, gdy zasoby zespołu były mniejsze, co w przeciwnym razie fałszywie wskazywałoby na problem. Czy to dobry pomysł?


title: Projektowanie aplikacji bazodanowej za pomocą OOP

text: Często tworzę aplikacje bazodanowe SQL przy użyciu Linq, a moją metodologią jest budowanie klas modeli reprezentujących każdą tabelę, a każda tabela, która wymaga wstawienia lub aktualizacji, otrzymuje metodę Save() (która wykonuje albo InsertOnSubmit() lub SubmitChanges(), w zależności na stan obiektu). Często, gdy potrzebuję reprezentować kolekcję rekordów, tworzę klasę, która dziedziczy z obiektu typu List klasy atomowej. były. public class CustomerCollection : CoreCollection<Customer> { } Ostatnio pracowałem nad aplikacją, w której użytkownicy końcowi doświadczali spowolnienia, gdzie każdy z obiektów musiał być zapisany do bazy danych, jeśli spełniał określone kryteria. Moja metoda Save() była powolna, prawdopodobnie dlatego, że robiłem wszelkiego rodzaju podróże w obie strony do serwera i wywoływanie DataContext.SubmitChanges() po każdym atomowym zapisie. Tak więc kod mógł wyglądać mniej więcej tak foreach(Customer c in customerCollection) { if(c.ShouldSave()) { c.Save(); } } Pracowałem nad wieloma strategiami optymalizacji, ale ostatecznie zdecydowałem się na przekazanie dużego ciągu danych do procedury składowanej SQL, gdzie ciąg zawiera wszystkie dane reprezentujące rekordy, z którymi pracowałem - może to wyglądać mniej więcej tak: CustomerID :34567;CurrentAddress:23 3rd St;CustomerID:23456;CurrentAddress:123 4th St Tak więc serwer SQL analizuje ciąg, wykonuje logikę, aby określić poprawność zapisu, a następnie wstawia, aktualizuje lub ignoruje. Z C#/Linq wykonującym tę pracę, zaoszczędził 5-10 rekordów / s. Kiedy SQL to robi, otrzymuję >100 rekordów / s, więc nie można zaprzeczyć, że Stored Proc jest bardziej wydajny; jednak nienawidzę tego rozwiązania, ponieważ nie wydaje się tak czyste ani bezpieczne. Moją prawdziwą obawą jest to, że nie mam lepszych rozwiązań, które trzymałyby świeczkę w stosunku do wydajności zapisanego rozwiązania proc. Czy robię coś wyraźnie złego w sposobie myślenia o projektowaniu aplikacji bazodanowych? Czy istnieją lepsze sposoby projektowania aplikacji bazodanowych?


title: Finansowanie projektów Agile

text: Firma, w której pracuję, niepewnie zmierza w kierunku strategii zarządzania projektami Agile - doświadczywszy "radości" wodospadu jeden raz do wielu. Kluczem do tego jest przesunięcie nacisku na dostarczanie funkcjonalności, a nie na dotrzymywanie sztywnych terminów. Chociaż proces rozwoju i relacje z klientami z pewnością poprawiły się dzięki iteracyjnym wydaniom wspieranym przez Agile , nieco trudniej jest zastosować to samo uzasadnienie do strategii finansowania projektu. Klienci często nie są przyzwyczajeni do koncepcji takich jak Agile i wyrażają wielką troskę o **to, co postrzegają** jako przypadek „będzie gotowe, gdy będzie gotowe”. Chciałbym usłyszeć opinie i doświadczenia ludzi w finansowaniu projektów Agile **edytuj:** Chcę podkreślić, że _nie proszę ludzi o wyjaśnienie mi plusów i minusów metody Agile_, ani że uważam, że Agile równa się „ będzie gotowy, gdy będzie gotowy”, to obawa wyrażana przez klientów/firmy, z którymi pracowałem, opowiadając się za praktykami rozwoju Agile. Interesują mnie doświadczenia, jakie ludzie mieli przy rozwiązywaniu konfliktów między „tradycyjnymi” metodami budżetowania kaskadowego, zakorzenionymi w relacjach z klientem biznesowym a bardziej progresywnymi metodami rozwoju – a strategiami budżetowania, które przyjęli, aby wspierać tę ewolucję.


title: Praca zespołowa (mały zespół) - Najlepsze praktyki

text: Obecnie pracuję w bardzo małym zespole programistów (2-3) i szukam porad/najlepszych praktyk jak zorganizować naszą pracę. Wszyscy pracujemy nad tą samą aplikacją używając PHP. Dzisiaj wszyscy pracujemy nad swoją drogą. **Sytuacja dzisiejsza:** * Wymień element, nad którym każdy programista musi popracować raz w tygodniu. To, co należy zrobić, jest zdefiniowane na wysokim poziomie funkcjonalnym (np.: Zbuduj wyszukiwarkę dla tego produktu..) * Zatwierdzaj / łącz nasze poszczególne gałęzie (git) co tydzień przed następnym spotkaniem * Bez prawdziwych reguł deweloperskich, bez przeglądu kodu * Brak testu (auutch) **Napotkane problemy:** * Problem z jakością kodu: odkrycie kodu kogoś innego jest czasem trudne (inline, zmienna+funkcja+nazwy klas, spacje, komentarze...) * Zmiany w już istniejących klasach (wpływ nad czyjąś pracą) * Odpowiedzialność każdego dewelopera jest niejasna: po zdobyciu cudzego kodu i odkryciu czegoś nieporządnego, czy powinienem dokonać zmiany? Czy powinien dokonać zmiany? Jak zaplanować te rzeczy,... **Czego szukam:** Zasadniczo szukam sposobu, w jaki rozwijamy rzeczy, aby uniknąć frustracji i poprawić ogólną jakość. * Jak zdefiniować standardy kodowania (konwencja nazewnictwa, zasady kodowania...)? Czy masz jakiś skrypt walidacji, aby upewnić się, że kod jest poprawny przed zatwierdzeniem? * Czy uważasz, że potrzebne jest zdefiniowanie roli architekta w zespole? Kogoś, kto właściwie określi, co należy opracować w następnej fazie. Definiując interfejsy lub opisy klas, które należy napisać. (Czy to ma sens w tak małym zespole?) Dziś tracimy czas na zrozumienie tego, co zrobili lub próbowali zrobić inni, tracimy też czas na dyskusję typu „powinieneś było to zrobić w ten sposób! Dlaczego ta klasa jest robienie tego, a nie tego...? Czy nie powinniśmy mieć wbudowanej klasy zamiast tego zestawu danych...". Zastanawiam się nad procesem pracy, być może z bardziej zdefiniowanymi obowiązkami i procesem, aby poprawić naszą wydajność. Jeśli masz doświadczenie, porady, najlepsze praktyki lub cokolwiek, czym moglibyśmy się podzielić, będziemy bardzo wdzięczni! Wielkie dzięki za poświęcony czas!


title: Czy osoba świeżo po studiach może napisać w CV wzorce projektowe w „obszarze zainteresowań”?

text: Interesuję się wzorami projektowymi. Dużo o nich czytam. Specjalnie od HEAD FIRST. Czy mogę pisać o wzorcach projektowych w swoim CV? Jestem świeższy. Będzie siedzieć na stanowiskach na terenie kampusu. Chociaż myślę, że zrobiłoby to wrażenie na rozmówcy, gdybym był w stanie obronić jego pytania, ale z drugiej strony myślę, że mogą być trzy punkty, o które się martwię: 1. Może zadać zbyt głębokie pytania, aby pokazać mi, że napisałem zły punkt. 2. Może nie wiedzieć o wzorcach projektowych. 3. Poza tym może poprosić o wzorce projektowe, których nie ma w Head First. 4. Odbija się od wzorców projektowych J2EE, których teraz boję się studiować. W każdym razie, o co proszę. czy osoby, które przyjeżdżają na staże w kampusie na rozmowy kwalifikacyjne, mają jakąkolwiek wiedzę na temat wzorców projektowych? Jeśli tak, to ile. Trochę się boję umieścić to w moim CV.


title: Zasady projektowania - zgodność danych / logika biznesowa w warstwie dostępu do danych?

text: Pracuję nad małym projektem webservices (java, axis2..). Istnieje wiele istniejącego kodu, kod jest podzielony na wiele warstw, od pierwszej warstwy, w której interpretowane jest żądanie, do kilku warstw, aż do warstwy dao. W warstwie dao widzę trochę kodu weryfikacyjnego przeplatanego w kilku miejscach. Projekt zawiera tabele, które mają wiele unikalnych kolumn, więc użytkownik może wprowadzić pojedynczą kolumnę lub kombinację kolumn. Walidacja w warstwie dao polega na sprawdzeniu, czy taka kombinacja istnieje, jeśli nie, rzuceniu wyjątku. Powiedziano mi, że tego rodzaju kontrole są bardziej związane ze schematem i dlatego muszą znajdować się w warstwie dao. Interfejs dao ma metody takie jak „checkIfThisExists/checkComboExists”, czy byłby to „właściwy” projekt? Zawsze myślałem, że zadaniem dao powinno być tylko wysyłanie i odbieranie danych, bardziej jak pobieranie i ustawianie.


title: Wspólne kodowanie opcji czatu

text: Cześć chłopaki : Czy istnieją strony internetowe do wspólnego kodowania ? Mam projekt na githubie z 5 programistami, w różnych obszarach - potrzebujemy miejsca, w którym wszyscy moglibyśmy się "hangoutować". * W tej chwili używamy skype grupowego, ale skype jest przeznaczony bardziej do komunikacji rodzinnej/społecznej i nie działa na Linuksie. * IRC jest w porządku, ale jest trochę trudny w użyciu dla nowicjuszy. * interfejs taki jak yammer, twitter, facebook byłby idealny, ale chcielibyśmy, aby działał w czasie rzeczywistym (nie wymaga przeładowania strony itp.)


title: Jak sprawić, by zespół, z którym współpracuję, komunikował się synchronicznie?

text: Dobra, więc pracuję w zespole 4 osób. Jesteśmy rozproszeni po całym kraju, a kiedy się komunikujemy, odbywa się to za pośrednictwem poczty elektronicznej lub naszego narzędzia do śledzenia problemów. Przez większość czasu jest to w porządku, ale wydaje mi się, że spędzam dużo czasu czekając, aż ludzie odpowiedzą na moje e-maile/komentarze dotyczące biletów. To dla mnie prawdziwy spadek produktywności, ponieważ w ciągu około 5 minut potrzebnych do uzyskania odpowiedzi zwykle zaczynam robić coś innego. Chciałbym zacząć używać jakiejś synchronicznej (tj. natychmiastowej) formy przesyłania wiadomości, abyśmy mogli szybciej się komunikować. Myślałem, że mógłbym założyć prywatny kanał IRC, ale nie znam tajników hostingu tego i nie jestem pewien, czy mógłbym go sprzedać niektórym osobom z zespołu. Podoba mi się również pomysł, aby móc przekazać _status_ wszystkim innym — pokazać, że jesteś dostępny, będąc na kanale, a następnie ustawić statusy (np. „pracuję nad problemem x” lub „zjesz obiad” na kanale) . Czy są jakieś bezkosztowe lub tanie opcje (niektóre koszty czasowe są w porządku, ale nie pieniężne), które pozwolą nam natychmiast komunikować się jako zespół, tak jak pozwala na to kanał IRC? Niektóre priorytety: * Wszyscy musimy być w stanie rozmawiać w tym samym czasie lub w razie potrzeby przesyłać sobie nawzajem wiadomości * Prywatność jest oczywiście ważna * Musi być stosunkowo łatwa do skonfigurowania lub nie zostanie przyjęta * Ma być tanim Ponadto masz ogólne przemyślenia na temat natychmiastowej komunikacji? Interesuje mnie wszelkie wsparcie dla mojej teorii, jak również wszelka krytyka.


title: Projekt schematu: Potrzebne porady

text: Mam rozproszony system gromadzenia danych, w którym mam pierwszą warstwę jako regionalne Bazy danych, w których wszystkie zebrane dane są początkowo przechowywane i główną bazę danych, w której wszystkie dane są konsolidowane, co myślisz o projektowaniu schematu tej sytuacji, ważne jest również, że mogę mają nakładające się identyfikatory, a tabele słownikowe są współdzielone przez wszystkie regionalne bazy danych, a także w przyszłości może być konieczne dodanie nowych regionalnych baz danych. Nie jestem pewien, jak zacząć od projektowania schematu dla tej sytuacji i chciałbym porozmawiać z SO Community?


title: Deklarowanie funkcji jako ostatecznej... z wyjątkiem sytuacji, gdy to ja wyprowadzam

text: Mam klasę, w której chcę uniemożliwić innym programistom nadpisywanie jednej z jej metod, ponieważ wymaga to specjalnej wiedzy na temat wewnętrznego działania klasy. Ponieważ osobiście wiem, jak działa klasa, chciałbym móc zrobić wyjątek i faktycznie zastąpić funkcję w jednej klasie pochodnej. Czy jest to powszechny problem, dla którego istnieje standardowe rozwiązanie, czy fakt, że czuję, że muszę zrobić wyjątek, oznacza, że powinienem przemyśleć swoje podejście? Edycja: nie wspomniałem o językach, ponieważ szukałem ogólnej odpowiedzi, ale ponieważ o to poproszono, pojawiło się to za pomocą PHP.


title: Obiekt typu zmiennej

text: Czy istnieje język o konstrukcji podobnej do poniższej? var_type(TYPE_1, TYPE_2,..., TYPE_N) obj; a teraz możliwe jest: TYPE_17 staticTypeVariable17; obj = staticTypeVariable17; TYPE_3 staticTypeVariable3; obj = staticTypeVariable3; bez `obj` będącego wskaźnikiem do jakiejś klasy bazowej i bez potrzeby rzutowania, jeśli używane typy pochodzą z predefiniowanego zestawu. Więc w zasadzie obiekt, który może przełączać swój typ wśród predefiniowanego zestawu typów.


title: Jak są wywoływane funkcje przy przekazywaniu ++

text: Nie rozumiem, co jest przekazywane do funkcji f(), kiedy wywołuję to w ten sposób. main() { void f(int,int); int i=10; f(i,i++); } void f(int i,int j) { printf("%d %d",i,j); } daje mi 11 10. Czy ktoś może wyjaśnić, dlaczego jest 11?


title: Stabilność kariery czy rozwój umiejętności technicznych?

text: Przez ostatnie 3 lata pracowałem jako samotny programista .NET w dużej nietechnologicznej firmie produkcyjnej. Warunki pracy i wynagrodzenie są świetne, a to bardzo stabilna pozycja, zwłaszcza, że jest to moja pierwsza pełnoprawna praca rozwojowa. W mojej grupie jest Kierownik IT, Inżynier Sieci IT, pracownicy Help Desku i ja. Problem, z którym się zmagam, polega na tym, że ponieważ większość mojej pracy to szybkie projekty tworzenia aplikacji (proste aplikacje CRUD, wykresy internetowe i interfejsy baz danych), czuję, że moje umiejętności techniczne są w stagnacji, ponieważ tak naprawdę nie mogę nic zrobić jawnie złożony. Wiele razy jest to tylko odświeżenie czegoś, co już zrobiłem. Bardzo frustrujące jest czytanie i badanie frameworków i metodologii, które, choć świetne w przypadku większych projektów, stanowią przesadę dla potrzebnych tutaj rzeczy. A z rodziną, do której codziennie wraca się po 80 minutach dojazdów, wykorzystanie tego do osobistych projektów jest bardzo skomplikowane. Nie jestem pewien, jaką ścieżką podążać: jeśli zostanę, mam dużą stabilność pracy, ale prawdopodobnie przejdę do czegoś, czego tak naprawdę nie chcę (zostałem nieformalnie namaszczony, wbrew mojej woli, na kolejnego kierownika IT , ale to się nie stanie przez co najmniej 5 lat więcej), a jeśli odejdę, dostanę niepewność i znaczną obniżkę płac, ponieważ nie mam zestawu umiejętności potrzebnych w dedykowanych zespołach deweloperskich / projektach. Czuję się, jakbym był uwięziony w środowisku dużej firmy, tęskniąc za akcją i dynamiką mniejszych sklepów. Ktoś jeszcze w tej samej sytuacji? Jak udało Ci się pokonać lukę między Twoimi umiejętnościami a wymaganymi przez rynek? Zostałeś w Big Corp, czy przeniosłeś się do mniejszej firmy?


title: Jak radzisz sobie z bezpieczeństwem bazy danych z aplikacji desktopowej?

text: Przez około 10 lat pracowałem nad różnymi wewnętrznymi aplikacjami klienckimi na komputery stacjonarne z magazynami danych SQL Server. Rzadko zaczynałem te projekty - większość to praca przejęć. Jedną rzeczą, która wydawała się stała wszędzie, było to, że istniało jedno globalne konto użytkownika SQL Server, z którego korzystała ta aplikacja, które przyznawało jej uprawnienia do wspólnej bazy danych, i tak, w niektórych naiwnych sytuacjach używało konta użytkownika `sa`, które generalnie próbowałem naprawić, gdy to możliwe. Naprawdę nie można skutecznie ukryć tej nazwy użytkownika i hasła, których aplikacja używa do uzyskania dostępu do bazy danych. Zazwyczaj są one przechowywane w plikach `ini` lub `config`, ewentualnie zapiekane w samym pliku wykonywalnym. We wszystkich przypadkach są widoczne dla użytkownika, jeśli trochę kopią. W jednym przypadku faktycznie użyliśmy pliku `config`, ale go zaszyfrowaliśmy, ale oczywiście klucz szyfrujący musiał być przechowywany w pliku wykonywalnym (nie byliśmy naiwni w kwestii ograniczeń tego, ale skutecznie powstrzymało to ludzi przed grzebaniem w tym, kto byli na tyle sprytni, by zajrzeć do plików `config`). Wszystkie te systemy miały wbudowany system uwierzytelniania użytkowników, ale oczywiście wszystkie były zarządzane przez samą aplikację, co oznacza, że informacje o użytkowniku były przechowywane w bazie danych. Aplikacja ograniczała to, co możesz zrobić, w oparciu o twój poziom dostępu, ale jest to rodzaj dyskusji, jeśli możesz po prostu połączyć się z bazą danych i uruchamiać zapytania ad-hoc. Chciałbym wiedzieć, co robią inne systemy, aby obejść ten problem. Oto opcje, które znam: 1. Użyj mechanizmu zabezpieczeń SQL Server, aby zarządzać listą użytkowników i ról oraz sprawić, by aplikacja desktopowa dodawała i usuwała użytkowników za pomocą zapytań T-SQL. 2. Zamiast łączyć się bezpośrednio z bazą danych, stwórz jakąś usługę sieciową działającą na serwerze i umieść tam logikę uwierzytelniania. Spraw, aby każde żądanie było sprawdzane pod kątem bezpieczeństwa. Pierwsza opcja jest nieco brzydka, ponieważ oddzielasz użytkowników od bazy danych, więc użytkownicy nie są już jednostkami pierwszej klasy i nie możesz odwoływać się do nich za pomocą relacji klucza obcego itp. Druga wydaje się po prostu poważnym problemem z wydajnością, a dużo dodatkowej pracy, a ponadto nie można tak łatwo używać maperów ORM, takich jak NHibernate (chyba). Czy ktoś ma z tym doświadczenie? Najlepsze praktyki? **Edytuj** Zastanawiając się trochę, czy uwierzytelnianie SQL Server rzeczywiście rozwiąże ten problem? Na przykład, jeśli użytkownik musi mieć możliwość wstawiania i aktualizowania rekordów grafiku, aby móc edytować grafik, nie ma możliwości, aby serwer SQL uniemożliwił dostęp do innych wierszy w tabeli szczegółów grafiku, co oznacza, że można również czytać i zapisywać grafików _innych_ osób.


title: Jak szybka powinna być odpowiedź sieciowa?

text: Kilka razy słyszałem, że każde dodatkowe [number1] milisekund potrzebne do przetworzenia żądania internetowego i zwrócenia odpowiedzi spowoduje utratę [number2] procent użytkowników. Czy to tylko „konwencjonalna mądrość”, czy też były na ten temat aktualne badania? I czy stwierdzono, że istnieje dolna granica tego zjawiska, na przykład „[liczba 3] milisekund jest wystarczająco szybka, a dalsza poprawa nie przyniesie większej liczby użytkowników”?


title: Analiza intencji użytkowników

text: Zamierzam pracować nad jakimś projektem, który wykonałby rozpoznawanie działań użytkownika na podstawie tego, co robi w systemie. O ile rozumiem, są tutaj dwie główne części: Przechwytywanie działań użytkownika (powiedzmy ruch http w interakcji web/ui w grubym kliencie) analiza intencji użytkownika. Podczas gdy pierwsza część jest dość techniczna i dlatego łatwa do wdrożenia, druga jest związana ze sztuczną inteligencją i może mieć charakter akademicki. Zastanawiałem się więc, czy ktoś zna jakieś projekty zewnętrzne/akademickie, które wdrażałyby rzeczy 'action-recognition'?


title: Jak licencjonować cały pakiet bez zapisywania go w każdym pliku?

text: Czy istnieje sposób, aby licencja, której używam na pakiet oprogramowania typu open source, była ważna dla całej zawartości pakietu bez konieczności zapisywania jej w każdym pojedynczym pliku? Często widziałem plik `LICENSE`, ale czy ten plik (wraz z licencją) sprawia, że cała zawartość pakietu (tj. bieżący katalog i wszystkie podkatalogi) korzysta z tej licencji?


title: Kariera w systemach wbudowanych dla CS Major

text: Wkraczam w ostatnie kilka semestrów studiów CS i zamierzam rozpocząć karierę w Embedded Systems. Rozmawiając z wieloma ludźmi, wydaje mi się, że lepiej by mi było z dyplomem z inżynierii komputerowej, ale teraz jest trochę za późno. Zastanawiam się, co mogę zrobić, aby za około rok znaleźć zatrudnienie w pracy związanej z systemami wbudowanymi. Brałem udział w wielu kursach związanych z architekturą komputerową w ramach mojego stopnia naukowego i mam nadzieję dostosować moje zajęcia do systemów wbudowanych, ale może to nie być wykonalne. Nad jakimi solowymi projektami mógłbym pracować, aby podnieść moje kotlety? Mam Arduino Uno, ale z tego, co ludzie mi powiedzieli, praca z nim tak naprawdę się nie liczy. Czy mogę jakoś uzyskać do niego dostęp na niższym poziomie? Czy są dostępne książki, w których mogę samodzielnie się uczyć, aby dowiedzieć się więcej o systemach wbudowanych i podstawowej wiedzy, którą muszę znać? Czy jest jakiś inny tani zestaw sprzętowy, który mogę kupić do hackowania, który będzie lepszy niż Arduino? Zasadniczo, jak mam zagwarantować, że za około rok będę zdolnym do zatrudnienia inżynierem systemów wbudowanych na niższym poziomie, aby nie utknąć w nudnej pracy w Javie lub aplikacji internetowej?


title: Hudson lub Jenkins

text: Używamy Hudsona od dłuższego czasu i bardzo nam się podobało. Teraz wielu programistów Hudson „opuściło budynek”, aby stworzyć własny: Jenkins (co oznacza, że projekt został rozwidlony). Jako użytkownicy Hudson/Jenkins martwimy się teraz, czy powinniśmy wybrać oryginalnego „dużego i stabilnego” producenta Oracle, czy „małego i dynamicznego” nowicjusza Jenkinsa. **EDYTUJ** : Nasze zmartwienia wynikają głównie z faktu, że tak naprawdę nie słyszeliśmy o tym widelcu/splitu w żaden oficjalny sposób. Wygląda to jak akcja partyzancka, w tym porwanie logo i znaków towarowych (w końcu prawa autorskie muszą być w Oracle, nie? Nie jestem pewien). Tak więc brakuje nam tutaj profesjonalizmu, jak w dobrze zorganizowanym toku działań z udziałem informacji prasowych itp. Może po prostu tego przegapiliśmy... Jakie są dobre obiektywne powody, aby decydować się na którykolwiek projekt w przyszłości? Czy możemy odłożyć tę decyzję na później, czy to zbyt ryzykowne? Oto jedna opinia na ten temat: http://www.itworld.com/development/136173/more-conseas-surface-hudson-jenkins-split Dlaczego wybrałeś którąś z nich?


title: Trochę zdezorientowany Trac

text: Dowiaduję się o narzędziu do zarządzania projektami opartym na sieci Web typu open source Trac i jestem trochę zdezorientowany jego rolą w obszarze raportowania defektów vs śledzenia błędów. Dla tych, którzy nie są zaznajomieni z samym Trac, ma on system Ticketów, który jest narzędziem używanym do zgłaszania problemów, i możesz wybrać pomiędzy zgłoszeniem zadania, ulepszenia lub defektu. To ta ostatnia opcja, co do której jestem zdezorientowany. Odnoszę wrażenie, że Trac nie ma być narzędziem do śledzenia błędów, ale jeśli tak, to do czego służy pole defektów? Spojrzałem na sposób, w jaki zespół Traca używa własnego systemu i _wygląda_ na to, że publikują pewne rzeczy, które wydają się być błędami, ale w większości są to inne rodzaje problemów, co w rzeczywistości jeszcze bardziej zaciera rozróżnienie. Czy ktoś może mi wytłumaczyć, jak korzystać z opcji „wada”? Czy wada==błąd? Czy należy otwierać bilety na błędy?