title: Jak cenna dla mojej kariery jest praca na niezwykle prymitywnej platformie?

text: Pracuję dla firmy analogowej nad zastrzeżonym sekwencerem posiadającym kilka bajtów wolnej pamięci RAM (może 20 bajtów, nie kB, bajtów); może 500 bajtów alokowanych statycznie; 8 rejestrów, w tym PC; bez pośrednictwa (w C „wskaźnik”); bez stosu. 100% naszego kodu aplikacji piszemy w asemblerze, a 95% naszej działalności zależy od starszego kodu, co oznacza, że każdy nowy kod musi ładnie pasować do istniejącego kodu asemblera. Piszę kod asemblera i weryfikuję/debuguję kod napisany (i _nie_ testowany) przez moich przełożonych. W latach 70-tych sekwencer zostałby uznany za prymitywny. Nie ma instrukcji `MOV`: aby przenieść `M` do `K`, należy napisać `CLX A; ORX M; STX K` co znacznie komplikuje rozwiązywanie zależności, a przynajmniej optymalizację. Wiele operacji działa tylko na określonych rejestrach: na przykład 32-bitowe przesunięcie w prawo używa `K` w górnym słowie i M w dolnym słowie. Ten sekwencer jest używany do aplikacji o bardzo niskim poborze mocy i ma program ROM. Chip jest sprzedawany za mniej niż 0,50 USD w niewyobrażalnie dużych ilościach. Mam nadzieję, że nie potrzebuję ci uzasadniać znajomości języka wyższego poziomu; jednak moje kierownictwo nie jest przekonane, że opracowanie go lub przeniesienie istniejącego kompilatora będzie „warte wysiłku”. Czuję się pewnie, że mógłbym napisać mały ewaluator Lisp do tworzenia kodu maszynowego, ale co by mi to dało? Czuję, że to co robię to ogromna strata czasu, pieniędzy, nie mówiąc już o moim własnym rozwoju zawodowym. Czy istnieje jakiś autorytatywny zasób, który mogę pokazać mojemu szefowi i jego szefowi, aby ich zrozumieli? Wszystko to wydaje mi się zdrowym rozsądkiem (po studiowaniu oprogramowania, moi przełożeni studiowali analog i nie potrafię napisać ani jednej linijki C) i bardzo trudno jest przekazać ideę, że „jeśli włożysz okrągły klocek do kwadratowa dziura, to nie będzie pasować” do kogoś, kto nie wie, co to jest blok, dziura, okrągła lub kwadratowa.


title: Projektowanie pomostu między warstwą REST a warstwą usług

text: Pracuję nad projektem i chciałbym wyeksponować niektóre usługi odpoczynku. Stosowane technologie to RestEasy, EJB i JPA/Hibernate. Zorganizowałem moją aplikację tak, aby istniała wyraźna granica między warstwą usługi a warstwą modelu. Typowa usługa, która pobiera dane z bazy danych, ma taki podpis: `getWhateverList(idForWhichTheListWillBeRetrieved, start)` \- bardzo prosty. To, co mam trudności z owinięciem głowy, to jak połączyć sztywność warstwy usługowej z elastycznością warstwy pozostałej. Powiedz na przykład, że chciałbym typową metodę GET produkującą operacje obsługi tablicy json, takie jak: * filtrowanie - użyj parametru zapytania, aby uzyskać, na przykład elementy, które mają właściwość typu date większą/niższą niż parametr, który podaję * sortowanie - rest api powinno obsługiwać asc lub desc * ograniczanie pól zwracanych z operacji GET Jak można by to zaprojektować?


title: Czy informatyka jest dziedziną „możliwą do rozwiązania”?

text: Być może jest to po prostu przesadnie futurystyczna wersja tematów „czy programowanie ma przyszłość”, ale te pytania ostatnio często mnie nurtują. Być może widziałeś tę przyszłą oś czasu lub podobne rzeczy, a jedną z przewidywań, jakie ona zawiera, jest to, że do roku 4000 informatyka będzie martwa jako nauka. To znaczy, że sprzęt osiągnie granice fizyki i wszystkie problemy algorytmów i oprogramowania zostaną rozwiązane. Czy to może się wydarzyć? Mogłem zobaczyć, jak teoretycznie fizyka może osiągnąć punkt końcowy, w którym znalazłeś wszystkie istniejące prawa naturalne. Ale zawsze uważałem, że informatyka jest pod pewnymi względami bardziej jak ekonomia, dziedzina decyzji i kompromisów. A może moglibyśmy kiedyś odkryć wszystkie algorytmy, a wtedy już tylko kwestią inżynierii oprogramowania będzie wybranie najbardziej odpowiedniego do użycia?


title: Obsługa błędów logowania z User Class

text: Mamy klasę User, która zajmuje się wszystkimi rzeczami związanymi z użytkownikami w ramach systemu zarządzania treścią. Jak można się spodziewać, klasa zawiera funkcję `login()`. Ta funkcja akceptuje trzy argumenty: `$username`, `$password` i `$remember` (ten ostatni ma domyślną wartość `true`). Moje pytanie brzmi: jak najlepiej poradzić sobie z błędami logowania, aby mogły zostać wyświetlone użytkownikowi? Używamy tutaj niestandardowego modelu MVC, więc mamy kontrolery i widoki, które muszą pozostać abstrakcyjne od samej klasy. Zidentyfikowałem następujące możliwe rozwiązania: 1. Zwróć liczby całkowite ze znakiem z funkcji `login()`, które można zinterpretować wewnątrz kontrolera. 2. Dodaj zmienną do obiektu `User` zawierającą komunikat o błędzie w postaci zwykłego tekstu 3. Wypisz błąd bezpośrednio z wywołania funkcji Punkt 3 jest sporny, ponieważ nie będziemy tego robić (sprzężenie wyjścia z klasą == zły). Punkt 2 wydaje się najbardziej logiczny, ale utrudni wielojęzyczność (funkcja, którą można dodać później). Na przykład możemy zrobić coś takiego: class User { public $loginError; public function login($username, $password, $remember = true) { if($password !== $ourStoredPassword) { $this->loginError = 'Hasło nie pasuje'; zwróć fałsz; } } } Myślę, że najlepszą opcją jest #1. Na przykład, możemy to zrobić wewnątrz klasy: class User { public function login($username, $password, $remember = true) { if($password !== $ourStoredPassword) { return -1; } } } Następnie wewnątrz naszego kontrolera po prostu spójrz na wartość zwracaną przez `login()` i zajmij się nią. Jakie są myśli ludzi? Czy istnieje lepszy sposób na rozwiązanie tego problemu?


title: Karty do talii i rzadkie pytania do wywiadu matrycowego

text: Właśnie miałem techniczny ekran telefonu ze start-upem. Oto pytania techniczne, które mi zadano... i moje odpowiedzi. **Co myślisz o tych odpowiedziach**? Zapraszam do publikowania lepszych odpowiedzi :-) **Pytanie 1** : jak reprezentujesz standardową talię 52 kart w (w zasadzie dowolnym języku)? Jak przetasowałbyś talię? **Answer** : użyj tablicy zawierającej strukturę lub klasę „Card”. Każda instancja karty ma jakiś unikalny identyfikator... albo jest to pozycja w tablicy, albo unikalna zmienna składowa w zakresie [0, 51]. Potasuj karty, przechodząc przez tablicę raz od indeksu zero do indeksu 51. Losowo zamień kartę z „inną kartą” (nie pamiętam dokładnie, jak działa ten algorytm tasowania). Uważaj na użycie _tego samego_ prawdopodobieństwa dla każdej karty... to jest problem w tym algorytmie. Wspomniałem, że algorytm pochodzi z Perły Programowania. **Pytanie 2** : jak przedstawić dużą macierz rzadką? macierz może być bardzo duża... jak 1000x1000... ale tylko stosunkowo niewielka liczba (~20) wpisów jest niezerowa. **Answer** : skondensuj tablicę do listy niezerowych wpisów. dla danego wpisu (i,j) w tablicy... "mapuj" (i,j) na pojedynczą liczbę całkowitą k... następnie użyj k jako klucza do słownika lub tablicy haszującej. Dla mapy rzadkiej tablicy 1000x1000 (i,j) do k używając czegoś takiego jak f(i, j) = i + j * 1001. 1001 to tylko jeden plus maksimum wszystkich i oraz j. Nie pamiętam dokładnie, jak działa to mapowanie... ale ankieter wpadł na pomysł (chyba). **Czy to dobre odpowiedzi**? Zastanawiam się, ponieważ po tym, jak skończyłem drugie pytanie, ankieter powiedział przerażające „no cóż, to wszystkie pytania, jakie mam na razie”. Twoje zdrowie!


title: Jakie jest preferowane narzędzie/podejście do umieszczania bazy danych SQL Server pod kontrolą źródła?

text: Oceniłem narzędzie RedGate SQL Source Control (http://www.red-gate.com/products/sql-development/sql-source-control/) i uważam, że Team Foundation Server 2010 oferuje na to sposób również (jak poruszono tutaj http://blog.discountasp.net/using-team-foundation-server-2010-source-control-from-sql-server-management-studio/). Czy istnieją alternatywy, czy też jedna z nich jest uważana za rozwiązanie preferowane/standardowe?


title: Czy architektura projektu ma silny związek z używanymi bibliotekami?

text: Programiści, jeśli chodzi o popularne wzorce w aplikacjach korporacyjnych, głoszą, że należy kodować przeciwko interfejsom, aby usunąć silne powiązania między komponentami; zrobienie tego pomoże w zmianie konkretnych typów, jednocześnie minimalizując zmiany w innych obszarach aplikacji. Podstawowym założeniem jest to, że interfejsy dotyczą abstrakcji. W prawdziwym życiu jest to prawie niemożliwe. Posłużmy się przykładem: Załóżmy, że obecnie używasz w swojej aplikacji struktury ORM, którą wyabstrahowałeś, stosując wzorzec repozytorium. Czy naprawdę możesz bezproblemowo zmienić framework ORM? interfejs publiczny IRepository<T> { T GetById(int id); void Add(T encja); void Usuń (jednostka T); void Update (jednostka T); IQueryable<T> Query(Expression<Func<T, bool>> filtr); } Teoretycznie ta implementacja może być zastosowana do reszty aplikacji, ale pozostaje wiele pytań dotyczących faktycznego zastosowania tego wzorca: 1. W jaki sposób ten wzorzec chroni mnie przed wewnętrznym procesem bibliotek? 2. Jak abstrakcja radzi sobie ze zmiennością wyjątków rzucanych przez każdą bibliotekę? 3. Jeśli wybrałem ORM, który zapewnia wewnętrzny mechanizm buforowania, a później zdecyduję się przełączyć na alternatywny ORM bez takiej obsługi, jak wzorzec sobie z tym poradzi? Tak więc uważam, że architektura projektu ma silny wpływ na używane biblioteki. Czy jest w tym coś złego? Czy za dużo zakładam z tego wzorca?


title: Czy kiedykolwiek musiałeś poświęcić uczciwość programisty dla zadowolenia klienta?

text: Chodzi mi o to, czy kiedykolwiek niechętnie przyjęliście mniej niż idealne rozwiązanie, ponieważ kierownictwo powiedziało wam, że „klient ma zawsze rację”? Najpierw pójdę z moim. Kilka lat temu wraz z moim zespołem opracowaliśmy witrynę zawierającą quizy. Użytkownicy tworzą quizy, odpowiadają na nie, oceniają / tagują / głosują / udostępniają itp. Jeśli quiz zawiera więcej niż 10 pytań, interfejs użytkownika wyświetla quiz w segmentach. Quiz składający się z 30 pytań zostanie podzielony na 3 segmenty. Użyliśmy manipulacji JavaScript i DOM, aby umożliwić użytkownikowi łatwe przełączanie się między segmentami, bez konieczności odświeżania całej strony. Klient, duża amerykańska korporacja, do której należała strona, nie był z tego zadowolony. Nie dbali o wrażenia użytkownika, chcieli po prostu uzyskać wysoką liczbę odwiedzin na stronie. Chcieli więc, aby po naciśnięciu przycisku „Dalej” lub „Poprzednia” cała strona była odświeżana. Musieliśmy zastąpić rozwiązanie JavaScript bardzo brzydkim hackiem obejmującym PHP i Smarty. Rezultatem był powolny interfejs użytkownika, który irytował testerów H. W ramach tego samego projektu zespół zbadał najlepsze praktyki poprawy wydajności front-endu i ciężko pracował nad ich wdrożeniem. Ale wszystkie te wysiłki poszły na marne, gdy klient wstrzyknął na strony swoje ciężkie reklamy oparte na Flashu, co sprawiło, że ładowały się one naprawdę wolno. Wiem, że to nie jest obiektywne pytanie i bardzo prawdopodobne, że zostanie zamknięte, ale chciałbym usłyszeć od członków społeczności, czy kiedykolwiek mieli takie doświadczenia.


title: Skalowanie tabel z partycjami czy z osobnymi bazami danych?

text: Załóżmy, że mam stół (nazwijmy go `BigTable`), który może wyświetlać **5 000 000 INSERTÓW dziennie** (z taką samą liczbą SELECTów). Każdy wstawiony wiersz ma około 50 kb. Te codzienne INSERT są dzielone równo na 5 klientów (tabela ma FK o nazwie `ClientID`). Nigdy nie ma potrzeby SELECT lub JOIN danych na wielu klientach. Martwię się o wydajność bazy danych w miarę wzrostu tej tabeli, więc wymyśliłem trzy rozwiązania. **ROZWIĄZANIE 1:** * Partycja `BigTable` według `ClientID` * Przechowuj każdą partycję na osobnym dysku twardym na serwerze (przy użyciu magazynu blogów Azure). * Podziel wszystkie dane, które mają 1 miesiąc (dane archiwalne, które nadal wymagają odpytywania) na inny zestaw partycji READONLY. Zasadniczo oznacza to następujące partycje na ich własnych urządzeniach pamięci masowej: * Podstawowe (wszystkie dane z wyjątkiem `BigTable`) * `BigTable` KlientaA (5 000 000 wierszy dziennie / 5 klientów x 30 dni = 30 000 000 wierszy) * `BigTable` KlientaB (30 000 000 wierszy) ) * „BigTable” ClientC (30 000 000 wierszy) * „BigTable” ClientD (30 000 000 wierszy) * „BigTable” ClientE (30 000 000 wierszy) * archiwum „BigTable” ClientA * archiwum „BigTable” ClientB * archiwum „BigTable” ClientC * „BigTable” ClientD ` archiwum * Archiwum `BigTable` ClientE Liczba wierszy w tabelach archiwum wyniesie (5 000 000) x (wiek DB w dniach) - (30 000 000). To wciąż ogromna tabela, ale posłuży tylko do sporządzenia nieparzystego raportu. SQL Server będzie hostowany na 14 GB, 8-rdzeniowej maszynie wirtualnej platformy Azure. **ROZWIĄZANIE 2:** Inną opcją jest hostowanie oddzielnych baz danych dla każdego klienta. Oznacza to, że każdy będzie miał własną, dedykowaną maszynę SQL Server. Partycjonowanie nadal będzie miało miejsce w przypadku danych archiwalnych. Ta opcja nie jest optymalna ze względu na fizyczną separację danych. Konieczność zarządzania aktualizacjami wielu baz danych może być bardzo problematyczna. Posiadanie oddzielnych połączeń z bazą danych dla każdego klienta będzie również brane pod uwagę przez programistów. Czy ktoś może doradzić te opcje? **ROZWIĄZANIE 3:** Archiwizuj dane na szybszej platformie bazodanowej. Niewiele o tym wiem, ale może baza danych NoSQL poradzi sobie z miliardami rekordów znacznie lepiej niż SQL Server?


title: Jaka jest zasada najmniejszego zdziwienia?

text: Co w programowaniu nazywa się zasadą najmniejszego zdziwienia? Jak ta koncepcja ma się do projektowania dobrych API? Czy jest to coś, co ma zastosowanie tylko do programowania obiektowego, czy przenika również inne techniki programowania? Czy ma to związek z zasadą „zrób jedną rzecz w swojej metodzie i rób to dobrze”?


title: Struktury danych bazy danych dla RESTful api

text: Tworzę RESTful API. Mam problem z wyborem najlepszego sposobu zaprojektowania tabel bazy danych wokół moich zasobów. Początkowo myślałem, że dobrym rozwiązaniem będzie tabela na zasób, ale teraz martwię się, że spowoduje to wykładniczo większe tabele, im dalej w dół łańcucha zasobów. Na przykład wyobraź sobie, że mam trzy zasoby - użytkowników, klientów, sprzedaż. Użytkownicy są subskrybentami mojego API, klienci to klienci użytkowników, a sprzedaż to zakupy dokonywane przez każdego klienta na konto użytkownika. Dostęp do zasobu sprzedaży jest następujący: GET /users/{userID}/clients/{clientID}/sales/{salesID} Jeśli więc jest 10 użytkowników, każdy z 10 klientami, a na każdego klienta przypada 10 sprzedaży, rozmiar tabeli rośnie, im dalej w dół łańcucha zasobów. Jestem całkiem pewien, że SQL poradzi sobie z dużymi tabelami, ale nie jestem pewien, jak spowolni to odczyt i zapis. Powyższy przykład może tego nie ilustruje, ale moje api będzie mieć coraz więcej zapisów i odczytów, im dalej w dół łańcucha zasobów. Dlatego mam scenariusz, w którym największe tabele w mojej bazie danych będą odczytywane i zapisywane więcej razy niż mniejsze tabele. Konieczne będzie również łączenie tabel przed uruchomieniem zapytań. Powodem jest to, że pozwalam każdemu użytkownikowi mieć klienta o tej samej nazwie. Aby uniknąć uzyskania błędnych danych klienta, tabele użytkowników i tabele klientów są połączone za pomocą {userID}. Dotyczy to również sprzedaży. Czy dołączanie do dużych tabel oraz uruchamianie odczytów i zapisów jeszcze bardziej spowolni działanie?


title: Czy koder typu „wytnij i wklej” kiedykolwiek przejdzie rozmowę kwalifikacyjną?

text: Jako długoletni programista wycinania i wklejania nigdy nie zapisywałem w pamięci zbyt wiele składni języka. Co gorsza, teraz używam Google do rozwiązywania wielu problemów z kodowaniem, które są typowo używane podczas rozmów kwalifikacyjnych. To znacznie zwiększyło moją produktywność, jakość wyniku końcowego i powstrzymało mnie od powtarzania tych samych błędów w całym moim kodzie. Oznacza to jednak, że właściwie nie pamiętam szczegółów rozwiązania. Z jakiegoś powodu na rozmowie o pracę „poszukałbym tego w google” nie wydaje się być właściwą odpowiedzią. Czy lepiej byłoby, gdybym podczas wywiadu nie skomentował mojego stylu kodowania i po prostu wyciągnął iPada i wyprodukował rozwiązanie?


title: Czy jest jakieś oprogramowanie do zarządzania projektem XP?

text: Zastanawiałem się, czy jest jakieś oprogramowanie do zarządzania projektem XP. Zaczynam projekt szkolny i chcę stosować tę metodologię, ale nie mamy gdzie pracować. Każdy pracuje w domu (w parach), dlatego nie umiem podążać za wzorami otoczenia XP. Czy ktoś zna jakieś oprogramowanie do zarządzania tym?


title: Czy przetwarzanie w chmurze może zastąpić architekturę korporacyjną?

text: Czy przetwarzanie w chmurze jest wystarczająco dojrzałe, aby złagodzić niektóre problemy związane z utrzymywaniem infrastruktury IT na miejscu? Jeśli tak, jakie są niektóre wady jego przyjęcia? Czy bezpieczeństwo i prywatność są dużym problemem?


title: Przenoszę swoją aplikację z iOS na Androida: co muszę wiedzieć?

text: Jakich pułapek powinienem unikać? * Jakie paradygmaty języka Java są niezrozumiałe dla programistów Objective-C? Nauczyłem się programować w Javie, ale od lat pracowałem tylko w Objective-C. * Czym różnią się wzorce projektowe w systemach Android i iOS? * Jeśli dokonałeś przejścia samodzielnie, które elementy Androida zdezorientowały Cię lub zajęło Ci więcej czasu na naukę niż powinno? * Czy Eclipse jest najlepszym IDE OS X dla Androida? Dla przypomnienia, moja aplikacja jest bardzo silnie powiązana z UIKit i Foundation, więc słowo „przenoszenie” może być mylące; Właściwie napiszę go całkowicie na Androida. Brak ponownego wykorzystania kodu. Robię to również, aby nauczyć się Androida, więc wolę zawieść na porcie i nauczyć się Androida niż iść na skróty. * * * Jako trochę tła, to pytanie zostało wywołane przez typy pytań, które widzę na Stackoverflow. Często można powiedzieć, jakie było czyjeś pochodzenie (C# lub Java), jakie głupie błędy popełniają, gdy próbują napisać Obj-C. Chciałbym uniknąć tego rodzaju błędów, które sprawiają, że programiści Java przewracają oczami i mówią: „Deweloperzy Silly Objective-C, czy nigdy się nie nauczą?”


title: Czy to niezwykłe, że mała firma (15 programistów) nie używa zarządzanej kontroli źródła/wersji?

text: To naprawdę nie jest pytanie techniczne, ale jest tu kilka innych pytań dotyczących kontroli źródła i najlepszych praktyk. Firma, dla której pracuję (która pozostanie anonimowa) używa udziału sieciowego do hostowania swojego kodu źródłowego i wydanego kodu. Odpowiedzialność za ręczne przeniesienie kodu źródłowego do odpowiedniego folderu jest obowiązkiem programisty lub menedżera, w zależności od tego, czy został wydany i jakiej jest wersji, i tak dalej. Mamy różne arkusze kalkulacyjne, w których zapisujemy nazwy i wersje plików oraz to, co zostało zmienione, a niektóre zespoły umieszczają również szczegóły różnych wersji na górze każdego pliku. Wydaje się, że każdy zespół (2-3 zespoły) robi to inaczej w firmie. Jak możesz sobie wyobrazić, jest to zorganizowany bałagan – zorganizowany, ponieważ „właściwi ludzie” wiedzą, gdzie są ich rzeczy, ale bałagan, ponieważ wszystko jest inne i polega na tym, że ludzie pamiętają, co robić w dowolnym momencie. Jedną dobrą rzeczą jest to, że wszystko jest tworzone co noc i przechowywane przez czas nieokreślony, więc jeśli popełnisz błędy, migawki można odzyskać. Przez jakiś czas próbowałem naciskać na jakiś rodzaj zarządzanej kontroli źródła, ale nie mogę uzyskać wystarczającego wsparcia w firmie. Moje główne argumenty to: * Obecnie jesteśmy podatni; w dowolnym momencie ktoś może zapomnieć o wykonaniu jednej z wielu czynności związanych z wydaniem, które musimy wykonać, co może oznaczać, że całe wersje nie są prawidłowo przechowywane. W razie potrzeby złożenie jednej wersji może zająć godziny, a nawet dni. * Opracowujemy nowe funkcje wraz z poprawkami błędów i często musimy opóźniać wydanie jednej lub drugiej, ponieważ niektóre prace nie zostały jeszcze zakończone. Musimy również zmusić klientów do korzystania z wersji, które zawierają nowe funkcje, nawet jeśli chcą tylko naprawić błąd, ponieważ tak naprawdę istnieje tylko jedna wersja, nad którą wszyscy pracujemy * Mamy problemy z programem Visual Studio, ponieważ wielu programistów używa tego samego projekty w tym samym czasie (nie te same pliki, ale to wciąż powoduje problemy) * Jest tylko 15 programistów, ale wszyscy robimy coś inaczej; czy nie byłoby lepiej mieć standardowe podejście obejmujące całą firmę, którego wszyscy musimy przestrzegać? Moje pytania to: 1. Czy to normalne, że grupa tej wielkości nie ma kontroli źródła? 2. Do tej pory podano mi tylko niejasne powody, dla których nie mam kontroli źródeł - jakie powody _mogą_ być ważne dla **nie** implementacji kontroli źródeł, biorąc pod uwagę powyższe informacje? 3. Czy są jeszcze jakieś powody **dla** kontroli źródeł, które mógłbym dodać do mojego arsenału? Proszę głównie o wyczucie, dlaczego mam tak duży opór, więc proszę o szczerą odpowiedź. Udzielę odpowiedzi osobie, która moim zdaniem przyjęła najbardziej wyważone podejście i odpowiedziała na wszystkie trzy pytania. Z góry dziękuję


title: Programowanie systemowe i projektowanie obiektowe – na co zwrócić uwagę

text: W następnym semestrze (rozpoczyna się za niecałe 5 tygodni), równolegle uczę Programowania Systemowego i OOD. Najwyraźniej SP skupia się na pracy w C na Linuksie, a ja mam tylko doświadczenie w Javie i Pythonie, więc trochę się tym denerwuję. Dla tych z was, którzy zrobili to na uniwersytecie, na co powinienem zwrócić uwagę? Zabrałem się już za organizację komputera, która zawierała omówienie montażu. Z wyjątkiem realizacji pętli w montażu, wahałem się od B+ do A- w projektach montażowych. Obwody budowlane to jednak inna historia.


title: Jawne pisanie domyślnego pustego konstruktora

text: Czy ma sens pisanie domyślnego konstruktora, gdy nie ma on argumentów, jest pusty i nie ma innych konstruktorów? Jedyną korzyścią, o jakiej mogę pomyśleć, jest zmniejszenie ryzyka zapomnienia o dodaniu domyślnego konstruktora podczas tworzenia innego. Ale ten błąd i tak pojawiłby się, gdyby faktycznie używany był domyślny konstruktor (przynajmniej jeśli klasa jest „wewnętrzna”, a nie w bibliotece), a jeśli nie jest używany, można go pominąć (yagni). Jakie może to przynieść korzyści?


title: Jak reagujesz na nie-programistów z pomysłami „The Next Big Thing”?

text: Ostatnio i dość często przychodzą ludzie bez doświadczenia programistycznego i mówią, że mają ten świetny pomysł, który może być kolejną wielką rzeczą i że sam pomysł jest wart fortuny. Potem, gdy wiedzą, że jestem programistą, pytają mnie, czy jestem w stanie „zakodować” to dla nich, czy znaleźć kogoś, kto zrobi to za bezcen. Sądząc po entuzjazmie, to tak, jakby byli pijani swoim pomysłem i że to samo w sobie jest najważniejsze, ale po prostu potrzebują programisty. Moja odpowiedź na nie, w zależności od mojego nastroju i ogólnego nastawienia do tego, co robimy, jest czymś w rodzaju: „Posiadanie sedna pomysłu to jedno. Rozwijanie go do tego stopnia, że staje się platformą, która zmienia świat w którym żyje, to inna sprawa, a Ty będziesz skłonny zapłacić proporcjonalnie do tego, jak duży uważasz, że Twój pomysł jest wart”. Czy zwrócili się do Ciebie przedsiębiorcy tego typu (bez wiedzy technicznej/deweloperskiej) z taką propozycją i jak na nią reagujesz?


title: Jakie są zalety dynamicznego wiązania metody z instancją klasy?

text: Natknąłem się na klienta API Instagrama napisanego w Pythonie. W swojej klasie **InstagramAPI** wiążą metody z funkcją w **bind.py**. Po wywołaniu funkcja zwraca instancję klasy **InstagramAPIMethod** i wykonuje wywołanie żądania. 1. Jakie są zalety robienia tego w ten sposób? (nad bezpośrednim tworzeniem wystąpień **InstagramAPIMethod** w **InstagramAPI** )? 2. Co się stanie, jeśli metody w **InstagramAPI** będą wywoływane wielokrotnie? Czy przy każdym wywołaniu utworzy nową instancję? Zauważ, że jedyne zalety, o których pomyślałem, to (prawdopodobnie nie jestem na dobrej drodze): * Klasa nie powinna/nie obchodzić się, co to jest klasa implementująca. * Jeśli dana metoda nie zostanie wywołana, nigdy nie utworzymy instancji.


title: Jak powinienem określić stawki za pisanie oprogramowania na zamówienie?

text: W przypadku niestandardowego oprogramowania, którego opracowanie prawdopodobnie potrwa rok lub dłużej, w jaki sposób mam określić, jakie opłaty będą pobierane jako konsultant? Trudno mi wymyślić numer, a wyszukiwania w Internecie podają bardzo różne liczby (od 55 USD/godz. do 300 USD/godz.). Nie chcę strzelać zbyt nisko, bo zajmie mi to dużo czasu (a odkładam edukację na ten projekt). Nie chcę też strzelać zbyt wysoko i mieć nieprzyjemnych spojrzeń i żądać usprawiedliwienia. FWIW Mieszkam w Kanadzie i mam około. 10 lat doświadczenia programistycznego. Przeczytałem zasadę "weź swoją pensję i podziel ją przez 1000", ale chodzi o to, że nie mam pensji. Obecnie po prostu wykonuję dość małe zadania programistyczne dla znajomego, który zakłada firmę marketingową, wyceniając każde zadanie dość arbitralnie. Nie wiem, ile zarobiłbym w ciągu roku, robiąc to, ale byłoby to niewiarygodnie niskie. Do moich obowiązków przy projekcie należałaby architektura, programowanie, baza danych, serwer i do pewnego stopnia UX. Będzie to publiczna usługa sieciowa, więc będę musiał również włożyć dużo wysiłku w bezpieczeństwo i skalowalność. Jakieś rady lub doświadczenie?


title: Portfolio budynków ASP.Net MVC

text: Pracuję nad budową przykładowej aplikacji do dodania do mojego portfolio (dla freelancerów). Pracuję nad budową strony internetowej Zakupy przy użyciu ASP.Net MVC. Moje pytanie brzmi - jakie są dobre cechy portfolio? Czy chodzi o pokazanie swoich umiejętności kodowania (poprzez opracowywanie wszystkiego od zera?) Czy korzystanie z koszyka zakupów typu open source, takiego jak nopcommerce, do szybkiego tworzenia czegoś, co działa i jest niezawodne?) Jestem zdezorientowany, co do kierunku. Uprzejmie prowadź mnie. Ponadto, jakie są dobre funkcje do dodania w mojej witrynie? Jak wspomniałem wcześniej, jest to aplikacja ASP.Net MVC. Z góry dziękuję.


title: Dlaczego reklamy inżynierów s/w zawsze mówią, że „oferują szybkie środowisko”?

text: Kto chce pracować w dynamicznym środowisku? Nie ja! Chcę cywilizowanego środowiska, w którym ludzie mają poczucie równowagi. W ten sposób wykonywana jest praca o wyższej jakości, a życie zawodowe nie jest pełne stresu i udręki.


title: Znajomy chce DARMOWEGO kodu CRUD

text: Mój 'przyjaciel' poprosił mnie o napisanie dla niego kompletnego systemu CRUD z AJAX za darmo. Co powinienem zrobić? Technicznie to dla mnie chleb i masło. Zastanawiam się jednak, czy należy mi za to zapłacić. To jest projekt komercyjny. Z drugiej strony myślałem, że nie obchodzi mnie, czy mi zapłaci. Rób co chcesz z moim kodem. Jeśli uczyni cię to bardziej inteligentnym i pomoże ci pisać lepszy kod, wtedy odczuję poczucie spełnienia... Czy ktoś może mi pomóc w podjęciu decyzji?


title: Jak mogę zdobyć numery wampirów?

text: Na zajęciach mamy spore kłopoty, jak możemy uzyskać pierwsze "n" liczby wampirów, pracujemy nad Oracle SQL, ale w moim przypadku jestem totalnie zagubiony, jak mogę wykonać zapytanie, aby je uzyskać. > „Liczba wampirów” to liczba o parzystej liczbie cyfr, a połowę cyfr (w dowolnej kolejności) można pomnożyć przez drugą połowę cyfr (w dowolnej kolejności), aby była równa tej liczbie. > > Na przykład, 1260 jest liczbą wampira, ponieważ można ją podzielić na pół, a > dwie połówki przestawione (21 i 60) można pomnożyć razem, aby uzyskać > 1260


title: O obiektach C# i możliwościach jakie ma

text: Jako początkujący programista zawsze zastanawiam się nad możliwościami c#. Wiem, że jest jeszcze wcześnie, aby to osądzić, ale wszystko, co chcę wiedzieć, to czy mogę robić skomplikowane rzeczy lub coś poza systemem operacyjnym Windows. 1. Myślę, że C# jest zastrzeżonym językiem (nie wiem, czy dobrze powiedziałem), co oznacza, że nie można tego robić poza Visual Studio lub Windows. 2. Nie możesz również stworzyć własnego kontrolera (nazywanego obiektem, prawda?), ponieważ jesteś zmuszony do korzystania z tych dostępnych w przyborniku oraz ich właściwości i metod. 3. Czy C# można używać z API OpenGL lub API DirectX 4. W końcu zawsze przeszkadza mi, kiedy myślę, że zaczynam robić rzeczy w Visual Studio, wiem, że to brzmi arogancko, ale czasami czuję, że nie lubię być zmuszany używać czegoś, nawet jeśli jest to pomocne, tak jak czuję (czy mam prawo czuć?), że chcę wszystko robić sam? Nie śmiej się, po prostu czuję, że to da mi lepsze zrozumienie. 5. Czy Visual C# jest podobny do używania MaxScript w 3ds max, ponieważ C# jest przeznaczony wyłącznie do wykonywania Windows oraz formularzy i komponentów, które są związane z Windows, a maxscript służy tylko do edycji i manipulacji 3D dla różnych rzeczy w oprogramowaniu. Jeśli jest to zbyt trudne dla początkującego, mam nadzieję, że nie odpowiesz na czwarte pytanie, ponieważ nie mam wystarczającej motywacji i chcę zatrzymać to, co mam. Uwaga: 1. Przepraszam za mój angielski, jestem samoukiem i nigdy nie używałem języka z native speakerami, więc spodziewaj się błędów. 2. Mam wiele pytań dotyczących wielu rzeczy, jaki jest dzienny współczynnik zadawania (liczba pytań), który nie przeszkadzałby administratorom strony i członkom tutaj. Dziękuję za Twój czas.


title: Jakie są konsekwencje zależności GPL?

text: Tworzę oprogramowanie dla mojej firmy i chciałbym korzystać z kilku bibliotek na licencji GPL. Jakie mogą być konsekwencje? Czy to oznacza, że kod opracowany powyżej tych zależności GPL będzie również objęty GPL? Czy mam obowiązek opublikować kod źródłowy tych produktów?


title: Kroki w tworzeniu złożonej aplikacji internetowej

text: Hej chłopaki, mam świetny pomysł na aplikację internetową, ale nie jestem pewien, jak ją rozwinąć. Wiem, że potrzebuję do tego zespołu ludzi, programistów i projektantów, ale od czego zacząć? W końcu wiem, że będę potrzebować wszystkich, ale dla startupu, którzy są ludźmi, których potrzebujesz w pierwszej kolejności i których możesz dodać w miarę upływu czasu. Po pierwsze, wiem dokładnie, co zrobi każda strona internetowa, wiem, jakie elementy powinna mieć każda strona i z grubsza wiem układ. Pomyślałem więc, że najlepiej wykorzystać mój czas, aby narysować szkielety każdej strony, a następnie użyć przypadków do opisania interakcji użytkownika. Więc myślę, że to wszystko, co mogę zrobić. Pierwszą grupą osób, które przyjdą mi do głowy, by zatrudnić, byłby projektant baz danych, ponieważ już wiem, jakich informacji potrzebujemy od użytkowników oraz w jaki sposób ich informacje i dane są zbierane od stron trzecich. Wiedzą też, jak będą wyświetlane dane z modeli szkieletowych i przypadków użycia. Wtedy pomyślałem, że będę musiał zatrudnić projektanta, aby zaprojektował układ strony i interfejs. Wtedy pomyślałem, że potrzebuję programisty, który wszystko ze sobą połączy. Gdybyś był małym startupem i mógłbyś zatrudnić tylko 1 osobę na raz, czy tak byś poszedł?


title: Na czym powinienem się skoncentrować, budując komputer deweloperski?

text: Dostałem budżet na budowę komputera stacjonarnego do tworzenia aplikacji i gier. Jakie komponenty powinienem wziąć pod uwagę przy wyborze części do komputera, a które zignorować lub poświęcić mniej uwagi? Dodatkowe informacje: * Budżet: 900 USD * Chęć używania przez dwóch użytkowników jednocześnie, za pośrednictwem dwóch monitorów i klawiatury/myszy


title: Co należy zrobić z kodem, którego żywotność dobiegła końca?

text: Kiedy projekt osiągnął kres życia i jest wycofywany, ponieważ technologia jest przestarzała, nowsza wersja programu została napisana od nowa lub nie rozwiązuje problemu, który należy rozwiązać, co należy zrobić z kod? Czy należy go usunąć, czy zachować na przyszłość? Dotyczy to również projektów, które ktoś mógłby rozwijać jako wykonawca, a firma, która ich potrzebowała, znika z rynku.


title: Jak pokazać dane użytkownikowi za pomocą PHP?

text: Zawsze staram się znaleźć nowe metody rozwoju. Zajrzałem więc do niektórych stron internetowych i przeanalizowałem ich sposoby prezentacji. 1. Zwracanie części strony przy użyciu AJAX Zwykle do zwracania wartości używam tablicy, na przykład: //GET Dane użytkownika $user_id = $_POST['user_id']; $user_details = $this->get_user($user_id); if ($user_details['status'] == true) { exit(json_encode(array('status'=>true, 'data'=>$user_details['data']))); } else { exit(json_encode(array('status'=>false, 'reason'=>'SomeReasons....'))); } Ale widzę, że niektóre strony zwracają `HTML'. Czy z jakiegoś powodu jest to lepsze? Również jaka jest najlepsza metoda do użycia: `AJAX` czy `iframe`?


title: Debugowanie PHP: czy XDebug się opłaca? Czy są jakieś alternatywy?

text: Jak debugować PHP? Tylko z wydrukami debugowania w swoim skrypcie? A może warto zainstalować XDebug? Czy istnieje możliwość lepszego debugowania?


title: Haszowanie hasła i wsparcie dla użytkownika

text: Niedawno przeszliśmy na lepszą strategię przechowywania haseł, wraz z nią wszystkie dobre rzeczy: * Hasła są przechowywane po przejściu przez bCrypt * Użytkownik otrzymuje link aktywacyjny podczas tworzenia konta, aby potwierdzić własność adresu * Zapomniałem hasła bez pytania bezpieczeństwa, na ich adres e-mail zostanie wysłany link. * Link wygasa po 24 godzinach, po czym trzeba będzie poprosić o nowy. * Jeśli konto jest tworzone przez nasz personel, wysyłany jest e-mail z losowym silnym hasłem. Po zalogowaniu się użytkownik musi zresetować go do czegoś, czego nie znamy, a jest to bCrypt'd. Teraz jest to zgodne z „najlepszą praktyką”, ale to znacznie zwiększyło liczbę próśb o wsparcie od zwykłych użytkowników, którzy nie rozumieją tego wszystkiego, po prostu chcą się zalogować. Często otrzymujemy prośby od użytkowników, którzy narzekają na: * Nieprawidłowe hasło (od tego, które muszą zresetować, często wklejają je ze spacją na końcu). Mówią nam, czego używają, ale nie mamy sposobu, aby powiedzieć im, jakie jest ich rzeczywiste hasło. * Mówiąc, że nie otrzymują wysłanego przez nas e-maila (aktywacja, reset itp.). Często tak nie jest, po wielu rozwiązywaniu problemów zwykle okazywało się, że popełnili literówkę w wiadomości e-mail, że nie sprawdzają właściwego konta e-mail lub po prostu trafił do folderu spamu. Oczywiście nie możemy tego dla nich wypróbować, ponieważ nie mamy hasła. Rejestrujemy nieudane próby, ale usuwamy również użyte hasło, ponieważ prawdopodobnie jest to hasło używane do innego konta, a nie chcieliśmy przechowywać w zwykłym pliku dziennika tekstowego. To nie pozostawia nam prawie nic, co mogłoby im pomóc, gdy zgłaszają problemy. Jestem ciekaw, jak większość ludzi radzi sobie z takimi problemami?


title: Wykorzystanie repozytorium między modelem EF a konsumentem kodu

text: W mojej bazie danych mam dane binarne, które w pewnym momencie będę musiał przekonwertować na bitmapę. Zastanawiałem się, czy warto użyć repozytorium i tam to zrobić. Mój konsument, który jest warstwą prezentacyjną, będzie korzystał z tego repozytorium. Na przykład: // To jest klasa, którą stworzyłem do modelowania elementu w takim stanie, w jakim jest. public class RealItem { ciąg publiczny Nazwa { get; ustawić; } publiczny obraz bitmapowy { get; ustawić; } } public abstract class BaseRepository { //używając Unity (http://unity.codeplex.com) do wstrzyknięcia zależności kontekstu encji. [Zależność] kontekst publiczny { get; ustawić; } } public calss ItemRepository : BaseRepository { public List<Items> Select() { IEnumerable<Items> items = from item in Context.Items select item; List<RealItem> lst = nowa List<RealItem>(); foreach(itm w pozycjach) { strumień MemoryStream = new MemoryStream(itm.Image); Obraz bitmapowy = (Bitmapa)Image.FromStream(strumień); RealItem ritem = nowy RealItem{ Name=Item.Name, Image=image }; lst.Dodaj(element); } return lst; } } Czy to poprawny sposób użycia wzorca repozytorium? Uczę się tego wzorca i widziałem wiele przykładów w Internecie, które używają repozytorium, ale kiedy spojrzałem na ich kod źródłowy... na przykład: public IQueryable<object> Select { return from q in base.Context select q; } jak widać żadne zachowanie nie jest dodawane do systemu przez ich podejście, więc byłem zdezorientowany, że może repozytorium to coś innego i wszystko pomyliłem. Na koniec powinny być dodatkowe korzyści z ich używania, prawda?


title: Podnieś zgłoszenie, aby wydać śledzenie z zewnętrznej aplikacji internetowej

text: Nie wiem, czy to właściwe miejsce, aby opublikować to pytanie, ale aby poprawić swoją produktywność, muszę zainstalować system śledzenia problemów typu open source, aby śledzić wszystkie błędy i informacje o zakończeniu. Istnieje wiele systemów open source, które to umożliwiają, ale szukam takiego, który mógłby być hostowany na serwerze PHP / MySql / Linux, a w szczególności umożliwiałby podniesienie biletu przez rest lub mydło z mojej aplikacji internetowej Spring (pomyślałem utworzyć prosty formularz w mojej aplikacji internetowej, aby przesłać zgłoszenie). Rzuciłem okiem na The Bug Genie, Mantis i WebIssues, a dwa pierwsze są bardzo trudne do wykorzystania przez użytkowników spoza IT. WebIssues wydaje się być bardzo łatwe również dla moich klientów, którzy muszą tylko zerknąć na status rozwiązania zgłoszenia. Jakieś wskazówki? * * * Uwaga Wolę zainstalować własny system, aby płacić tylko za jedną usługę hostingową.


title: Jakie są znane podejścia do tworzenia wykresów wyrażeń algebraicznych?

text: Planuję zbudować parser wyrażeń, który będzie używany do tworzenia wykresów funkcji algebraicznych (myśl TI-83) za pomocą JavaScript. Funkcje przyjmą postać `f(x)=` Oprócz typowych operatorów, takich jak: `+ - * / ^` Chciałbym również dodać obsługę funkcji wbudowanych, takich jak: `sin()`, `cos( )`, `log()` i `random()`. Przyglądałem się implementacji algorytmu Shunting Yard do analizowania wyrażeń, ale nie wygląda to na wydajne podejście do oceny funkcji z setkami lub tysiącami danych wejściowych. Jakie inne znane algorytmy istnieją do tego zadania?


title: Znajdowanie możliwych kombinacji przełączników x, gdy y jest prawdziwe

text: Pracuję nad algorytmem, aby znaleźć możliwe wypełnienia luk w tekście. Moja funkcja otrzyma jako dane wejściowe: (przykład) [false,"o",false,"b",false,"r"] reprezentujący ciąg "foobar" z wyciętymi niektórymi wartościami. Moja funkcja powinna znaleźć możliwości dla możliwych sposobów wypełnienia luk przy ustawionej maksymalnej liczbie znaków (i wypełnieniu co najmniej jednego pustego). więc biorąc pod uwagę maksymalnie 2, powinno zwrócić: [ [true,"o",false,"b",false,"r"], [false,"o",true,"b",false,"r" ], [fałsz,"o",fałsz,"b",prawda,"r"], [prawda,"o",prawda,"b",fałsz,"r"], [prawda,"o",fałsz ,"b",prawda,"r"], [fałsz,"o",prawda,"b",prawda,"r"] ] Czy ktoś może popchnąć mnie we właściwym kierunku? Aha, i planowałem przeprowadzić wyniki przez inną funkcję, aby je uporządkować, ale jeśli NIE mogę uzyskać wyników, w których między pustymi polami jest fałsz (tj. z powyższego, `[true,"o",false," b",prawda,"r"]`) byłby to ogromny bonus. To jest w środowisku javascript/jQuery


title: Rozwidlenie projektu open source: czy należy utworzyć nowy plik dziennika zmian? Czy należy ponownie uruchomić numer wersji?

text: Mam zamiar rozwidlić projekt open source. Czy poleciłbyś utworzyć nowy plik dziennika zmian, czy zaktualizować oryginalny? Czy rozsądne byłoby zwiększenie numeru wersji, czy lepiej go zresetować?


title: Jak mogę udowodnić w sklepie Google Chrome Web Store, że jestem programistą, a nie spamerem, aby móc publikować swoje rozszerzenia?

text: Mam kilka _rozszerzeń Chrome_ do opublikowania, ale kiedy loguję się na konto w sklepie Chrome Webstore, pojawia się komunikat: > Zanim opublikujesz swój pierwszy element, musisz uiścić jednorazową opłatę rejestracyjną w wysokości 5 USD > programisty. Opłatę tę pobieramy w celu weryfikacji > kont programisty i lepszej ochrony użytkowników przed nieuczciwą działalnością. Jak mówi, ta opłata ma na celu zweryfikowanie mojego konta. Mój problem polega na tym, że ze względu na sankcje USA na mój kraj, Google nie obsługuje u nas żadnych transakcji finansowych, więc **nie mam środków na zapłacenie tych 5$** , więc nie mogę publikować żadnych rozszerzeń :( Moje pytanie jest, w jaki inny sposób mogę zweryfikować moje konto? Każda pomoc byłaby mile widziana. **Edytuj** : Moje pytanie nie dotyczy obchodzenia prawa, chodzi o znalezienie legalnej drogi.I staram się rozwijać opensource rozszerzenia bez komercyjnego wykorzystania. **Nie chcę dokonywać płatności, wiem, że nie jest to możliwe dla Google.** Ale musi istnieć inny sposób weryfikacji.


title: Rails i Mongoid najlepszym sposobem na wdrożenie systemu udostępniania

text: Mam do modelowania **User** i **Board** w szynach używając mongoidu jako ODM. Każda tablica jest powiązana z użytkownikiem za pomocą klucza obcego **user_id**, a teraz chcę dodać możliwość dzielenia się tablicą z innymi użytkownikami. Po CRUD stworzyłbym nowy model o nazwie coś w rodzaju **Share** i jest to powiązany z nim kontroler z możliwością tworzenia/edycji/usuwania udziału, ale mam pewne wątpliwości: 1. Po pierwsze, gdzie zapisać informacje o **udziałach **? Myślę, że mogę utworzyć pole w kolekcji tablicy o nazwie **shared_with** zawierające tablicę identyfikatorów użytkowników. w MySQL utworzyłem nową tabelę z identyfikatorami tego, kto udostępnia, zasobem współdzielonym i użytkownikiem, z którym współdzielone są zasoby, ale nie sądzę, że jest to konieczne przy użyciu MongoDB. 2. Każdy użytkownik, któremu udostępniono tablicę, powinien mieć możliwość edycji tablicy (ale nie jej usuwania), więc tablica powinna mieć dwie relacje: jedną z właścicielem, a drugą z użytkownikami, którym tablica jest dzielona, prawda? 3. Aby uzyskać pozwolenie (właściciel powinien mieć możliwość usunięcia tablicy, ale użytkownicy, którym jest udostępniana nie powinni) czego użyć? Używam Devise do uwierzytelniania, ale myślę, że coś takiego jak CanCan pasowałoby lepiej. ale jak to wdrożyć? Co myślisz o tym w ten sposób? Masz jakieś problemy lub masz lepsze rozwiązania?


title: Niezmienna struktura danych dla danych szeregów czasowych

text: Zastanawiam się, jaka jest najlepsza struktura danych (do przechowywania danych na dysku) do przechowywania niezmiennych danych **szeregów czasowych** (99% danych jest naprawdę niezmiennych, 1% to metadane, które są oddzielone od niezmiennych danych ). Przyglądałem się drzewom scalającym o strukturze dziennika, w szczególności ze względu na to, że jest ono intensywnie używane przez Cassandrę i tym podobne.


title: Czy powinienem zagnieżdżać funkcje w językach, które mi to umożliwiają, czy raczej powinienem tego unikać?

text: W JavaScript, PL/SQL i niektórych innych językach funkcje można zagnieżdżać, tj. deklarować w ramach innej funkcji. Można to wykorzystać do podzielenia dużej funkcji na mniejsze części, ale zachowaj te części w kontekście większej funkcji. function doTooMuch() { function doSomething() { ... } function doSomethingElse() { ... } function doYetAnotherThing() { ... } // doTooMuch body doSomething(); Zrób coś innego(); ZróbJeszczeKolejną Rzecz(); } W niektórych przypadkach, gdy te mniejsze funkcje nie używają zmiennych lokalnych większej funkcji, można to łatwo zmienić na wersję, w której wszystkie funkcje są niezagnieżdżone. function doSomething() { ... } function doSomethingElse() { ... } function doYetAnotherThing() { ... } function doTooMuch() { doSomething(); Zrób coś innego(); ZróbJeszczeKolejną Rzecz(); } Zakładając, że te zagnieżdżone funkcje nie będą używane nigdzie indziej, czy lepiej trzymać je w kontekście funkcji large, czy jest to złe, ponieważ właśnie to sprawia, że funkcja large jest, no cóż, duża?


title: Szukasz porad dotyczących projektowania OO

text: Projektuję aplikację, która będzie używana do otwierania i zamykania zaworów w środowisku przemysłowym i myślałem o czymś prostym, takim jak:- public static void ValveController { public static void OpenValve(string valveName) { // Implementacja do otwarcia valve } public static void CloseValve(string nazwa_zaworu) { // Implementacja zamykania zaworu } } (Implementacja zapisze kilka bajtów danych do portu szeregowego w celu sterowania zaworem - "adres" wyprowadzony z nazwy zaworu i albo „1” lub „0”, aby otworzyć lub zamknąć zawór). Inny deweloper zapytał, czy zamiast tego powinniśmy stworzyć osobną klasę dla każdego fizycznego zaworu, których jest kilkadziesiąt. Zgadzam się, że fajniej byłoby napisać kod taki jak `PlasmaValve.Open()` zamiast `ValveController.OpenValve("plasma")`, ale czy to przesada? Zastanawiałem się również, jak najlepiej poradzić sobie z projektem, mając na uwadze kilka hipotetycznych przyszłych wymagań: 1. Jesteśmy proszeni o wsparcie nowego typu zaworu wymagającego różnych wartości do otwierania i zamykania (nie 0 i 1). 2. Jesteśmy proszeni o wsparcie zaworu, który można ustawić w dowolnej pozycji od 0 do 100, a nie po prostu „otwarty” lub „zamknięty”. Normalnie używałbym dziedziczenia do tego rodzaju rzeczy, ale ostatnio zacząłem zastanawiać się nad „składem ponad dziedziczeniem” i zastanawiam się, czy istnieje lepsze rozwiązanie, które można uzyskać za pomocą kompozycji?


title: Preferencja, aby sprawdzić, czy wartość pola została zmieniona js lub linq object?

text: Mamy pewne wymagania dotyczące wysyłania e-maili, gdy w naszym systemie zmienią się różne wartości pól. Jest to system asp.net używający linq do sql z javascript/jquery. Czy lepiej jest sprawdzić, czy wartość została zmieniona przez js (ukryte pole jest ustawione, jeśli wartość zostanie zmieniona), czy lepiej, ponieważ używamy linq i mam dostęp do danego obiektu, aby sprawdzić bieżącą wartość tego obiektu za pomocą tego, co użytkownik wprowadził (w zasadzie porównaj wartość pola tekstowego z wartością pola obiektu przed aktualizacją)?


title: Odśmiecanie Pythona sprawia mi trudność

text: **Kontekst:** Tworzę aplikację internetową przy użyciu web-frameworku `webapp2` z pythonem, która ma być hostowana na GAE. Aplikacja internetowa (od teraz _web-app_) to odmiana szachów. Będąc nowicjuszem, zdecydowanie popełniłem wiele błędów projektowych. Jednym z nich jest to, czego dotyczy to pytanie, za chwilę do niego dojdę. Celem aplikacji internetowej było umożliwienie dużej liczbie graczy gry w szachy dwuosobowe, tak aby wiele partii odbywało się równolegle. Nie przekraczając bezpłatnego limitu na GAE. ( _Jestem studentem_ ). Aby to zrobić, pomyślałem, że stworzę nowy obiekt gry i przechowam jego `id(game_object)` wraz z `machine_id` dwóch graczy grających na tej instancji w magazynie danych. Podczas wysyłania zapytania do magazynu danych z `machine_id` odtwarzacza, mogłem uzyskać wartość `id()` i pomyślałem, że mógłbym użyć tej wartości jako `klucza` w słowniku, w którym odwołanie do `game_object` tworzy wartość . Robienie tego nie wymaga ode mnie pisania/aktualizowania datastore, dzięki czemu oszczędzam na cennych zapisach. Mógłbym łatwo zmodyfikować stan gry `game_object` i nadal mógłby się do niego odwoływać `id()`. **Ale teraz dzieje się tak, że działa to dobrze przez kilka ruchów. Następnie następuje zbieranie śmieci, a `game_object` jest wymazywany z pamięci. Zgłaszanie wyjątku NameError.** **Moje pytanie brzmi, czy można to rozwiązać, tworząc nowe game_objects w osobnym module, w którym wyrzucanie śmieci jest wyłączone, a następnie okresowo/wyzwalane zdarzeniami zwalnianie pamięci? Jeśli nie? Jak obejść ten problem?**


title: Zero obiektów behawioralnych w OOP - mój dylemat projektowy

text: Podstawową ideą OOP jest to, że dane i zachowanie (na tych danych) są nierozłączne i są połączone ideą obiektu klasy. Obiekt posiada dane i metody, które z tym (i innymi danymi) współpracują. Oczywiście zgodnie z zasadami OOP obiekty, które są tylko danymi (jak struktury C) są uważane za antywzorce. Na razie w porządku. Problem polega na tym, że ostatnio zauważyłem, że mój kod wydaje się coraz bardziej podążać w kierunku tego antywzorca. Wydaje mi się, że im bardziej staram się uzyskać informacje ukrywające się między klasami i luźno powiązanymi projektami, tym bardziej moje klasy stają się mieszanką czystych danych bez klas zachowania i wszystkich zachowań bez klas danych. Generalnie projektuję klasy w sposób, który minimalizuje ich świadomość istnienia innych klas i minimalizuje ich wiedzę o interfejsach innych klas. Szczególnie egzekwuję to w sposób odgórny, klasy niższego poziomu nie wiedzą o klasach wyższego poziomu. Np.: Załóżmy, że masz ogólny interfejs API do gier karcianych. Masz klasę „Karta”. Teraz ta klasa `Card` musi określić widoczność dla graczy. Jednym ze sposobów jest umieszczenie `boolean isVisible(Player p)` w klasie `Card`. Innym jest posiadanie `boolean is Visible(Card c)` w klasie `Player`. Szczególnie nie podoba mi się to pierwsze podejście, ponieważ przekazuje wiedzę o wyższym poziomie klasy `Player` do niższej klasy `Card`. Zamiast tego zdecydowałem się na trzecią opcję, gdzie mamy klasę `Viewport`, która po podaniu `Playera` i listy kart określa, które karty są widoczne. Jednak to podejście okrada zarówno klasy `Card`, jak i `Player` z możliwej funkcji składowej. Kiedy zrobisz to dla innych rzeczy niż widoczność kart, pozostaniesz z klasami `Card` i `Player`, które zawierają wyłącznie dane, ponieważ cała funkcjonalność jest zaimplementowana w innych klasach, które w większości są klasami bez danych, tylko metodami, takimi jak „Widok” powyżej. Jest to wyraźnie sprzeczne z główną ideą OOP. Jaki jest właściwy sposób? Jak powinienem podejść do zadania minimalizacji współzależności klas i minimalizacji zakładanej wiedzy i sprzężenia, ale bez kończenia się dziwnym projektem, w którym wszystkie klasy niskiego poziomu zawierają tylko dane, a klasy wysokiego poziomu zawierają wszystkie metody? Czy ktoś ma jakieś trzecie rozwiązanie lub perspektywę projektowania klas, która pozwala uniknąć całego problemu? PS Oto kolejny przykład: Załóżmy, że masz klasę `DocumentId`, która jest niezmienna, ma tylko jedną składową `BigDecimal id` i getter dla tego składowej. Teraz musisz mieć gdzieś metodę, która podając `DocumentId` zwraca `Document` dla tego identyfikatora z bazy danych. Czy: * Dodałeś metodę `Document getDocument(SqlSession)` do klasy `DocumentId`, nagle wprowadzając wiedzę o Twojej trwałości (`"używamy bazy danych i to zapytanie służy do pobierania dokumentu po id"`), API używany do uzyskiwania dostępu do DB i tym podobnych. Również ta klasa wymaga teraz pliku JAR trwałości tylko do kompilacji. * Dodaj inną klasę za pomocą metody `Document getDocument(DocumentId id)`, pozostawiając klasę `DocumentId` jako martwą, bez zachowania, klasę podobną do struktury.


title: Dlaczego MySQL nie ma wyraźnej opcji „Bez limitu” dla zapytań?

text: Używam edycji SQLyog Community i podobnie jak wiele innych aplikacji SQL, wprowadza limit 1000 wyników dla zapytań, które nie mają podanego limitu. Zastanawiam się, dlaczego MySQL nie ma opcji _jawnej_ `NO LIMIT`, jeśli chodzi o pisanie zapytań. Jestem pewien, że nie jestem jedynym programistą, który na koniec trzyma się dużego limitu (w granicach rozsądku), aby uzyskać pełny widok rekordów w tabeli. Podanie rekordów w tabeli jest sensowne, chciałbym móc wykonać: `SELECT * FROM Course NO LIMIT;` zamiast `SELECT * FROM COURSE LIMIT 2500;`


title: Jakiej struktury kolekcji należy użyć do parametrycznego porządkowania grupowania w c#?

text: Mam różne aplikacje formularzy systemu Windows, które zawierają różne kontrolki, które tworzą niestandardowe klauzule "group by" i "where" dla moich metod klasy. Zastanawiam się nad przekazaniem pewnego rodzaju struktury kolekcji, aby metody były w stanie zbudować klauzule group by i the where. Załóżmy, że lista zawiera pole i wartość grupy według lub gdzie. Czy idę we właściwym kierunku? Aktualizacja: Nie mam jeszcze kodu, ale spróbuję wyjaśnić lepiej: 1. Mamy formularz z 10 listami rozwijanymi i znacznikiem wyboru obok nich. 2. Również mamy adatagrid na formularzu. 3. Każda lista rozwijana odpowiada polu w tabeli. * Jeśli lista rozwijana ma zaznaczone pole wyboru, oznacza to, że musi ona należeć do klauzuli group by w instrukcji select. * Wartość listy rozwijanej musi być częścią klauzuli where. * **Uwaga: *** Inna aplikacja może mieć różną liczbę list rozwijanych i różne odpowiadające im pola. Chcę utworzyć wspólną metodę, która będzie pobierać dane z klauzulami group przez użytkownika i where. Więc myślę, że należy przejść do listy metod 2. * Jeden z (fieldname, value) dla klauzul where * I jeden z (fieldname) dla grupy w zależności od powyższej logiki... Mam nadzieję, że jest to bardziej jasne.


title: Dlaczego warto korzystać z usług (REST/SOAP) zamiast biblioteki?

text: Załóżmy, że chcesz podzielić swoje aplikacje na usługi. Czy istnieją jakieś dobre powody, aby przyjąć podejście SOA zamiast tworzenia API biblioteki, które może być ładowane przez aplikacje, które tego potrzebują.


title: Której bazy danych powinienem używać do zarządzania relacjami?

text: Potrzebuję 2 możliwości: * obliczanie wspólnych znajomych rozróżniających różne typy krawędzi (np. PRZYJACIEL, WRÓG i inne) * uzyskiwanie relacji rozróżniających różne typy krawędzi Mój problem to szybkość: Jeśli używam bazy danych jako MySQL, mogę uzyskać tysiące relacji w kilka chwil, ale jeśli muszę obliczyć wspólnych znajomych, mój serwer kosztuje dużo, prawda? Mam około 100 000 kont na mojej stronie i chcę wprowadzić system relacji, ale oczywiście muszę zdecydować, jak go rozwinąć. Masz jakiś pomysł?


title: Czy istnieje lekka metoda opisywania usług internetowych, podobna do pliku robots.txt lub sitemap.xml?

text: Chciałbym przedstawić bardzo uproszczoną metodę opisu moich usług internetowych. Żadnych WSDL, WADL czy podobnych skomplikowanych rzeczy. Po prostu mapowanie z podstawowego adresu URL usługi sieciowej do prostego opisu, który można wykryć i przeanalizować automatycznie. Zasadniczo * **Nazwa** usługi * **Link** do jakiejś czytelnej dla człowieka dokumentacji (opcjonalnie) * Prawdopodobnie **adres** kontaktowy * Warunki użytkowania, wzorce adresów URL itp. są mniej potrzebne, aby zachować prostotę . Najlepsze, co udało mi się znaleźć, to OpenSearch Description Documents, ale po pierwsze, mogłoby to być prostsze z plikami konfiguracyjnymi w postaci zwykłego tekstu, a po drugie, nie ma standardu, jak połączyć te dokumenty opisu usług z dowolnymi usługami sieciowymi (tylko automatyczne wykrywanie w ATOM/RSS i HTML). Pomyślałem o stworzeniu własnego formatu i udostępnieniu go podobnie do `robots.txt`: $ curl http://example.org/services.txt service: http://example.org/foobar name: Foobar API about: http: //example.org/foobar-doc.html service: http://example.org/some/unapi nazwa: Przykładowe unAPI # dodatkowe pola do omówienia standard: http://unapi.info wzorzec: ?id= {id}&format={format} Więc jeśli znasz podstawowy adres URL usługi, taki jak `http://example.org/some/unapi`, możesz wyszukać przynajmniej nazwę w pliku opisu usługi. Jednak zamiast definiować własny standard, chciałbym wiedzieć, czy istnieje już coś podobnego do ponownego wykorzystania.


title: Jaka jest różnica między programem Visual Studio 2010 Express a wersją Regular?

text: Zastanawiałem się, czy będę musiał zapłacić za prawdziwy. Zajmuję się tworzeniem stron internetowych


title: W jaki sposób programista tworzy środowisko do hackowania systemu operacyjnego takiego jak Linux, Plan9 lub BSD?

text: Zawsze uważałem, że sposób, w jaki haker systemu operacyjnego organizuje przepływ pracy, jest zniechęcający i mylący. Jako programista stron internetowych uważam, że łatwo jest ustawić przepływ pracy, ponieważ strony internetowe działają na serwerach i dlatego mój system operacyjny nigdy nie jest dotykany. Ale programista systemu operacyjnego, jak to robisz? Programujesz na jednej maszynie, a potem jakoś przenosisz kod na drugą? Czy rozwijasz na systemie operacyjnym, który rozwijasz, ta ostatnia opcja wydaje się być pełna paradoksów? Więc jak to robisz? PS Moje podobne pytanie dotyczące Quora nadal nie ma odpowiedzi na to pytanie...


title: Jak zachować synchronizację ustawień modułów C++ Unit Test z modułami kodu produkcyjnego?

text: * Uwaga: pochodzę ze środowiska Windows / Visual-C++. * Uwaga: Przeczytałem już artykuł Michaela Feathers Efektywnie działający z Legacy Code. * **Uwaga:** _szerokie_ pytanie, proszące o _wąskie_ odpowiedzi, tzn. chociaż nie chcę zawęzić tego pytania do konkretnego systemu kompilatora/platformy/tworzenia, przydatne odpowiedzi będą prawdopodobnie zawierać tylko jedną kombinację. ## Model programowania w C++ Nawet idealnie, jeśli masz swoje, dobrze zorganizowane pliki źródłowe: * Klass1.h/cpp * Klass2.h/cpp * CustomAlgorithms.h (tylko nagłówek) * main.cpp (może nie być potrzebny do dyn/static lib module) Następnie Twoja aplikacja składa się z **n** modułów (nawet jeśli są to tylko statyczne biblioteki, wszystkie połączone razem z modułem wykonywalnym. Aby dostać się ze źródła do modułów binarnych), potrzebujesz plików projektu / make files / cokolwiek. Te pliki "mówią" _kompilatorowi_ (i linkerowi) jak wygenerować moduły binarne z twojego kodu źródłowego. faktycznie umieść swój kod testowy, **musisz wyprodukować inne/dodatkowe moduły binarne dla swojego kodu testowego niż dla kodu produkcyjnego** (przynajmniej w przypadku dowolnej biblioteki wykonywalnej lub dynamicznej, biblioteki statyczne powinny być odrobinę łatwiejsze). musisz wyprodukować różne moduły binarne dla swojego kodu testowego, wtedy musisz **utrzymać oddzielny/a Dodatkowy zestaw ustawień (kompilatora) dla tego kodu testowego**. Dzięki _Visual Studio_ możesz spróbować zminimalizować ilość pracy, używając plików vsprops, ale nadal masz osobny plik projektu do testów i modułów produkcyjnych. Może to stać się problematyczne w utrzymaniu. W przypadku systemu make nie jestem pewien, jak to się robi, ale wyraźnie chcę, aby to pytanie obejmowało oba, ponieważ techniki z jednego mogą przekładać się na drugie. Tak więc, **TL;DR** , jak uchronić się przed ręczną edycją dwóch różnych „plików projektu” (jeden do testowania, jeden do produkcji), za każdym razem, gdy coś dodasz lub zmienisz w ustawieniach produkcyjnych.(* ) * * * (*) Możesz pomyśleć, że nie zmieniasz rzeczy zbyt często, ale pomyśl o projekcie na skalę światową z dziesiątkami (setkami) modułów i dziesiątkami programistów. Każda niewielka ilość pracy ręcznej, którą zaoszczędzisz na testowe rusztowanie, zwielokrotni się.


title: Elastyczne przechowywanie plików w chmurze dla aplikacji web.py?

text: Tworzę aplikację internetową za pomocą web.py (chociaż później mogę przepisać ją na Tornado), która wiąże się z dużą manipulacją plikami. Na przykład aplikacja będzie miała operację „commit” w stylu git, w której niektóre pliki są wysyłane na serwer i umieszczane w nowym folderze wraz z niezmienionymi plikami z ostatniej wersji. Będzie to obejmować skopiowanie starego folderu do nowego folderu, zastąpienie/dodanie/usunięcie plików w zatwierdzeniu do nowego folderu, a następnie usunięcie wszystkich niezmienionych plików w starym folderze (tak jak są teraz w nowym folderze). Zdecydowałem się na Heroku dla środowiska hostingu aplikacji i obecnie przyglądam się opcjom przechowywania w chmurze, które są zbudowane z myślą o tego rodzaju operacjach. Myślałem o Amazon S3, jednak nie jestem pewien, czy pozwala to na wykonywanie tego rodzaju operacji na plikach w miejscu. Myślałem, że być może będę musiał załadować te pliki do pamięci RAM serwera, a następnie ponownie włożyć je do wiadra, co kosztuje mnie fortunę. Myślałem również o Progstr Filer (http://filer.progstr.com/index.html), ale wydaje się, że integruje się tylko z aplikacjami Rails. Czy ktoś może w tym pomóc? Zasadniczo chcę, aby operacje na plikach były jak najtańsze.


title: Dobry sposób na wyjaśnienie potrzeby zagnieżdżonych wyrażeń lambda

text: Jestem w sytuacji, w której muszę wyjaśnić koledze wyrażenia lambda. Jest dobrze wykształcony, ma pewne doświadczenie w programowaniu, a mój pierwszy raz, kiedy pokazałem mu wyrażenia lambda, wydawał się udany. To, czego nie wyjaśniam mu dobrze, to pomysł, że można zagnieżdżać wyrażenia lambda w sobie. Cały czas używam lambd i wydaje mi się, że powinno być mu to łatwe do wytłumaczenia, ale mam problem z wymyśleniem na miejscu przykładu, więc po prostu przekażę Wam jego pytanie: ** Dlaczego ktokolwiek miałby kiedykolwiek potrzebować zagnieżdżać wyrażenia lambda? ** Szukam przykładu takiego: x.f(y => y.g(z => y+z)) gdzie jedno wyrażenie lambda jest zagnieżdżone w innym, gdzie najbardziej wewnętrzny bit kodu (w tym przykładzie `y+z`) wykorzystuje oba parametry wejściowe lambda. Używamy C#, ale język nie ma znaczenia, tylko sytuacja, w której chcesz zagnieżdżonych lambd w języku, który nie jest głównie rachunkiem lambda.


title: Jaka jest etykieta zmiany nazwy widelca open source?

text: Chcę rozwidlić na Github framework testujący Java TestNG (licencja Apache 2), abym mógł dodać/zmienić kilka drobnych rzeczy, aby dopasować je do moich potrzeb. Jest mało prawdopodobne, że wszystkie moje zmiany zostaną zatwierdzone w głównym projekcie lub że inni ludzie będą używać mojego widelca. W żaden sposób nie byłby to konkurs dla głównego projektu. Teraz, jeśli chodzi o nazewnictwo, chcę zmienić nazwę artefaktu (testng-mycompany) lub wersję (6.8.mycompany), aby nie było pomyłek z oficjalną wersją w moim repozytorium maven. Czy byłoby to uważane za kiepską etykietę? Jeśli tak, jakie jest najlepsze podejście do wyróżnienia widelca?


title: Ogromna baza danych: wybór odpowiedniego schematu i modelu danych

text: Chcemy przechowywać niektóre dane dotyczące wariantów genomowych, ale są pewne problemy, ważniejsze, takie jak problem ogromnego rozmiaru i zmienności danych. 1. Dane wariantowe mogą być ogromne. Na przykład pojedynczy wariant danych może pewnego dnia wymagać miliona wierszy danych w tabeli lub gigabajta surowego miejsca na dysku. Pomnóż to przez kilka tysięcy osób, a potencjalnie możesz otrzymać terabajty informacji, które musisz zrozumieć. 2. Każdy klient i/lub system, z którym się integrujemy, będzie eksponował lub chciał widzieć dane nieco inaczej w zależności od swoich potrzeb i przypadków użycia. Może to potencjalnie prowadzić do setek pól, które możemy potrzebować do przechowywania, z których wszystkie mogą wymagać różnych konfiguracji w zależności od potrzeb klientów. Tak więc ten wariantowy model danych będzie musiał o tym pamiętać, aby pozostać łatwym w użyciu, rozszerzalnym i, co najważniejsze, skalowalnym w dłuższej perspektywie. Jak myślisz, co jest lepsze dla takiego problemu? Myśleliśmy o tym, żeby w każdej tabeli mieć kilka kolumn, które wskazują na zewnętrzną bazę danych lub nawet plik, w którym zapisujemy ogromne dane BLOB?


title: ASP.NET MVC 4 z Entity Framework 5 i SimpleMembership zintegrowanym ze wzorcem Repository i Unit Of Work

text: Mam projekt ASP.NET MVC4, w którym chciałbym użyć SimpleMembership. Aplikacja posiada tabelę Person, która zawiera istotne informacje o użytkownikach w systemie. Potrzebuję linku między aktualnie zalogowanym użytkownikiem a informacjami o osobie. Tak więc zrobiłem klucz obcy w tabeli Person do kolumny UserId tabeli UserProfile (z SimpleMembership). Używam Entity Framework 5 jako ORM i zaimplementowałem ogólne repozytorium do obsługi metod CRUD i tak dalej. Teraz jestem w punkcie, w którym chcę wdrożyć tworzenie profilu użytkownika. Kreacja składa się z 2 części: * login: nazwa użytkownika i hasło (przechowywane w tabelach SimpleMembership) * dane osobowe (przechowywane w tabeli Person) Aby utworzyć użytkownika, myślę, że muszę: 1. Zapisać informacje o użytkowniku przez SimpleMembership 2. Zapisuj dane osobowe wraz z identyfikatorem użytkownika z kroku 1 przez moje PersonRepository Chciałbym mieć jakiś rodzaj UserRepository, który mógłby zapisywać dane SimpleMembership, ale nie wiem, czy to właściwe podejście? Czy istnieje lepsze podejście?


title: Poinformuj dzwoniącego lub po prostu pozwól mu zająć się wyjątkiem?

text: Nie wiem, jak postąpić w następującej sytuacji. powiedzmy, że mamy taką funkcję: def runningATask(codes): myDicts = [helperFunc(code) for code in code] for item in myDicts: # trochę logiki. Oto problem, kody są iterowalne i powinny być listą lub krotką, tzn. powinny być używane w następujący sposób: `runsATask(['code1', 'code2', ... 'codeN'])`, ale czasami `N` to 1, więc ludzie mogą go błędnie nazwać, na przykład `runsATask('code1')` Ten kod będzie nadal działał, ale później w `pętli for` zepsuje się, ponieważ `myDicts` nie mieć w sobie poprawne obiekty, ponieważ list składany, który go spowodował, iterował po `łańcuchu` zamiast `listy/krotki`. Więc czy powinienem zostawić to tak, jak jest, czy też rozwiązaniem byłoby poniższe: def runATask(codes): if not isinstance(codes, (list, krotka)): raise Exception("Kody powinny być listą lub krotką") myDicts = [helperFunc(kod) dla kodu w kodach] dla pozycji w myDicts: # trochę logiki. Nie jestem pewien, w którą stronę iść, ponieważ słyszę, jak kręgi Pythona mówią, aby rozmówcy zajęli się problemem, ale debugowanie takiej sytuacji może być denerwujące, ponieważ rozmówca poradziłby sobie z problemem w pętli for i gdyby został poinformowany w sposób wcześniej o przekazaniu złego parametru, zaoszczędziłoby to dużo straconego czasu.


title: Czy kody błędów są również błędne w zapytaniach SQL?

text: Mam zapytanie SQL, które wykonuje kilka rzeczy naraz¹: wykonuje wiele sprawdzeń, a następnie, jeśli testy zakończą się pomyślnie, aktualizuje niektóre dane. Oto wyimaginowany przykład bez wprowadzania szczegółów domeny: -- Hasło użytkownika powinno być aktualizowane tylko wtedy, gdy konto użytkownika nie zostało usunięte i -- nie zostało zablokowane, a próg nie został przekroczony. jeśli istnieje (wybierz * z [Osoby].[Użytkownik], gdzie [IdUżytkownika] = @IdUżytkownika) zacznij, jeśli istnieje (wybierz * z [Osoby].[Użytkownik], gdzie [IdUżytkownika] = @IdUżytkownika i [IsLocked] = 0) jeśli istnieje (wybierz * z [People].[User] gdzie [UserId] = @UserId i [IsRemoved] = 0) rozpocznij aktualizację [People].[User] set [PasswordHash] = @Hash gdzie [UserId] = @UserId wybierz 0 -- Sukces. koniec inny początek wybierz 3 -- Konto już nie istnieje. koniec koniec inny początek wybierz 2 — konto jest zablokowane. koniec koniec inny początek wybierz 1 -- Nie można znaleźć użytkownika. end Zapytanie jest następnie używane w następujący sposób: var errorCode = new SqlDataQuery(query, Program.ConnectionString) .With(new { UserId = this.Id, Hash = this.ComputeHash() }) .ReadValue<int>(); // Kody błędów są używane tylko między bazą danych a kodem i jak najszybciej przekształcane w wyjątki. switch (errorCode) { przypadek 1: wrzuć nowy UserNotFoundException(); przypadek 2: wyrzuć nowy wyjątek AccountPermissionException(); przypadek 3: wyrzuć nowy wyjątek AccountRemovedException(); } W ogólnym programowaniu kody błędów są uważane za złe i należy je zastąpić konwencjonalnymi procedurami obsługi błędów, w tym wyjątkami. Czy źle jest też używać ich w zapytaniach SQL? Jeśli tak, jak przepisać zapytanie, aby postępować zgodnie z najlepszymi praktykami? * * * ¹ Biorąc pod uwagę wymagania niefunkcjonalne związane z obciążeniem i wydajnością, nie ma możliwości wykonania kilku kolejnych zapytań. Wszystkie sprawdzenia i aktualizacja powinny być wykonane w jednym zapytaniu.


title: Ile logiki w Getters

text: To pytanie zostało zadane na różne sposoby, ale nic, co właściwie chciałbym wiedzieć. Wprawiłeś mnie w zakłopotanie w pracy. Mówią mi, że w getterach i seterach powinno być jak najmniej logiki. Jestem jednak przekonany, że wiele rzeczy można ukryć w getterach i setterach, aby chronić użytkowników/programistów przed szczegółami implementacji. Przykład tego, co robię: public List<Stuff> getStuff() { if (stuff == null || cacheInvalid()) { stuff = getStuffFromDatabase(); } zwracać rzeczy; } Przykład tego, jak praca każe mi coś robić (cytują „Czysty kod” od wujka Boba): public List<Stuff> getStuff() { return stuff; } public void loadStuff() { stuff = getStuffFromDatabase(); }      Jakieś sugestie? Ile logiki jest odpowiednie w setterze/getterze? Jaki jest pożytek z pustych getterów i seterów poza naruszeniem ukrywania danych?


title: DMCA jako licencja na kod javascript o zamkniętym kodzie źródłowym

text: Mam własny projekt, którego fragmenty są napisane w javascript. Chcielibyśmy, aby licencja na oprogramowanie była zawarta w pliku nagłówkowym dla tego kodu, co zapewnia, że praca pozostaje: * zastrzeżona * nie może być odtwarzana (ponieważ zostanie zaciemniona / zminimalizowana) * nie może być ponownie wykorzystana w innym miejscu * nie może być połączona z DMCA zrobić to wszystko? Czy ktoś używa DMCA w ten sposób? Przyjrzałem się temu drugiemu pytaniu, Najlepsza istniejąca licencja na kod o zamkniętym kodzie źródłowym, o innym możliwym języku, ale chcę wiedzieć konkretnie o zaletach i wadach DMCA jako licencji.


title: Czy dekompozycja funkcjonalna to naprawdę antywzorzec?

text: Czytając Najgorsze antywzorce, na jakie natknąłeś się, kliknąłem w link w tym poście, aby wylądować na stronie o antywzorcach. Zaciekawiła mnie strona http://sourcemaking.com/antipatterns/functional-decomposition. Jak zły jest ten antywzorzec i czy w ogóle jest to antywzór? Ponieważ, chociaż obecnie zajmuję się głównie programowaniem OOP, nadal czuję niechęć do czystych języków OOP, takich jak Java, a także do praktyk projektowych, które wprowadzają. I myślę, że podczas pisania kodu nadal mam pewne cechy programowania funkcjonalnego. I to zrodziło pytanie, czy robię źle, trzymając się stylu OOP + Funkcjonalny, czy jest to powszechne w branży i nie jest tak złe. Z doświadczenia wiem, że styl OOP+Funkcjonalny nie jest całkowicie kompatybilny z programistami czystymi OOP. Ale jednocześnie, podczas gdy programiści OOP mają problemy z rozwojem OOP+Funkcjonalnym, kontrargumentem jest to, że rozwiązania OOP są dość często przeprojektowane i zbyt trudne w użyciu, a z mojego doświadczenia nie były ani odrobinę łatwiejsze, a właściwie wprowadzono kilka martwych punktów dla BARDZO poważnych błędów do ukrycia. Tak więc, mimo że dyskutowałem z kolegą na te tematy, doszedłem do wniosku, że żaden ze sposobów nie jest tak naprawdę doskonały. I nadal mam pytanie bez odpowiedzi. Problem OOP został również wzmocniony przez link z innego posta w tym samym wątku. Odsyłacz pokazuje OOP w stylu Java http://chaosinmotion.com/blog/?p=622 Więc jaki jest ogólny stosunek do mieszania programowania funkcyjnego z OOP? A do jakiej równowagi powinien dążyć deweloper?


title: Jakość a czas

text: Słyszałem o programistach, którzy pracują z kodem, co jest kompletnym bałaganem, ponieważ pierwotnie kod był szybko rozwijany, a jakość nie była na pierwszym miejscu. Zawsze dobrze jest uzyskać możliwy do utrzymania kod, który można ponownie wykorzystać, ale zastanawiałem się, czy najlepiej byłoby poświęcić część tego ze względu na ograniczenia czasowe. Częstym problemem, z którym się spotykam, jest przepracowanie czegoś i marnowanie dużej ilości czasu. Wszyscy wiemy, że w prawdziwym świecie ze względu na ograniczenia czasowe bardzo trudno będzie zbliżyć się do idealnego kodu. Zastanawiałem się, czy istnieje ogólna zasada uzyskania dobrej jakości, jeśli nie ma dużo czasu na rozwój? Czy uważasz, że jest to powszechny problem w równoważeniu jakości kodu i czasu w rozwoju?


title: Przechowywanie danych w kodzie

text: Kilka razy w mojej przeszłości chciałem przechowywać dane w kodzie. Są to dane, które rzadko się zmieniają i są używane w miejscach, gdzie dostęp do bazy danych nie jest możliwy, praktyczny lub pożądany. Małym przykładem może być przechowywanie listy krajów. W tym celu możesz zrobić coś takiego: public class Country { public string Code { get; ustawić; } public string EnglishName {get;set;} } public static class CountryHelper { public static Lista<Kraj> Countries = new List<Country> { new Country {Code = "AU", EnglishName = "Australia"}, ... new Kraj {Code = "SE", EnglishName = "Szwecja"}, ... }; public static Country GetByCode(string code) { return Countries.Single(c => c.Code == kod); } } W przeszłości udawało mi się to robić na sucho, ponieważ zestawy danych były stosunkowo małe, a obiekty dość proste. Teraz pracuję z czymś, co będzie miało bardziej złożone obiekty (5-10 właściwości każda, niektóre właściwości są słownikami) i łącznie około 200 obiektów. Same dane zmieniają się bardzo rzadko, a kiedy się zmieniają, to naprawdę nie jest to nawet tak ważne. Więc wprowadzenie go do następnej wersji jest w porządku. Planuję użyć T4 lub ERB lub innego rozwiązania do tworzenia szablonów, aby przekształcić moje źródło danych w coś, co jest przechowywane statycznie w zestawie. Wygląda na to, że moje opcje to 1. Przechowuj dane w formacie XML. Skompiluj plik XML jako zasób zestawu. Ładuj dane w razie potrzeby, przechowuj załadowane dane w słowniku, aby zapewnić wydajność wielokrotnego użytku. 2. Wygeneruj pewien rodzaj statycznego obiektu lub obiektów, które są inicjowane podczas uruchamiania. Jestem prawie pewien, że rozumiem implikacje wydajnościowe opcji 1. Przynajmniej mam przeczucie, że nie miałaby ona znakomitej wydajności. Co do opcji 2 to nie wiem co zrobić. Nie wiem wystarczająco dużo o wewnętrznych elementach platformy .NET, aby poznać najlepszy sposób przechowywania tych danych w kodzie C# i najlepsze sposoby ich inicjowania. Rozejrzałem się za pomocą .NET reflector, aby zobaczyć, jak działa `System.Globalization.CultureInfo.GetCulture(name)`, ponieważ jest to w rzeczywistości bardzo podobny przepływ pracy do tego, czego chcę. Niestety trop ten kończył się „zewnętrznie”, więc nie ma tam żadnych wskazówek. Czy inicjowanie właściwości statycznej ze wszystkimi danymi, jak w moim przykładzie, jest właściwą drogą? A może lepiej byłoby tworzyć obiekty na żądanie, a następnie buforować je, w ten sposób? private static readonly Słownik<ciąg, Kraj> Pamięć podręczna = nowy Słownik<ciąg,Kraj>(); public static Country GetByCode(string code) { if (!Cache.ContainsKey(code)) return Cache[kod]; return (Cache[kod] = CreateCountry(kod)); } internal static Country CreateCountry(string code) { if (code == "AU") return new Country {Code = "AU", EnglishName = "Australia"}; ... if (code == "SE") return new Country {Code = "SE", EnglishName = "Szwecja"}; ... wrzuć nowy CountryNotFoundException(); } Zaletą tworzenia ich od razu w statycznej składowej jest to, że możesz użyć LINQ lub czegokolwiek innego, aby przejrzeć wszystkie obiekty i zapytać o nie, jeśli chcesz. Chociaż podejrzewam, że robienie tego ma wpływ na wydajność uruchamiania. Mam nadzieję, że ktoś ma z tym doświadczenie i może podzielić się swoimi opiniami!


title: Jak pogrupować te zmienne?

text: Mam kształt, który zostanie zdefiniowany przez: char s_type; kolor zwęglania; podwójna wysokość; podwójna szerokość; Zmienne te są skanowane z ciągu żądania wysłanego do mojego serwera i przekazywane do mojej funkcji drukowania, która następnie drukuje kształt. Obecnie są to tylko lokalne zmienne znajdujące się w moim `main()`; jednak zastanawiałem się, czy będzie jakaś korzyść z utworzenia struktury zawierającej te zmienne, a następnie przekazania struktury do mojej funkcji drukowania? lub w jaki inny sposób mogę poprawić strukturę/styl mojego programu, czy przekazywanie struktury przez referencję przyniosłoby jakąkolwiek korzyść wydajnościową, gdyby było wiele żądań, a zatem wiele wywołań funkcji drukowania? drukarka(char st, char c, double ht, double wd); int main() { // Inna główna funkcjonalność. char s_type; kolor zwęglania; podwójna wysokość; podwójna szerokość; sscanf (serv_req, "GET /%c/%c/%lf/%lf", &s_type, &color, &height, &width); drukarka(s_type, kolor, wysokość, szerokość); // Inne główne funkcje. zwróć 0; } Wydawałoby się „ładniejsze”, gdybym miał strukturę lub coś, co nie zostawiało mnie z deklaracjami w środku wszystkiego, co dzieje się w main. Interesuje mnie struktura/styl oraz wykonanie. EDIT: nie chodziło o umieszczanie deklaracji drukarki w main.


title: Jak zachować zgodność dokumentów Word, html i pdf?

text: Czy istnieje sposób na napisanie dokumentacji w edytorze WYSIWYG, który może następnie eksportować do HTML, WORD i PDF i synchronizować kopie? Ta dokumentacja to głównie notatki techniczne i trochę pomocy kontekstowej dla niektórych programów, więc muszą zawierać obrazy i trochę stylizacji, nie jest to dokumentacja programisty (lista API lub lista funkcji), dla której prawdopodobnie program taki jak Javadoc lub Doxygen byłby najlepszym wyborem. Na przykład, jak radzą sobie z tym firmy z setkami różnych linii oprogramowania i tysiącami programistów? Mam kilka rozwiązań, ale wszystkie wydają się być pozbawione pewnych aspektów: * Latex/Tex : bardzo dobry eksport pdf i html, niezbyt przyjazny dla użytkownika i brak dostępnego w pełni rozbudowanego edytora WYSIWYG. * LibreOffice/OpenOffice : pełnowymiarowy edytor WYSIWYG, jednak eksport html nie jest tak dobry (trzeba edytować ręcznie wyeksportowany html, który musi być utrzymywany osobno) Eksport pdf jest całkiem dobry z wieloma dostępnymi wtyczkami. Ponownie jednak potrzebna jest pewna formacja dla personelu, aby z niego korzystać i trzeba skonfigurować do tego serwer. Zauważ, że nie proszę o oprogramowanie A kontra oprogramowanie B, proszę o ogólne porady, procedury dużych firm dotyczące dokumentacji i tak, niektóre nazwy oprogramowania, jeśli są dostępne.


title: Dlaczego nazywa się Just In Time?

text: Wiem, czym jest kompilator JIT, ale dlaczego tak się nazywa, oczywiście przechwytuje wyjątki _Tylko w czasie_ , ale jak i dlaczego powinien być tak nazywany? Przepraszam, jeśli brzmi to trochę niejasno.


title: Połącz programowanie ze Scrum

text: Należę do zespołu, który obecnie używa Scrum i rozważamy dodanie programowania w parach, aby poprawić wielofunkcyjne umiejętności zespołu, a także pomóc w redukcji defektów zgodnie z filozofią „co dwie głowy to nie jedna”. W naszym zespole każdy członek zespołu zazwyczaj zapisuje się na pełne obciążenie pracą podczas planowania sprintu (przy czym „pełny” to liczba, która jest mniejsza niż 40 godzin tygodniowo, co pozwala na spotkania, współpracę itp.), z jednym dedykowanym właścicielem dla każde zadanie. Uważam, że jest to dość powszechne w zespołach Scrumowych, ale niekoniecznie musi być zgodne z księgą. W szczególności staram się uniknąć sytuacji, w której członkowie zespołu niechętnie łączą się w pary, ponieważ mają swoje własne zadania, nad którymi mogą pracować, co, jak obawiam się, może się zdarzyć, jeśli zespół po prostu samoorganizuje się bez czasu przeznaczonego na parowanie . Biorąc to pod uwagę, jaki jest najlepszy sposób rozliczania wysiłku/godzin/punktów na historię w scenariuszu parowania, aby upewnić się, że mamy odpowiednio przydzielony czas na parowanie? Niektóre rozważane opcje to: 1. Pozwól dwóm osobom na zapisanie się do każdego zadania i (z grubsza) podwoj liczbę szacowanych godzin 2. Tylko członek zespołu „ręce na klawiaturze” zapisuje się do każdego zadania, które jest szacowane na podstawie szacowane godziny. Każdy członek zespołu, który będzie wspierać parowanie, zapisze się do mniejszej liczby zadań w sprincie, aby mieć czas na wsparcie parowania.


title: Jaki będzie lepszy sposób na pobieranie danych w aplikacji, która musi obsługiwać ograniczoną ilość danych.?

text: To naprawdę nie jest pytanie o kodowanie, ponieważ nie dodaję tutaj żadnego kodu. Ponieważ samo dodanie moich fragmentów kodu spowodowałoby, że to pytanie byłoby naprawdę długie. Zamiast tego jestem bardzo zainteresowany poznaniem lepszych sposobów pobierania danych w aplikacji, która musi obsługiwać ograniczoną ilość danych, które nie są regularnie aktualizowane. Weźmy ten przykład: piszę aplikację, która pobiera harmonogram jako XML z serwera. Napisałem logikę w celu przeanalizowania wersji XML i aktualizacji bazy danych tylko wtedy, gdy wersja jest nowsza niż wersja lokalna. Chociaż aktualizacja jest sprawdzana automatycznie/ręcznie codziennie na podstawie preferencji użytkownika, rzeczywista aktualizacja wersji odbywa się tylko raz na kilka miesięcy. Ponieważ jest to wykonywane przez inny organ, który nie udostępnia API, ale raczej informuje publicznie o swoich zmianach. Rzeczywisty kod XML zawiera „(n liczba grup) _(dni w tygodniu)_ (n liczba harmonogramów)” . Grupa składa się zwykle z 6 osób, a liczba harmonogramów to zwykle 2. Tak więc w zasadzie jest to tylko około 100 strun. Teraz, chociaż w tej chwili używałem SQLite. Chcę wiedzieć, jak dokonać aktualizacji w bazie danych. **Czy powinienem pokazać okno dialogowe postępu, że aplikacja jest aktualizowana i wyjść z aplikacji po jej zakończeniu?** Ponieważ moje aktualizacje są rzadkie, nie sądzę, aby to naprawdę zaszkodziło użytkownikom, ale ** czy są na to lepsze sposoby to?** Ponieważ nie chcę, aby aktualizacja była wykonywana podczas wyszukiwania przez użytkownika, które odbywa się za pomocą bazy danych. Spowoduje to, że baza danych jest już otwarta. Przynajmniej spotkałem się z tym problemem wcześniej. **Czy lepiej jest parsować XML za każdym razem, gdy użytkownik chce zobaczyć pewne rzeczy lub użyć SQLite?** Skoro w mojej aplikacji dużo używam adaptera do tworzenia list, czy to obniży wydajność? Byłoby naprawdę wielką pomocą, gdyby ktoś mógł mi lepiej o tym opowiedzieć. Lub może być kontrargumentem przeciwko każdemu. Wielkie dzięki!


title: Powód za wielowierszowym stylem deklaracji?

text: Jestem trochę ciekaw przyczyny stylów deklaracji plików nagłówkowych Windows. Kiedy je czytam, widzę wielowierszowe deklaracje, takie jak: WINBASEAPI HANDLE WINAPI GetStdHandle( IN DWORD nStdHandle ); Jaki jest główny powód, dla którego nie są napisane jako coś takiego: WINBASEAPI HANDLE WINAPI GetStdHandle(IN DWORD nStdHandle); czyli w jednej linii?


title: Czy ta sytuacja wymaga dobrze określonych asocjacji, dziedziczenia pojedynczej tabeli lub asocjacji polimorficznej?

text: Tworzę aplikację internetową, w której użytkownicy mogą śledzić, kto jest komu winien pieniądze. Mam użytkowników i długi. Biorąc pod uwagę użytkownika, chcę mieć możliwość sprawdzenia wszystkich długów wobec innych użytkowników oraz wszystkich pożyczek udzielonych innym użytkownikom. Mając dług, chcę móc dowiedzieć się, kim jest dłużnik i pożyczkodawca. Pytający o to pytanie napotkał podobną sytuację, ale nie wierzę, że nasze sytuacje są wystarczająco podobne, aby uzasadnić użycie górnej odpowiedzi: http://stackoverflow.com/questions/4729725/how-do-i-do-two -ma-wiele-należy-do-relacji-pomiędzy-dwoma-modelami Zaczerpnięte z tego pytania, trzy wzorce sugerowane, że są * dobrze określone asocjacje * dziedziczenie pojedynczej tabeli * asocjacja polimorficzna Jakiego wzorca powinienem użyć w mojej sytuacji? Jeden z tych trzech, czy może jest jeszcze bardziej odpowiedni?


title: Jak szukać pracy dla programistów, jeśli trudno jest podróżować na miejscu rozmowa kwalifikacyjna

text: Jestem programistą z 3 letnim doświadczeniem w różnych dziedzinach. Próbowałem znaleźć pracę przez strony internetowe. W szczególności starałem się wysłać list motywacyjny z CV na wakaty w Wielkiej Brytanii. Wszystkie firmy, które odpowiedziały na mnie, poprosiły o udanie się na rozmowę kwalifikacyjną na miejscu. Wyjaśniłem im, że jestem z innego kraju i może da się to zrobić przez telefon/skype? Wszyscy odpowiedzieli, że to niemożliwe. Czy ktoś mógłby mi zasugerować, co zrobić w tej sytuacji? Może robię coś źle? Jakakolwiek pomoc byłaby mile widziana. PS to naprawdę uderzy w moją kieszeń, aby udać się tam na każdy wywiad.


title: Przechowywanie i nazywanie danych dziennika

text: Jestem w trakcie przepisywania małej aplikacji z trybu konsoli do trybu GUI. Wejście to plik z danymi dziennika z urządzenia pomiarowego: ... 00029;00044;00076;00044;00021 00309;00032;00037;00000;65535 00013;00016;00008;00007;00005 ... Każdy wiersz danych reprezentuje 5 liczników, które sumują zakres, w którym mieści się miara, tj. pierwsza kolumna to "<40%", druga kolumna to "[40-50[" itd... Przykład pierwszego wiersza: 29 zliczeń poniżej 40% | 44 liczy od 40% do 60% | 76 zliczenia od 60% do 80% 44 zliczenia od 80% do 90% | 21 liczy od 90% do 100% W aplikacji konsolowej użyłem tablicy liczb całkowitych do przechowywania każdego wiersza danych, umieszczając każdą tablicę wierszy na liście. Jak dotąd, tak dobrze... Następnie aplikacja wykorzystała pętlę for do wypisania wartości z opisami na konsolę. **Mój problem:** Chciałem stworzyć GUI z WPF i zastosować wiązanie danych. Ale mam problem koncepcyjny z tworzeniem powiązania danych z tablicami liczb całkowitych i elementów wizualnych. Nie miałem problemów z powiązaniem danych z pojedynczymi właściwościami. Wyzwaniem są tablice. Myślę, że powinienem utworzyć taką klasę (może być również użyty jako ViewModel): public class CounterRecords { public List<CounterRecord> DataRecords { get; ustawić; } } Ale jak mam zająć się klasą `CounterRecord`? Jaka jest czysta/jasna implementacja tego obiektu, z którą mogę się powiązać? public class CounterRecord { public int Range40 { get; ustawić; } public int Zakres40_60 { get; ustawić; } public int Zakres60_80 { get; ustawić; } public int Zakres80_90 { get; ustawić; } public int Zakres90_100 { get; ustawić; } }


title: Używanie `is` i `as` w wielu warunkach

text: Całkiem niedawno myślałem o użyciu `as`, `is` i bezpośredniego rzutowania w C#. Logicznie rzecz biorąc, lepszym pomysłem jest użycie: var castedValue = value jako type; if (null != castedValue) { // Użyj castedValue. } than : if (wartość to typ) { var castedValue = (typ)wartość; // Użyj castedValue. } Ale nadal mam problemy, gdy mam do czynienia z tego rodzaju wzorcem: if (value is Implementation1) { var castedValue = (Implementation1)value; // Użyj castedValue w pierwszej kolejności. } else if (wartość to Implementation2) { var castedValue = (Implementation2)value; // Użyj castedValue w drugi sposób. } else if (wartość to Implementation3) { var castedValue = (Implementation3)value; // Użyj castedValue w trzeci sposób. } // I tak dalej... Jak mogę ulepszyć ten kod, aby zapobiec dwukrotnemu rzutowaniu, gdy wszystko jest w porządku, i czy naprawdę konieczne jest dwukrotne rzutowanie? Nie chcę, aby kod był nieczytelny, ale nie chodzi o testowanie rzutowania, jeśli poprzedni się powiódł. Miałem kilka pomysłów, aby to naprawić, ale żaden z nich nie wydaje się spełniać warunków... **Edytuj:** Oto przypadek, który mam... Jest ten obiekt, który jest tworzony przez dolną część kod, na który nie mam kontroli. Ten obiekt może mieć kilka dziedziczonych typów. W mojej warstwie chcę stworzyć określony obiekt w zależności od tego typu. Mam taką klasę konstruktora: public static IHighLevelObject MakeHighLevelObject(LowLevelObject lowLevelObject) { IHighLevelObject highLevelObject; if (lowLevelObject is LowLevelObject1) { highLevelObject = new HighLevelObject1((LowLevelObject1)lowLevelObject); } else if (lowLevelObject to LowLevelObject2) { highLevelObject = new HighLevelObject2((LowLevelObject2)lowLevelObject); } else if (lowLevelObject to LowLevelObject3) { highLevelObject = new HighLevelObject3((LowLevelObject3)lowLevelObject); } // I tak dalej... return highLevelObject; } Jak rozwiązać ten przypadek?


title: Czy wyjątki są koncepcją OOP?

text: Po wczorajszym przeczytaniu posta zdałem sobie sprawę, że niewiele wiem o pochodzeniu wyjątków. Czy jest to tylko koncepcja związana z OOP? Myślę, że tak, ale znowu są wyjątki bazy danych.


title: Propozycja modelu rozgałęzienia dla tego samego projektu wielu klientów

text: Mamy bardzo duży projekt, który obejmuje kilka aplikacji, które stanowią bazę dla różnych klientów. Każdy klient ma własną personalizację produktu, różne kamienie milowe, inne wymagania itd., dzięki czemu każdy projekt będzie ewoluował niezależnie w oparciu o własne potrzeby. Rdzeń projektu jest _podobny_ (ale nie równy) w każdym projekcie, a organizacja jest tak skonstruowana, że istnieją zespoły, które obsługują każdego klienta niezależnie (ale z komunikacją między nimi w razie potrzeby). Do tej pory nie udało mi się znaleźć żadnego schematu, który odpowiadałby naszym potrzebom, ani przeszukując internet, ani wymyślając genialny pomysł :) Do tej pory pracowaliśmy nad tym, aby produkt spełniał wszystkie potrzeby, z konkretne gałęzie dla potrzebnych zmian, ale chociaż produkt ma dobrą architekturę, powoli staje się to dużym problemem. Oto główne problemy, przed którymi stoimy: * Różne kamienie milowe dla każdego klienta: co oznacza, że każdy zespół musi tworzyć wersje w różnym czasie bez reszty zobowiązań wpływających na stabilność lub produkt. * Różne wymagania, które w niektórych przypadkach mogą, ale nie muszą wpływać na rdzeń systemu. * Duże zespoły (20+ członków zespołu) * Obsługa błędów w systemie: Co zrobić, jeśli zespół znajdzie błąd w swoim projekcie, który może mieć wpływ na innych klientów? **Uwaga:** mówimy o projekcie, który ma 10+M LOC. **Uwaga:** używamy Team Foundation System, Visual Studio 2008 i C# (głównie). Jakieś sugestie, źródła lub pomysły dotyczące rozwiązania sytuacji? Czy na rynku jest jakiś model, który ma podobny problem?


title: Książka lub zasoby, aby lepiej zrozumieć DB

text: Proszę zobaczyć tę odpowiedź Tworzę stronę internetową, która ma potencjał, aby stać się bardzo zależna od swoich danych i ostatecznie musiałaby szybko udostępniać dużo danych. Kiedy czytam powyższą odpowiedź, czuję, że być może MySQL nie jest dla mnie najlepszą bazą danych. Problem polega na tym, że generalnie nie wiem zbyt wiele o bazach danych. Jestem tym nietypowym programistą "Web 2.0", który uważa, że MySQL jest świetny, ponieważ, cóż, to wszystko, z czego kiedykolwiek korzystałem. Mam kilka pytań: * Co powinienem wiedzieć o bazach danych, aby móc w przyszłości podjąć bardziej świadomą decyzję? Jakie zasoby polecasz? * Czy nadal mogę używać frameworka PHP, takiego jak CakePHP, wybierając „alternatywne” bazy danych? Czy to przepis na katastrofę?


title: Ustalenie, czy język/ramy/technologia są „przyszłościowe”

text: Jestem programistą PHP i niedawno zacząłem pracować z CodeIgniterem. Wygląda na to, że za każdym razem, gdy szukam czegoś związanego z CodeIgniterem, posty na blogu, a co nie, zwykle pochodzą z '09 lub '10, więc pomyślałem, czy CodeIgniter jest nadal aktualny i czy będzie w przyszłości? Czy istnieje inny framework, który zajmuje to miejsce? To samo dotyczy innych języków i frameworków. W którym momencie porzucasz naukę określonych języków lub frameworków? Czy jest jakiś łatwy sposób na znalezienie tych, które się pojawiają i warto je wybrać?


title: Pisanie funkcji rekurencyjnych

text: Mam dużo problemów z pisaniem funkcji rekurencyjnych związanych z drzewami. Nie mogę po prostu używać Google do tych funkcji, ponieważ nie są one ogólne i nie będę mógł używać Google podczas egzaminów! Czy jest jakaś „sztuczka”, aby pomyślnie wymyślić algorytm/zapis pseudokodu dla funkcji rekurencyjnych? Czy jest jakiś sposób, w jaki powinienem o tym pomyśleć / podejść do tego? **Przykład** : Napisz funkcję rekurencyjną, która określa, czy dane drzewo binarne ma strukturę zgodną z prawidłowym drzewem AVL. **Oczekiwane rozwiązanie** : template <typename Type> bool is_avl (const Binary_node<Type> * tree) { if (tree == NULL) { return true; } return is_bst (drzewo) && is_avl (drzewo->left()) && is_avl (drzewo->prawo()) && std::abs(height(drzewo->left()) - height(drzewo->prawo() )) <= 1; }


title: Wyszukiwanie adresu z dużego pliku tekstowego

text: Zasadniczo chcę opracować wyszukiwanie adresu (część mojego projektu) przy użyciu C# (i w razie potrzeby mogę użyć SQL). Mam bardzo duży plik tekstowy, który zawiera wszystkie adresy i kody pocztowe w Wielkiej Brytanii. Adresy należy wyszukać w tym pliku tekstowym. Na przykład, gdy tylko użytkownik wpisze pierwszą literę kodu pocztowego, powinien wyświetlić listę wszystkich kodów pocztowych zaczynających się na tę literę, a w miarę dalszego wpisywania lista powinna się zawęzić. Czy moglibyście bardzo szybko przeprowadzić to wyszukiwanie i wyświetlić wyniki w efektywny sposób. Jeśli znacie jakieś metody i technologie, proszę o poradę.


title: Zaspokajanie potrzeb klienta w zakresie hostingu bez problemów?

text: Będę próbował sprzedać moje umiejętności programowania w Ruby on Rails _małym lokalnym firmom_. Wygląda na to, że strzeliłbym sobie w stopę, gdybym nie mógł wprowadzić ich aplikacji do produkcji, w rzeczywistości zaspokojenie tego byłoby punktem sprzedaży. Jednak **Nie chcę co miesiąc naliczać kosztów hostingu każdemu klientowi** , musieliby być właścicielami umowy z usługą hostingową i _Skonsultowałbym się tylko wtedy, gdyby potrzebowali pomocy technicznej podczas skalowania_. Spojrzałem z jednej strony na platformy chmurowe, takie jak engine yard, które wydają się zbyt kosztowne dla mniejszych klientów, az drugiej strony na dostawców vps, którzy wydają się nie być wystarczająco przyjaźni dla klienta. Czy ktoś zmierzył się z tym samym problemem i wymyślił przyzwoite rozwiązanie?


title: Przyszłość dewelopera .net po konferencji BUILD

text: Patrząc wstecz na konferencję Microsoft BUILD i wszystko, co z niej wynikło, nie jestem pewien, w jakim kierunku powinienem podążać jako programista? Jeśli dobrze zrozumiałem, MS stawia HTML5 przed WPF, Silverlight i Flash, a także mówi się o WinRT i Metro UI. Mam zamiar kupić kilka kursów zimą, ale nie wiem, co wybrać? **WIEM** WinForms MVC3 LINQ CSS2 jQuery json **NAUKA** HTML5 CSS3 Co jeszcze?


title: Niedługo ukończysz dobrą szkołę bez umiejętności programowania

text: Mam niedługo ukończyć dobrą amerykańską szkołę z dyplomem z informatyki, z dobrymi ocenami i wysokim GPA. Nie mam pojęcia jak napisać dobry program, jak go poprawnie przetestować... nada, zero. Nigdy nie uczono nas, jak pisać oprogramowanie. Tak, na pewno klasa Computer Architecture jest ważna i mogę ci wiele powiedzieć o tym, jak działa procesor MIPS, a także o drzewach binarnych i czerwono-czarnych oraz czasie wykonywania operacji w Big Oh, ale nie ma nic do zrobić z programowaniem w „prawdziwym” życiu. Niebiosa dla Betsy, żaden z moich kolegów z klasy nie wie, jak używać STL ani pisać kodu szablonowego! Szczerze mówiąc, wiele moich zajęć było dla mnie stratą czasu. Co powinienem zrobić? Jak wejść w prawdziwe życie i nauczyć się programować?


title: Kiedy należy przekazać klientowi kod źródłowy?

text: Jestem członkiem małego zespołu, który opracował oprogramowanie do sterowania sprzętem urządzenia zrobotyzowanego. Teraz klient chce zobaczyć nasz kod handlowy. Naszą obietnicą było tylko opracowanie oprogramowania i sprawienie, by jego maszyna działała. (Nie zaprogramował robota sam, dlatego nas zatrudnił). Ale projekt nie zaczął się jako umowa o zatrudnienie, a raczej jako opracowanie i sprawienie, by działał, przeprowadziliśmy wiele badań, aby jego robot mógł pracować. Zastanawiam się, czy powinniśmy podać kod źródłowy? Mam poważne wątpliwości co do wydania kodu. Wierzę, że klient planuje ukraść nasz kod c++/c#. Dostarczyliśmy mu pliki wykonywalne zainstalowane na gotowych zaprogramowanych robotach. Nasz kod nie został opracowany tylko dla jego urządzenia robotyki, ale jest częścią naszych bibliotek, których powszechnie używamy w różnych projektach. Kiedy klient może twierdzić, że jest właścicielem oprogramowania? A kiedy robi, co to znaczy. Mam na myśli posiadanie kodu C++, posiadanie kodu deasemblera, posiadanie kodu C#? Gdzie to się kończy? Przekazaliśmy nasze oprogramowanie agentowi depozytowemu i uważamy, że jest to sprawiedliwe. Ale dawanie im naszego kodu wydaje nam się niesprawiedliwe, wiedząc, że klient będzie dalej rozwijał się w oparciu o nasz kod. Części kodu korzystają również z autorskiej ochrony oprogramowania, której nie możemy zapewnić, ponieważ jest ona wykorzystywana w innych produktach.


title: dostarczanie ebooka przez aplikację mobilną

text: Zaprojektowałem interfejs aplikacji mag, która dostarczała na telefon komórkowy zdigitalizowany magazyn w formacie A3. Mój wybór formatu pliku to jpg każdej ze stron, ale czy istnieje lepszy sposób na zrobienie tego niż użycie formatu jpeg. Plik dla jednego przykładowego czasopisma miał 16 MB i utknąłem w pogodzie, aby dostarczyć stronę po stronie lub jako cały plik, który można odwrócić


title: Co zrobić, jeśli współpracownik edytuje Twój kod tylko po to, by zmienić wygląd?

text: Co powinieneś zrobić, jeśli współpracownik edytuje Twój kod? Bez potrzeby dodawania funkcjonalności lub naprawiania błędów, tylko po to, by zmienić wygląd...


title: Stworzenie platformy do głosowania na zgłoszenia w czasie

text: Mam witrynę, na której historie są przesyłane w dowolnym momencie przez użytkowników. Pracownicy chcieliby mieć możliwość stworzenia okresu głosowania w dowolnym momencie. Na przykład mogą zdecydować się na otwarcie głosowania od dzisiaj do przyszłego tygodnia. Personel może również wybrać, które historie zostaną umieszczone w pierścieniu głosowania, aby umożliwić głosowanie. W tym okresie ludzie mają możliwość jednorazowego głosowania na historię. Po zagłosowaniu nie mogą już oddać głosu. Za bardzo myślę o tym, jak to zaprogramować i nie wiem dlaczego. Z punktu widzenia bazy danych mam już tabelę zawierającą wszystkie zgłoszenia. Muszę wtedy mieć stół, na którym można głosować historie, na które głosowane są historie. Następnie potrzebuję tabeli zawierającej historie głosowane przez użytkowników. Czy istnieje prosty proces, który możesz wymyślić, aby to osiągnąć? Czasami wystarczy krótka dyskusja, aby wyrwać się z mojego obecnego sposobu myślenia. Dziękuję


title: Podrepozytoria (submoduły) jako rozwiązanie do śledzenia zależności - tak czy nie?

text: Co sądzisz o zarządzaniu zależnościami w oparciu o SCM (subrepozytoria w mercurial, submoduły w git)? Czy to na pewno dobry sposób na zarządzanie zależnościami? Czy zdecydowanie zły sposób? Czy powinienem preferować jakiś system kompilacji (ant/phing/rake) zamiast podrepozytoriów? Oto konkretny przykład kontekstu: mam kilka aplikacji internetowych, które współdzielą komponenty wielokrotnego użytku, powiedzmy wtyczki jquery.


title: Jak zacząć pisać relacyjną bazę danych SQL

text: Zastanawiałem się, w jaki sposób bazy danych, takie jak MySQL i SQLite, zostały opracowane tak, aby działały tak szybko i tak dobrze, jak oni. Szukam odpowiedzi na pytania **takie jak** : * Jak jest dzielony tokenem SQL? Czy tworzysz AST i kompilujesz/interpretujesz jak każdy inny język? * Jak obsługiwać połączenia z bazą danych? TCP? IPC? Jak to robią znane bazy danych? * Jak przechowywane są dane w tych szybkich relacyjnych bazach danych? Wiem, że SQLite używa płaskiego pliku - wydaje się, że to koszmar synchronizacji. Oczywiście nie oczekuję, że ktoś po prostu wyjaśni mi całą teorię relacyjnych baz danych - ale rozglądałem się i naprawdę nie mogę znaleźć odniesień, aby zacząć się uczyć o tych rzeczach. Aby odpowiedzieć na nieuniknione „dlaczego po prostu nie użyjesz MySQL?”: (a) ponieważ jestem ciekawy i (b) może kiedyś będę chciał zaprojektować własną bazę danych z myślą o konkretnym zastosowaniu. EDIT: Myślę, że powinienem był to wyjaśnić. Zdaję sobie sprawę, że to szeroki temat. Nie szukam kogoś, kto powie „och, projektujesz bazę danych przez...”. Jeśli jest to temat poruszany w dużej liczbie książek, co to za książki? Jeśli jest to dobrze opisane w P.h.D. wiesz, co to za teza? Zdaję sobie sprawę, że jest to obszerny temat – nie proszę o konkretną odpowiedź na obszerne pytanie, proszę o konkretne zasoby na obszerne pytanie. Jak zawsze dzięki za wszelką pomoc!