title: Jak daleko powinniśmy zmienić nazwę kodu i danych, gdy zmienią się nomenklatury użytkowników końcowych?

text: Dawno temu dodaliśmy funkcję, dzięki której nasi użytkownicy mogli „Akceptować” obraz po dodaniu go do kolejki workflow. Okazuje się, że użyliśmy niewłaściwego terminu, a użytkownicy faktycznie „zatwierdzają” obraz. Zmiana Akceptuj na Zatwierdź w naszym interfejsie jest łatwa, wystarczy zastąpić jedno słowo. Ale wszystkie warstwy zaprogramowaliśmy słowem „accept”, od nazwy klasy CSS po wartości bazy danych. * Klasa CSS, która zmienia kolor przycisku na zielony: ".accepted"; * Metoda modelu, która weryfikuje i wiąże atrybut class w węźle DOM: "isAccepted"; * Atrybut statusu JavaScript: tablica z „nieprzejrzanymi”, „zaakceptowanymi” i „opublikowanymi”; * Kolumna stanu Mysql: ENUM z „nieprzejrzanymi”, „zaakceptowanymi” i „opublikowanymi”; * Nazwy testów; Jest trywialne (szczególnie, gdy masz testy), aby zastąpić większość przypadków akceptacji do zatwierdzenia. Trochę trudniej jest przeprowadzić migrację danych, zwłaszcza że trzeba je zsynchronizować z wdrożeniem. Ten konkretny przypadek jest prosty, ale w swojej karierze miałem do czynienia z podobnymi, ale bardziej złożonymi przypadkami. Gdy zmieniana jest również nazwa pliku, a wdrożenie odbywa się na dziesiątkach serwerów lub w przypadku buforowania proxy, zaangażowane są memcached i mysql. Pozostawienie „zaakceptowane” na każdej innej warstwie poza interfejsem jest złym pomysłem, ponieważ nowi programiści dołączający do zespołu mogą nie poznać historycznych powodów, dla których doprowadziło to do tej decyzji, a akceptując -> zatwierdzaj są bliskie pod względem znaczenia słowa, jeśli tak został przemianowany na "w kolejce do następnego spotkania menedżerskiego", to z pewnością nie miałoby sensu. I wydaje się, że jeśli pójdziemy na kompromis tu i tam, w kilku iteracjach koncepcje interfejsu użytkownika nie będą miały związku z wnętrzem systemu, a ja na pewno nie chcę pracować na systemie, w którym połowa wyjścia nie ma połączenia z jego wnętrzem. Czy zawsze zmieniasz nazwy wszystkiego, kiedy jest to potrzebne? Jeśli ci się to przydarzyło i zdecydowałeś, że kompromis nie jest wart, czy wróciło to, by cię ugryźć? Czy komentarz do kodu lub dokumentacja programisty wystarczy, aby uniknąć tego problemu?


title: Po prostu zastanawiasz się nad „Aplikacjami do samodzielnego wykonania” w Internecie w porównaniu z aplikacjami napisanymi przez nas, programistów

text: Od kilku tygodni zajmuję się programowaniem w Objective-C i wiele się nauczyłem. Widzę jednak, że istnieją inne firmy internetowe oferujące konsumentom usługi bezpośrednio ze swojej strony internetowej, które umożliwiają konsumentom tworzenie aplikacji za pomocą funkcji „wskaż, kliknij i przeciągnij” bez żadnego kodu. Oczywiście są one bardziej opłacalne i szybsze niż pisanie aplikacji przez programistę. Zastanawiałem się, czy są jakieś korzyści z posiadania przez programistę aplikacji dla kogoś, poza oczywistą zaletą, że ma niestandardowy wygląd i działanie. Czy ktoś mógłby wyjaśnić, ponieważ jestem nowy i chciałby ocenić, czy warto poświęcać czas na naukę zupełnie nowego środowiska programistycznego, gdy ktoś mógłby po prostu użyć usługi internetowej do stworzenia aplikacji na wiele platform Dzięki


title: Co dzieje się w funkcji wywołania kontrolnego?

text: Pytanie o kontrolki formularzy wywołujące funkcję. Control1 jest tworzony na wątku1. Jeśli chcesz zaktualizować coś w Control1 z wątku 2, musisz zrobić coś takiego: delegat void SetTextCallback(string txt); void setText(string txt) { if (this.textBox1.InvokeRequired) { SetTextCallback d = new SetTextCallback(setText); this.Invoke(d, nowy obiekt[] { txt }); } else { // to zostanie uruchomione w wątku1 nawet przy wywołaniu z wątku2 this.textBox1.AppendText(msg); } }` Co dzieje się za kulisami? To wywołanie zachowuje się inaczej niż normalne wywołanie obiektu. Jeśli chcesz wywołać funkcję w obiekcie w określonym wątku, ten wątek musi czekać w pewnej kolejce delegatów i wykonać przychodzących delegatów. Czy to prawda, że funkcja invoke formantów okienek jest zupełnie inna niż standardowa funkcja invoke obiektu?


title: Dlaczego musimy używać zapieczętowanych na klasie? Czy naprawdę potrzebujemy zapieczętowanych?

text: Czytając ten artykuł (napisany przez Erica Lipperta), ma cztery argumenty, dlaczego powinieneś używać `zapieczętowanego`, jednak nie rozumiem, dlaczego tak naprawdę **potrzebujemy** tego. Pomijając względy filozoficzne/estetyczne, dlaczego musimy używać zapieczętowanych? Widzę, jak rzeczy takie jak „readonly” z C# lub „const” z C++ faktycznie wyłapują prawdziwe błędy. Czy jest jakiś rodzaj błędu, który „zapieczętowany” może wychwycić? Często przytaczanym powodem zapieczętowania klasy jest to, że nie została ona zaprojektowana do rozszerzenia. Co to znaczy? Dlaczego to jest ważne? Czy są na to jakieś realne przykłady? Kwestia kompatybilności nie jest powodem, dla którego musimy zapieczętować klasy, ale dlaczego powinna być domyślna. Ostatni punkt znowu jest dziwny, ponieważ zapieczętowanie twojej klasy nie uniemożliwia komuś dostarczenia alternatywnej implementacji w hierarchii. **Edytuj:** Jeśli nie położyłem na to wystarczającego nacisku, już szukam powodów, dla których naprawdę **potrzebujemy** tego. Nie zwykłe „ktoś inny może napisać zły kod”. Rozumiem, że wiele osób _lubi_ używać `zapieczętowanego` do celów projektowych, ale ja szukam praktycznego celu poza tym.


title: Jak dostarczyć dane do serwera WWW za pomocą hurtowni danych?

text: Mamy dane przechowywane w hurtowni danych w następujący sposób: Cena Data Nazwa produktu (varchar(25)) Obecnie mamy tylko siedem produktów. Raz w każdy dzień roboczy dodawanych jest siedem nowych punktów danych reprezentujących cenę dnia dla każdego produktu. Na stronie użytkownik widzi te informacje podczas ładowania strony. Analytics pokazuje, że ilość wczytywania strony wynosi około 100 dziennie. Serwer strony internetowej jest zewnętrznym serwerem naszego centrum danych. Serwer hurtowni danych jest wewnętrznym serwerem naszego centrum danych i zawiera inne krytyczne dane (w różnych tabelach), które nie są powiązane i nie powinny być dostępne dla strony internetowej. Rozważano następujące podejścia: 1) Hurtownia danych może codziennie przesyłać (SFTP) plik CSV zawierający dane dzienne na serwer WWW. Serwer WWW miałby proces uruchamiany na crontab co 15 minut. Sprawdzi, czy plik się zmienił. Jeśli tak, zaktualizuje swoją bazę danych o dane. Następnie, podczas ładowania strony, serwer sieciowy wysyła zapytanie do swojej bazy danych, aby uzyskać dane do wyświetlenia na stronie internetowej. Zwykle naciskanie odbywałoby się tylko raz dziennie, ale możliwe byłoby więcej niż jedno naciśnięcie, aby komunikować (rzadkie) korekty cen. Nawet w scenariuszu korekty ceny wszystkie dane zostaną dostarczone w pliku. Proces odpytywania wychwyciłby zmianę i nadpisał dane w bazie danych. 2) Serwer sieciowy może żądać danych z hurtowni danych za pomocą JDBC lub podobnej technologii połączeń SQL. Pojawiły się jednak obawy dotyczące bezpieczeństwa. Problem polega na tym, że zezwalając serwerowi WWW na dostęp do naszej hurtowni danych, atak typu SQL injection lub inny zewnętrzny atak za pośrednictwem strony internetowej może naruszyć hurtownię danych. Można by wprowadzić środki w celu zmniejszenia ryzyka, ale zasugerowano najłatwiejsze i najbezpieczniejsze podejście, aby po prostu nie pozwalać żadnemu systemowi publicznemu na bezpośredni dostęp do hurtowni danych. Innymi słowy, hurtownia danych może nawiązać komunikację z innymi serwerami (np. plik SFTP), ale żaden serwer nie może zainicjować połączenia z hurtownią danych. Czy te obawy wydają się rozsądne i trudne do złagodzenia? 3) Można zbudować usługę sieciową, a serwer sieciowy może wywołać usługę sieciową hostowaną w naszym wewnętrznym centrum danych. 4) Proces hostowany w naszym wewnętrznym centrum danych może wywołać serwer sieciowy, gdy wie, że hurtownia danych ma dostępne dane. Jeśli tak, jak należy to zrobić? HTTPS z pewnym sposobem, aby uniemożliwić innym nieautoryzowanym klientom wykonanie tego samego połączenia? Które z powyższych podejść jest najlepsze lub czy istnieje lepsze podejście niż wymienione powyżej? Jakie są zalety i wady podejścia?


title: Czy ponowne użycie instancji klasy jest w porządku?

text: Pytam o wysokie klasy kosztów, na przykładzie silnika cząsteczkowego. Czytałem gdzieś, że instancja klasy o wysokim koszcie inicjalizacji, taka jak menedżer cząstek, powinna mieć zmieniane zmienne stanu w czasie wykonywania, zamiast reinicjować menedżera cząstek nowymi danymi za każdym razem, gdy jest używany w inny sposób. Menedżer cząstek stworzyłby prawdopodobnie tysiące instancji cząstek podczas inicjalizacji, a następnie zarządzał nimi od tego momentu. Załóżmy na przykład, że ten menedżer cząstek służy do zarządzania odłamkami podczas eksplozji; i tworzysz symulację Ground Zero dla ataku artyleryjskiego; dlatego jest wiele eksplozji. Zamiast wielu menedżerów dla każdej eksplozji, co jest niezwykle kosztowne, zmieniasz zmienne dla każdej eksplozji i masz rozproszony sekwencyjny zestaw eksplozji przy użyciu tego samego menedżera i tych samych cząstek. Pytam więc: czy można ponownie użyć instancji klasy w czasie wykonywania? A może powyższy przypadek naprawdę jest tylko super optymalizacją?


title: Jak oceniasz niską wydajność w swojej aplikacji?

text: To, co sprawia, że aplikacja internetowa działa i lepiej się skaluje, jest zawsze dużym tematem. A znalezienie problemów z wydajnością i dostrojenie ich to kolejna… Oto kilka moich przemyśleń na temat „znalezienia” problemów z wydajnością: W przypadku „nowego” interfejsu API/aplikacji lub innej * Analiza szczegółowego interfejsu API, a następnie przygotowanie testów Jmeter/Grinder skrypty do tego. * Używanie innego obciążenia do identyfikacji progu dla api * Dodanie kodów profilowania, znajdź spowolnienia * Uruchom ponownie od punktu jeden ponownie.. Dla "starego" api/aplikacji lub innej * Analizowanie wzorca użytkownika z dziennika szczegółów dostępu * Symulacja rzeczywistego obciążenie użytkownika, aby znaleźć spowolnienia * Dodanie kodów profilujących, znajdź spowolnienia * Uruchom ponownie od punktu pierwszego.. Więc jak możesz zidentyfikować problemy z wydajnością?


title: Konfiguracja maszyny do budowania systemu iOS: problem z certyfikatami

text: trochę tła: * praca z wieloma kolegami z zespołu * każdy pracuje na własnym MBP * Ustawiam maszynę do budowania, na którą możemy `git push` aby wygenerować kompilację (celem jest umożliwienie każdemu pchania na maszynę budującą i następnie wygeneruj archiwum, wgraj do testflight i wyślij w drogę) Problem: * uzyskanie certyfikatów programisty Apple na maszynie budującej. Zainstalowałem Lion, XCode itp. i zalogowałem się na swoje konto programisty za pomocą organizatora Xcode, pobieranie profili udostępniania itp. ale obok każdego z nich jest napisane: „nie znaleziono prawidłowej tożsamości podpisu”. Pobieram również swój certyfikat ze strony developer.apple.com, importuję go do pęku kluczy itp., ale bez powodzenia. Czy ktoś jeszcze ma podobny problem? A może podpowiedzi do naprawy? Dziękuję


title: Importowanie istniejącego projektu do Git

text: # Tło Podczas tworzenia naszej witryny (ASP.NET) odkryliśmy, że nasza istniejąca kontrola źródła (SourceGear Vault) nie działa dla nas. Zdecydowaliśmy się więc na migrację do Git. Tłumaczenie było jednak mniej niż gładkie. Nasza strona jest podzielona na trzy środowiska DEV, QA i PROD. W większości przypadków DEV i repozytorium kontroli źródła są ze sobą zsynchronizowane. W repozytorium jest jedna gałąź, jeśli strona miała zostać przeniesiona do QA to plik został przeniesiony ręcznie, to samo z rzeczami, które były gotowe do PROD. Tak więc nasze obecne środowiska QA i PROD nie odpowiadają żadnemu konkretnemu zatwierdzeniu w gałęzi master. Wyjaśnienie: Oddziały QA i PROD nie są obecnie ani nigdy nie podlegały kontroli źródeł. # Pytanie Jak przenieść QA i PROD do Git? Czy powinienem zapomnieć o historii, którą prowadziliśmy do tego momentu i zacząć od nowa z nowym repozytorium? Mógłbym zacząć od wszystkiego na PROD, potem zrobić gałąź i wciągnąć wszystko z QA, a potem zrobić z tego kolejną gałąź za pomocą DEV. W ten sposób gałęzie nie tylko będą odzwierciedlać różnice w środowiskach, ale także będą w odpowiedniej kolejności chronologicznej z najnowszymi zmianami w gałęzi DEV. # To, czego próbowałem do tej pory, pomyślałem o stworzeniu gałęzi QA z bieżącego wzorca i użyciu robocopy, aby folder roboczy wyglądał jak obecne środowisko QA. To nie działa, ponieważ nowe zatwierdzenie z QA usunie nowe pliki z DEV, a to usunie je po scaleniu. Podejrzewam, że będą podobne problemy, jeśli uruchomię QA we wcześniejszym (choć nie dokładnym) zatwierdzeniu z DEV.


title: Czy to normalne, że twoje produkty do tworzenia oprogramowania są krytykowane?

text: Obecnie jestem programistą w kooperacji, który znalazł się dzisiaj w ciekawej sytuacji. Nie mogę powiedzieć zbyt wiele, ponieważ rzeczy, które robię, są objęte NDA, ale tworzę komponenty Grasshopper 3D (który jest wtyczką Rhino). Nasza firma ma trzech programistów, w tym ja. Wszyscy specjalizujemy się w różnych językach. Ten projekt, nad którym pracowałem, zajmowałem się stworzeniem oprogramowania o bardzo szerokim zastosowaniu ogólnym. Jest to rozszerzenie typowego zachowania Grasshoppera. Powiedziawszy to, drugi programista, z którym pracowałem, jest w tej branży od dobrej… dekady lub dwóch. Ma dużą wiedzę na temat korzystania z Grasshoppera. Jego wcześniejsze wykształcenie wiązało się ze świetnym wykorzystaniem go, a jego codzienna praca wiąże się z wykorzystaniem Grasshoppera (choć nie wprost to, co robię, czyli tworzenie dla niego komponentów C#). Powiedziawszy to, mój ostatni komponent przeszedł szereg iteracji. Wydawało się, że każda iteracja była lepsza od poprzedniej. Interesujące jest to, że inny programista, z którym pracowałem (byłem zasadniczo pod jego skrzydłami), za każdym razem udaje się zepsuć mój komponent. Nie mówię tego w złośliwy sposób. Łamając chodziło mi o to, że był w stanie przepełnić poszczególne listy. Po prawie każdej iteracji był w stanie znaleźć sposoby na ulepszenie mojego komponentu. Szczerze mówiąc, jestem naprawdę wdzięczna za jego sugestie i krytykę, ponieważ były to rzeczy, o których albo przeoczyłem, albo nie wiedziałem, że mogą się zdarzyć. Moje pytanie jest trojakie: 1. Czy to normalne w praktykach/firmach programistycznych, aby ktoś krytykował i ulepszał Twój kod? Nie było przeglądu kodu. Były to po prostu sposoby na ulepszenie narzędzia poprzez ulepszenia UX lub ulepszenia zaplecza. I szczerze mówiąc, mimo że nie było przeglądu kodu, tak wiele nauczyłem się z jego sugestii, które zawsze odnosiłem sukcesem we wdrożeniu. 2. Czy są jakieś sugestie dotyczące bardziej „formalnej” procedury testowania? Jestem stosunkowo nowy w świecie tworzenia oprogramowania, dlatego interesują mnie procedury testowania oprogramowania. 3. Jak mogę poprawić swoją drogę do „przewidywania” problemów? Z jednej strony mam wrażenie, że są problemy, których normalnie nie potrafię sam rozwiązać, ponieważ każdy używa innego oprogramowania. Z drugiej strony czuję, że przyczyną tego może być moje niedopatrzenie lub niekompetencja. Czytam ten wątek i wygląda na to, że mamy luźną procedurę testową, chociaż wszystko zależy ode mnie, aby poprosić o krytykę.


title: Jak zasugerować użycie ORM zamiast procedur składowanych?

text: Pracuję w firmie, która używa tylko procedur składowanych do dostępu do wszystkich danych, co sprawia, że utrzymywanie synchronizacji naszych lokalnych baz danych jest bardzo irytujące, ponieważ przy każdym zatwierdzeniu musimy uruchamiać nowe procedury. W przeszłości korzystałem z podstawowych ORM-ów i uważam, że jest to znacznie lepsze i czystsze. Chciałbym zasugerować kierownikowi ds. rozwoju i reszcie zespołu, że przyjrzymy się użyciu pewnego rodzaju ORM do przyszłego rozwoju (reszta zespołu zna tylko procedury składowane i nigdy nie używała niczego innego). Obecna architektura to .NET 3.5 napisana jak .NET 1.1, z "klasami boga", które używają dziwnej implementacji ActiveRecord i zwracają nietypowe DataSets, które są zapętlone w plikach związanych z kodem - klasy działają mniej więcej tak: class Foo { public bool LoadFoo() { bool blnResult = false; if (this.FooID == 0) { wyrzuć nowy wyjątek("FooID musi być ustawiony przed wywołaniem tej metody."); } DataSet ds = // ... wywołanie Sproc if (ds.Tables[0].Rows.Count > 0) { foo.FooName = ds.Tables[0].Rows[0]["FooName"].ToString (); // inne właściwości ustawione blnResult = true; } return blnResult; } } // Konsument Foo foo = new Foo(); foo.FooID = 1234; foo.LoadFoo(); // rób rzeczy z foo... Nie ma prawie żadnych zastosowań żadnych wzorców projektowych. Nie ma żadnych testów (nikt inny nie wie, jak pisać testy jednostkowe, a testowanie odbywa się poprzez ręczne ładowanie strony i grzebanie w niej). Przeglądając naszą bazę mamy: 199 tabel, 13 widoków, oszałamiające **926** procedury składowane i 93 funkcje. Około 30 tabel jest używanych do zadań wsadowych lub rzeczy zewnętrznych, reszta jest używana w naszej podstawowej aplikacji. Czy w tym scenariuszu warto w ogóle zastosować inne podejście? Mówię o przejściu do przodu tylko dlatego, że nie wolno nam refaktoryzować istniejącego kodu, ponieważ "to działa", więc nie możemy zmienić istniejących klas, aby korzystały z ORM, ale nie wiem, jak często dodajemy w zamian zupełnie nowe moduły dodawania/naprawiania obecnych modułów, więc nie jestem pewien, czy ORM jest właściwym podejściem (zbyt duże inwestycje w procedury składowane i zestawy danych). Jeśli jest to właściwy wybór, jak mam przedstawić sprawę korzystania z niego? Poza myślami, jedyną korzyścią, o jakiej mogę myśleć, jest czystszy kod (chociaż może nie być, ponieważ obecna architektura nie jest budowana z myślą o ORM-ach, więc w zasadzie będziemy manipulować ORM-ami jurorów w przyszłych modułach, ale stare nadal korzystałyby z zestawów danych) i mniej kłopotów z koniecznością pamiętania, jakie skrypty procedur zostały uruchomione, a które należy uruchomić itp., ale to wszystko i nie wiem, jak przekonujący byłby ten argument. Konserwacyjność to kolejny problem, ale nikt oprócz mnie nie wydaje się być zaniepokojony.


title: Dlaczego młodzi programiści nie interesują się komputerami mainframe?

text: Kluczowym problemem związanym z komputerami mainframe jest to, że liczba wspierających programistów maleje. Chociaż normalnie nie stanowiłoby to problemu, ponieważ spadająca podaż programistów zostałaby zrekompensowana rosnącą kwotą wynagrodzeń, które powodują wzrost podaży programistów poprzez prawo podaży i popytu, nie jestem pewien, czy tak się naprawdę dzieje komputery mainframe. Chociaż nadal stanowią one infrastrukturę krytyczną dla wielu firm, prostym faktem jest to, że nie pojawia się wystarczająca liczba młodych programistów, aby utrzymać populację wsparcia. Dlaczego to? Co sprawia, że komputery mainframe są nieatrakcyjne dla młodych programistów?


title: Czy bardziej wartościowe jest podwojenie studiów z informatyki / inżynierii oprogramowania lub uzyskanie stopnia licencjata CS z tytułem magistra SE?

text: Przyjaciel i ja (obaj na studiach) debatujemy obecnie nad tym, co jest lepsze pod względem możliwości zatrudnienia, doświadczenia i wykształcenia: licencjat z informatyki i inżynierii oprogramowania lub licencjat z informatyki z tytułem magistra w Inżynierii Oprogramowania. Moim zdaniem wolałbym chodzić do szkoły na 4-4,5 roku, aby uczyć się obu stron pola i pracować nad prawdziwymi projektami, zdobywając prawdziwe doświadczenie, podążając podwójną główną drogą. Jego punkt widzenia jest taki, że potencjalni pracodawcy wyglądaliby lepiej, gdyby miał licencjat z CS i magisterium z SE. W ten sposób, kiedy w końcu skończy po 4 latach CS i 2-4 SE (w zależności od tego, dokąd idzie), może właściwie wybrać, co chce robić. Obaj jesteśmy zgodni co do rozróżnienia między tymi dwoma stopniami: CS jest „tradycyjny” oraz w teorii algorytmów, struktur danych i programowania, gdzie SE to nauka o projektowaniu oprogramowania i implementacji teorii CS. Więc jakie jest twoje stanowisko w tej debacie? Czy przeszedłeś tą czy inną trasą? A co najważniejsze, dlaczego?


title: Jakie są twoje kryteria decyzyjne w C++, aby coś było elementem danych lub metodą wirtualną?

text: (Uznałem, że jest to zbyt subiektywne dla SO, więc publikowanie tutaj ...) Mam pewne zachowanie, które mogę zaimplementować na różne sposoby. W poniższym fragmencie kodu pokazano co najmniej dwie metody. Załóżmy, że element danych m_well jest w jakiś sposób poprawnie ustawiony w czasie budowy obiektu. struct Zachowanie { virtual bool zachowuje sięWell() { return true; } prywatny: bool m_well; public: bool zachowuje sięMemberWell() { return m_well; } }; struct OtherBehavior : public Behavior { virtual bool zachowuje sięWell() { return false; } }; Oczywiście jeden polega na wirtualnej wysyłce, a drugi jedynie na powrocie członka danych. Trzecia, nie pokazana metoda prawdopodobnie spowodowałaby, że niewirtualna publiczna funkcja składowa nie zwróciłaby stałego członka danych, ale zamiast tego wywołałaby wirtualną - odłóżmy to na bok, aby to zrobić, proszę. Co doprowadziłoby cię do jednej lub drugiej z tych dwóch metod implementacji funkcjonalności, tak aby użytkownik tej klasy mógł przesłuchiwać zachowanie obiektu?


title: „każde stwierdzenie i deklaracja jest wyrażeniem, które daje wartość” dlaczego?

text: Na końcu odpowiedź na "Czy mogę zrobić ++x i x++ w Pythonie?" na tej stronie: http://norvig.com/python-iaq.html, możesz przeczytać: > [...] Jestem z moim kolegą Duńczykiem, Bjarne Stroustrupem, na tym. W > The Design and Evolution of C++ powiedział: ``Gdybym miał projektować język > od podstaw, podążałbym ścieżką Algol68 i każdą deklarację i deklarację uczyniłbym wyrażeniem, które daje wartość''. Czemu?


title: Integralność danych w sytuacjach NoSQL

text: **Tło** Na początek w pracy pracuję ze starszym systemem, który w tamtych czasach był dość spektakularny, ale teraz jest ...ciekawy...do pracy. Wykorzystuje IBM (obecnie Rocket) UniVerse jako bazę danych. Jedną z jego szczególnych części, która spowodowała pewne problemy, jest brak kontroli integralności danych. Przez integralność danych nie mam na myśli uszkodzenia plików, ale raczej takie rzeczy, jak osierocone rekordy lub nieprawidłowe klucze. Konkretna wersja, której używają, nie obsługuje takich rzeczy, jak wyzwalacze i tym podobne, o ile programista nie pamiętał o aktualizacji swoich obliczonych indeksów, staje się ona „uszkodzona” i wypełniona złymi danymi. Teraz inne programy zostały zbudowane tak, aby żyć z tymi złymi danymi, ale najbardziej denerwujące jest umieszczanie ich w innej bazie danych, takiej jak MySQL (przy użyciu InnoDB jako silnika), która faktycznie ma ograniczenia dotyczące danych. **Pytanie** Eksperymentuję z MongoDB i NodeJS tylko po to, żeby zobaczyć, o co w tym wszystkim chodzi. Bardzo podoba mi się również Mongoose i jego system schematów. Dużo czytałem o tym, co przechowywać na każdej płycie, a co w osobnej kolekcji. Być może jest to tylko mój własny błąd RDBMS, ale postanowiłem przechowywać każdy „typ” rzeczy w oddzielnej kolekcji i wykorzystać funkcję „wypełniania” Mongoose, aby zasadniczo powiązać ze sobą rekordy. Teraz jestem pewien, że ktoś powie, że jest to sprzeczne z całą sprawą NoSQL, ale tak naprawdę nie czytałem nigdzie, które mówi, że tylko dlatego, że coś przechowuje dokumenty zamiast rekordów i nie ma ustawionego schematu na poziomie bazy danych, nie można uczynić relacyjnym. W moim eksperymencie mam „Wpisy” i „Komentarze”. Widzę cztery sposoby przechowywania relacji między tymi dwoma: * Pełne dane dla każdego komentarza są umieszczane bezpośrednio w poście jako poddokument. Istnieją dwie główne wady, które zauważyłem w tym przypadku: Jeśli zdecyduję się dodać komentarz do czegoś innego (powiedzmy „Strona”), muszę zasadniczo się powtórzyć i nie jest tak proste, aby dowiedzieć się, jak to zrobić. wiele komentarzy opublikowanych przez użytkownika, jeśli komentarze są faktycznie przechowywane w kilku kolekcjach * Komentarze są osobną kolekcją i przechowują klucz nadrzędny oraz nazwę schematu dla mangusty do użycia podczas wypełniania (zmiana nazwy schematu nie byłaby automatyczna). Nie jest to takie złe, ale jest nastawione na wczytywanie komentarzy w pierwszej kolejności, a później postów. Znalezienie komentarzy do posta nie jest trudne, ale wymaga ręcznego zapytania. * Komentarze to osobna kolekcja, a posty zawierają listę identyfikatorów komentarzy, które się do nich odnoszą. Jest to nastawione na ładowanie postów w pierwszej kolejności, a ustalenie, do czego jest dołączony komentarz, staje się trudne. Jednak mangusta pozwoliłaby mi załadować komentarze bez konieczności pisania niczego dodatkowego. * Komentarze stanowią osobną kolekcję i mają identyfikator rodzica. Posty mają również listę identyfikatorów komentarzy. Łączy to dwie powyższe metody i neutralizuje ich wady oraz powoduje stosunkowo niewiele „ręcznych” zapytań, ale wprowadza możliwość zabrudzenia i niezsynchronizowania danych, tak jak w starszym systemie, który opisałem powyżej (np. komentarz mówi, że należy do jednego postu a inny post (lub wiele postów) twierdzi, że jest właścicielem tego komentarza). Szedłem drugą ścieżką wymienioną powyżej i zdałem sobie sprawę, że zaczynam wchodzić w sferę tego starszego systemu, który przysporzył tak wielu problemów z ręcznie aktualizowanymi indeksami i możliwością błędnych danych. Nie spodziewam się, że zrobię tonę z tym moim małym eksperymentem, ale jest to główna rzecz, o której myślę. Co polecilibyście wszyscy? Chcę być w stanie utrzymać niską liczbę zapytań, ale nie chcę też pamiętać o aktualizowaniu wszystkich tych indeksów. Gdzieś musi być jakiś szczęśliwy środek. Inną opcją jest oczywiście użycie MySQL z kilkoma ładnymi ograniczeniami schematu, ale nie o to chodzi w tym konkretnym ćwiczeniu, ponieważ robiłem to już wiele razy.


title: Kiedy testuję różnicę czasu między przesunięciem a mnożeniem w C, nie ma różnicy. Czemu?

text: Nauczono mnie, że przesuwanie w systemie binarnym jest znacznie wydajniejsze niż mnożenie przez 2^k. Chciałem więc poeksperymentować i użyłem następującego kodu, aby to przetestować: #include <time.h> #include <stdio.h> int main() { clock_t launch = clock(); test int = 0x01; biegi międzynarodowe; //prosta pętla, która oscyluje między int 1 i int 2 for (runs = 0; runs < 100000000; run++) { // Najpierw skompilowałem + uruchomiłem go kilka razy w następujący sposób: test *= 2; // potem przekompilowałem + kilka razy uruchomiłem: test <<= 1; // ustaw z powrotem na 1 za każdym razem test >>= 1; } zegar_t zrobione = zegar(); podwójna różnica = (gotowe - uruchom); printf("%f\n",różnic); } Dla obu wersji wydruk wynosił około 440000, daj lub weź 10000. Nie było (przynajmniej wizualnie) znaczącej różnicy między wynikami obu wersji. Więc moje pytanie brzmi, czy coś jest nie tak z moją metodologią? Czy powinna istnieć w ogóle różnica wizualna? Czy ma to coś wspólnego z architekturą mojego komputera, kompilatorem lub czymś innym?


title: Kiedy przydałoby się używanie języka skryptowego w większym programie?

text: Słyszałem o kilku sytuacjach, w których ludzie używają powiedzmy, JavaScript lub Pythona (lub czegoś takiego), wewnątrz programu napisanego w C#. Kiedy użycie języka takiego jak JavaScript do zrobienia czegoś w programie C# byłoby lepsze niż robienie tego w C#?


title: Czy licencja Apache lub licencja GPL chronią moje znaki towarowe?

text: Próbuję sprawdzić, czy te dwie licencje open source zapewniają ochronę znaków towarowych twórcy. Przeczytałem obie licencje, ale wydaje się, że mówią tylko o swoim własnym znaku towarowym, tj. „Apache”.


title: Joomla czy programowanie od podstaw?

text: Jako ktoś, kto ma w tym bardzo małe doświadczenie, chciałbym wiedzieć, co sprawia, że myślisz, że Joomla może spełnić wszystkie Twoje wymagania?. Co sprawia, że wybierasz go zamiast programowania od zera (lub korzystania z frameworka takiego jak Yii lub Kohana). Jakie są najczęstsze lub kluczowe problemy, z którymi borykasz się podczas korzystania z Joomla? Ponieważ nie mam w tym dużego doświadczenia, upierałbym się, że jednym z największych problemów jest elastyczność. Nie możesz skalować ani dostosowywać zachowania swojej aplikacji, a nawet jeśli możesz, musisz złamać jakąś regułę w Joomla lub poczekać na następne wydanie. Czy to prawda?. Obecnie buduję projekt długoterminowy, może być w nim wiele konkretnych funkcji i zachowań. Chciałbym go zbudować od podstaw lub z pomocą niektórych frameworków PHP. Ale widziałem, jak wiele stron internetowych (niektóre z nich są świetne pod względem złożoności) korzysta z Joomla. To dało mi pewne wątpliwości co do wyboru odpowiedniej technologii. Chciałbym wiedzieć, czy istnieje jeden lub dwa ostateczne powody, dla których warto wybrać Joomla/inne.


title: Projekt obiektu ewaluatora do propagacji i IO wyników

text: Prowadzimy dyskusję o designie. Pamiętaj, że to fortran, więc nie możemy być zbyt mądrzy. Mamy następujące klasy: Aplikacja, System, Kalkulator, KalkulatorSimple, Kalkulator Okresowy, Wynik. Aplikacja to obiekt aplikacji, który obsługuje obiekty systemowe. W celu obliczenia informacji o obiekcie System Aplikacja przekazuje System do Kalkulatora, który zwraca Wynik. Wewnątrz Kalkulatora znajdują się dwie wyspecjalizowane klasy CalculatorSimple i CalculatorComplex, które działają na System w zależności od informacji dostępnych w samym systemie. Niektóre systemy wymagają CalculatorSimple. Inne wymagają CalculatorComplex. Decyzja ma miejsce wewnątrz Kalkulatora, a obiekt Result może zawierać dodatkowe informacje, jeśli został uruchomiony CalculatorComplex. Te dodatkowe informacje można odpytywać za pomocą metod obiektu Result, aby sprawdzić, czy informacje są obecne, czy nie. Ta informacja ma niewielki rozmiar. Aby zachować separację ról, chcę, aby ta część nie była świadoma danych wyjściowych. Obiekt Wynik jest odbierany przez Aplikację, a następnie Aplikacja pełni rolę zapisu danych do pliku, zgodnie z tym, co znajdzie w obiekcie Wynik. Zamiast tego kolega proponuje przekazać plik do obiektu Calculator i przepuścić go przez łańcuch, aby rzeczy były zapisywane bezpośrednio w pliku. Dodatkową kwestią jest to, że musimy mieć tylko jeden plik wyjściowy, więc gdy program działa równolegle, tylko węzeł główny musi pisać do pliku wyjściowego, który jest identyfikowany przez ścieżkę bezwzględną i ze względu na ograniczenia naszej surowej biblioteki IO nie może być dostępne przez procesy podrzędne MPI. Potrzebujemy niezależnej opinii. Co byś zrobił ? **Edytuj** : dzięki. Rozdzielam głosy i nagrody tak bardzo, jak tylko mogę, ponieważ wyraźnie nie ma prawidłowej odpowiedzi, tylko zestaw informacji zwrotnych.


title: Najlepszy przegląd współczesnych paradygmatów C++?

text: Kiedyś intensywnie pisałem C++ od 8 do 10 lat temu. Od tego czasu przeszedłem do C# z powodów zawodowych. Jednak od czasu do czasu widzę stwierdzenia typu > „Jeśli nadal ręcznie śledzisz odwołania do wskaźników, robisz to > źle” lub > „C++ jest całkowicie bezpieczne, o ile używasz nowoczesnych koncepcji, takich jak RAII i > nie przydzielać pamięci ręcznie, jak programista odzyskiwania C." Obie te czynności były standardową procedurą dekadę temu. Widziałem, że C++ został ostatnio znacznie ulepszony; Zwłaszcza C++ 0x wydaje się mieć nowe możliwości. Jakie jest najlepsze źródło informacji dla programisty „C/starego C++”, aby zaznajomić się z „nowoczesnymi” wzorcami i praktykami C++?


title: Telepraca u zagranicznego pracodawcy jako praca stała

text: Czy ktoś ma jakieś doświadczenie w telepracy (praca w domu) dla firmy z siedzibą w jakimś obcym kraju? Nie mam tu na myśli pracy na kontrakcie, ale mniej lub bardziej stałą pracę. Czy jest to w ogóle możliwe, jakie są opcje płatności i czy można oczekiwać zapłaty według zwykłych stawek dla tego kraju lub znacznie mniej? Czy jest jakaś kontrola godzin pracy, czy jeśli dostarczasz na czas, wszystko jest w porządku.


title: Ile szczegółów na temat historyjki użytkownika może oczekiwać programista?

text: Największą wadą programowania zwinnego, jakiej doświadczyłem, jest to, że osoby nie zaangażowane w rozwój koncentrują się na mantrze, że historyjka użytkownika (3-10 idealnych osobodni) nie powinna zawierać więcej niż 1-3 zdań, takich jak: > Jako klient mogę skorzystaj z wyszukiwania wolnego tekstu, abym mógł znaleźć produkty > szukam. Wydając to zdanie, kierownicy projektów oczekują, że jako programista zobowiążę się do oszacowania i rozwinięcia historii. Zakładają, że programowanie zwinne oznacza, że zdania takie jak to to wszystko, co mają do zaoferowania programistom. Nie będę ich winić, ponieważ dobrze znana literatura na temat zwinnego rozwoju sprawia wrażenie, że to faktycznie zadziała. Przeczytałem coś w rodzaju 2 stron w języku naturalnym na historię w "Planning XP", ale to wszystko. Ponieważ „działające oprogramowanie” jest przedkładane nad „obszerną dokumentację”, ten temat wydaje się być generalnie pomijany. Rzeczywistość jest oczywiście taka, że jeśli deweloper ma taką możliwość, wywiad z klientem pokazuje długą listę wymagań, jakie klient ma w odniesieniu do historii: > * Potrzebujemy operatorów logicznych, takich jak AND i OR. > * Potrzebujemy wyszukiwania rozmytego we wszystkich terminach. > * Musimy wyszukiwać według pojedynczych słów, jak również według frazy. > * Nie chcemy znaleźć produktów spełniających kryteria X, Y i Z. > * Chcemy posortować wyniki. A tak przy okazji, użytkownik może wybrać > kryteria sortowania w polu kombi z opcjami a, b i c. > Widzisz więc, że nie mówię o szczegółach technicznych ani o projektowaniu oprogramowania, ani nawet o szczegółach implementacji. To czyste wymagania. Im dłużej rozmawiamy, tym bardziej klient uświadamia sobie, że tak naprawdę jest dużo do powiedzenia na temat tego, czego chce. Ale dość często znajduję się w sytuacji, że takie informacje nie są podawane lub są bardzo tandetne. Ani nie jest możliwe, żebym przeprowadzał wywiad, ani osoba, która byłaby w stanie przeprowadzić rozmowę, nie dostarcza mi jej wyniku. Czasami menedżerowie wymyślają nawet szczegóły techniczne, takie jak „Chcemy wyszukać Lucene”, ale nie chcą zastanawiać się, czy chcą znaleźć tylko nazwy produktów, czy też opisy produktów. Czasem wydaje mi się, że są po prostu leniwi ;) Dla mnie jest to najważniejsza kwestia w projektach, w których pracuję (aplikacja webowa e-biznesowa, 500-2000 osobodni na projekt). Dosyć często odnoszę się do tego problemu, a menedżerowie mają świadomość, że większość programistów ma problem z tą sytuacją. Uważają jednak, że programiści są po prostu zbyt „perfekcjonistami”. Wydają się zirytowani, że programiści „zawsze chcą mieć wszystko określone”. Ze względu na brak ogólnie uznanych liczb trudno się spierać. Każdy wie, jak długo powinna trwać iteracja. Ale nikt nie jest w stanie powiedzieć, ile wymagań jest potrzebnych, aby oszacować i opracować historię. Czy masz jakieś referencje?


title: Jak oceniana jest cena strony internetowej?

text: Nie potrafię znaleźć dobrego sposobu na zadanie tego pytania: Codziennie czytam wiadomości o wyprzedaży „Twittera”, „Friendstera” czy „hi5”. Chciałabym wiedzieć, jak wyceniane są ceny takich stron internetowych?


title: Chcę opublikować moje slajdy dla studentów

text: Chcę stworzyć stronę internetową do przesyłania moich slajdów dla uczniów, ale nie chcę korzystać z publicznych witryn, w których każdy może zobaczyć moje slajdy, chcę, aby tylko moi uczniowie mogli je oglądać i pobierać. jakie są najlepsze rzeczy, które mogę zrobić? Czy na przykład używam WordPressa (nie jestem pewien, czy mogę przesłać moje slajdy w WordPressie, czy nie)? A może jest jakiś łatwy do zainstalowania i używania skrypt do tego celu?


title: Dlaczego C++ „to” jest źle zaprojektowane?

text: 1) Dla każdego „a” i „b”, które są niestałymi wskaźnikami tego samego typu, możesz zrobić „a = b;”, prawda? 2) Wewnątrz niestałych funkcji składowych istnieje słowo kluczowe `this`, które jest wskaźnikiem niestałym. Więc logicznie, jeśli `b` jest tego samego typu co `this`, można również zrobić `this = b;`, prawda? Zło. Nie możesz zrobić `this = b;`, ponieważ `this` używa składni wskaźnika, ale logicznie `this` jest referencją! Ale dlaczego, u licha, „to” jest syntaktycznie wskaźnikiem, ale logicznym odniesieniem? Czy to dziwne zachowanie można poprawić w kolejnym standardzie C++, wprowadzając nowe słowo kluczowe, na przykład `me`, które będzie się odwoływać nie tylko logicznie, ale także składniowo? (Zobacz także moją próbę rozwiązania tego problemu tutaj: Czy dobrym pomysłem jest „#define me (*this)” ?)


title: Czy jako użytkownik interfejsu API tolerowałbyś wyjątki BestPractice?

text: Jestem w trakcie projektowania API, którego częścią jest zapisywanie POCO do bazy danych. W C# mamy strukturę `DateTime`. Wartość „domyślna” dla tego (`DateTime.MinValue`) to 01/01/0001. Część interfejsu API serializuje POCO do bazy danych. Jeśli pole daty jest opcjonalne, powinno _naprawdę_ dopuszczać wartość null (w składni C# byłoby to zdefiniowane jako `DateTime?`). Tym, czego chciałbym uniknąć, jest to, że programiści wpadają w pułapkę zapisywania `DateTime.MinValue` do bazy danych _w ogóle_. To na pewno aktualna data - ale czymś pachnie. Więc zastanawiam się nad implementacją klasy `BestPracticeException`, która zostałaby rzucona w takich okolicznościach jak ta. Jeśli użytkownik API naprawdę musi poradzić sobie z tą datą, prawdopodobnie musi również zająć się datami wcześniejszymi i potrzebuje zupełnie innej struktury (np. Porównanie liczby miesięcy, które upłynęły między 500 rokiem p.n.e. a dniem dzisiejszym). Czy uważasz, że generalnie zapobieganie zapisowi 01/01/0001 do bazy danych jest dobrą rzeczą? Ktoś mógłby argumentować, że trzeba odróżnić brak wprowadzonej daty od użytkownika, który nic nie wpisuje. Moja odpowiedź na to, że jest to funkcja szerszego procesu audytu, który by to wychwycił, a nie próba ustalenia intencji na podstawie wartości null lub nie null w polu.


title: Skąd mam wiedzieć, że freelancer (programista) przekazał mi wartość moich pieniędzy?

text: Zatrudnię programistę PHP do zbudowania strony internetowej. Ich stawka wynosi 70$ za godzinę. Wydaje się, że ma dobre portfolio i doświadczenie. Skąd mam wiedzieć, że otrzymam dobrą witrynę, która jest skalowalna i łatwa w utrzymaniu? Czy proszę ich, aby dali mi próbki kodu, abym mógł go przejrzeć (jestem programistą, ale nie robiłem zbyt wiele w PHP)? Jakie są dobre referencje dla programisty PHP? doświadczenie z Drupalem? LAMPA?


title: Problem w zrozumieniu algorytmu z TAOCP „Mnożenie permutacji w formularzu cyklu”

text: Nie jestem w stanie zrozumieć jednego algorytmu omówionego w tomie 1 TAOCP; Sekcja 1.3.3 nazwana jako „Algorytm A” opisana jako „Mnożenie permutacji w formie cyklu” w porównaniu z podanym przykładem na następnej stronie. Niejasny krok jest wymieniony w 8 i 9 wierszu;tj. w jaki sposób wartość „BIEŻĄCA” może zmienić się w „g” po poprzedniej iteracji, w której wartością BIEŻĄCĄ było „d”? Więcej informacji można znaleźć w „The Art of Computer Programming Volume 1” autorstwa Knutha (sekcja 1.3.3). Zawiera szczegółowy opis tego algorytmu. Szczegółowy algorytm: **Algorytm A (Mnożenie permutacji w postaci cyklu).** Ten algorytm bierze iloczyn cykli, taki jak (6), i oblicza wynikową permutację w postaci iloczynu rozłącznych cykli. Dla uproszczenia nie opisano tutaj usuwania cykli singletonowych; byłoby to dość proste rozszerzenie algorytmu. W miarę wykonywania tego algorytmu sukcesywnie „tagujemy” elementy formuły wejściowej; oznacza to, że w jakiś sposób zaznaczamy te symbole formuły wejściowej, które zostały przetworzone. * A1. [Pierwszy krok.] Oznacz wszystkie lewe nawiasy i zastąp każdy prawy nawias oznakowaną kopią elementu następującego po pasującym lewym nawiasie. (Patrz przykład w Tabeli 1.) * A2. [Otwórz.] Przeszukując od lewej do prawej, znajdź pierwszy nieoznakowany element danych wejściowych. (Jeżeli wszystkie elementy są oznaczone, algorytm się kończy.) Ustaw START na równą wartość; wypisz lewy nawias; wyprowadź element; i otaguj to. * A3. [Zobacz BIEŻĄCY.] Ustaw BIEŻĄCY równy następnemu elementowi formuły. * A4. [Skanuj formułę.] Idź w prawo aż do końca formuły lub do znalezienia elementu równego CURRENT; w tym drugim przypadku oznacz go i wróć do kroku A3. * A5. [CURRENT = START?] Jeżeli CURRENT i-START, wyślij CURRENT i wróć do kroku A4, zaczynając ponownie od lewej strony wzoru (w ten sposób kontynuując opracowywanie cyklu na wyjściu). * A6. [Zamknij.] (Znaleziono pełny cykl w danych wyjściowych.) Wpisz prawy nawias i wróć do kroku A2.


title: Gdzie należy umieścić metody, które wykonują żądanie HTTP, aby uzyskać dane z usługi sieciowej w rozwoju iOS?

text: Mam Model Car w mojej aplikacji na iOS, gdzie jego parametry takie jak nazwa, rok, wartość itp. są pobierane z serwisu internetowego w celu wypełnienia listy danymi samochodów. **Gdzie powinienem umieścić metodę, która asynchronicznie trafia do serwera i zwraca tablicę samochodów (ta metoda już konwertuje JSON na tablicę Car)?** Moje obecne podejście to metoda statyczna w mojej klasie Car, która otrzymuje HttpClient (więc jestem w stanie przetestować to, wyśmiewając klienta) i zwraca NSArray samochodów, czy to dobrze? Co zrobiliście w tej sytuacji? Jestem zaniepokojony, ponieważ niedawno zacząłem czytać czysty kod, który mówi, że klasa powinna robić tylko jedną rzecz, a sposób, w jaki ją teraz mam, wydaje się robić 2 rzeczy (przechowywać informacje o samochodzie i uzyskać listę samochodów).


title: Obiekty statyczne i współbieżność w aplikacji internetowej

text: Zajmuję się tworzeniem małych aplikacji internetowych Java na serwerze Tomcat i używam MySQL jako bazy danych. Do tej pory używałem singletona połączenia do uzyskiwania dostępu do bazy danych, ale odkryłem, że zapewni to tylko połączenie na aplikację i będą problemy, jeśli wielu użytkowników będzie chciało uzyskać dostęp do bazy danych w tym samym czasie. (Wszyscy muszą nas zmusić do korzystania z tego pojedynczego obiektu Connection). Stworzyłem `Connection Pool` i mam nadzieję, że jest to właściwy sposób działania. Ponadto wydaje się, że wyrobiłem sobie zły nawyk tworzenia wielu statycznych obiektów i statycznych metod (głównie dlatego, że miałem błędne wrażenie, że każdy statyczny obiekt będzie duplikowany dla każdego klienta, który ma dostęp do mojej aplikacji). Z tego powodu wszystkie klasy usług (klasy używane do obsługi danych z bazy danych) są statyczne i dystrybuowane przez `ServiceFactory`: public class ServiceFactory { private static final String JDBC = "JDBC"; prywatny statyczny Impl; prywatne statyczne konto usługi AccountService; prywatne statyczne BoardService boardService; public statyczna Usługa Konta getAccountService(){ initConfig(); if (accountService == null){ if (impl.equalsIgnoreCase(JDBC)){ accountService = new JDBCAccountService(); } } return kontoUsługa; } public statyczna BoardService getBoardService(){ initConfig(); if (boardService == null){ if (impl.equalsIgnoreCase(JDBC)){ boardService = new JDBCBoardService(); } } powrót boardService; } private static void initConfig(){ if (StringUtil.isEmpty(impl)){ impl = ConfigUtil.getProperty("service.implementation"); // Jeśli konfiguracja nie powiodła się, inicjalizacja przy użyciu standardu if (StringUtil.isEmpty(impl)){ impl = JDBC; } } } To była klasa fabryczna, która, jak widać, pozwala na istnienie tylko jednej usługi w dowolnym momencie. Czy to zła praktyka? Co się stanie, jeśli, powiedzmy, tysiąc użytkowników jednocześnie uzyska dostęp do usługi „AccountService”? Wiem, że wszystkie te pytania i złe praktyki wynikają ze złego zrozumienia atrybutu statycznego w aplikacji internetowej i sposobu, w jaki serwer obsługuje te atrybuty. Jakakolwiek pomoc w tym temacie byłaby mile widziana. Dziękuję za Twój czas!


title: Trwałość danych dla transakcyjnych wiadomości e-mail klientów

text: Rozwijam system do obsługi wysyłania maili transakcyjnych do naszych klientów. Oto jak to działa: 1. Zdarzenie ma miejsce podczas cyklu życia zamówienia, na przykład 'wysłano' 2. To zdarzenie spowoduje utworzenie wiadomości e-mail w bazie danych (kolejka e-mail) 3. Oddzielna usługa Windows odpytuje bazę danych tabela dla nowych wiadomości e-mail do wysłania. Gdy ją znajdzie, wywołuje usługę sieciową ze wszystkimi wymaganymi danymi. Obowiązkiem serwisu internetowego jest obsługa faktycznego wysłania wiadomości e-mail. Moje pytanie dotyczy kroku 2. W przypadku wystąpienia zdarzenia wyzwalającego wiadomość e-mail, czy powinienem zrobić migawkę wszystkich danych wymaganych przez usługę (w ten sposób duplikując dane i wprowadzając nowe tabele), czy też należy pobrać wymagane dane z transakcyjnych tabel baz danych tylko na punkt, w którym jestem gotowy, aby zadzwonić do usługi sieciowej. [Uwaga: w ogóle nie przejmuję się treścią e-maila, wszystko, co robię, to przekazywanie danych do usługi sieciowej. Szablony e-maili itp. są obsługiwane przez inny system. Moją troską jest wyłącznie kolejkowanie powiadomienia e-mail i przekazanie wymaganych danych do usługi sieciowej.]


title: Dekompilatory — mit czy fakt?

text: Ostatnio myślałem o bezpieczeństwie aplikacji, plikach binarnych i dekompilatorach. (FYI- Decompilers to tylko anty-kompilator, celem jest odzyskanie kodu źródłowego z pliku binarnego) * Czy istnieje coś takiego jak "Doskonały Dekompilator"? czy pliki binarne są bezpieczne przed inżynierią wsteczną? (Dla jasności, przez "Doskonały" rozumiem oryginalne pliki źródłowe ze wszystkimi nazwami zmiennych/makrami/funkcjami/klasami/jeśli to możliwe komentarzami w odpowiednich nagłówkach i plikach źródłowych użytych do uzyskania pliku binarnego) * Jakie są jedne z najlepszych praktyki stosowane w celu zapobiegania inżynierii wstecznej oprogramowania? Czy to poważny problem? * Czy zaciemnianie/uprawnienia do plików to jedyny sposób na zapobieganie nieautoryzowanym włamaniom do skryptów? (nazwij mnie ćpunem, jeśli powinieneś)


title: Co to jest idiomatyczne użycie dowolnych bloków w C?

text: Blok to lista instrukcji do wykonania. Przykłady pojawiania się bloków w C to po instrukcji while i instrukcji if while (wyrażenie logiczne) OR blok if (wyrażenie logiczne) OR blok C pozwala również na zagnieżdżenie bloku w bloku. Mogę użyć tego do ponownego użycia nazw zmiennych, załóżmy, że naprawdę lubię 'x' int x = 0; podczas gdy (x < 10) { { int x = 5; printf("%d",x) } x = x+1; } wypisze liczbę 5 dziesięć razy. Myślę, że widziałem sytuacje, w których pożądane jest utrzymanie liczby nazw zmiennych na niskim poziomie. Być może w ekspansji makro. Nie widzę jednak żadnych twardych powodów, aby potrzebować tej funkcji. Czy ktoś może mi pomóc zrozumieć zastosowania tej funkcji, dostarczając kilka idiomów, w których jest używana.


title: Jaki jest skalowalny i praktyczny sposób wyszukiwania istnienia grupy ciągów w ogromnym pliku?

text: **Kontekst** : Zbudowałem aplikację, która generuje około **1000 nazw domen** na podstawie danych wprowadzonych przez użytkownika. Muszę sprawdzić, czy są one **dostępne, czy nie**, dopasowując je do ogromnego pliku strefy przeanalizowanych nazw domen, który ma około **2 GB**. Mam instancję amazon micro i nie mogę tam przechowywać pliku tekstowego z powodu ograniczeń miejsca. Spodziewam się około **100–200 tys.** i więcej w **zapytaniach** miesięcznie. **Podejście naiwne** (potencjalnie): 1\. Zapisz plik tekstowy w Dropbox. Następnie pobierz zawartość pliku, wyszukaj ciągi i wypluj dostępne nazwy domen w instancji EC2. Muszę tylko sprawdzić, czy domeny istnieją, czy nie. **Czy muszę przechowywać to w bazie danych?** Trochę informacji: Obecnie według Verisign zarejestrowanych jest 100 milionów nazw dot com. A moje przeanalizowane nazwy domen to jedna w każdym wierszu. Na przykład: * GOOGLE * APPLE * FACEBOOK * STACKOVERFLOW itp. Jaki jest najlepszy i praktyczny sposób rozwiązania problemu? Idealnie sprawdzenie powinno zająć tylko kilka sekund. Ale nie mam nic przeciwko wszystkim, co działa w tym momencie.


title: Czytelnicy Algorytm pisarzy - pomoc - głód i brak głodu

text: Znalazłem ten link, jako wyjaśnienie problemu r/w - http://pages.cs.wisc.edu/~bart/537/lecturenotes/s7.html Ale mam problemy ze zrozumieniem, czy jest tu jakiś głód i dlaczego? A jeśli tak, to co należy zmienić? Byłbym również wdzięczny za pomoc w potwierdzeniu odpowiedzi na pytania, które znajdują się poniżej wykładu: > * Czy pierwszy autor, który wykona Lock.P() jest gwarantowany jako pierwszy > autor, który uzyska dostęp do danych? > Nie? > * Czy OKToRead może kiedykolwiek osiągnąć więcej niż 1? A co z OKToWrite? > Tak i nie?


title: dlaczego nie ma natywnego kompilatora C# lub innego „produktywnego” języka?

text: Czytałem o D i Go io tym, jak mają być kompilowane do kodu maszynowego, ale są wygodne (jak zbieranie śmieci, nie ma potrzeby manipulowania wskaźnikami, jeśli nie jest to konieczne) i zgadzam się, że taki język jest potrzebny. Jednak projektanci zarówno Go jak i D z jakiegoś powodu postanowili wymyślić nowy język. Czemu? Dlaczego nie wykorzystać istniejącego języka, który jest popularny, okazał się produktywny, ale nie jest skompilowany do kodu natywnego, takiego jak C#? Jakie są tego przyczyny technologiczne? Czy trudno byłoby zaimplementować garbage collection (D robi), linq lub coś zupełnie innego?


title: Czy aplikacje mogą zastąpić układ klawiatury systemu operacyjnego?

text: Posiadamy własną aplikację .NET, z której można korzystać w wielu językach. Ostatnio otrzymaliśmy dziwny błąd polegający na tym, że podczas korzystania z naszej aplikacji użytkownik nie mógł wprowadzać znaków akcentujących (hiszpański, Win 7) w innych aplikacjach (np. MS Word lub Notatnik). Dziwne, co! Czy ktoś natknął się na podobny błąd? Jeśli tak, jak to rozwiązałeś?


title: Rozwój oparty na testach i doskonalenie umiejętności testowania białych skrzynek

text: Jestem początkującym programistą Java prosto ze szkoły. Mam dobrą wiedzę i doświadczenie z J2SE. Czy ktoś może mi doradzić, jak poprawić lub dostroić swoje umiejętności do bycia testerem Java White Box? Mile widziany szeroki zakres wejść. A co to jest Test Driven Development?


title: Jak mogę używać Scrum z zespołem freelancerów?

text: Pracuję w startupie. Mam doświadczenie w pracy zespołowej i zarządzaniu, ale obecnie jestem jedynym programistą. Mamy projekt, który będzie angażował kilku programistów w postaci 2 freelancerów. Będę funkcjonować jako programista i ScrumMaster. Projekt ma trwać od trzech do czterech miesięcy. Trzech programistów (ja i dwóch freelancerów) nigdy wcześniej ze sobą nie współpracowało. Czy byłoby możliwe lub wskazane wykorzystanie Scrum do zarządzania tego typu projektem? Czy byłyby jakieś problemy z organizacją lub prowadzeniem zespołu za pomocą Scrum?


title: Czy można rozwijać się wbrew odkrytej bibliotece innej firmy?

text: Jeśli znajdziesz sposób na interakcję z interfejsem API usługi sieciowej, który nie jest publicznie udokumentowany jako dostępny i może emulować go w tworzonej aplikacji, czy jest to niezgodne z prawem? Co więcej, czy pobieranie opłat za produkt, który tworzysz w celu interakcji z tymi usługami, jest nielegalne (być może wystarczy odniesienie do strony trzeciej)? Przykładem może być, powiedzmy, Google nie reklamowało, jak przeprowadzić wyszukiwanie w twoim programie, ale dowiedziałeś się, jak i sprawiłeś, że ludzie mogą wyszukiwać inaczej niż to, jak Google je przedstawia, czy możesz zbudować na podstawie usługi, którą odkryć i sprzedać jego wersję?


title: Jaka jest standardowa praktyka zapobiegania nieuzasadnionym oczekiwaniom użytkowników?

text: Istnieje pewna usługa sieciowa do przetwarzania danych oparta na subskrypcji – użytkownicy płacą za pośrednictwem PayPal za prawo do korzystania z usługi. Dokument „Warunki świadczenia usług” przygotowany przez prawników wyraźnie mówi, że nie ma żadnych gwarancji, więc klienci nie mogą wnieść pozwu. Teraz usługa nie zawsze działa bezproblemowo. Czasami występują problemy z siecią i dlatego jest nieosiągalny dla niektórych klientów. Czasami występuje problem z usługami stron trzecich, od których zależy usługa. Więc około dwunastu godzin rocznie to nie działa. To nie jest idealne, ale IMO bardzo dobrze. Jednak klienci czują, że skoro za to zapłacili - to musi po prostu działać, kropka, cały czas i nawet wypisują roszczenia o odszkodowanie do obsługi serwisowej. Przypuszczam, że po prostu nie czytają „warunków świadczenia usług”, ale nie mogę być pewien. Jaka jest standardowa praktyka (oprócz „warunków świadczenia usług”), aby zapobiec nieuzasadnionym oczekiwaniom użytkowników?


title: Jak zoptymalizować wywołania do wielu interfejsów API jednocześnie i zwracać jako jeden zestaw?

text: Mam teraz aplikację internetową, która przeszukuje 2 interfejsy API. Mam własną usługę sieci Web Restful, którą wywołuję, i wykonuje całą pracę na zapleczu, aby asynchronicznie wywoływać 2 interfejsy API i łączyć je w jeden zestaw wyników, z którego ma korzystać moja aplikacja sieci Web. Chcę to przeskalować i dodać jak najwięcej innych interfejsów API (obecnie patrzę na około 10 więcej). Ale kiedy dodaję interfejsy API, wywołanie mojej usługi staje się (potencjalnie) wolniejsze i bardziej złożone. Jak obsłużyć jeden interfejs API, który nie odpowiada ... i inne pojawiające się problemy? Jaki byłby najlepszy sposób na podejście do tego? Czy powinienem utworzyć wywołanie usługi dla każdego interfejsu API, w ten sposób każde z nich jest niezależne i nie jest połączone ze wszystkimi innymi wywołaniami? Czy istnieje sposób na zapleczu, aby obsłużyć wiele wywołań interfejsu API bez dodatkowej złożoności, którą to dodaje? Jeśli pójdę drogą wywołania usługi na API, teraz mój kod klienta staje się bardziej złożony (a mam wielu klientów)? I to więcej pracy dla klienta, a ponieważ mam aplikacje mobilne, będzie to kosztować klienta większe zużycie danych. Jeśli skorzystam z jednego zgłoszenia serwisowego, czy istnieje sposób na skonfigurowanie jakiegoś połączenia, abym mógł zwrócić dane, gdy je otrzymam, na wypadek gdyby jedno zgłoszenie serwisowe się zawiesiło?


title: Porównywanie moich umiejętności z Java i programowaniem internetowym

text: oto moje główne pytanie: **Jaki jest najczęstszy sposób, w jaki Java jest używana w tworzeniu stron internetowych?** Powód, o który pytam: Obecnie jestem w trakcie szukania mojego _pierwszego_ stażu. Każdy pracodawca ma osobny zestaw języków, technologii i akronimów, które chcą, aby ich kandydaci znali. * W szkole dobrze sobie radziłem z Javą. * Jako hobby i zainteresowania opracowałem garść widżetów stron internetowych, skryptów itp. Moja uczelnia kładła nacisk na _Java_ , C i teorię. Moje hobby skupia się na HTML, PHP, JavaScript, CSS, odrobinie jQuery itp. Nie potrafię nauczyć się kilkunastu różnych technologii, aby zadowolić większość potencjalnych pracodawców (w tym, co zostało z lata). Myślę, że najlepiej połączyć swoje umiejętności z Javą i moje zainteresowania tworzeniem stron internetowych. To sprowadza mnie do mojego pierwotnego pytania: _Jaki jest najczęstszy sposób, w jaki Java jest używana w tworzeniu stron internetowych?_


title: Bezsensowny kod w twoim źródle

text: Słyszałem o tym historie od starszych programistów i sam widziałem niektóre z nich. Wydaje się, że istnieje więcej niż kilka przypadków, w których programiści pisali bezsensowny kod. Zobaczę takie rzeczy jak: > * Wywołania metod lub funkcji, które nie mają żadnej wartości. > * Nadmiarowe kontrole wykonywane w oddzielnym pliku klasy, obiekcie lub metodzie. > * wyrażenia `if`, które zawsze dają prawdę. > * Wątki, które się wykręcają i nie robią nic wartego uwagi. > Żeby wymienić tylko kilka. Powiedziano mi, że dzieje się tak, ponieważ programiści chcą celowo wprowadzać w błąd kod, aby podnieść swoją wartość dla organizacji lub upewnić się, że powtarzają się biznesy w przypadku pracy kontraktowej lub zleconej na zewnątrz. Moje pytanie brzmi. Czy ktoś jeszcze widział taki kod? Jaki był twój wniosek, dlaczego tam był ten kod? Jeśli ktoś napisał taki kod, czy możesz powiedzieć dlaczego?


title: Co to jest oprogramowanie „Open Core”?

text: Co oznacza termin oprogramowanie „Open Core”?


title: Czy istnieje "SMACCS" dla jQuery?

text: Swoje wykorzystanie skalowania jQuery uważam za proporcjonalne do oczekiwań użytkowników i aplikacji RIA. rozwój. Problem polega na tym, że nie jestem jQuery Guru. Szukam kilku fajnych praktyk, które również nie wymagają głębokiej znajomości js/jquery. Artykuł, na który natknąłem się dzisiaj, zainspirował mnie do zadania tego pytania. Czy istnieje tak prosty zestaw ogólnych wytycznych dotyczących jQuery? Nie czytałem jeszcze "javascript the good parts", więc szukam podstawowych rzeczy.


title: W jakim stopniu Twój styl ma/powinien sugerować Twoje umiejętności językowe?

text: Dwie rzeczy, które zauważyłem w zeszłym tygodniu, które mnie zastanawiają: * Wywiad, w którym sprawdziłem moje umiejętności Perla. Zawsze używam pętli w stylu C i używam mapy mniej więcej raz na 10 000 linii kodu, więc prawie zawsze muszę się do niej odwoływać przed jej użyciem. Chociaż potrafię interpretować inne kody za pomocą tego, to nie jest to mój styl, a to z powodów związanych z czytelnością i łatwością przełączania między językami. Przynajmniej zrozumiałem, że byłem na to skłonny. * Ta odpowiedź na moje pytanie, w której osoba odpowiadająca przystąpiła do refaktoryzacji i kuloodporności mojego malutkiego skryptu. Przyznaję, że trochę mnie to obraziło i trochę zirytowało, chociaż rozumiem, jak to może być pomocne. Rozumiem, że w zespole mój styl będzie musiał dostosować się do tego, co zespół uznał za słuszne – jest to konieczne w każdym projekcie i każdy ma własne pomysły. Jednak czuję się, jakbym został osądzony za to, co jest syntaktycznie poprawny i czytelny kod. Ile waży styl Twojego mniejszego fragmentu kodu? Czy taki kod sugeruje innym, że nie mam kontroli nad językiem, ponieważ nie używałem wszystkich funkcji? Czy mój kod sugeruje, że nie jestem zaznajomiony z testowaniem jednostkowym i właściwym testowaniem, ponieważ nie zabezpieczyłem w pełni małego skryptu przed błędami?


title: Jak utworzyć projekt WinForms, który jest „gotowy do WPF”

text: Jestem programistą C#, który nie miał jeszcze przywileju uczenia się WPF. Jednak niedawno zainicjowałem fazę architektury nowego projektu, w którym spodziewam się, że ostatecznie wykorzysta WPF (prawdopodobnie; chociaż ASP.Net jest nadal opcją) - ale rozwój GUI nie rozpocznie się przez _kilka_ miesięcy. (Musimy uzyskać akceptację weryfikacji koncepcji opartej na WinForm, zanim przystąpimy do pełnego rozwoju na poziomie produkcyjnym). Kiedy będziemy gotowi do rozpoczęcia wdrażania GUI, albo sam nauczę się WPF, albo zatrudnię kogoś z doświadczeniem (najlepiej oba). Więc moje pytanie brzmi, jakie są kluczowe podstawy (wzorce projektowe, podstawy językowe itp.), które mógłbym zastosować od razu, co ułatwiłoby płynniejszą migrację w dół drogi? Na przykład mój kod jest modelem symulacyjnym, który będzie zawierał bardzo dużą liczbę jednostek, które ostatecznie będą musiały zostać „zwizualizowane” z interaktywnymi kontrolkami użytkownika. Czy istnieją pewne techniki, które, jeśli zostaną zaimplementowane od podstaw, sprawią, że okablowanie tych obiektów za pomocą WPF będzie później mniej bolesne? (Jak właściwości zależności, czy nie.) Podobnie, jeśli pozostanę przy podejściu MVC, które znam w tej chwili, czy będzie proste przekształcenie go w strategię MVVM później? Czy są jakieś proste koncepcje, które mógłbym zastosować teraz, które ułatwiłyby migrację, ale których opanowanie nie zajmie dwóch tygodni z mojego obecnego cyklu rozwojowego? Zasadniczo staram się postępować zgodnie z radą Wujka Boba, aby odłożyć decyzje architektoniczne (w tym przypadku warstwę GUI), dopóki absolutnie nie będę musiał ich podejmować. Ale chcę wiedzieć, czy istnieją jakieś niepotrzebne koszty migracji, których mógłbym uniknąć, gdybym je przewidział z wyprzedzeniem.


title: Dołączanie lokalnych danych MySQL do tych samych danych MySQL na serwerze WWW

text: mój szef IT chciał, aby taki scenariusz został zrealizowany: najpierw opracowujemy program dla absolwentów przy użyciu PHP i wdrażamy go na serwerze sieciowym, do którego absolwenci szkoły mają dostęp w Internecie, aby w każdej chwili aktualizować swoje dane osobowe. Następnie, używając dokładnie tego SAMEGO programu, musimy również wdrożyć to lokalnie, przez sieć LAN w jej kampusie satelitarnym, który jest daleko i ma bardzo nieregularne i zawodne połączenie internetowe. Celem jest to, aby ten ostatni system (w sieci LAN) nadal mógł być używany do dodawania nowych danych absolwentów nawet w okresach „offline”, a następnie, gdy sygnał internetowy jest OK, lub teraz jest „online”, aby po prostu przesłać te dane offline- wygenerowane dane w MySQL do serwera WWW, na którym znajduje się TEN SAM program. Jak więc wykonać bezproblemowy transfer danych z tej bazy danych MySQL - z sieci LAN do serwera WWW - gdy sygnał online jest już stabilny? Dzięki za wszelkie rady...


title: Czy programista powinien być zmuszony do zapamiętywania szczegółów?

text: Wiele razy zapominam o swojej aplikacji. Nie zapamiętuję nazw tabel ani tego, co zrobiło zapytanie, i szukam tego, czego chcę. Lider mojego zespołu powiedział mi, że mam zapamiętać nazwy stołów, których używam. Czy programista musi `zapamiętać` nazwy tabel w bazie danych, nazwy klas...itd? A jeśli odpowiedź brzmi „Tak, cały czas”, co powinienem zrobić, aby zapamiętać te rzeczy?


title: Dlaczego dobrze jest nie polegać na zmianie stanu?

text: To pytanie wynika z pytania Czy warto uczyć się Haskella? Generalnie pojawia się kilka często powtarzanych stwierdzeń na temat tego, jak Haskell poprawia twoje umiejętności kodowania w innych językach, a ponadto dzieje się tak dlatego, że Haskell jest bezpaństwowcem, i to dobrze. Czemu? Widziałem, jak ktoś porównuje to do pisania tylko lewą ręką, a może zamykania oczu na jeden dzień i polegania na dotyku. Z pewnością jest w tym coś więcej? Czy dotyczy to dostępu do pamięci sprzętowej, czy czegoś innego, co zapewnia duży wzrost wydajności?


title: Czy powinniśmy uważać na kłamliwy kod?

text: Chodzi o dyskusję w odpowiedzi i komentarze na pytanie: Co z niechęcią do dokumentacji w branży?. Odpowiedź brzmiała, że "kod nie może kłamać" i dlatego powinien być miejscem, do którego należy się udać, a nie dokumentacją. Kilka komentarzy wskazywało, że „kod może kłamać”. Po obu stronach jest prawda, przynajmniej częściowo ze względu na to, jak słabo i niewłaściwie prowadzona jest dokumentacja. Czy powinniśmy szukać kłamliwego kodu, porównując go z istniejącą dokumentacją? A może jest to zwykle najlepsze źródło tego, co ma robić? Jeśli jest to kod zwinny, czy jest mniej prawdopodobne, że kłamie, czy może ten kod w ogóle nie kłamie?


title: Czy Node.js jest bezpieczny w przyszłości?

text: Od ponad roku uzyskuję świetne wyniki z Node.js. Wszystko jest idealne i nie mógłbym być szczęśliwszy. Mam jednak wrażenie, że ten model nie potrwa długo i zostanie zapomniany, gdy tylko coś zastąpi JavaScript w przeglądarce, więc rozważam jak najszybszą migrację do Haskella lub podobnego. Czy Node.js jest technologią bezpieczną w przyszłości, czy może jest rozwiązaniem średnioterminowym?


title: Czy podczas korzystania z Gita wskazane jest używanie gałęzi master do aktywnego rozwoju?

text: Po pierwsze, trochę tła, jesteśmy w trakcie przenoszenia wszystkich naszych zespołów projektowych do korzystania z git i jesteśmy w trakcie określania wytycznych dotyczących organizacji repozytoriów, aby niektóre gałęzie mogły być również monitorowane pod kątem ciągłej integracji i automatyczne wdrożenie na serwery testowe. Obecnie rozwijane są dwa modele: 1. Pod silnym wpływem artykułu na nvie.com o udanym rozgałęzieniu z gałęzią master reprezentującą najbardziej stabilny kod, gałęzią rozwojową dla kodu z zakrwawioną krawędzią oraz gałęzią integracyjną dla kodu, który jest gotowy do testowania jakości. 2. Alternatywny model, w którym gałąź główna reprezentuje kod rozwoju oprogramowania, gałąź integracji dla kodu gotowego do testowania kontroli jakości oraz gałąź produkcyjna dla kodu stabilnego, który jest gotowy do wdrożenia. W tym momencie jest to częściowo kwestia semantyki w odniesieniu do tego, co reprezentuje gałąź master, ale czy aktywny rozwój w gałęzi master jest rzeczywiście dobrą praktyką, czy też nie jest to tak istotne?


title: Architektura Entity-Component-System: interakcja między systemami

text: Studiuję filozofię architektury Entity-Component-System. Jak już o tym czytałem, typowy system encji ma: 1) **Entities** \- które są jedynie znacznikami ID, które mają pewną liczbę komponentów 2) **Components** \- które zawierają _dane_ dotyczące różnych aspektów podmiot, za który odpowiada komponent 3) **Systemy** \- aktualizujące odpowiednie komponenty każdej jednostki. Załóżmy, że system renderujący aktualizuje komponent renderujący lub po prostu rysuje obraz, który jest przechowywany w danych tego komponentu. System pozycyjny i ruchowy obsługuje pozycję i ruch każdej jednostki, która ma odpowiedni komponent. Stwierdzenia te wynikają z tego artykułu, który moim zdaniem stara się być jak najbardziej klarowny i czysty w swoich wypowiedziach - Autor nie wyjaśnił jednak, jak powinna być realizowana interakcja między systemami. Na przykład system renderujący musi znać dane z komponentu pozycyjnego encji, aby narysować go we właściwej pozycji. I tak dalej. Więc pytanie brzmi – jak zaimplementować interakcję pomiędzy różnymi systemami?


title: Jak podejść do obsługi szybko aktualizujących się przeglądarek internetowych?

text: Dzisiaj został wydany Firefox 5. Jeśli wszystko pójdzie zgodnie z planem, Firefox 7 wyjdzie do końca roku. Firefox przyjął model rozwoju przeglądarki Google Chrome, w którym numery wersji są w dużej mierze nieistotne, więc samo wspieranie „najnowszej (publicznie dostępnej) wersji” jest prawdopodobnie najlepszą strategią. Ale jak najlepiej to przetestować? Jak zauważyli moi ludzie z QA, jeśli powiesz klientowi, że obsługujesz „najnowszą wersję”, ale pojawi się wersja, która psuje twoją witrynę, to masz problem, ponieważ teraz stwierdziłeś, że obsługujesz przeglądarkę internetową, której nie t. A ponieważ zarówno Firefox, jak i Chrome aktualizują się teraz automatycznie, przeciętny człowiek prawdopodobnie nie ma pojęcia ani nie obchodzi, z jakiej wersji korzysta. A posiadanie ich albo nie uaktualnienia, albo wycofania, nie jest trywialne. Zauważyłem, że istnieje wiele organizacji, które nakazują swoim pracownikom używać IE (szef działu IT podpisuje się pod szkołą myślenia Microsoftu) lub nakazuje swoim pracownikom używać Firefoksa (szef działu IT zapisuje się do szkoły niezabezpieczonej IE). myśli), więc ciągłe aktualizowanie Chrome nie stanowiło problemu. Ale teraz, gdy Firefox jest członkiem tego klubu, widzę, że wkrótce stanie się to większym problemem. Domyślam się, że w przypadku Firefoksa kanał Aurora jest kluczem, ale jak najlepiej podejść do jego testowania? Czy powinniśmy naprawić wszystko, co pojawia się jako problem w Aurorze, czy powinniśmy poczekać, aż zbliża się planowana premiera? Czy ludzie automatyzują takie rzeczy?


title: Nauka Erlanga vs nauka node.js

text: Widzę mnóstwo bzdur w Internecie o tym, jak Erlang skopuje tyłek node.js w niemal każdej możliwej kategorii. Więc chciałbym nauczyć się Erlanga i spróbować, ale tutaj jest problem. Zauważyłem, że jest mi znacznie trudniej odebrać Erlanga niż zbierając node.js. Dzięki node.js mogłem wybrać stosunkowo złożony projekt i w ciągu jednego dnia coś działało. Z Erlangiem napotykam bariery i nie idę tak szybko. Więc... dla tych z większym doświadczeniem, czy Erlang jest trudny do nauczenia, czy po prostu czegoś mi brakuje? Node.js może nie jest idealny, ale wydaje mi się, że jestem w stanie za jego pomocą wszystko załatwić.


title: Dlaczego wydaje się, że wybór „niewłaściwego” języka do nauki wiąże się z dużym strachem?

text: Być może to tylko ja, ale jako obecny student CS natknąłem się już na wiele pytań na tej stronie i gdzie indziej, nie tylko na temat „Którego języka powinienem używać dla x?” ale także „Czy ktoś nadal używa języka Y?” Moje pierwsze zajęcia CS były prowadzone w Scheme, który, jeśli się nie mylę, nie jest powszechnie używany (przynajmniej w porównaniu z językami takimi jak Java, PHP, Python itp.). Wielu moich kolegów z klasy wzdragało się przed koniecznością nauki języka, którego nigdy więcej nie będą musieli używać, ale nie do końca rozumiem, skąd bierze się tak duża część strachu przed nauką mniej popularnych języków. Nie, nie mogę używać programu w żadnej pracy, ale na pewno nie żałuję, że nauczyłem się go używać (choć w bardzo początkujący, niezbyt dogłębny sposób w tym jednym semestrze). W tym semestrze biorę udział w zajęciach z wyszukiwarek, które odbywają się w Perlu i znowu widzę, jak koledzy z klasy narzekają na wybór języka. Rozumiem, że mam ulubiony język i nie lubię innych, ale dlaczego niektórzy tak się denerwują, że się go uczą? Czy naprawdę możesz nauczyć się „niewłaściwego” języka? Czy uczenie się czegoś takiego jak Scheme lub Haskell nie jest dobrym ćwiczeniem umysłowym, jeśli nic więcej, i przydatne przynajmniej w ekspozycji na różne sposoby rozwiązywania problemów?


title: Czy mogę użyć Rubiego do zautomatyzowania wszystkiego?

text: Codziennie spotykam się z różnymi typami aplikacji (internetowych, GUI, wiersza poleceń itp.) na różnych platformach (Windows, Linux itp.). Jest dla mnie świetna okazja do automatyzacji zadań za pomocą skryptów. Ale prawie każdy typ aplikacji i platformy ma swój **natywny** język skryptowy lub narzędzia (takie jak VBScript i PowerShell dla Windows, skrypty Bash dla Linuxa, Selenium dla aplikacji internetowych i AutoIt dla aplikacji GUI itp.). Zabija mnie uczenie się i utrzymywanie tak wielu języków skryptowych. Mam wrażenie, że Ruby może łatwo współpracować z różnymi platformami i jest bardzo wyrazisty. Więc moje pytanie brzmi: 1. Czy można użyć Rubiego do oskryptowania wszystkiego? 2. Jeśli tak, jakie są główne wady w porównaniu z **natywnym** językiem skryptowym każdej platformy?


title: Podczas sprawdzania transponowanych wartości dnia i miesiąca między dwiema datami — czy porównanie 11/11/2000 i 11/11/2000 powinno zwrócić prawdę czy fałsz?

text: Przyjęcie funkcji z podpisem logicznym isTransposed(Date date1, Date date2); Przykładowe wyniki: data1 data2 Wynik 06.02.2000 02.06.2000 prawda 02.06.2000 06.02.2000 prawda 02.06.2000 brak fałsz 06.02.2000 02.06.1987 fałsz 11.11. 2000 11.11.2000 prawda 04.04.2001 04.04.2000 Fałsz To prawda, że zachowanie można udokumentować, ale co sądzisz o `isTransposed('11/11/2000', '11/11/2000')` zwracając „prawda” werset „fałsz”?


title: Czy powinienem być w stanie projektować dobre interfejsy i tworzyć wysokiej jakości treści?

text: Właśnie wchodzę na ostatni rok studiów, więc zacznę szukać pracy jako programista i chciałem tylko wiedzieć, jak ważna jest umiejętność projektowania dobrze wyglądających interfejsów i tworzenia dobrej jakości treści w praca programistyczna? Pytam tylko dlatego, że mam problemy z kreatywnością z powodu dysleksji, ale jeśli otrzymam projekt do zrobienia (np. zdjęcie lub jakiś opis), jestem w stanie zrobić to na wysokim poziomie, czy wpłynie to na moje opcje kariery?


title: Interakcja kontrolera i modelu

text: Jestem całkiem nowy w MVC i staram się lepiej to zrozumieć. Istnieje nieskończona ilość informacji na temat teorii i ogólnych obowiązków każdej części aplikacji MVC, o których sporo czytałem, ale ciągle zgaduję, jaka jest moja implementacja. Obecnie mam konfigurację aplikacji, w której mój "Model" zapewnia szereg metod, które skutecznie wykonują pracę CRUD na danych aplikacji. Metody takie jak `add_document(nazwa, ścieżka)` i `update_account(id, code, name, status)` W tym momencie to działa, ale wydaje się to niezgrabne, ponieważ faktycznie muszę zdecydować, czy chcę napisać metodę aktualizowania każdego właściwość obiektu modelu, czy chcę jednej metody, która może obsłużyć aktualizację dowolnej właściwości dla danego obiektu. Wszystkie te metody współdziałają z obiektami modeli w SQLAlchemy (zestaw narzędzi Python db i ORM). Ostatnio rozważałem możliwość przekazywania obiektów ORM tam iz powrotem między modelem a kontrolerem. Kontroler zmieni właściwość, a następnie przekaże obiekt z powrotem do Modelu, który będzie obsługiwał sesje, zatwierdzenia i warunki błędów. Chociaż wydaje się to o wiele łatwiejsze niż pisanie mnóstwa metod CRUD, wydaje się również, że przełamuje podział odpowiedzialności, pozwalając kontrolerowi w ogóle dotykać obiektów ORM… Miałem nadzieję, że uzyskam tutaj wskazówki. Czy cała masa operacji CRUD jest normalna w aplikacjach MVC? Czy dopuszczalne jest przekazywanie obiektów ORM między modelem a kontrolerem — gdzie kontroler zawsze aktualizuje właściwości tylko wtedy, gdy model obsługuje sesję i pracę bazy danych? Jestem również otwarty na alternatywne pomysły na eleganckie rozdzielenie obowiązków.


title: Czy często używanie stałych int jako parametrów w komunikacji między obiektami jest uważane za zły projekt?

text: Aplikacja, nad którą pracuję, została zaprojektowana przy użyciu MVC. Komponenty często oddziałują ze sobą, przekazując stałe int, które następnie muszą być interpretowane za pomocą instrukcji `if`. Zastanawiam się, czy jest to uważane za zły projekt OO. (Nie konkretnie z MVC, ale ogólnie). Na przykład: Gdy użytkownik kliknie określony przycisk, do kontrolera jest informowany widok `controller.somethingHappened(Controller.SOME_INT_VALUE);` Widok używa stałej wartości int w kontrolerze jako komunikatu informującego o tym, co się stało. Kontroler musi wtedy mieć wiele instrukcji `if`, aby zinterpretować komunikat z widoku. Np.: public void cosHappened(int message){ if(message == AN_INT_VALUE) doSomething(); if(komunikat == INNA_INT_WARTOŚĆ) doSomeThingElse(); if(komunikat == A_DIFFERENT_INT_VALUE) doAnotherThing(); } W rezultacie kontroler przekazuje do modelu kolejną wartość int, jako komunikat, aby coś zrobić. Tj. `model.doCoś(Model.SOME_INT_VALUE);`. Co zmusza model do posiadania zestawu instrukcji `if`: public void doCos(int message){ if(message == AN_INT_VALUE) doSomething(); if(komunikat == INNA_INT_WARTOŚĆ) doSomeThingElse(); if(komunikat == A_DIFFERENT_INT_VALUE) doAnotherThing(); } Skutkuje to zarówno kontrolerem, jak i modelem, które mają wiele funkcji „jeżeli” do zinterpretowania odbieranych komunikatów. **Czy jest to uważane za brzydkie i/lub zły projekt?** Czy powinienem spróbować przekazać rzeczywiste obiekty do metod, czy też wykonać bardziej szczegółowe wywołania metod - zamiast przekazywać stałe, które muszą być interpretowane za pomocą kilku „jeżeli”? **Czy ta praktyka używania wielu stałych jako komunikatów jest rozsądna?** Jeśli jest to uważane za zły projekt, jak mogę tego uniknąć? _(Uwaga: na potrzeby tego pytania odnoszę się również do wyliczeń)_.


title: jak przejść z C++ na java

text: Mam na swoim koncie kilkuletnie doświadczenie zawodowe w C++. Ostatnio postanowiłem poszukać nowej pracy i okazało się, że znalezienie pracy w C++ nie jest już takie proste jak kiedyś. Prawie wszystkie oferty pracy i head hunterzy są dostępne na rynku dla programistów Java/C#. Mimo że mam pewne doświadczenie z Javą, to nie wystarczy, żebym zainteresował się jakąkolwiek z firm, do których aplikowałem. Postanowiłem, że po otrzymaniu nowej pracy (jak się wydaje w C++) muszę ubrudzić sobie ręce Javą lub C# . Obecnie moim jedynym planem jest dołączenie lub rozpoczęcie własnego projektu open source. Ale czy to wystarczy? Czy taki projekt może zastąpić 2-3 lata pracy w firmie handlowej? Czy istnieje inny sposób na przejście?


title: Opisz logikę biznesową za pomocą diagramów

text: Obecnie tworzę aplikację webową do swojej pracy magisterskiej. Zostałem poproszony przez mojego profesora o wykonanie diagramów opisujących logikę biznesową. Ponieważ nie mam wcześniejszego doświadczenia, jestem dość zdezorientowany z całą terminologią. Udało mi się wyjaśnić, myślę, czym są reguły biznesowe i logika biznesowa, ale nie mogę się dowiedzieć, jak opisujesz logikę biznesową. Czy jest to coś szczególnego, czy bardziej ogólnego? Czy muszę uczyć się UML? Czy fakt, że używam MVC wpływa na sposób, w jaki to opiszę?


title: Zastępowanie porównań ciągów wyszukiwaniami w słownikach

text: Biorąc pod uwagę 2 ciągi s1 i s2, jeśli wykonam prostą kontrolę równości, zostanie to uznane za O(n) podczas obliczania wydajności algorytmu. Tak więc, jeśli używam podejścia brute force dla pytania obróconego podciągu, wydajność wynosi O (n ^ 2) (weź drugi podciąg, obróć o 1 i sprawdź. Powtarzaj, aż obroty = strlen lub dopasowane). Jednak wyszukiwanie słownika jest uważane za O(1). Gdybym zamiast tego użył słownika, w którym jedyny element ma wartość fikcyjną i klucz = s1. Następnie zamiast porównywania ciągów sprawdziłem istnienie s2 w słowniku, czy moja złożoność nie spadłaby do O(n)? Intuicyjnie nie ma to dla mnie sensu, więc domyślam się, że jedno z moich założeń jest błędne...


title: Co robisz, kiedy wydaje się, że nie rozumiesz jakiejś części programowania?

text: Uczę się nowych języków, piszę kod do bardzo podstawowych programów w wielu językach i chodzę na zajęcia. Czytałem książki, artykuły, lekcje, filmy, co tylko chcesz, ale wydaje mi się, że nie mogę pojąć pewnych rzeczy. Na przykład nigdy nie rozumiałem wskaźników - w czym są dobre. (NIE JEST CZĘŚCIĄ PYTANIA - ponowne oznaczenie za pomocą "wskaźnika" nie jest wymagane...) * * * Moje pytanie nie brzmi jednak, co robią wskaźniki, ale jak mogę zrozumieć takie rzeczy? Jeśli po przeczytaniu książki lub artykułu o pewnej części programowania nie rozumiem, co mam zrobić? Pisanie kodu w określonej funkcji programowania z pewnością pomaga, jednak w rzeczywistości nie pomaga w zrozumieniu za bardzo. Część teoretyczna jest ważna w zrozumieniu.


title: Przegląd kodu Gerrita, czy model widelca i ciągnięcia na Github?

text: Rozpoczynam projekt oprogramowania, który będzie rozwijany przez zespół ORAZ przez społeczność. Wcześniej sprzedawano mnie na gerrit, ale teraz model widełek i żądań ściągnięcia na Github wydaje się prawie zapewniać więcej narzędzi, sposobów wizualizacji zatwierdzeń i łatwość użycia. Dla kogoś, kto ma choć trochę doświadczenia z obydwoma, jakie są plusy i minusy każdego z nich, a co byłoby lepsze dla projektu zespołowego, który chce pozostawić otwartą możliwość rozwoju społeczności?


title: Konta Microsoft Dev Center

text: Wygląda na to, że Microsoft oferuje specjalną ofertę 95% rocznej subskrypcji dla Phone Dev Center (nic nie mówiłem o desperacji). Zastanawiałem się, czy potrzebujesz oddzielnego konta do publikowania w Centrum aplikacji Windows Phone i Centrum aplikacji Windows? Słyszałem też przerażające historie o tym, ile czasu zajmuje opublikowanie aplikacji na rynku Windows Phone, czy ktoś ma z tym jakieś doświadczenie? Centrum deweloperów Windows Phone Centrum deweloperów aplikacji Windows


title: Kiedy używałbyś wielu języków w jednym projekcie?

text: Kiedy rozważyłbyś włączenie innego języka do swojego projektu? Niektóre domeny są z natury wielojęzyczne (interakcja z bazą danych, interaktywny rozwój po stronie klienta internetowego), ale inne można zrobić za pomocą jednego języka, a pomysł wprowadzenia innego języka może bardziej utrudnić zrozumienie niż mu pomóc. Obecnie mam wysokowydajny kod w C++, który wymaga również sporej ilości rutynowych manipulacji plikami i i\o, co byłoby łatwiejsze i szybsze do poprawnego napisania w języku wyższego rzędu, takim jak Python. Szczerze mówiąc, nie znam zbyt dobrze C++, jeśli chodzi o biblioteki 3rd party, w tym Boost.


title: Jak uniknąć delikatnych testów jednostkowych?

text: Napisaliśmy blisko 3000 testów — dane zostały zakodowane na sztywno, bardzo mało kodu zostało ponownie użyte. Ta metodologia zaczęła nas gryźć w tyłek. Wraz ze zmianami systemu coraz więcej czasu spędzamy na naprawie zepsutych testów. Prowadzimy testy jednostkowe, integracyjne i funkcjonalne. To, czego szukam, to ostateczny sposób na pisanie łatwych do zarządzania i utrzymania testów. **Frames** * FakeItEasy * nUnit * AutoFixture


title: Złożoność a łatwość konserwacji w nowoczesnym sprzęcie

text: Dzisiaj, kiedy nowoczesny sprzęt i pamięć są tanie, jaki sens ma poświęcenie wysiłku na analizę algorytmów lub złożoności struktury danych? Czy nie byłoby lepiej zamiast tego skupić się na czystym, łatwym w utrzymaniu i czytelnym kodzie niż na optymalizacjach pod kątem złożoności? Uwaga: nie mówię o systemach wbudowanych lub systemach z podobnymi rodzajami ograniczeń.


title: Metody dystrybucji/shardingu UDP

text: Obecnie wysyłam wiadomości UDP do serwera, który obsługuje i przetwarza wiadomość. Aby przetwarzanie było bardziej skalowalne, chciałbym mieć jakiś mechanizm autoskalowania dla serwerów odbierających. Mam dwa pomysły: 1.) Użyj technologii równoważenia obciążenia UDP 2.) Dystrybuuj wiadomości po stronie klienta. W przypadku drugiej opcji aktualizowałbym listę serwerów odbierających po stronie klienta za pomocą wątku w tle na kliencie i uderzałbym w jakiś wewnętrzny interfejs API i okresowo pobierał zaktualizowaną listę. Moje pytanie brzmi, czy to brzmi jak rozsądna metoda? Czy coś takiego jak zookeeper byłoby do tego dobre? Przechowywałby listę serwerów i był pobierany przez klientów.


title: Jutro wygłoszę wykład na temat rozwoju Androida. Jakieś tematy, które powinienem omówić?

text: Zostałem poproszony przez lokalny oddział Association for Computing Machinery o wygłoszenie wykładu na temat rozwoju Androida i chociaż mam już kilka tematów do omówienia, byłem ciekawy, czy społeczność SO ma jakieś sugestie dotyczące rzeczy, o których warto by było usłyszeć . Wybrane w ten sposób: * OpenGL * Korzystanie z funkcji sprzętowych (kamera, dźwięk, akcelerometr, multitouch) * Dobre praktyki w zakresie interfejsu użytkownika * Integracja z mediami społecznościowymi


title: Algorytm znajdowania odwrotnych duplikatów par uporządkowanych

text: Biorąc pod uwagę tablicę uporządkowanych par wartości, czy istnieje dobrze znany algorytm do znajdowania odwrotnych duplikatów? [Odwrotność oznacza te same wartości, ale w odwrotnej kolejności.] To znaczy, biorąc pod uwagę [ab,ac,ad,bc,bd,ca,db], czy istnieje skuteczny sposób na znalezienie ca i db, będących odwrotnymi duplikatami dla ac i bd? Aplikacja jest dość prosta: uporządkowane pary to krawędzie w grafie skierowanym, a jeśli istnieje krawędź odwrotna, to zamiast jednej krawędzi w każdym kierunku rysuje się pojedynczą krawędź o podwójnym końcu. Wartości są ciągami, będącymi nazwami węzłów. Może być oglądany jako wyszukiwanie w rzadkiej tablicy. Mając podane współrzędne (a,b), sprawdź, czy (b,a) istnieje. Jednak popularne języki programowania (wydaje się) nie zapewniają rzadkich tablic 2d. Napisałem rozwiązanie w ruby używając hash-of-hash, ale jest to około 20 linijek niezręcznego kodu i niezadowalający wynik. Pisanie tego samego kodu w języku takim jak C# lub Java byłoby dłuższe. Poszukuje się lepszego rozwiązania w dowolnym wygodnym języku (lub pseudokodzie). * * * Nie próbowałem zdefiniować „efektywnego” lub „lepszego”, a wydajność nie jest nadrzędnym czynnikiem przy rysowaniu kilkuset węzłów. Węzły nie są sortowane, więc domyślnym algorytmem dla każdej pary byłoby utworzenie wyszukiwania odwrotnego i brute-force w poprzedniej połowie. Wyszukiwanie binarne wymagałoby wcześniejszego sortowania. Rozwiązanie oparte na indeksowaniu hash powinno być znacznie szybsze.


title: Jaki jest najlepszy język dla prostej aplikacji desktopowej z dynamicznym interfejsem graficznym w systemie Windows 7?

text: [Uwaga: mam nadzieję, że nie łamię etykiety, ale pierwotnie zamieściłem tutaj wariant tego pytania, ale pytam tutaj ponownie, ponieważ teraz robię to wyłącznie z pytaniem o programowanie.] Chciałbym zaprogramować następujące proste forma: 1. Użytkownik może wyprodukować X liczbę ramek o zmiennym rozmiarze (analogicznie do ramek HTML). 2. Każda ramka służy jako prosty edytor tekstu, do którego można wpisać i zapisać całą konfigurację, w tym okna i tekst o zmienionym rozmiarze. 3. Użytkownik powinien mieć możliwość na przemian „zamrażania” i prezentowania informacji oraz „odmrażania” i edycji ramek. Będzie to więc skrzyżowanie kalendarza z edytorem tekstu. Nie obchodzi mnie, czy jest to aplikacja internetowa, czy nie. Jakie języki są idealne do takiej konfiguracji? Znam trochę C, Pythona i Html i jestem gotów nauczyć się innych, jeśli zajdzie taka potrzeba. Wydaje mi się, że powinien to być stosunkowo łatwy program do zrobienia, ale potrzebuję trochę wskazówek przed rozpoczęciem. EDYCJA: Mój system operacyjny to Windows 7.


title: Pytania dotyczące tworzenia responsywnych stron internetowych Fluid VS

text: Jak rozumiem, stanowią one podstawę do kierowania na szeroką gamę urządzeń w oparciu o rozmiar przeglądarki, biorąc pod uwagę, że generowanie różnych układów skierowanych do różnych/konkretnych urządzeń i ich rozdzielczości byłoby czasochłonne. * * * ## Pytania: * * * * Po pierwsze w żargonie, czy jest jakaś różnica między tymi dwoma, czy oznaczają to samo? * Czy bezpiecznie jest klasyfikować obecny rozwój głównie oparty na html5/css3? * Jakie popularne frameworki są dostępne, aby łatwo to zaimplementować? * Jakie metody badawcze zastosowano w tym zakresie? * Jakie są najczęstsze problemy ze zgodnością w przypadku różnych typów przeglądarek? * Rozumiem, że istnieją metody takie jak ta http://css-tricks.com/resolution-specific-stylesheets/ **co to obejmuje?**. * Czy istnieją jakieś zewnętrzne metody wykrywania przeglądarki poza wywołaniami API specyficzne dla przeglądarki, które są stosowane w tym zakresie? * * * **Użyteczne miejsca [wstępne badanie przed zadawaniem tych pytań]** 1. Dlaczego nie należy brać pod uwagę „responsywnego” projektowania stron internetowych? 2. Porady dotyczące projektowania responsywnych stron internetowych, najlepsze praktyki i techniki dynamicznego skalowania obrazu 3. Najnowsza lista samouczków 30 samouczków dotyczących projektowania i tworzenia responsywnych stron internetowych autorstwa Erica Shafera z 14 maja 2012 r. * * * ## projektowanie treści dla różnych układów w celu ułatwienia responsywnego projektowania stron internetowych polega na przedstawieniu najistotniejszych informacji. teraz oczywiście między najmniejszą a najwyższą szerokością ekranu brakuje nam elementów projektu. Zbieram stąd http://flashsolver.com/2012/03/24/5-top-commercial- responsive-web-designs/ Top of the line design layouts (szerokości) to * układ pulpitu (980px) * układ tabletu (768px) * Układ smartfona – poziomy (480px) * Układ smartfona – portret (320px) Mamy również popularną stronę testową responsywnej strony internetowej http://resizemybrowser.com/, która zawiera listę różnych rozdzielczości ekranu. Natknąłem się również na to, próbując znaleźć optymalny najwyższy rozmiar układu, aby uwzględnić http://stackoverflow.com/questions/10538599/default-web-page-width-1024px-or-980px, który pozornie wydobywa na światło dzienne 1366x768 to popularna rozdzielczość internetowa. * Czy można bezpiecznie założyć, że wystarczyłoby uwzględnienie prawidłowego skalowania od szerokości 980 pikseli wzwyż do rozmiaru maksymalnego, aby to uwzględnić? biorąc pod uwagę, że nie przedstawiamy żadnych nowych informacji dla nowego rozmiaru. * Czy ma sens posiadanie dodatkowych informacji (które kolidują z celem responsywnego projektowania stron internetowych) w celu wykorzystania najwyższego rozmiaru i nie tylko?


title: Jak radzić sobie z ludźmi, którzy kłamią w swoim CV

text: > **Komentarz moderatora** > > Pamiętaj, że to jest **dwuletnie** pytanie, które właśnie zostało > przeniesione z Stack Overflow. Poświęć trochę czasu na przeczytanie **wszystkie** > odpowiedzi i zadaj sobie pytanie „czy moja odpowiedź coś do tego doda?”. Prowadzę wywiady techniczne na kilka stanowisk .NET. Wiele osób, z którymi przeprowadzam wywiady, naprawdę dobrze zna .NET, ale uważam, że co najmniej 90% upiększa swoje umiejętności w zakresie od „trochę” do „dość drastycznie”. Czasami wytwarzają umiejętności odpowiednie do stanowiska, o które się ubiegają, a czasami nie. Większość ludzi, z którymi przeprowadzam wywiady, nawet najbardziej bezczelni kłamcy, nie są oszustami. Chcą po prostu wyróżnić się z tłumu, więc umieszczają w swoim CV kilka modnych słów, takich jak „JBoss”, „LINQ”, „usługi internetowe”, „Django” lub cokolwiek innego, aby wzmocnić swój zestaw umiejętności i pozostać konkurencyjnym. (Możesz się zastanawiać, czy osoba, która kłamie na temat tych umiejętności, po prostu blefuje podczas wywiadu technicznego. Moje wywiady obejmują dużo praktycznego kodowania i rozwiązywania problemów – ludzie, którzy próbują blefować, będą bombardować praktyczną część kodowania w ciągu pierwszych 3 minut.) Są to dwa pytania otwarte, ale bardzo by mi to pomogło, gdy przedstawię moje zalecenia kierownikom ds. rekrutacji: wszystkie umiejętności, które twierdzą, że mają? Czy mogę to zrobić tak, aby kandydat nie czuł się nieswojo?** 2. **Jeśli chodzi o ostateczną decyzję, czy powinienem polecić kandydatów, którzy rzeczywiście mają kwalifikacje na stanowiska, o które się ubiegają, nawet jeśli sfabrykowali część swoich umiejętności? **


title: Logowanie w systemie wrażliwym na opóźnienia

text: Wymagania: 1. Moja aplikacja jest wrażliwa na opóźnienia. Liczy się czas reakcji na poziomie milisekund. Nie cały czas, ale kiedy działa, musi działać szybko. 2. Moja aplikacja musi rejestrować informacje o tym, co robiło w tamtych czasach. 3. Samo zapisywanie logów nie musi być tak szybkie, tylko działania. * Jednak pliki dziennika muszą być pisane z szybkością człowieka, innymi słowy, nie mogę ustawić `immediateFlush` na false. Tak więc, oczywiście, niektóre rodzaje rejestrowania są przenoszone do innego wątku. Używam logback jako ramy, ale dla niektórych rodzajów komunikatów dziennika nadal chcę odciążyć pracę do innego wątku. Oto jak obecnie działa system: * Każda część systemu wrażliwego na opóźnienia otrzymuje określony interfejs rejestratora. Każda z tych metod rejestrowania ma sygnaturę specyficzną dla rzeczy, o których wiem, że rejestrator będzie musiał rejestrować. * Dla każdego przypadku napisana jest implementacja `SimpleLogger`. To zapisuje do dziennika w tym samym wątku. * Napisałem również `ThreadedLogger`, który implementuje WSZYSTKIE interfejsy rejestrowania i otrzymuje „podstawową” implementację rejestratora wstrzykiwaną dla każdego rodzaju rejestratora. * Za każdym razem, gdy metoda dziennika jest wywoływana w `ThreadedLogger`, opakowuje żądanie w `SomeLogObject implementuje LogCommand`, wrzuca obiekt do `LinkedBlockingQueue` i zwraca. Jest to podobne do wzorca polecenia Go4 * Istnieje wątek zużycia, który blokuje na `BlockingQueue.take()` oczekiwanie na przybycie obiektów dziennika. Gdy to zrobią, wywołuje `LogCommand.execute()`, który wywołuje odpowiednie metoda w kopii zapasowej `Logger` w `ThreadedLogger`. * Obecnie implementacje `LogCommand` są bardzo głupie. Po prostu wywołują odpowiednią metodę we właściwym wstrzykniętym loggerze. Próbuję zdecydować, czy powinienem dokonać refaktoryzacji tego systemu. Obecnie, jeśli muszę stworzyć nowe miejsce do wykonywania tych odciążonych logów, muszę stworzyć: * Nowy interfejs * Nową implementację tego interfejsu * Dwa nowe powiązania DI (jedno dla prostego rejestratora, jedno dla `ThreadedLogger` backer) * Nowa implementacja `LogCommand` * Nowa metoda tworzenia tego obiektu `LogCommand` * Kod do wstrzykiwania i przechowywania jako pola odpowiedniego loggera w `ThreadedLoggger` Wydaje mi się, że dużo prościej byłoby odciążyć tworzenie `LogObject` dla wywołujących wątków, ale obawiam się, że jeśli to zrobię, ujawnię zbyt wiele wewnętrznych działań systemu dziennika. Nie jest to koniecznie problem, ale wydaje się nieczyste. Inną możliwością byłoby połączenie funkcjonalności prostych implementacji rejestratora z ich odpowiednimi obiektami dziennika, tak aby obiekty zmieniły się z „Jestem obiektem, który rejestruje dane dziennika” na „Jestem zdarzeniem dziennika, które wie, jak rejestrować ja", a te obiekty mogą być tworzone przez fabrykę dzienników.


title: Czy mieszanie wywołań JDBC SQL i używanie ORM w aplikacji jest złym projektem oprogramowania?

text: Czy posiadanie JDBC/surowego SQL i używanie ORM to zły projekt oprogramowania? Nie mam nic przeciwko używaniu ORM do standardowego CRUD, ale niektóre zapytania są lepsze w SQL (dla mnie). Nie opowiadam się za lub przeciw ORM-om. Czytam o nich, aż sinieję na twarzy. Użyłem JDBC w moim pytaniu, ale mógł to być DBI lub inny interfejs bazy danych. ORM może być dowolnym z nich. A co z pielęgnowalnością? Czy mieszanie strategii by to skomplikowało? Według mnie łatwość utrzymania aplikacji staje się jeszcze bardziej rozmyta, jeśli jest to język skompilowany, a nie język skryptowy. Muszę przekompilować Javę. Nie muszę przekompilowywać Pythona ani PHP. Jeśli mój kod SQL znajduje się w warstwie modelu, czy to coś zmieni? EDYCJA: Jeśli używam znajdź punkt, w którym muszę użyć SQL w moim ORM, w moim modelu, jakiego rodzaju dane są odsyłane? Nie będę mógł na przykład użyć czegoś takiego jak person.save('somevalue'), prawda?


title: Rozwiązania do zarządzania projektami

text: * Zespół składa się z **3** osób. * Metodą rozwoju jest **Scrum**. * Językiem projektu jest **C++**. * Projekt będzie pod kontrolą systemu **git**. * Budżet początkowy to **0**. **Należy wybrać następujące rzeczy:** 1. Numeracja kompilacji i wersji 2. Dokumentacja projektu (plik z najczęstszymi informacjami dla bieżącego etapu projektu, który będzie zmieniany za każdym razem, gdy nowa wersja lub podwersja projektu emerges ) 3. Narzędzie do zarządzania projektami ( jak Trac czy Redmine, nie mogę z nich korzystać, ponieważ nie ma hostingu ) 4. Dokumentacja kodu ( uważam Doxygen ) **Pojawiły się następujące pytania:** 1. Co możesz dodać do powyższą listę głównych rozwiązań do zarządzania projektami w opisywanym projekcie? 2. Jeden z trzech uczestników projektu ma Linux OS (bez MS Office), jeden Windows i MS Office (nie chce używać Libre ani Open Office), jeden Windows, ale nie ma MS Office. Jakich formatów, narzędzi możesz zaproponować w dokumentacji projektowej? Wariant korzystania z wiki online nie pasuje, muszą to być pliki. 3. OneNote mb jest dobrym narzędziem do zarządzania projektami, ale z powodów wymienionych powyżej nie jest to możliwe. Co możesz doradzić? 4. Zaoferuj system do numerowania kompilacji i wersji.


title: Biblioteka open source, czy właściciel projektu może zmienić licencję na bardziej restrykcyjną?

text: Firma wydaje bibliotekę z licencją open source MIT. Gdyby chcieli, czy mogliby zmienić licencję tak, aby była bardzo restrykcyjna, aby konkurencja nie mogła z niej korzystać? Jaki wpływ miałoby to na poprzednie wersje? Oznacza to, że jeśli 1 listopada uczynią ją bardzo restrykcyjną dla jakiejś innej licencji, czy wszystkie wersje przed 1 listopada będą nadal na MIT?


title: Jak zrealizowałbym ten pomysł na aplikację?

text: Jestem graczem D&D i programistą, który zawodowo pracował głównie z aplikacjami ASP.NET. Napisałem kilka botów w Node.js i tylko trochę bawiłem się PHP, ale nie napisałem nic poważnego. Miałem inspirację do stworzenia strony, która pozwala śledzić postacie (czyli arkusz postaci). Myślę o wykorzystaniu tego jako okazji do nauki noSQL i napisania pełnego front-endu javascript. Chcę, aby ta aplikacja zapisywała wartość, gdy ją zmienię. Więc jeśli edytuję klasę zbroi, jest ona zapisywana natychmiast, zamiast czekać, aż nacisnę przycisk przesyłania. Myślę, że ułatwi to korzystanie podczas grania i nic nie stracę, bo zapomniałem zapisać zmianę. Nigdy nie robiłem czegoś takiego. Jak realizujesz ten styl aplikacji? Czy jest tutorial lub jak wprowadzić mnie na właściwą ścieżkę? Chociaż bardzo chciałbym używać ASP.NET, ale nie mam serwera Windows do publikowania (i naprawdę nie stać mnie na opłacenie usługi). Jaki język działający w systemie Linux sprawdzi się w tego typu aplikacjach? Uwaga: Czuję, że noSQL zadziała w tym przypadku ze względu na samą liczbę tabel wymaganych do stworzenia czegoś takiego w SQL.


title: Czy istnieje sposób na dodanie unikalnych elementów do tablicy bez wykonywania mnóstwa porównań?

text: Proszę być ze mną, chcę, aby było to jak najbardziej agnostyczne językowo ze względu na języki, z którymi pracuję (jeden z nich to język o nazwie PowerOn). Jednak **większość języków obsługuje pętle i tablice.** Powiedzmy, że mam następującą listę w tablicy: 0x 0 Foo 1x 1 Bar 2x 0 Widget 3x 1 Whatsit 4x 0 Foo 5x 1 Bar Wszystko z 1 powinno być jednoznacznie dodane do innej tablicy z następującym wynikiem: 0x 1 Bar 1x 1 Whatsit Pamiętaj, że jest to bardzo elementarny przykład. W rzeczywistości mam do czynienia z dziesiątkami tysięcy elementów ze starej listy. Oto co mam do tej pory. Pseudo Kod: Dla każdego elementu w starejlisty Dla każdego elementu w nowejliście Porównaj Jeśli wartości staralista.element równa się nowalista.element, przerwij nową pętlę listy Jeśli osiągnął koniec nowej listy z niczym równym ze staralista, dodaj wartość ze starej listy do nowej listy End End **Czy istnieje lepszy sposób na zrobienie tego? Czy algorytmicznie można coś poprawić?** A jako dodatkowe pytanie, jaka jest notacja O dla tego typu algorytmu (jeśli taki istnieje)?


title: Utrzymywanie spójności danych w bazie danych ACID i wielu obiektach lub plikach

text: Mam bazę danych, która jest ACID. I mam inny magazyn danych, który nie jest relacyjny ani zgodny z kwasem. Powiedzmy, że to tylko kilka obiektów blob lub plików. Chcę się upewnić, że te dwa magazyny danych są zsynchronizowane, więc jeśli ktoś utworzy nowy plik, baza danych ma utworzony rekord. Jeśli ktoś usunie plik, rekord zostanie usunięty. i na odwrót. a jedna operacja nie może się odbyć bez drugiej, „jeśli ktoś chce umieścić książkę w bibliotece, musi ją umieścić w indeksie”. Jak się upewnić, że tak się stanie? Jeśli stworzę proces, który zapamiętuje jedną akcję i oczekuje drugiej, co się stanie, jeśli proces umrze przed wykonaniem drugiej akcji? Czy powinienem utworzyć jakiś dziennik zapisu z wyprzedzeniem, który mówi „Mam zamiar zrobić te dwie rzeczy, jeśli to czytasz, umarłem próbując zrobić X, cofnij Y”?