title: Jakich wzorców projektowych użyję dla tego algorytmu?

text: Muszę utworzyć ciąg przy użyciu następującego algorytmu: 1. Wygeneruj identyfikator GUID jako tablicę bajtów. 2. Przekonwertuj ten identyfikator GUID na ciąg. 3. Z tego ciągu pobierz kodowanie UTF-8 jako tablicę bajtów. 4. Z tej tablicy bajtów przemieszaj te bajty z inną tablicą bajtów. 5. Z tej tablicy bajtów pobierz kodowanie base64 jako ciąg. 6. Dołącz do tego łańcucha stałą łańcuchową. Jakich wzorców projektowych użyję? Myślę o konstruktorze i/lub łańcuchu odpowiedzialności, chociaż nie jestem pewien, czy poradziłbym sobie ze zmianą między typami tablicy ciągów i bajtów. **AKTUALIZACJA:** Programuję w języku obiektowym (C++, Java, C#). Kodowanie UTF-8 może ulec zmianie w wymaganiach, podobnie jak algorytm haszowania w kroku 4. Pytam o wzorce projektowe do dostosowania do zmiany wymagań.


title: Dokumentacja techniczna aplikacji na Androida

text: Dołączasz do zespołu programistów istniejącej aplikacji na Androida i otrzymujesz na ten temat dokument techniczny. Jakie informacje chciałbyś mieć?


title: Jakich praktyk C# należy unikać w C++?

text: Obecnie uczę się C++. Jestem bardzo biegły w C# i zastanawiałem się, które typowe praktyki w C# mogą prowadzić do trudności w C++ i co powinien zrobić programista C++.


title: Czym dokładnie jest Garbage Collector w Javie?

text: Myślę, że ogólnie wiem, co robi Garbage Collector w Javie, ale jest bardzo chwalony, więc pomyślałem, że może brakuje mi czegoś w jego funkcjonalności. Wiem tylko, że GC zajmuje się wymazywaniem z pamięci obiektów, które nie mają do nich odniesienia, a więc są nieosiągalne dla programisty. Na przykład, jeśli wewnątrz pętli ciągle tworzę `nowy Object()`, poprzednie zostaną w końcu usunięte przez GC (popraw mnie, jeśli się mylę). Jest to bardzo przydatne dla mnie jako programisty Java i oszczędza mi wiele bólu głowy, z którym, jak zakładam, muszą sobie radzić programiści C++ - ręczne usuwanie obiektów z pamięci (ponownie, popraw mnie, jeśli się mylę). Ta funkcja jest niesamowita, ale czy jest coś więcej w Zbieraczu śmieci? Czy czegoś mi brakuje?


title: Jak nazywasz swoje prywatne zmienne w C#?

text: Jaka jest najlepsza praktyka, najczęściej akceptowane konwencje nazewnictwa dla zmiennych prywatnych w C#? 1. private int myInteger; 2. private int MyInteger; 3. private int mMyInteger; 4. private int _myInteger; 5. private int _MyInteger; 6. Tajemnicza inna opcja Której używasz i Dlaczego? (Moja firma jest stosunkowo nowa w C# i chciałbym wybrać najbardziej „akceptowaną w branży” metodę, aby spróbować wejść w nasz standard kodowania).


title: Jak często należy sprawdzać poprawność danych w aplikacji internetowej opartej na bazie danych?

text: > **Możliwe duplikowanie:** > Walidacja danych wejściowych – gdzie? Ile? Biorąc pod uwagę, że mam aplikację internetową z formularzem skierowanym do użytkownika, który będzie przechowywać informacje w bazie danych (która będzie używana również przez inne aplikacje), wydaje mi się, że warto przeprowadzić walidację 3 razy: Po stronie klienta internetowego za pomocą javascript do zapisywania ogłoszeń zwrotnych na serwerze, gdy użytkownik wprowadzi złe dane lub zapomni pola Po stronie serwera, ponieważ nie możemy ufać, że klient sieciowy sprawdził dane i zapisuje wywołania do bazy danych, gdy dane są nieprawidłowe Po stronie bazy danych, ponieważ jest to jedyny sposób, aby upewnić się, że dane przechowywane w bazie danych są prawidłowe. Z jednej strony wydaje się to nadmierne i narusza zasadę DRY. Z drugiej strony wydajność byłaby zauważalnie inna, gdybym musiał złożyć żądanie, wysłać je do bazy danych i zwrócić błąd wygenerowany przez bazę danych z powodu złych lub brakujących informacji o użytkowniku. Jaka jest rozsądna ilość walidacji?


title: Ile walidacji danych to za dużo?

text: > **Możliwe duplikowanie:** > Walidacja danych wejściowych – gdzie? Ile? Jestem nowym programistą PHP i jestem trochę w Powershell, ale to pytanie jest niezależne od języka. Ostatnio sporo kwestionowałem mój kod, myśląc o tym, ile sieci powinienem skonfigurować, aby przechwytywać wyjątki, weryfikować wyniki itp. Zdaję sobie sprawę, że mógłbym zwariować, próbując zweryfikować każdą linijkę kodu, ale jednocześnie chcesz, aby kod był jak najbardziej odporny. Nie mówię o danych wejściowych użytkownika, ale o weryfikacji danych wyjściowych z metod. Czy istnieje jakaś norma lub zasada, którą należy się kierować przy podejmowaniu decyzji, kiedy i gdzie przeprowadzić walidację danych?


title: Czy JAXP natywnie analizuje HTML?

text: Tak więc przygotowuję szybki test w Javie 7, aby pobrać kilka elementów z losowych identyfikatorów URI i sprawdzić, czy wbudowane funkcje parsowania zrobią to, czego potrzebuję. Oto podstawowa konfiguracja (z pominięciem obsługi wyjątków itp.): DocumentBuilderFactory dbfac = DocumentBuilderFactory.newInstance(); DocumentBuilder dbuild = dbfac.newDocumentBuilder(); Dokument doc = dbuild.parse("uri-idzie-tutaj"); Bez zainstalowanego programu obsługi błędów metoda analizowania zgłasza wyjątki w przypadku krytycznych błędów analizy. Podczas pobierania standardowej strony indeksu katalogu Apache 2.2 z lokalnego serwera: SAXParseException z komunikatem _Wymagane są białe spacje między identyfikatorem publicznym a identyfikatorem systemowym._ Wygląda na to, że doctype jest w porządku, białe znaki i tak dalej. Kiedy pobierasz stronę z witryny wygenerowanej w Drupalu 7, nigdy się nie kończy. Wydaje się, że metoda parsowania zawiesza się. Bez wyjątków, nigdy nie wraca. Podczas pobierania http://www.oracle.com wyjątek SAXParseException z komunikatem _Typ elementu „meta” musi być zakończony odpowiednim znacznikiem końcowym „ </meta>”._ * * * Wygląda więc na to, że domyślny setup, którego tu użyłem nie obsługuje HTML, tylko ściśle napisany XML. Moje pytanie brzmi: czy JAXP może być używany od razu z openJDK 7 do parsowania HTML z natury (bez szalonych gestykulacji), czy może lepiej szukać parsera HTML 5? PS to jest coś, czego mogę nie open-source, więc licencjonowanie jest również problemem :(


title: Zapominając o scaleniu zmian z pnia do gałęzi

text: Ostatnio zapomniałem scalić zmiany z pnia do naszej gałęzi utrzymania. To spowodowało, że odbudowaliśmy - dwukrotnie - i wstrzymaliśmy kontrolę jakości na dwa dni, podczas gdy naprawiliśmy bałagan. Normalnie, kiedy zatwierdzam obie gałęzie, zatwierdzam pojedynczy zestaw zmian do linii głównej i natychmiast scalam go z gałęzią konserwacji. Jednak tym razem było 12 zestawów zmian obejmujących wiele zmian przeglądu kodu i nie udało mi się scalić wszystkich zmian. Połączyłem tylko jedną zmianę, co całkowicie mnie wyrzuciło — wydawało mi się, że pamiętam, że było to zbiorcze zatwierdzenie wszystkich innych zestawów zmian, ale tak nie było. Po krótkiej dyskusji na temat rozwoju zdecydowaliśmy, że najlepszym podejściem byłoby wykonanie zatwierdzeń 1 do 1 trunk i gałęzi konserwacji, aby można było wizualnie zweryfikować, czy cały kod tam jest. Czy istnieje sposób na wymuszenie zatwierdzeń zestawu zmian dla danej wersji poprawki? Używamy JIRA, Fisheye i Crucible, a nasz przepływ pracy Fisheye nie pozwoli Ci rozwiązać problemu, dopóki przeglądy kodu nie zostaną zakończone. Chciałbym coś podobnego, co wymuszałoby równoległe ewidencjonowanie w gałęziach trunk i konserwacji, w oparciu o wersję z poprawką określoną w wydaniu. A może jest lepsze rozwiązanie tego całego bałaganu poza „nie rób tego”?


title: W jaki sposób algorytmy uczenia maszynowego są integrowane z normalnymi programami?

text: Obecnie biorę udział w kursie uczenia maszynowego dla zabawy, a kurs koncentruje się głównie na Matlab/Octave do pisania kodu. Jedną z rzeczy wspomnianych w kursie jest to, że chociaż Matlab/Octave świetnie nadają się do prototypowania, są bardzo rzadko używane w algorytmach produkcyjnych. Zamiast tego algorytmy te są zazwyczaj przepisywane w C++/Python/itp., przy użyciu odpowiednich bibliotek, zanim dotrą do klientów. Słusznie; Rozumiem. Ale oto moje pytanie: czy jest to zrobione z powodów kulturowych, technicznych, czy też dlatego, że tak naprawdę nie ma języka, który zapewnia płynność podobną do Matlaba / oktawy, ale w skompilowanej formie, którą można połączyć z C/C++/`$MainstreamLanguage` ? Przemysł gier używa Lua do logiki gry, ponieważ jest łatwy do osadzenia i znacznie lepszy do wyrażania rzeczy takich jak sztuczna inteligencja. Podobnie istnieją warianty Prologa dla aplikacji z dużą ilością reguł, warianty Scheme dla kompilatorów i tak dalej. Jeśli istnieje język ekwiwalentu macierzy, to co to jest? Jeśli nie, dlaczego to pole jest inne?


title: Dlaczego Scala wymaga, aby funkcje miały jawny typ zwracany?

text: Niedawno zacząłem uczyć się programowania w Scali i do tej pory było fajnie. Bardzo podoba mi się możliwość deklarowania funkcji w ramach innej funkcji, która wydaje się po prostu intuicyjna. Jednym z irytacji, które mam na temat Scali, jest fakt, że _Scala wymaga jawnego typu zwracanego w swoich funkcjach_. I czuję, że to utrudnia ekspresję języka. Również programowanie z takim wymaganiem jest po prostu trudne. Może to dlatego, że pochodzę ze strefy komfortu JavaScript i Ruby. Ale w przypadku języka takiego jak Scala, który będzie miał mnóstwo połączonych funkcji w aplikacji, nie mogę sobie wyobrazić, w jaki sposób przeprowadzam burzę mózgów w mojej głowie dokładnie, jakiego typu konkretna funkcja, którą piszę, powinna zwracać z rekurencją po rekursji. Ten wymóg jawnej deklaracji typu zwracanej funkcji nie przeszkadza mi w przypadku języków takich jak Java i C++. Rekurencje w Javie i C++, kiedy już się zdarzały, często dotyczyły od 2 do 3 funkcji max. Nigdy kilka funkcji nie jest połączonych ze sobą jak Scala. Więc myślę, że zastanawiam się, czy istnieje dobry powód, dla którego Scala powinna mieć wymaganie funkcji mających jawny typ zwracany?


title: Dlaczego nie wszystkie firmy kupują deweloperom najlepszy sprzęt?

text: Chyba czegoś mi brakuje. Koszt zatrudnienia programisty w mojej okolicy to od 50 do 100 dolarów za godzinę. Maszyna z najwyższej półki kosztuje tylko 3000 USD, więc koszt zakupu naprawdę świetnego komputera co trzy lata wynosi 0,50 USD za godzinę. (3000 USD/(150 tygodni * 40 godzin)) Czy **potrzebujesz** maszyny _top-end_? Nie, 3000 dolarów tutaj ma reprezentować _największą kwotę, jaką można wydać_, a nie kwotę, której bym się spodziewał. To mniej więcej tyle, ile kosztuje topowy komputer iMac lub MacBook (17 cali). Załóżmy więc, że co trzy lata możesz zaoszczędzić 2000 USD, kupując tańsze komputery, a przeciętny programista zarabia 60 USD. (Są to najbardziej charytatywne liczby, jakie mogę zaoferować licznikom fasoli. Jeśli zaoszczędzisz tylko 1000 USD lub 750 USD, to tylko wzmocni moją argumentację.) Jeśli te tańsze komputery kosztują Cię tylko 10 minut wydajności dziennie. (Wcale nie jest to odcinek, jestem pewien, że moja maszyna kosztuje mnie więcej.) wtedy w ciągu 3 lat 125 straconych godzin spowodowałoby stratę 7500 USD. Strata 1 minuty dziennie (750 USD) dałaby zysk netto w wysokości 1250 USD, co z trudem zrównoważyłoby koszt słabego morale. Czy jest to przypadek „mądry za grosz i funt-głupi”, czy też nadmiernie uprościłem pytanie? Dlaczego nie ma powszechnej zgody (nawet w „przedsiębiorstwie”), że twórcy oprogramowania powinni mieć świetny sprzęt? **Edycja:** Muszę wyjaśnić, że nie mówię o chęci uzyskania niesamowitej wydajności, która wzbudziłaby zazdrość moich znajomych, i/lub dysku SSD. Mówię o maszynach ze zbyt małą ilością pamięci RAM, aby obsłużyć ich normalne obciążenie, co prowadzi do zawieszania się, ponownego uruchamiania i (bez przesady) około 20 minut na uruchomienie i otwarcie typowych aplikacji w normalny poniedziałek. (Nie wyłączam z wyjątkiem weekendów.) Właściwie mam zamiar wkrótce dostać nową maszynę, a to trochę poprawi sytuację. (Przejdę z 2 GB do 3 GB pamięci RAM, tutaj w 2011 r.) Ale ponieważ nowa maszyna jest przeciętna według obecnych standardów, można się spodziewać, że będzie ona również nie do zaakceptowania przed datą wycofania. **Czekać! zanim odpowiesz lub skomentujesz:** 1. 3000 $ nie ma znaczenia. Jeśli maszyna, której potrzebujesz, kosztuje mniej, to tym bardziej warto ją kupić. 2. Nie proszę o częstsze aktualizacje. Po prostu lepszy sprzęt w tym samym harmonogramie. Nie ma więc ukrytych kosztów instalacji itp. 3. Proszę nie dyskutować o różnicy między sprzętem „bleed edge” a bardzo dobrym sprzętem. Lobbuję za bardzo dobrym sprzętem, jak na maszynę, która w najgorszym przypadku jest jedną z najlepszych maszyn wyprodukowanych trzy lata temu. 4. 50 $ - 100 $ / godzinę to szacunkowy _koszt zatrudnienia_ \- a nie wynagrodzenie. Jeśli pracujesz jako wykonawca, będzie to stawka rozliczeniowa stosowana przez agencję zlecającą, która obejmuje ich wydatki i zysk, pracodawcy Social Sec. składka, składka pracodawcy na opiekę zdrowotną itp. Proszę nie komentować tego numeru, chyba że wiesz, że jest nierealistyczny. 5. Upewnij się, że dostarczasz nową zawartość. Przeczytaj wszystkie odpowiedzi przed podaniem kolejnej.


title: Ile powinienem zapłacić firmie Microsoft, sprzedając oprogramowanie komputerowe oparte na VB.NET?

text: Korzystam z bezpłatnego narzędzia Microsoft Visual Basic 2010 Express (pobranego stąd) do tworzenia aplikacji desktopowej z funkcjami bazy danych przy użyciu dostępu Microsoft jako bazy danych. Łączność jest realizowana przez OleDbConnection. Oprogramowanie jest teraz gotowe. Planuję sprzedać to za pieniądze. Oprogramowanie będzie kosztować klientów końcowych 400$. Ile i gdzie mam zapłacić firmie Microsoft?


title: Implementacja obsługi tablic o niestałej długości w kompilatorze

text: Myślę o zbudowaniu języka dla mikrokontrolerów PIC. Chcę móc używać tablic o niestałych rozmiarach, takich jak: 1. Zadeklaruj zmienną jako `int[]` 2. Czekaj na wejście z połączenia szeregowego 3. Ustaw zmienną _`input`_ długą. Myślę, że taka funkcja byłaby przydatna, ale nie wiem, jak mam to zaimplementować w kompilatorze, który kompiluje się do asemblera. Oczywiście chcę, aby tablice były przechowywane pod kolejnymi adresami rejestrów. Ponieważ pracuję z PIC, musi to być bardzo wydajne pod względem pamięci. Kiedy ktoś pisze `int[]`, nie sądzę, żeby rezerwowanie miejsca w pamięci dla zmiennej było jeszcze dobrym pomysłem, prawda? Wtedy tablica miałaby ustalony maksymalny rozmiar. Na przykład, gdy tablica otrzyma zarezerwowany adres pamięci 5-100, a inne zmienne otrzymają 4 i 101, tablica ma ustalone granice i nie może powiększyć się o więcej niż 96 rejestrów. Poza tym, kiedy od początku rezerwowałem pamięć, powiedzmy _x_ bajtów, a na końcu potrzebuję tylko _y_ bajtów, marnuję _x_ \- _y_ bajtów. Nie chcę tego. Oznacza to, że jedyną opcją, jaką widzę, jest inicjowanie macierzy i rezerwowanie miejsca w mikrokontrolerze w locie. Zajmie to oczywiście trochę pamięci i czasu wykonania. Myślałem o systemie takim jak ten: * Zainicjuj tablicę `int[` _`x`_`] = {int, int}` która przechowuje wskaźniki na początek i koniec tablic, które nie są inicjowane od początku - _` x`_ będzie maksymalną liczbą tablic (jest to ustępstwo, ale jest lepsze niż maksymalna długość dla wszystkich tablic) * Przechowuj zmienną _c_ = 0, aby wskazać liczbę użytych tablic * Przechowuj obramowania zainicjowanych (zarezerwowane ) pamięć gdzieś w zmiennej * Gdy tablica otrzymuje długość: * Umieść wskaźniki na początku (bieżąca granica) i na końcu (bieżąca granica + długość) w tablicy od pierwszego punktu pod indeksem _c_ * Przyrost _c_ chyba to by zadziałało (czy nie?), ale jest kilka wad, głównie dotyczących pamięci: muszę przechowywać tablicę, _c_ i bieżące granice pamięci jako obciążenie. Czy istniałby lepszy sposób na zaimplementowanie tablic o niestałych rozmiarach w języku dla mikrokontrolerów PIC? Moje wymagania to: * Niski narzut pamięci * Długość tablicy _nie_ musi być zmieniana w locie * W systemie, który wymyśliłem, nie można przechowywać wartości w tablicach, które nie zostały jeszcze zainicjowane. Gdyby istniał system, który mógłby przechowywać wartości w tablicy o nieokreślonej długości, byłoby to zaletą * Szybsze systemy (w czasie wykonywania nie ma znaczenia czas kompilacji) są preferowane


title: jak nazwać format „liczba sekund od epoki”?

text: Chciałem nadać dobrą nazwę zmiennej date_in_ (liczba sekund od formatu epoki). Wyszukałem to w Google i nie mogłem znaleźć nigdzie terminu do użycia. Jakieś pomysły?


title: Czy dobrym pomysłem jest wyznaczenie jednego z członków zespołu scrumowego lub scrum mastera na Właściciela Produktu?

text: Ostatnio mieliśmy projekt, w którym klient był zajęty zwiedzaniem. Jak zwykle powstał zespół scrumowy, zarząd zdecydował o wyznaczeniu naszego analityka jako Product Ownera, ponieważ Klient nie będzie mógł aktywnie uczestniczyć. Analityk był tym, który ściśle współpracował z klientem w zakresie analizy wymagań i opracowywania specyfikacji. Klient nie ma czasu na przeglądanie pierwszych dwóch wydań. Wszystko szło gładko, dopóki klient nie zobaczył trzeciego wydania; nie był zadowolony z niektórych funkcjonalności, które wprowadził make shift Product Owner (nasz analityk). Kazano nam poczekać, aż zespół projektowy zakończy makiety wszystkich stron, a klient sprawdzi każdą z nich i zatwierdzi do dalszej pracy. Zespół Scrum jest, ale żadnych sprintów – zakończyliśmy pracę prawie jak klasyczną metodą wodospadu. Czy dobrym pomysłem jest wyznaczenie członka zespołu scrum lub mistrza jako właściciela produktu? Czy musimy postępować zgodnie ze scrumem w przypadku braku udziału klienta/właściciela produktu?


title: Zmiana oszacowań story-point po zamknięciu historii

text: W trwającym wieloletnim projekcie wielozespołowym istnieje zestaw historii, które zostały w pełni oszacowane i zamknięte, spełniając definicję ukończenia. Czas upłynął, a możliwości w Jira Agile wzrosły, dzięki czemu bardziej przydatne jest grupowanie historyjek użytkownika za pomocą epiki, aby opisać całkowity cel zestawu historii. Opracowano i oszacowano nowe historie, które należą do tych samych eposów, jednak porównanie między starymi punktami fabularnymi a nowymi punktami fabularnymi nie może być dopasowane: nowe punkty fabularne są warte mniej na jeden punkt fabularny. Czy można ponownie oszacować ukończone historie, zwiększając liczbę punktów historii, które zostały ukończone rok temu? Jakie problemy mogą z tego wyniknąć, jeśli zmiany są traktowane jako zmiany zakresu?


title: Projektowanie API: podejście konkretne kontra abstrakcyjne - najlepsze praktyki?

text: Omawiając API pomiędzy systemami (na poziomie biznesowym) w naszym zespole często pojawiają się dwa różne punkty widzenia: niektórzy wolą bardziej - powiedzmy - ~~ogólne~~ podejście abstrakcyjne, inni - proste podejście "konkretne". Przykład: projekt prostego API „wyszukiwania osób”. konkretna wersja to searchPerson(String name, boolean soundEx, String firstName, boolean soundEx, String dateOfBirth) Osoby opowiadające się za konkretną wersją mówią: * API jest samodokumentujące się * jest łatwe do zrozumienia * łatwe do walidacji (kompilator lub jako usługa internetowa: walidacja schematu) * KISS Inna grupa osób w naszym zespole powiedziałaby „To tylko lista kryteriów wyszukiwania” searchPerson(List<kryteriaWyszukiwania>) z SearchCritera { Parametr ciągu, Wartość ciągu, Mapa Opcje <String, String> } z ewentualnym wykonaniem "parametru" jakiegoś typu wyliczeniowego. Zwolennicy mówią: * bez zmiany (deklaracji) API implementacja może się zmienić, np. dodanie większej liczby kryteriów lub większej liczby opcji. Nawet bez synchronizacji takiej zmiany w czasie wdrażania. * dokumentacja jest konieczna nawet przy konkretnym wariancie * walidacja schematu jest przereklamowana, często trzeba walidować dalej, schemat nie radzi sobie ze wszystkimi przypadkami * mamy już podobne API z innym systemem - ponowne wykorzystanie Kontr-argument jest * dużo dokumentacji na temat poprawności parametry i prawidłowe kombinacje parametrów * więcej wysiłku komunikacyjnego, ponieważ jest to trudniejsze do zrozumienia dla innych zespołów Czy są jakieś najlepsze praktyki? Literatura?


title: Jak używać BDD do testów jednostkowych kompilatora?

text: Mój zespół pisze kompilator dla języka specyficznego dla domeny (DSL), który zostanie zintegrowany z IDE. W tej chwili koncentrujemy się na fazie analizy kompilatora. _Nie_ używamy żadnych istniejących generatorów parserów (takich jak ANTLR), ponieważ potrzebujemy wydajności w czasie rzeczywistym i bardzo szczegółowych informacji o błędach/ostrzeżeniach/komunikatach. Mamy 1. klasy, z których każda reprezentuje węzeł w drzewie składni konkretnego języka, oraz 2. klasy, które działają jako adnotacje dla każdego węzła (tj. dla błędów i dodatkowych informacji), a także 3. wewnętrzne klasy, które budują i manipulują konkretnym drzewem składni (tj. lexer, parser, cache for strings, odwiedzający składnię). Staramy się ustalić ogólną strategię organizacji naszych testów. Nasza firma promuje rozwój oparty na zachowaniu (BDD) i projektowanie oparte na domenach (DDD). Chociaż budujemy DSL dla domeny naszej firmy, domeną kompilatora jest język programowania. Nadal jesteśmy w trakcie budowania kompilatora i mamy już kilka testów. Dążymy do uzyskania 100% pokrycia wyciągów. Obecnie mamy testy, w których wprowadzamy kod źródłowy do konstruktora drzewa składni, a następnie przeprowadzamy weryfikację każdej właściwości każdego węzła wynikowego drzewa składni, aby upewnić się, że oczekiwane informacje (numer wiersza, odpowiednie błędy, potomek /tokeny nadrzędne, szerokość tokena, rodzaj tokena itp.). Teraz, ponieważ każdy węzeł jest własną klasą, a pewne adnotacje i błędy dołączone do węzła są oddzielnymi klasami, ten test kończy się odniesieniem do wielu klas. Obecnie mamy testy dla niektórych klas, takie jak lekser, w którym możemy odizolować wejście (ciąg znaków) i wyjście (lista tokenów) od innych klas (np. klas dla węzłów drzewa składni). Te testy są bardziej szczegółowe. Teraz testy w akapicie bezpośrednio powyżej można umieścić w korespondencji z testowaną klasą (np. lexer, pamięć podręczna ciągów). Jednak testy z drugiego akapitu powyżej naprawdę testują całą fazę analizy kompilatora; to znaczy, że każdy test może mieć ponad 300 asercji dla drzewa składni, biorąc pod uwagę wejściowy kod źródłowy. Testy dotyczą zachowania w fazie analizy. Czy to właściwa strategia testowania? Jeśli nie, co powinniśmy zrobić inaczej? Jaką strategię organizacji powinniśmy zastosować do naszych testów?


title: Javascript: inicjowanie pobierania plików i wyłączanie ich przez POST

text: Co jakiś czas (wydaje się, że raz w roku) mam okazję zagrać z JS. Chociaż nie jestem biegły, czuję się wystarczająco komfortowo, aby wykonać pracę, jeśli mam dobre referencje. W tym momencie wydaje mi się, że po prostu _nie_ wymyślam odpowiednich wyszukiwanych haseł, aby znaleźć coś przydatnego. **CEL:** Szukam przykładów, wskazówek, porad i/lub linków do dokumentacji/artykułów/instrukcji, którym pomagam. **POWRÓT:** Mamy dostawcę, w którego witrynie przeszukujemy numery części. Strona wyników zawiera podstawowe specyfikacje i statystyki, a także link do pobrania arkusza cenowego. Opracowaliśmy narzędzie do analizowania arkusza i automatycznego wprowadzania wyceny do naszego systemu. Obecny przepływ pracy polega na pobraniu pliku i zapisaniu go lokalnie, a następnie przesłaniu pliku do naszego formularza. **ZADANIE:** Zamierzam zrobić skryptozakładkę do wycięcia kilku kroków. Chciałbym, aby JS zainicjował DL (? Prosto do lokalizacji tymczasowej?), A następnie POST pliku bezpośrednio do bieżącego adresu URL `action` przetwarzania formularzy. Gotowe. **PODSUMOWANIE:** Oczywiście fragmenty i przykłady są zawsze _**niesamowite**_!! Poza tym docenimy każdy kawałek udostępniania


title: Jak pisać JavaScript, jednocześnie nie dopuszczając do HTML/CSS

text:
Jakie są / są zalecane sposoby pisania JavaScript, aby kontrolować zachowanie wyświetlania HTML na ekranie, przy jednoczesnym utrzymaniu dobrze utrzymanego kodu? Zasadniczo zacząłem szukać sposobów, aby trzymać HTML/CSS z dala od JS (zakładając, że jest to zalecana praktyka), ale równie dobrze mogę sprawdzić najnowsze sposoby dobrego pisania JavaScript. Zobacz poniżej więcej szczegółów. **Mój konkretny problem** Mam pliki JS, które wyglądają mniej więcej tak: var selection = eval("(" + document.getElementById("result").innerHTML + ")"); if (selection[index].selected) { wynik += '
'; wynik += '
'; wynik += 'Dane	'; wynik += '
'; flaga var = "Wszystkie"; if (selection[index].flag == 'P') flag = "Premium"; wynik += '
'; wynik += 'Oznacz	'; wynik += '' + flaga + '	'; wynik += '
'; wynik += '
'; } document.getElementById('final').innerHTML = wynik; W rzeczywistości cała baza kodu JS, z którą pracuję, jest przez to nękana. Widać tutaj HTML, CSS JS i JSON (zmienna `selection` pobiera swoją zawartość z JSONa przygotowanego wcześniej przez PHP). Chcę to ulepszyć. **Mój poziom doświadczenia** Jestem nowy w pisaniu dobrego JS lub mam doświadczenie z wzorcami JS, narzędziami, wskazówkami, technikami i tak dalej. Z tym szukam pomocy. **Mój konkretny problem:** mam szereg tabel i danych do wyświetlenia użytkownikowi. Jest to „seria”, więc użytkownik może wybrać, który „element” serii jest aktualnie aktywny na ekranie. „Element” jest zasadniczo częścią HTML (z JS, CSS i HTML) i jest opisany poniżej: „element”: blok HTML, który służy jako dane statyczne (tabele, tytuły i elementy div) oraz długi ciąg JSON który koduje niektóre wcześniej przygotowane dane. Ciąg JSON jest przypisywany do zmiennej JS i ta zmienna JSON data/JS przechowuje rekordy o numerach od „1” do „n”, gdzie każde „i” przechowuje różne dane do wstrzyknięcia do bloku HTML, tworząc „część HTML”. Mam na ekranie przyciski nawigacyjne, pozwalające użytkownikowi przejść przez „serię”, w której HTML jest taki sam, ale dane w nim się zmieniają. Szukam dobrego sposobu na napisanie tej funkcji "krok przez bloki HTML" przy użyciu tego, co jest uważane za dobry kod JS, który można konserwować. Mianowicie szukam następujących cech: * oddzielenie troski * czystszy kod - potrzebuję narzędzi lub technik, które pozwolą mi uniknąć mieszania HTML z JS z CSS (jak widać na moim przykładzie), chyba że jest to konieczne lub wygodne. (to, co mam teraz, nie jest wygodne) * Wolę techniki niż narzędzia, ale jestem otwarty na rozważenie/ocenę ugruntowanych narzędzi. Przez „techniki” mam na myśli czyste podejścia JS, HTML, CSS, PHP. Mówiąc o "narzędziach", znam obecnie i ufam jQuery, a w przypadku innych narzędzi wolę mieć jakieś doświadczenie. **Uwaga na temat widoczności/ukrywania HTML** Być może powinienem również zauważyć, że w moim przypadku HTML jest statyczny, czyli nie zmienia się strukturalnie, gdy przechodzę przez elementy. Jednak na podstawie zmiennej JSON/selection niektóre bloki HTML są pokazywane/ukrywane (jak pokazano w moim przykładzie). Gdy zostaną wyświetlone/ukryte w czasie renderowania strony, pozostają widoczne/ukryte podczas przechodzenia przez wybór.


title: Czy mogę zamknąć źródło mojej aplikacji, jeśli użyłem w niej kodu na licencji Mozilla Public License?

text: Muszę używać grupy klas Java na licencji Mozilla Public License. Chcę zamknąć kod źródłowy mojej aplikacji. Czy jest to możliwe bez pobierania opłaty za zajęcia MPL?


title: Dlaczego wykorzystanie programowania opartego na interfejsie wydaje się być ograniczone do zachowania?

text: Trochę zastanawiałem się nad dziedziczeniem a realizacją a kompozycją. Nie zamierzam zamieszczać tutaj wszystkich szczegółów. Zastanawiałem się więc, kiedy nie mówimy o tworzeniu interfejsów ułatwiających testowanie jednostkowe: Dlaczego programowanie oparte na interfejsie wydaje się skupiać na grupowaniu typowych zachowań, np. IPettable (dla zwierzęcia), IEditable (dla kontroli użytkownika) , ISubmitable (dla formularza) itp. Dlaczego użycie programowania opartego na interfejsie wydaje się być ograniczone do zachowania, a nie esencji. Moglibyśmy pragmatycznie użyć interfejsu, nie tyle realizując zachowanie, ale by uświadomić sobie zdroworozsądkowe podobieństwa fizyczne, które nie mogą mieć nic wspólnego z zachowaniem? Nie chodzi o to, że istnieje jakaś ograniczająca funkcja w programowaniu opartym na interfejsie, o której nie myślimy, aby to zrobić. Oznacza to, że istnieje tendencja do używania interfejsu na ułamek jego możliwych sposobów; więc dlaczego?


title: Zdobywanie doświadczenia za granicą

text: Jestem Anglikiem i większość mojego dorosłego życia mieszkam w Europie Środkowej. Ostatnio wiązałem duże nadzieje z uzyskaniem dyplomu z zarządzania systemami informacyjnymi i kilkumiesięcznym szkoleniem w języku Java, aby dostać się do pracy jako programista. Wydaje się jednak, że brak odpowiedniego doświadczenia zawodowego i wieku (właśnie skończył 36 lat) może stanowić poważną przeszkodę i spowodować, że cały ten wysiłek pójdzie na marne. Kontakt dostał się do pracy w Londynie z niewielkim formalnym szkoleniem, więc zastanawiam się, czy powinienem rozważyć zdobycie doświadczenia za granicą. Alternatywą byłoby zrobienie wszystkiego, co w mojej mocy, by dostać tu posadę i być może kontynuować studia magisterskie (edukacja jest tania jak barszcz). Jednakże, jeśli sprawy nie ułożą się na froncie pracy, obawiam się, że mogę sabotować moje szanse na dobrą karierę. Co myślisz? Czy byłeś na tej drodze lub znasz kogoś, kto to zrobił? Czy profil taki jak mój miałby większe szanse w niektórych krajach, które znasz?


title: Umowa do wynajęcia - ustalanie stawki?

text: Rozmawiam z firmą na stanowisko programisty w pełnym wymiarze godzin. Ponieważ stanowisko to wymagałoby telepracy lub przeniesienia mojej rodziny, zgodziliśmy się na 2-4 tygodnie pracy kontraktowej jako swego rodzaju okres próbny. Teraz pytają, jaka byłaby moja stawka kontraktowa. Generalnie wiem, jaka byłaby moja pensja, gdyby ta przeszła na pełny etat, ale nie mam pojęcia, jak to się przekłada na pracę kontraktową. Podatki są różne (jestem w USA) i nie ma żadnych korzyści, ponieważ nie jestem jeszcze pracownikiem. Czy powinienem dążyć do poziomu pensji, na który ostatecznie liczę, czy też muszę dostosować się w górę, aby zrekompensować podatki itp.? (A może oczekiwałbym, że zrezygnuję, ponieważ jest to rodzaj rozszerzonego procesu rozmowy kwalifikacyjnej?)


title: Czy istnieje encyklopedia algorytmów?

text: Czy istnieje encyklopedia algorytmów podobna stylem do Handbook of Mathematics? Przydatne wydaje się posiadanie dużej ich liczby w jednym miejscu. Wiem, że sztuka programowania komputerowego jest uważana za dobre źródło, ale wydaje się nie tyle encyklopedyczna, co pouczająca. > ### Notatka moderatora > > Szukamy długich odpowiedzi, które dostarczają wyjaśnienia i kontekstu. > Nie podawaj tylko książki: wyjaśnij, _dlaczego_ polecasz książkę lub > zasób. Odpowiedzi, które niczego nie wyjaśniają, zostaną usunięte. Zobacz Dobre > Subiektywne, Złe Subiektywne, aby uzyskać więcej informacji.


title: Czy należy tworzyć podstawową architekturę, aby zwiększyć elastyczność - z wyprzedzeniem czy w razie potrzeby?

text: W tym pytaniu zadałem: Czy koszt zaprojektowania większej liczby poziomów abstrakcji, aby umożliwić luźne sprzężenie, jest wart korzyści, czy nie? Ludzie mówili, że często jest to warte kosztów, ale należy wyczuć, czy jego aplikacja faktycznie będzie później korzystać z tego podstawowego projektu, czy będzie to po prostu strata czasu. Moje nowe pytanie brzmi: Czy należy stworzyć infrastrukturę, aby zapewnić elastyczność i łatwość konserwacji **z góry** \- czyniąc rozwój 'czystszym' i bardziej 'zorganizowanym', ponieważ rzeczy są rozwijane na istniejącej infrastrukturze i poziomach abstrakcji? Dzięki takiemu podejściu projektujesz podstawową infrastrukturę, nie mając dużej wiedzy na temat tego, jak rzeczy zostaną później zaimplementowane. W ten sposób możesz kodować rzeczy, które mogą nie być później używane i marnujesz swój czas. Ale rozwój będzie czystszy i bardziej zorganizowany. A może należałoby stworzyć infrastrukturę, aby zwiększyć elastyczność i sprawić, by rzeczy były luźniejsze, **podczas** implementacji czegoś - w ten sposób marnować mniej czasu na rzeczy, które mogą nie być później używane? Takie podejście zapobiega kodowaniu rzeczy, które nie będą używane, ale zmusza do zaprojektowania podstawowych poziomów abstrakcji i projektów **dla istniejącego kodu** , a tym samym zmodyfikowania istniejącego kodu, zamiast kodowania podstawowych projektów **przed** kodowaniem kod, który wykorzystuje te projekty. **Przykład dla podejścia 1:** „OK, teraz zaczynamy tworzyć tę stosunkowo dużą część aplikacji. Ta część będzie generalnie związana z reagowaniem na kilka GUI. Stwórzmy podstawowy poziom abstrakcji dla tej części program do późniejszego wykorzystania, gdy go zaimplementujemy." **Przykład dla podejścia 2:** „Dobra, jestem w trakcie projektowania tej części programu. Pracując nad tym lepiej widzę, że ta część powinna być luźno połączona. Zróbmy kolejny poziom abstrakcji, aby to umożliwić, i zmodyfikuj ten kod, aby używał tego poziomu abstrakcji”. Które podejście ma większy sens, czy jest bardziej powszechne?


title: Uwagi dotyczące implementacji Model-View-Presenter

text: Próbuję dobrze zrozumieć, jak zaimplementować dobre oddzielenie między interfejsem użytkownika a modelem, ale mam problem z dokładnym ustaleniem, gdzie podzielić linie. Patrzyłem na Model-View-Presenter, ale nie jestem pewien, jak go zaimplementować. Na przykład mój widok ma wiele okien dialogowych. * Czy powinna istnieć klasa widoku z instancjami każdego z okien dialogowych? W takim razie, w jaki sposób dialogi powinny współdziałać z prezenterem? tj. jeśli indywidualne okno dialogowe musi zażądać danych od Modelu za pośrednictwem Prezentera, w jaki sposób okno dialogowe powinno uzyskać odniesienie do Prezentera? Przez odniesienie do Widoku nadanego mu podczas budowy? * Myślałem, że może widok powinien być klasą statyczną? Następnie okna dialogowe GetView i pobrać prezentera stamtąd... * Myślałem o skonfigurowaniu prezentera z własnością widoku i modelu (w przeciwieństwie do widoku z prezenterem i prezenterem z modelem) i zarejestrowaniem prezentera wywołania zwrotne dla zdarzeń w widoku, ale to sprawia, że wydaje się to o wiele bardziej połączone (lub przynajmniej zależne od języka). Model z widokami innych języków (nie zrobiłem mnóstwa rzeczy międzyjęzykowych, ale wiem, że jest to możliwe, szczególnie im bardziej `void(void)` mogę się trzymać, przynajmniej aplikacji C# z biblioteką C++. .. 3. dbaj o czystość i prostotę kodu Więc.. jakieś sugestie, jak postępować z interakcjami?


title: Kiedy używać pakietów lub repozytoriów w Laravel?

text: Jestem programistą Laravel (PHP) i mam nowość w DI, Packages (workbench) i Repositories (Pattern). Chcę poznać najlepszą koncepcję/metodologię bardziej elastycznego projektu; tj. projekt może się rozwijać i stać się czymś bardzo modułowym. Na przykład po obejrzeniu kilku filmów Jeffrey Way w Laracasts zdecydowałem się użyć tego wzorca: * app/ * app/config * app/controllers * app/database * app/views * app/patrickmaciel (psr-4 w composer.json) * app/patrickmaciel/user (repozytoria, elokwentny model, walidacja itp.) * app/patrickmaciel/group * app/patrickmaciel/post * app/patrickmaciel/billing * app/patrickmaciel/helpers * app/patrickmaciel/filters Ale po obejrzeniu więcej filmów i czytając więcej o elastyczności, widzę programistów używających **pakietów** zamiast tej alternatywy psr-4 (composer.json): "require": { "patrickmaciel/group", "patrickmaciel/user", "patrickmaciel/post ", "patrickmaciel/billing", "patrickmaciel/helpers", "patrickmaciel/filters" } Więc **co jest lepsze dla większej elastyczności**?


title: jakiej licencji open source używać z moim projektem?

text: Pracuję nad projektem oprogramowania na mojej uczelni. I chcę, żeby było to open source. Ale chcę, żeby ludzie tylko brali udział w projekcie. Nie chcę, aby wydali projekt używając mojego źródła z pewnymi modyfikacjami. Więc jaka będzie najlepsza licencja do wykorzystania w moim projekcie?


title: Uczenie osoby odpowiedzialnej za kontrolę jakości programowania

text: Mam przyjaciela, który zajmuje się kontrolą jakości od około roku i chce rozwijać swoją karierę. Zawsze skłaniałem się do C, używając gcc i makefiles, ponieważ wszystko musisz zrobić sam. Przeczytałem też najlepsze sposoby na nauczenie początkującego programowania, ale czy w tym przypadku powinienem zacząć od technologii, której używa jego firma, a mianowicie .NET? Czy jest jakaś wada uczenia się najpierw języka wysokiego poziomu zorientowanego obiektowo, czy powinienem trzymać się C?


title: Pulowanie (pojedynczych) obiektów względem pul połączeń

text: Biorąc pod uwagę następujący scenariusz: * Gotowa aplikacja korporacyjna, która utrzymuje własną pulę połączeń * Domowa aplikacja kliencka do aplikacji korporacyjnej. Ta aplikacja jest zbudowana przy użyciu frameworka Spring, z wzorcem DAO Chociaż mogę mieć na to uproszczony pogląd, myślę, że następujący sposób myślenia jest słuszny: * Posiadanie stałej puli obiektów DAO, trzymanie się obiektów łączących z puli. Oczywiście pula powinna być zdolna do skalowania w górę (lub w dół w zależności od potrzeb), a obiekty połączeń muszą przewyższać liczbę obiektów DAO o zdrowy margines. **Dobry** * Tworzenie instancji zupełnie nowych DAO dla każdego żądania dostępu do aplikacji korporacyjnej; każde DAO będzie próbowało przechwycić połączenie z puli i zwolnić je po zakończeniu. **Źle** Ponieważ są to obiekty usługowe, nie będzie (zmiennego) stanu utrzymywanego przez obiekty (zmniejszone ryzyko problemów ze współbieżnością). 2, prawie zawsze DAO czeka na obsługę. Czy moje myślenie jest prawidłowe i co może pójść nie tak?


title: Jak mam podejść do przechowywania pojedynczych wyników logicznych dla całej tabeli?

text: Wcześniej zadawałem to pytanie na temat przepełnienia stosu. Ale nie otrzymałem żadnych odpowiedzi, które mogłyby mi pomóc. Pomyślałem więc, że spróbuję tutaj. http://stackoverflow.com/questions/24883527/best-way-for-me-to-approach-storing-single-boolean-results-for-overall-table Zasadniczo tworzę aplikację Java, która odczytuje i zapisuje Baza danych. W trakcie projektowania tworzy nowe tabele z nowymi informacjami oraz łączy informacje z tych tabel. W każdym razie pytanie brzmi, że klient zażądał, aby JTable, którego używam do wyświetlania nazw tabel z bazy danych, zawierał teraz 3 kolumny, każda z polem wyboru. Jaka byłaby najlepsza akcja, abym przechowywał dane z tych pól wyboru? Niektóre z rozważanych przeze mnie metod to: 1. Przechowuj informacje w tabeli w nowych kolumnach (będzie to wymagać zmiany kodu do modyfikacji i zapisu tych tabel, co jest możliwe) 2. Utwórz nową tabelę i zapisz inne nazwy tabel oraz wartości w kolumnach wewnątrz (po załadowaniu należy sprawdzić aktualne nazwy z metadanymi i dodać/usunąć w razie potrzeby) 3. Utworzyć plik właściwości i pobrać z niego informacje, z których są zgodne z nazwami z metadanych (tj. TableName=yes,no) Opcja, która wydaje mi się najłatwiejsza/najszybsza do wykonania/uruchomienia, to skorzystanie z opcji 3 i utworzenie pliku właściwości. UWAGA: W ramach aplikacji mam już metody odczytu i zapisu z pliku właściwości, a także tworzenia nowej tabeli w bazie danych oraz zapisu/odczytu z wierszy każdej tabeli.


title: Interfejsy specyficzne dla domeny

text: Czy są jakieś realne korzyści z używania interfejsów w porównaniu z klasami abstrakcyjnymi w modelu domeny? Czy ktoś ma jakieś doświadczenie w używaniu interfejsów w modelu domeny w prawdziwym projekcie? Z technicznego punktu widzenia, DDD definiuje stereotypy, takie jak _aggregate_ , _value_ , _repository_ , itp. Repozytoria mogą być wtedy zdefiniowane jako interfejsy, takie jak `ICustomerRepository`, które są następnie implementowane przez infrastrukturę. Teraz jest to prawidłowy przypadek użycia interfejsu, ponieważ może istnieć wiele implementacji repozytorium (mocki, podróbki itp.). Jest to jednak całkowicie techniczny powód, aby go używać: tutaj interfejs jest używany tylko do oddzielenia repozytorium specyficznego dla domeny od jego technicznej implementacji. Ale co z interfejsami czysto domenowymi? Czy ktoś zetknął się kiedyś z sytuacją, w której zarówno interfejs, jak i jego realizacja były nietechniczne? W szczególności, jakie powody mogą przemawiać za wyborem interfejsu zamiast klasy abstrakcyjnej podczas implementacji typu specyficznego dla domeny? Może byłoby to wymagane w przypadku dziedziczenia wielokrotnego, ale jak bardzo jest to prawdopodobne i czy w takim razie można by to uznać za dobry projekt?


title: Właściwy sposób pomiaru skalowalności aplikacji webowej

text: Powiedzmy, że mam aplikację internetową, w której będę miał 300 użytkowników i każdy z nich musi widzieć dane w czasie rzeczywistym, wyobraź sobie, że każdy klient wykonuje wywołanie ajax do serwera, aby zobaczyć w czasie rzeczywistym, co dzieje się ze zmianami danych, połączenia te są wykonywane co 300 ms na użytkownika. Wiem, że mogę przeprowadzić symulację, aby sprawdzić, czy sprzęt mojego serwera obsługuje ten przykład. Ale co się stanie, jeśli liczba użytkowników zacznie rosnąć. Czy istnieje sposób, aby zmierzyć sprzęt potrzebny do obsługi tego rosnącego zachowania, oprogramowanie, formułę, algorytm lub może polecić mnie, jeśli potrzebuję zaimplementować rozproszoną aplikację z wieloma serwerami i zrównoważyć obciążenia.


title: Czy SVN wyszedł z mody?

text: Minęło zaledwie kilka lat, odkąd przeszedłem z Visual Source Safe do SVN. A SVN to dla mnie wciąż coś w rodzaju "WOW! Mogę zrobić tyle rzeczy! SVN jest taki fajny!" Ale wielu ludzi wokół mnie ciągle mówi "SVN? Naprawdę? Meh..." I jest ich tak wielu, że się martwię. Czy powinienem przenieść swój zespół do Git/Mercurial, czy do innej wymyślnej rzeczy? Wiem, że brzmię śmiesznie, a oczywistą odpowiedzią byłoby „zostań z tym, co działa dla CIEBIE”. SVN działa dla mnie... Ale za każdym razem, gdy tworzę nowy projekt w moim repozytorium, ciągle zadaję sobie pytanie - może to był czas na przeprowadzkę? Więc... Czy SVN jest naprawdę taki zły? Czy tracę wielką szansę, pozostając przy niej?


title: Czy muszę uczyć się wzorców projektowych, jeśli przygotowuję się do zostania programistą aplikacji na Androida?

text: Proszę doradzić, czy jest wymagana nauka wzorców projektowych, jeśli uczę się programowania na Androida?


title: Dlaczego programista miałby chcieć oddzielić implementację od interfejsu?

text: Wzorzec projektowy mostu oddziela implementację od interfejsu programu. Dlaczego jest to korzystne?


title: Czy deweloper powinien zaakceptować oszacowanie obciążenia wykonane przez makro programu Excel?

text: W nowym projekcie znajomy musiał pisać testy, w których czas potrzebny na ich napisanie był obliczany przez makro Excela napisane przez jego nie-deweloperskiego menedżera. Czy w takich okolicznościach programista powinien przyjąć na siebie odpowiedzialność za napisanie i uruchomienie testów w obliczonym czasie? Czy wyniki tych testów są godne zaufania? Dla informacji, mój przyjaciel odmówił ponoszenia odpowiedzialności za oszacowania, których nie dokonał, poprosił o pracę nad innym projektem i został zastąpiony przez niedoświadczonego, pozaszkolnego gościa na tak.


title: Django Pythona czy IntraWeb Delphi?

text: Wybacz mi, jeśli to pytanie nie na temat. Nie mam wiedzy na temat programowania webowego, więc z góry przepraszam, jeśli to głupie pytanie. Zacznę budować aplikację internetową. Mówiąc dokładniej, stworzę stronę internetową, która będzie zawierała elementy, takie jak przyciski, pola tekstowe itp. Będzie używać bazy danych do przechowywania informacji. Moje pytanie brzmi, którego z nich lepiej się nauczyć w tym celu? Django Pythona czy IntraWeb Delphi? Znam zarówno Delphi, jak i Pythona (chociaż znam Delphi lepiej).


title: Jak mogę przełamać sytuację związaną z uzależnieniem od dostawcy?

text: Tworzę oprogramowanie od około 10 lat. Zaczynałem od QBasic, a teraz rozwijam .NET w języku C#. Zawsze staram się podążać za najlepszymi wzorcami projektowymi i zleceniodawcami, takimi jak SOLID. Krótko mówiąc, jestem bardzo zadowolony ze swojej pracy, podczas gdy jako mały ISV mogę swobodnie wybierać między technologiami. Oczywiście tworzymy niemal średniej wielkości aplikacje webowe dla start-upów. Chociaż coraz częściej przechodzę na otwarty stos MS (np. MVC, EF itp.) i próbowałem też Mono, _czuję się związany z MS_. Poważnie chcę przełamać tę sytuację z uzależnieniem od dostawcy. Chcę móc tworzyć aplikacje Windows i Web przy użyciu silnie otwartego i wolnego (przynajmniej bardziej wolnego) języka przy użyciu najlepszych praktyk oprogramowania, które są bardziej niezależne od dostawcy. Chyba nie mam wyboru poza Javą. Następnie; * Jaki jest najlepszy sposób na rozpoczęcie przełamywania tej sytuacji? * Czy powinienem przeprowadzić migrację na platformę Java? (Wiem, że dużo mnie to kosztowało) * Więc jak mogę zacząć? * C# to niesamowity język. Niektóre z jego funkcji nie istnieją w Javie (LINQ, prawdziwe generyki, async/await itp.)! Jak mogę się do tego dostać?


title: Kiedy należy sprawdzać wskaźniki pod kątem NULL w C?

text: **Podsumowanie** : Czy funkcja w C powinna zawsze sprawdzać, czy nie wyłuskuje wskaźnika `NULL`? Jeśli nie, to kiedy należy pominąć te kontrole? **Szczegóły** : Czytałem kilka książek o programowaniu wywiadów i zastanawiam się, jaki jest odpowiedni stopień walidacji danych wejściowych dla argumentów funkcji w C? Oczywiście każda funkcja, która pobiera dane wejściowe od użytkownika, musi wykonać walidację, w tym sprawdzić wskaźnik `NULL` przed wyłuskaniem go. Ale co w przypadku funkcji w tym samym pliku, której nie spodziewasz się ujawnić za pośrednictwem swojego interfejsu API? Na przykład w kodzie źródłowym git pojawia się następujący tekst: static unsigned short graph_get_current_column_color(const struct git_graph *graph) { if (!want_color(graph->revs->diffopt.use_color)) return column_colors_max; return graph->default_column_color; } Jeśli `*graph` ma wartość `NULL`, to wskaźnik zerowy zostanie wyłuskany, prawdopodobnie powodując awarię programu, ale prawdopodobnie spowoduje inne nieprzewidywalne zachowanie. Z drugiej strony funkcja jest `statyczna` i być może programista już sprawdził dane wejściowe. Nie wiem, po prostu wybrałem go losowo, ponieważ był to krótki przykład w programie użytkowym napisanym w C. Widziałem wiele innych miejsc, w których używa się wskaźników bez sprawdzania NULL. Moje pytanie jest ogólne, a nie specyficzne dla tego segmentu kodu. Widziałem podobne pytanie zadawane w kontekście obsługi wyjątków. Jednak w przypadku niebezpiecznego języka, takiego jak C lub C++, nie ma automatycznej propagacji błędów nieobsługiwanych wyjątków. Z drugiej strony widziałem dużo kodu w projektach open source (takich jak powyższy przykład), który nie sprawdza żadnych wskaźników przed ich użyciem. Zastanawiam się, czy ktoś ma przemyślenia na temat wytycznych dotyczących umieszczania kontroli w funkcji w porównaniu z założeniem, że funkcja została wywołana z poprawnymi argumentami. Interesuje mnie to pytanie ogólnie do pisania kodu produkcyjnego. Ale interesuje mnie też kontekst wywiadów programistycznych. Na przykład wiele podręczników algorytmów (takich jak CLR) przedstawia algorytmy w pseudokodzie bez sprawdzania błędów. Jednak chociaż jest to dobre dla zrozumienia istoty algorytmu, oczywiście nie jest to dobra praktyka programistyczna. Nie chciałbym więc mówić ankieterowi, że pomijam sprawdzanie błędów, aby uprościć przykłady kodu (jak może to zrobić podręcznik). Ale nie chciałbym też wydawać się, że tworzy niewydajny kod z nadmiernym sprawdzaniem błędów. Na przykład `graph_get_current_column_color` mógł zostać zmodyfikowany, aby sprawdzić, czy `*graph` ma wartość null, ale nie jest jasne, co by zrobił, gdyby `*graph` miał wartość null, poza tym, że nie powinien go wyłuskiwać.


title: Decydowanie między obj->func() i func(obj)

text: Myślałem o tym, kiedy zaczynałem konfigurować kod dla nowego projektu: czy istnieją jakieś praktyczne zasady, kiedy metoda powinna być częścią obiektu, a kiedy powinna być samodzielną funkcją, która przyjmuje obiekt jako parametr? EDYCJA: jak wskazano w komentarzu, może to zależeć od języka. Kiedy przyszło mi do głowy, pracowałem w C++, chociaż jest to problem w wielu językach (i nadal chciałbym zobaczyć odpowiedzi, które ich dotyczą).


title: Jakie są zalety komputerów mainframe?

text: Wady komputerów mainframe są mocno wydeptane; drogie, starsze, malejąca społeczność itp. Nie interesują mnie szczególnie wady, ale jestem ciekawy, czy są jakieś korzyści dla sprzętu/oprogramowania mainframe w porównaniu z obecnym środowiskiem Intel/AMD i Linux/Windows. Powiedziano mi, że MF są szczególnie dobre (i lepsze niż obecne serwery) przy dużych obciążeniach I/O. Czy to nadal prawda?


title: Kiedy bycie geniuszem technicznym nie wystarczy, aby odnieść sukces jako programista?

text: Odbyło się wiele dyskusji na temat doskonałego pytania „Czy wysoka reputacja w Stack Overflow pomoże w zdobyciu dobrej pracy?”. Natychmiast zgodziłem się z **JoshK**, że zasadniczo powiedział „Nie” (wyjaśnię dlaczego), ale **Joel** włączył się, podając wiele przekonujących faktów, które sprawiły, że również go zagłosowałem. Moje pytanie brzmi: **jakich innych umiejętności (oprócz bycia geniuszem technicznym) potrzebujesz od programisty?** Aby dostać pracę lub _utrzymać_ ją. Uważam, że bycie geniuszem to za mało. Spotkałem wielu technicznych geniuszy w różnych firmach, dla których pracowałem, co zrobiło na mnie duże wrażenie, ale niestety w wielu przypadkach zostali po prostu zwolnieni po kilku miesiącach lub posadowieni w wieżach z kości słoniowej (głównie z powodu wewnętrznego buntu ze strony innych deweloperów). Widziałem wielu w osobistej rozpaczy w wyniku tego, co rozumiem. Dlatego jestem wielkim fanem pytań nietechnicznych na stanowiska techniczne. Lubię wiedzieć, w jaki sposób kandydat będzie wchodzić w interakcje z innymi (w tym z pracownikami nietechnicznymi), ile uwagi będzie miał dla firmy, czy będzie pracował nad pożądanym rezultatem i tak dalej. Chciałabym wiedzieć, czego wymagasz od swoich programistów i **DLACZEGO** to ważne _(w końcu zatrudniasz kogoś do pisania kodu, prawda? Dlaczego chcesz, żeby był asertywny?)_. **Idealnie chciałbym, abyś wymyślił przykładowe pytanie, które zadałbyś podczas wywiadów** na poparcie swojej odpowiedzi.


title: Boole'a czy Boole'a?

text: Robiłem recenzje edycji na Stack Overflow i dowiedziałem się, że ludzie ciągle poprawiają słowo "boolean", zastępując je "Boolean", gdy pojawia się w tekście (ale nie w kodzie źródłowym, oczywiście). A potem dowiedziałem się, że sprawdzanie pisowni w mojej przeglądarce się z nimi zgadza. Czy jest za tym jakieś uzasadnienie? Wydaje się to gramatycznie niepoprawne. Myślę, że słowo boolean jest używane na dwa różne sposoby, albo wśród programistów jako prosty rzeczownik, "zwróć wartość boolowska", albo jako część matematycznego terminu "logika boolowska", "algebry boolowskiej". Żaden z tych przypadków nie wydaje się motywować wielką literą. Nie piszesz "return a Float", "Logika rozmyta" ani "Algebra liniowa" (chyba że jest to na początku zdania). Przypuszczam, że wielka litera w „Boolean” w jakiś sposób nawiązuje do imienia George Boole. Ale to też nie ma sensu. Znalazłem ten link, który daje kilka doskonałych przykładów podobnych przypadków, w których jakiś termin nosi imię osoby, ale nie używa się dużej litery. Jakiś konsensus? Co jest poprawne? Czego powinniśmy użyć?


title: Uzasadnione korzystanie z folderu „Dokumenty” systemu Windows w programach

text: Każdy, kto lubi, aby folder Dokumenty zawierał tylko to, co tam umieszcza, wie, że standardowy folder Dokumenty jest całkowicie nieodpowiedni do tego zadania. Wydaje się, że każdy program chce umieścić swoje ustawienia, dane lub coś równie nieistotnego w folderze _Dokumenty_, mimo że istnieją foldery przeznaczone specjalnie dla tego zadania1. Aby nie zabrzmiało to pusto, weź jako przykład mój osobisty folder „Dokumenty”. Nigdy go nie używam, ponieważ nigdy, pod żadnym pozorem, sam niczego nie zapisuję w tym folderze. A jednak zawiera 46 folderów i 3 pliki na najwyższym poziomie, co daje łącznie 800 plików w 500 folderach. To 190 MB "dokumentów", których nie stworzyłem. Oczywiście w tym bałaganie ginęłyby natychmiast wszelkie dokumenty. **Moje pytanie**: czy można coś zrobić, aby poprawić sytuację na tyle, aby „Dokumenty” znów były przydatne, powiedzmy w ciągu najbliższych 5 lat? Czy programiści mogą być jakoś masowo edukowani, aby nie wykorzystywać tego jako wysypiska śmieci? Czy system operacyjny może zacząć zgłaszać „fałszywą” lokalizację ukrytą pod AppData za pośrednictwem istniejących interfejsów API, jednocześnie pozwalając Eksploratorowi i różnym oknom dialogowym Otwórz/Zapisz wiedzieć, gdzie znajduje się „prawdziwy” folder Dokumenty? A może jakiekolwiek próby są całkowicie daremne, a nawet niepotrzebne? * * * 1 Dla porządku, oto krótkie podsumowanie różnych standardowych katalogów, które powinny być używane zamiast „Dokumentów”: * `RoamingAppData` dla danych i ustawień _specyficznych_ dla użytkownika. To jest **katalog** do wykorzystania dla danych tymczasowych specyficznych dla użytkownika. Wszystko umieszczone w tym miejscu będzie dostępne na _dowolnej maszynie_, do której dany użytkownik loguje się w sieciach, w których jest to skonfigurowane. Nie umieszczaj tu jednak dużych plików, ponieważ spowalniają one logowanie/wylogowanie w takich środowiskach. * `LocalAppData` dla danych i ustawień specyficznych dla użytkownika i maszyny. Te dane różnią się dla każdego użytkownika i każdej maszyny. Jest to również miejsce, w którym należy umieścić bardzo duże dane specyficzne dla użytkownika. * `ProgramData` dla danych i ustawień specyficznych dla maszyny. Są takie same niezależnie od tego, który użytkownik jest zalogowany i nie będą wędrować do innych komputerów w sieci. * `GetTempPath` dla wszystkich plików, które mogą być wymazane bez utraty danych, gdy nie są używane. Jest to również **miejsce** na rzeczy takie jak **cache** , ponieważ podobnie jak w przypadku danych tymczasowych, pamięć podręczna nie wymaga tworzenia kopii zapasowej. Umieść tutaj swoją ogromną pamięć podręczną, a zaoszczędzisz swojemu użytkownikowi kłopotów z tworzeniem kopii zapasowych. Same „Dokumenty” powinny _zawsze_ być używane tylko wtedy, gdy użytkownik określił je ręcznie, wprowadzając ścieżkę lub wybierając ją w oknie dialogowym Zapisz. To jedyny moment, w którym _kiedy_ jest właściwe, aby zapisywać rzeczy w "Dokumentach".


title: Najlepszy sposób na dostęp do danych na różnych stronach

text: Szukam sposobu na załadowanie danych do właściwości/zmiennych itp. i udostępnienie tych informacji wszystkim stronom mojej aplikacji. Chcę, aby informacje były ładowane za pośrednictwem wątku w tle, aby zachować wolny wątek interfejsu użytkownika. Niektóre strony będą miały różne właściwości swoich kontrolek wiążących się z tymi właściwościami globalnymi. Oto co próbowałem. * Utworzono klasę statyczną. Wszystkie strony mogą uzyskać dostęp do danych, ale nie mogą powiązać. * Zmieniono klasę statyczną na Singleton i użyto DependencyProperty. Wszystkie strony mogły uzyskać dostęp do danych, a powiązanie działało dobrze, ale problemy z przechodzeniem przez wątki podczas uzyskiwania dostępu za pośrednictwem wątków w tle. Czytałem w różnych miejscach na ten temat, ale tak naprawdę nie wymyśliłem jeszcze najlepszej metody dla mojej sytuacji.


title: Inspirowanie zespołu - Startup - Problemy w świecie rzeczywistym

text: Dołączyłem do mojej firmy 2 lata temu, która jest firmą typu start-up, która istnieje już od 5 lat. Od początku pracuję nad jedną z technologii Microsoft. Już po kilku dniach, gdy dołączyłem do firmy, dowiedziałem się, że firma nie ma działającego procesu w całym cyklu życia oprogramowania. Pracownicy nie są monitorowani, a harmonogramy, terminy, kamienie milowe i jakość nie poszły zgodnie z oczekiwaniami. Zawsze pasjonowałem się programowaniem i, co ważniejsze, wzorcami i praktykami zarówno w obszarach technicznych, jak i nietechnicznych, i zajmowałem się moją krzywą uczenia się. W międzyczasie produktywność firmy zaczęła się pogarszać z każdym dniem. Nie ma wzajemnego zrozumienia między kierownictwem a pracownikami (tylko 12). Kierownictwo nie przejmowało się zbytnio benefitami pracowników, ich środowiskiem pracy, realistycznymi harmonogramami itp. Z powodu błędnych obliczeń ze strony kierownictwa zespoły programistów wielokrotnie były zmuszane do szalonej pracy. To sprawiło, że pracownicy byli niezadowoleni i stracili zainteresowanie swoją pracą. Zaczęli więc uzyskiwać bardzo _złe_ wyniki, wpływające na rozwój firmy. Zawsze były błędy w równym stopniu po obu stronach, kierownictwie i pracownikach. Znalazłem trywialny powód, dla którego kierownictwu nie udało się wyedukować pracowników na temat procesu, znaczenia jakości, wzorców rozwoju oprogramowania, praktyk itp. Kierownictwo zawsze było zainteresowane dostarczaniem wyników i nie szukało sposobu, w jaki można je osiągnąć. Ostatnio zostałem awansowany na lidera zespołu (właśnie ukończyłem 2 lata), ponieważ kierownictwo wierzyło, że mam biegłość techniczną, a także zdolności menedżerskie do obsługi wielu produktów. Miałem bardziej intymne relacje z kolegami niż relacje zawodowe. Dlatego bardzo trudno jest mi zastosować pewne zasady i ustalić model pracy w firmie. I do tej pory otrzymuję niekorzystne wyniki, jeśli naciskam trochę bardziej. Ponadto muszę się zakwalifikować do tej roli i mieć pewność co do proponowanego przeze mnie modelu pracy, ponieważ nie mam dobrej ręki do tego, by go pokierować. Mam raczej wiedzę książkową niż praktyczne doświadczenie. Co mogę zrobić w tej sytuacji? Czy powinienem porzucić firmę, czy powinienem włożyć więcej wysiłku, aby wszystko naprawić? _"W firmie liczącej 10 000 osób, jeśli 5 pracowników nie działa prawidłowo, firma może to wytrzymać. Ale w firmie liczącej 10-15 osób, nawet jeśli jeden nie działa dobrze, ma to ogromny wpływ na rozwój firmy." _


title: Dobra książka o strukturze danych, aby poprawić logikę programowania dla dzieci

text: Mój kuzyn (10 lat), który studiuje w Standard 5. Chce nauczyć się programowania i logiki programowania. Do której książki lub zasobów należy się odwołać? Czy jest jakaś książka Good Data Structure, która poprawi logikę programowania specjalnie dla dzieci?


title: Czy wyjątki do wznawiania mają jakiś sens?

text: Kontynuując moje poprzednie pytanie, zastanawiam się, czy „wyjątki do wznowienia” mają jakikolwiek sens. Wygląda na to, że nikt ich nie używa w `Java`. Czy nie używają `wyjątków do wznawiania` z powodu ograniczeń Javy lub po prostu dlatego, że tak naprawdę ich nie potrzebują? Załóżmy, że chcę utworzyć plik w katalogu, który powinien istnieć, ale nie istnieje. Prawdopodobnie wolałbym użyć „wyjątku do wznowienia” (tj. Zrzuć wyjątek, złap go, utwórz katalog i wznów wykonywanie) zamiast sprawdzać, czy katalog istnieje za każdym razem, gdy tworzę plik. Czy ogólnie ma to sens?


title: Najbardziej przydatne funkcje VIM, które nie są standardowe w IDE

text: Zastanawiam się, czy powinienem ponownie zacząć używać VIM zamiast IDE. Jakie są najbardziej przydatne funkcje VIM, które nie są standardowe w IDE?


title: Inscenizacja Gita: Kiedy wystawić? Co zrobić, jeśli później nastąpi modyfikacja

text: Jestem raczej nowy w szerokim świecie Git. Przeczytałem instrukcję i ćwiczyłem, ale jestem zdezorientowany w kilku aspektach, których nie mogłem rozgryźć po wyszukaniu. Zastanawiam się: * W projekcie (po pierwszym zatwierdzeniu), kiedy jest właściwy moment na postawienie plików źródłowych? Tuż przed popełnieniem? Zaraz po dodaniu/usunięciu lub modyfikacji? * Jeśli pliki są umieszczane w poczekalni między dwoma zatwierdzeniami, a następnie są modyfikowane, co dzieje się z Git? Czy musi dbać o zmiany treści, kiedy zostało ogłoszone i czym się stało od tego czasu? * Jeśli tworzę nowy plik, umieszczam go w poczekalni, a następnie chcę go usunąć, dlaczego Git prosi mnie o użycie flagi "-f", a zwykłe "git -rm plik.ext" nie zadziała? Przeczytałem "Co oznacza etap" i różne inne tematy podręcznika i inne tutoriale na Git, ale tak jak powiedziałem, nadal nie rozumiem powyższych spraw. Więc jeśli możesz, odpowiedz na pytania własnymi słowami i przykładami, abym miał większą szansę na zrozumienie. Dziękuję Ci.


title: Wszelkie alternatywne metodologie programowania głównego strumienia do OOP przy użyciu C#?

text: Jeśli chodzi o języki programowania, uwielbiam C#, a poza tym całe dobro, które pochodzi z frameworka .net (LINQ itp.). Moją główną obawą jest to, że wydaje mi się, że generuję zbyt dużo kodu, a używając OOP, obawiam się, że mój kod nie zawsze jest łatwy do zarządzania. Chcę nadal używać C# i .Net, ale czy istnieją inne podejścia do stosowania języka, aby uzyskać ogólnie mniej kodu i łatwiej zarządzać w porównaniu z podręcznikiem OOP? Z góry dziękuję!


title: Czy usługa powinna korzystać z informacji o sesji?

text: Na przykład, jeśli mam usługę Post i mam metodę pobierania wszystkich postów dla zalogowanego użytkownika, czy mogę mieć metodę findPosts(), która używa wstrzykniętej usługi bezpieczeństwa, aby uzyskać identyfikator użytkownika, a następnie przekazać tego użytkownika ID do mojego posta DAO, aby uzyskać rekordy? A może metoda findPosts() powinna jawnie wymagać identyfikatora użytkownika jako argumentu?


title: Czy metody statyczne „Builder” naruszają SOLID?

text: Piszę klasę, która składa się głównie z obowiązków związanych z przechowywaniem danych. Kontekstem użycia tej klasy będzie na ogół pobranie tablicy obiektów tego typu do późniejszego wyświetlenia. W związku z tym stworzyłem statyczną metodę `build_question_array()`, która odpytuje bazę danych, tworzy instancje obiektów i zwraca tablicę. Czy to narusza zasadę „SOLID”?


title: Czego można się spodziewać podczas rozmowy z dyrektorem ds. rozwoju wyższego szczebla?

text: Zdałem pierwsze dwie rozmowy techniczne w globalnej firmie e-commerce na stanowisko starszego inżyniera oprogramowania. Powiedziano mi, że są jeszcze dwa wywiady, jeden z kierownikiem ds. rozwoju wyższego szczebla, a drugi z osobą z działu zasobów ludzkich (HR). 1. Jakich pytań powinienem się spodziewać podczas rozmowy z dyrektorem ds. rozwoju wyższego szczebla? Czy jest to związane z architekturą techniczną, architekturą wysokiego poziomu itp.? 2. Czy podczas wywiadów HR można zapytać o równowagę między pracą a życiem prywatnym i faktycznymi godzinami pracy?


title: Jak mogę pozbyć się strachu przed wykonywaniem pracy jako freelancer?

text: Zwykle pracuję w firmie zajmującej się projektowaniem stron internetowych, ale mój menedżer też ma własną firmę. W zasadzie jest projektantem i łapie projekty z klientami, a potem wykonuję jego pracę w weekendy lub kiedy mam czas. Jest bardzo odważny. W ogóle nie ma wiedzy o programowaniu. Ale widziałem, że wiele razy łapie projekty, których nawet ja nie wiem jak to zrobić. W zeszłym roku dostał projekty w Joomla, Drupal i Microsoft Sharepoint, których wtedy nie znałem. Powiedziałem mu, że nie umiem ich używać. Kazał mi poświęcić swój czas na naukę, a potem to zrobić. Wtedy myślałem, że nie wiem, co się stanie, ale ostatecznie skończyłem je wszystkie. Czasami wręcza klientom niedokończone projekty, chociaż wie, że nie są skończone, ale nie martwi się, bo ludzie w ogóle nie zauważą. Jeśli zauważą, każe mi to zrobić. Czasami zastanawiam się, jak on prowadzi tak ryzykowny biznes. Widziałem, że ja, który zna się na programowaniu, boję się przyjmować projekty, ale on, który nic nie wie, nie waha się ich przyjmować. Zawsze za bardzo boję się robić osobiste projekty, bo zaczynam myśleć o tym, co może pójść nie tak. Jeśli zrobiłem coś złego, ludzie mnie pozwą. Jak zapłacę odszkodowanie? W związku z tym myśleniem nie byłem w stanie wykonać żadnych projektów od moich znanych klientów. Ilekroć mnie pytają, czy mogę coś zrobić, mówię nie. Boję się przyjmować projekty. Mimo, że wykonałem wiele projektów w pracy, ale martwię się o to, jeśli chodzi o mnie. Co powinienem zrobić?


title: Jak mogę zrobić karierę w optymalizacji łańcucha dostaw i eksploracji danych?

text: W moim mieście jest firma, która zajmuje się optymalizacją łańcucha dostaw, eksploracją danych i modelowaniem predykcyjnym. Bardzo się starałem, ale nie mogłem tam wejść. Teraz chcę wykonać podobną pracę. Stosują wiele technik optymalizacyjnych, które ułatwiają podejmowanie decyzji w firmie. Obecnie znam Pythona, Django, PHP, Linuxa oraz webdevelopera. Czy ktoś może mi wskazać, co muszę zrobić do tego rodzaju pracy, czego muszę się nauczyć, aby po 5-6 latach móc również zacząć tworzyć tego typu oprogramowanie dla małych sklepów. Chodzi mi o to, jakich języków i narzędzi muszę się nauczyć.


title: CMP Entity Beans jako „naiwne” rozwiązanie ORM

text: Przeglądałem wykład o „historycznie złych pomysłach” na temat historii informatyki i znalazłem interesującą prezentację o powstaniu i upadku inicjatyw Java Enterprise. Slajd #16 przykuł moją uwagę, sugerując, że Container Managed Persistence jest „naiwnym rozwiązaniem ORM”. Oczywiście zakładam, że prezenter dokonał na żywo dogłębnej analizy problemu, którego brakuje na slajdzie. Zostałem więc zaintrygowany tym stwierdzeniem. Czy CMP Entity Beans to tylko ciężki kawałek naiwnej inżynierii? Poza uprzedzeniami autorów prezentacji, co stanowiłoby bardziej adekwatne rozwiązanie ORM w domenie języków takich jak Java czy C#? Nie proszę o konkretne narzędzia czy frameworki, ale o lepsze podejście. Dziękuję Ci!


title: Jak mogę udostępniać dane w kilku witrynach internetowych?

text: Staram się stworzyć prosty system udostępniania danych w kilku serwisach. Większość z nich jest napisana w PHP, a niektóre w Wordpress/Drupal. Zbędne informacje są rozmieszczone na kilku stronach internetowych, co spowodowało problem polegający na tym, że musimy aktualizować informacje na kilku stronach internetowych osobno. Staram się zapewnić rozwiązanie, w którym nawet statyczne strony mogą uzyskać współdzielone dane. Oto moja proponowana architektura: ![tutaj wprowadź opis obrazu](http://i.stack.imgur.com/h7JFZ.png) Robię to dla instytucji akademickiej. Dane różnią się od prostych struktur opłat do polityk akademickich. Rozważmy na przykład koszty akademickie. Koszty akademickie -> ug, absolwent, apteka... każdy z wydziałów będzie miał strukturę opłat podzieloną na kategorie poza kampusem, na kampusie, dojazdy. "Undergraduate": { "metaid": "0770", "Offcampus": { "FeesItems": { "comprehensive": { "label": "Opłaty kompleksowe", "value": "2,141" } } } } Na początek kończą używanie wąsów, muszą tylko dołączyć js i użyć czegoś takiego jak poniżej, aby uzyskać wartości, <td>{{Undergraduate.Offcampus.FeesItems.comprehensive.label}} </td> <td>{{Undergraduate.Offcampus.FeesItems .comprehensive.value}}</td> Moje pytania: Czy ten projekt jest skalowalny? Jak dać właścicielom danych możliwość edycji danych? Jak przechowywać dane w sql?


title: Dlaczego w numerze wersji HTML 4.01 znajduje się wiodące zero?

text: Do tej pory nigdy nie zauważyłem tego dziwactwa i to wali mi w głowie. Dlaczego HTML 4.01 został ponumerowany z wiodącym zerem, a nie jako 4.1?


title: Pisanie lepszego grafiku

text: Ostatnio moja firma zaczęła wymagać od nas wypełniania miesięcznego grafiku, spisywania wszystkiego, co robisz w biurze. Ewidencja czasu pracy zawiera 29-31 dni, w zależności od liczby dni w miesiącu. Muszę zapisać rzeczy, które zrobiłem w każdym wierszu pliku Excela, które reprezentują dzień. Ten grafik wprawia mnie w zakłopotanie, ponieważ może się zdarzyć coś takiego: * **Spędziłem poniedziałek pisząc program i program był gotowy.** Ponieważ mój szef nie dał mi innego programu do napisania, w zasadzie po prostu siedzę i udając, że jestem zajęty przez następne dni, zanim mój szef da mi kolejne zadanie. Oczywiście nie powinienem pisać tego w grafiku tak, jak jest. Mogę napisać w grafiku, że piszę program za 4 dni, ale to sprawia, że czuję się bardzo nieefektywny. Mogę podzielić ten proces na 1) napisanie programu, 2) wdrożenie programu, 3) przetestowanie programu, ale to może sprawić, że proces będzie tak długi, jak 3 tygodnie, naprawdę. Czy spotkałeś się z taką sytuacją? Jak sobie z tym poradzisz? EDIT: niektórzy powiedzieli, że powinienem być bardziej proaktywny w kwestii proszenia o więcej zadań, ale oto sytuacja: szef mojego szefa daje pracę mojemu szefowi, potem mój szef daje pracę mnie, czasami widzę też mojego szefa będąc mniej zajętym. Jeden z moich kolegów powiedział, że nie powinnam proaktywnie prosić o kolejne zadanie, bo mój szef byłby dla mnie bólem głowy, gdyby **wymyślił dla mnie pracę znikąd**. Naprawdę nie chcę, żeby sprawy tak się potoczyły.


title: Projektowanie oprogramowania do programowania proceduralnego

text: W tej chwili próbuję nauczyć się dobrze udokumentowanej inżynierii oprogramowania. Wiedziałem, że jeśli kodujemy przy użyciu koncepcji zorientowanej obiektowo, możemy wykonać koncepcję projektowania oprogramowania przy użyciu UML. Ale co, jeśli kodujemy za pomocą programowania proceduralnego, jak projektujemy oprogramowanie? jak rozumiem, UML jest dla OOP. A czy macie jakieś referencje w internecie? Proszę o porady i popraw mnie, jeśli się mylę co do UML.


title: Kto jest odpowiedzialny za aktualizowanie interfejsu Java API i jaki wkład mogą wnieść inne osoby?

text: Poszukałem w google, aby dowiedzieć się, kto w Oracle jest odpowiedzialny za aktualizację Java API, innymi słowy, kto jest odpowiedzialny za dodawanie nowych klas i metod do API oraz aktualizację dokumentacji Java. Nie mogłem znaleźć odpowiedzi na to pytanie, co prowadzi mnie do następnego pytania, co jeśli mam jakieś klasy, których nie ma w API, które chciałem udostępnić innym, jak sprawić, by Oracle dodała te klasy za mnie?


title: Jak powinien wyglądać test dla wymagania "dla każdego innego niż x zwróć fałsz"?

text: Próbowałem dowiedzieć się, czy jest podobne pytanie, ale nawet nie wiedziałem, jakich słów kluczowych użyć :) Dostałem metodę w interfejsie przyjmującą inny interfejs jako parametr: bool CanDoIt(AnInterface subject) Jedna z implementacji musi spełnić wymóg, aby metoda zwracała false dla wszystkich typów konkretnych (implementujących AnInterface) innych niż X. Prosta implementacja mogłaby wyglądać tak (nie napisałem jej, ponieważ nie mam do tego UT): bool CanDoIt(AnInterface subject) { if(!( tematem jest X)) zwraca fałsz; else ... } Wiem, że jest to zapach kodu akceptujący interfejs, a następnie sprawdzający jego konkretny typ - niestety na razie muszę się tego trzymać. Chciałbym napisać test, który sprawdzi poprawność implementacji wymagania. Tak więc ten test nie powiedzie się, jeśli ktoś kiedykolwiek doda nowy typ implementujący AnInterface i zmieni metodę, aby nie spełniała wymagań. Jeśli napisanie takiego testu nie jest możliwe, to co mogę zrobić, aby kod został uznany za przetestowany? Czy wystarczyłoby napisanie testu przy użyciu kilku przykładowych typów, czy lepiej nie pisać tego wcale?


title: Sformalizowanie specyfikacji wymagań napisanej w narracyjnym języku angielskim

text: Mam dość techniczną specyfikację wymagań funkcjonalnych, wyrażoną w prozie angielskiej, stworzoną przez mojego kierownika projektu. Ma strukturę zbioru kart interfejsu użytkownika, gdzie wymagania dla każdej karty są wyrażone jako podświetlone pola interfejsu użytkownika i lista reguł biznesowych dla karty. Większość reguł biznesowych dotyczy pól interfejsu użytkownika na karcie, np.: 1. Musi być alfanumeryczna, maksymalna długość 20. 2. Musi być rozwijana z wartościami z tabeli x. 3. Jest obowiązkowy. 4. Jest obowiązkowe pod pewnymi warunkami, np. inne pole jest po prostu wypełnione lub ma określoną wartość. Wtedy inne reguły biznesowe stają się nieco bardziej złożone. Specyfikacja dotyczy podania o pracę, więc centralnym obiektem biznesowym (tabela) jest Kandydat, a mamy kilka innych tabel z relacjami jeden-do-wielu z kandydatem, takich jak Stopień, Szkoła średnia, Poprzedni pracodawca, Dyplom itp. 1. Jedna z takich złożonych reguł mówi, że do pola statusu można przypisać określoną wartość tylko wtedy, gdy rekord wieloboczny istnieje w co najmniej jednej z tabel wielobocznych. Np. Wnioskodawca posiada co najmniej jedną szkołę średnią lub co najmniej jeden rekord dyplomowy. Szukam porady, jak skodyfikować te wymagania w bardziej ustrukturyzowaną specyfikację zdefiniowaną w kategoriach tabel, pól i relacji, szczególnie w odniesieniu do reguł warunkowych dla pól i obecności powiązanych rekordów. Wszelkie sugestie i rady będą mile widziane, ale byłbym bardzo uradowany, gdybym mógł znaleźć już zdefiniowany system lub strukturę do wyrażania takich rzeczy.


title: Relacja między deweloperami a klientami

text: Obecnie pracuję w małej firmie, która zajmuje się wdrażaniem wielu systemów, w większości dla instytucji rządowych, co generalnie oznacza przejęcie oprogramowania opracowanego 20 lat temu i odświeżenie go tak, aby pasował do aktualnych potrzeb. Klienci na ogół są do nich bardzo przyzwyczajeni i mają tendencję do zniechęcania do zmian (są w wieku 50 lat, 60 lat, dają lub biorą, więc generalnie nie są przyjazne dla technologii). Jak można sobie wyobrazić, dev-team w większości przypadków zaczyna dbać o relacje z klientami, generować dokumentację potrzebną w tych przypadkach (zwykle CU), asystować przy cotygodniowych spotkaniach, aby zobaczyć ulepszenia z klientami. Jeśli chodzi o doświadczenie, jest to dla mnie kopalnia złota, ponieważ daje miłą perspektywę na wszystkie aspekty tworzenia oprogramowania, ale też pojawiają się pewne problemy, ponieważ jeśli programiści pochodzą z Marsa, to klienci są z Wenus. Istnieje niewielka luka w słownictwie/doświadczeniu/możliwości interpretacji-potrzeb, która generuje szum w komunikacji, a czasami wpływa na produkt końcowy. Czy programista powinien być w bezpośrednim kontakcie z klientem, czy powinien być „adapter” facet, który przekłada potrzeby klienta na zrozumiałe dla nas pseudoformalne wymagania?


title: jak ustrukturyzować modele MVC i modele ORM

text: Mam problemy z uzyskaniem dobrej struktury folderów w moim projekcie i chciałbym wiedzieć, jakie inne sposoby mógłbym wykorzystać do strukturyzowania moich plików. Obecnie pracuję w folderze sturctured MVC. www/ Sterowniki/ Modele/ Widoki/ Jak dotąd nic specjalnego. Ale używam też systemu ORM. Dzięki niemu mogę łatwo uzyskać 'obiekt' z mojej bazy danych, taki jak: ORM::load('tabela'); Teraz ten rodzaj kodu powinien znajdować się w modelu, prawda? Więc dostałbym coś takiego: <?php class userModel { funkcja publiczna getAllUsers ( ) { return ORM::load('tabela'); } public function getUserById ( $id ) { return ORM::load('table', 'userid=?', array($id)); } } ?> Wygląda jak dotąd dobrze moim zdaniem... Ale jest jeszcze jedna rzecz. Mogę również określić „model” podczas korzystania z systemu ORM. Dzięki temu modelowi mogę w zasadzie skonfigurować zasady walidacji. Podobnie: ORM::withModel('authModel'); Dzięki temu ORM wie, że zanim doda nowy wiersz (lub zaktualizuje istniejący) do bazy danych, powinien najpierw sprawdzić następujący model pod kątem reguł walidacji. <?php class authModel //A może authValidation?? { // Metoda jest uruchamiana automatycznie po wykonaniu aktualizacji za pomocą publicznej funkcji ORM onUpdate ( $obj ) { if ( $obj->nazwa_użytkownika == '' ) throw new \Exception('Brak nazwy użytkownika'); } public function onInsert ( $obj ) { // Walidacje też tutaj. } } ?> Teraz problem polega na tym, że mam 2 rodzaje modeli. Jeden, w którym zasadniczo używam pobierających / ustawiających do pobierania i przechowywania danych w bazie danych (z mojego kontrolera do mojego modelu). I mam inny model, w którym ustawione są reguły walidacji... Nie chcę mieszać obu w tym samym folderze. Więc muszę wymyślić inną strukturę. Coś takiego: www/ Kontrolery/ Modele/ Repozytoria/ Jednostki/ Widoki/ Po prostu mój model nie jest prawdziwym „repozytorium”, ponieważ nie przechowuje żadnych obiektów w klasie repo i nie ma commit() metoda lub coś w tym stylu. Nie mogę również przechowywać drugiego modelu (do walidacji) w folderze Entities, ponieważ w ogóle nie są to Entities ... Jakiś pomysł, jak powinienem to uporządkować ..?


title: Dlaczego pusta lista jest używana jako terminator listy w Lisp?

text: Wydaje mi się, że terminatorem listy w Lispie może być dowolna wartość. Na przykład terminator ciągu w C jest wskaźnikiem null. Czy istnieje filozoficzny powód, dla którego pusta lista została wybrana do zakończenia list?


title: Licencjonowanie FOSS dla zysku

text: Niektóre projekty są dostępne na restrykcyjnych licencjach FOSS (na przykład GPL lub AGPL), które uniemożliwiają ich wykorzystanie w projektach własnościowych. Deweloperzy mogą następnie sprzedawać oddzielne licencje komercyjne, które pozwalają na wykorzystanie kodu w projektach zastrzeżonych. Jak często to jest? Przykłady, których znam: MySQL x264 Cygwin


title: Twoje podejście do nauki języków?

text: _To pytanie ma na celu sprawdzenie, jakich technik używasz w nauce nowego języka — możesz przejść do ostatniego akapitu, aby odpowiedzieć na proste pytanie._ Jestem niedoświadczonym programistą i chciałbym nauczyć się wielu języki (szybko (spragnione wiedzy ;), ale dokładnie). Zajmuję się programowaniem komputerowym od 10 roku życia (obecnie VB 6 - 19 lat). Bawiłem się PHP, C, Ruby i HTML + CSS (choć dwa ostatnie nie są technicznie językami programowania, choć oczywiście o tym wiesz). Chcę ustrukturyzować moją naukę pod kątem wydajności i produktywności w miarę rozwoju mojej kariery i chciałbym usłyszeć **jak podchodzisz do nauki języka.** Na przykład czytam trochę o konkretnym języku i czy podoba mi się jego wygląd z tego, zwykle robię trochę badań nad książkami i kupuję dokładnie (i pozytywnie) zrecenzowaną, ponieważ opublikowane treści są zwykle lepsze niż wiele treści, które znajdziesz w Internecie (nie cytuj mnie na ten temat). Następnie będę podążał za książką i ustawiłem mini-projekty do ukończenia, oczywiście od pierwszej aplikacji „hello world” do CMS lub minigry. Uważam, że stawianie sobie projektów jest dobrą taktyką - wymaga badań „poza utartym szlakiem”, aby dowiedzieć się, jakie cechy języka muszę znać, aby wykonać je w najbardziej efektywny sposób. **Co Ci odpowiada podczas nauki języka? Coś innego niż czytanie książek i ustawianie małych celów o wielkości kęsa?**


title: Jaka jest różnica, jeśli w ogóle, między środowiskami Model i QA?

text: Pracowałem dla różnych organizacji, z których wiele nazywa swoje środowisko, które pojawia się po środowisku testowym/deweloperskim, a przed środowiskiem pomostowym i/lub produkcyjnym, modelem lub QA. Wydaje się, że wszyscy używają tego terminu zamiennie, jednak czy jest jakaś różnica techniczna, czy też powinna istnieć różnica w tych terminach? A może powinny to być terminy całkowicie wymienne?


title: Konfigurowanie i synchronizowanie wersji deweloperskiej (lokalnej) i publicznej wersji strony internetowej

text: Jaki jest najlepszy i najskuteczniejszy sposób na skonfigurowanie dwóch wersji tej samej witryny? Chcę jednej wersji, która jest dostępna online i dostępna dla wszystkich, ale chcę też wersję programistyczną, w której będę mógł rozwijać i testować nowe rzeczy, zamiast robić to na ftp. Obecnie mam konfigurację MAMP na moim komputerze deweloperskim i używam Git do kontroli wersji. W MAMP/XAMPP lokalizacja plików to `localhost/example/`, a na ftp jest to struktura plików hosta (w tym przypadku Dreamhost). Coś w rodzaju `/home/nazwa_użytkownika/example.com/`. Powoduje to posiadanie wielu wersji prawie tego samego pliku. To nie jest tak wydajne, ale nie mogę wymyślić na to dobrego rozwiązania. Czy są jakieś? Byłoby idealnie, gdybym chciał dodać nową funkcję do strony, mógłbym to zrobić w MAMP i kiedy zatwierdzi zmiany za pomocą Gita, wgrywa je na ftp.


title: Wzorce UI w językach funkcjonalnych

text: Chciałbym zacząć bawić się ClojureScript, ale jestem zaskoczony kilkoma punktami. Mój problem polega na tym, jaki jest dobry sposób radzenia sobie ze zmianami stanu wynikającymi z interakcji użytkownika, gdy próbujesz działać funkcjonalnie. Podam kilka przykładów. Mam na myśli aplikacje działające w przeglądarce, ale wydaje mi się, że problem jest bardziej ogólny. Oczywiście coś się zmieni - przynajmniej DOM. Ale chciałbym dowiedzieć się, jak zorganizować resztę kodu do pracy z niezmiennymi strukturami danych. 1) Powiedz, że chcę dołączyć jakieś zdarzenia do jakiegoś obiektu DOM. Nie jest to trudne w większości funkcjonalny sposób: kiedy tworzysz węzeł, dołączasz do niego mapę mieszającą z różnymi funkcjami obsługi zdarzeń. **Ale** rozważ przypadek, w którym korzystasz z delegowania wydarzeń. Następnie, gdy tworzysz nowy węzeł, możesz dołączyć obsługę zdarzeń do jakiegoś węzła nadrzędnego, który prawdopodobnie już istnieje. Musisz więc zmienić skrót powiązany z już istniejącym węzłem. 2) Powiedz, że projektuję moduł autouzupełniania dla pola wejściowego. Za każdym razem, gdy użytkownik naciśnie klawisz, mogę zadzwonić do serwera, aby uzyskać sugestie. To jest łatwe. Ale teraz przypuśćmy, że chcę go trochę zoptymalizować. Jeśli znam wszystkie wyniki pasujące do `foo`, nie ma sensu pytać ponownie o wszystkie wyniki pasujące do `foobar`; Mogę po prostu odfiltrować te pierwsze. Więc muszę zbudować jakiś rodzaj pamięci podręcznej. Ta pamięć podręczna będzie aktualizowana za każdym razem, gdy użytkownik wstawi nowe słowo, które nie jest nadzbiorem słów wprowadzonych wcześniej. Znowu: jak modelować pamięć podręczną? Wydaje się, że najbardziej rozsądnym sposobem jest mapowanie haszowania słów na wyniki, ale powinno być modyfikowalne. Czy możesz zaproponować jakieś wzorce, które ułatwiłyby uwzględnienie zmian wynikających z interakcji użytkownika w funkcjonalnym projekcie?


title: Czy możliwa jest witryna ASP.NET w środowisku Linux?

text: Jakiś czas temu znalazłem oprogramowanie, które twierdziło, że uruchamia aplikacje ASP.NET na serwerze Linux, pamiętam, że podana informacja pobiera kod i konwertuje go na Javę. Nigdy nie pobierałem ani nie testowałem oprogramowania. Czy ktoś zna nazwę tego oprogramowania? Czy w pierwszej kolejności można uruchomić ASP.NET na serwerze Linux?


title: Czy program Visual Studio Express nadaje się do tworzenia aplikacji komercyjnych?

text: Jeśli miałbym stworzyć grę Silverlight i opublikować ją na stronie, na której można w nią grać za darmo, czy użycie jest uważane za komercyjne czy osobiste? A jeśli witryna zawiera reklamy, czy jest uznawana za komercyjną, jeśli program jest bezpłatny, ale jest hostowany w witrynie, która zarabia pieniądze? Powodem, dla którego o to pytam, jest to, że Visual Studio Express może być używany tylko do użytku osobistego lub niekomercyjnego, więc chcę sprawdzić, jakie są limity użycia.


title: Czy problemem jest posiadanie różnych stylów kodowania HTML w zespole?

text: Wraz z 2 innymi przyjaciółmi jestem nowy w tworzeniu stron internetowych. Uczymy się HTML, CSS, Javascript i tworzymy proste strony internetowe, aby poznać różne rzeczy. A ponieważ HTML jest tylko znacznikiem, a nie językiem programowania, ewoluują bardzo różne style. Mam na myśli to, że za każdym razem, gdy patrzymy na swój kod, zwykle poświęcamy sporo czasu na zrozumienie, dlaczego druga strona to robi. Teraz chcemy wspólnie zbudować większą stronę internetową, a moje pytanie brzmi: czy to problem z bardzo różnymi stylami w zespole do tworzenia stron internetowych (w szczególności)?


title: Doskonała znajomość C++

text: Niedawno widziałem stronę rekrutacyjną dla firmy programistycznej, gdzie jednym z wymagań była „Doskonała znajomość C++”. Teraz wiem, że to w jakiś sposób implikuje wiedzę ekspercką o C++, ale gdzie dokładnie pasuje wiedza ekspercka. Czy jest to wiedza i doświadczenie (powiedzmy) ośmiu lat programowania w języku, posiadanie i znajomość tajników określonej dziedziny. A może jest to bardziej odświeżone, powierzchowne podejście do jednej lub kilku dziedzin i jednocześnie bardziej szczegółowe rozumienie całego języka? Na przykład nie możesz być ekspertem w pisaniu sterowników systemowych i silników gier w tym samym czasie. Gdzie zatem mieści się ta doskonała lub ekspercka wiedza?


title: Edytor kodu online

text: Główne IDE online są hostowane na serwerze usługodawcy. Przykładami są Kodingen, Cloud9, ShiftEdit. W związku z tym byłyby niedostępne, gdyby zewnętrzny serwer nie działał z jakiegoś powodu, a ja i tak wolę wykonywać obliczenia na własnym komputerze. Czy ktoś zna internetowe IDE lub edytor (najlepiej tylko edytor - prosta implementacja edytorów Ace lub CodeMirror JS), które można pobrać i uruchomić na localhost (na lokalnym serwerze LAMP)? Do tej pory znalazłem dwa - Eclipse Orion i Wiode, ale nie lubię za bardzo żadnego z nich i szukam alternatyw. Odpowiednie są również rozszerzenia przeglądarki, które działają natywnie w przeglądarce (offline) bez wchodzenia na zewnętrzną stronę. Przykładem może być SourceKit dla Chrom(e/ium).


title: Kolejkowanie połączeń RPC

text: Projektuję system, który nasłuchuje wywołań JSON RPC od klientów, układa je na liście, a jeśli lista się zapełni, będzie je przechowywać w bazie danych i nadal odbierać połączenia. Moim pierwotnym planem jest nasłuchiwanie wywołań RPC z Perla za pomocą JSON-RPC i umieszczenie ich w tablicy. Klienci przeprowadzają długie sondowanie na innym serwerze, aby uzyskać odpowiedzi, gdy się pojawiają. * Co to za blokowanie/nieblokowanie? * Czy powinienem zrobić skrypt dla node.js, aby nasłuchiwać połączeń? * Jak myślisz, co jest dobrą praktyką w tym przypadku? Celem jest słuchanie jak największej liczby połączeń.


title: Jak profesjonalne zespoły programistyczne radzą sobie ze złożonością projektu w nietrywialnych projektach?

text: Po pierwsze, zdaję sobie sprawę, że to pytanie może być nieco długie i niejasne i przepraszam za to. Jest to prawdopodobnie podstawowy problem z krótką nazwą dla każdego, kto to "ma", ale ponieważ mi w tym brakuje, proszę o wyrozumiałość w opisie problemu. Zajmuję się programowaniem w ten czy inny sposób od około 11 roku życia. Oznacza to, że uczę się wszystkiego od samego początku. Otrzymałem wykształcenie techniczne, ale nie ściśle z informatyki (ukończyłem studia na kierunku Inżynieria Fotoniczna). Mieliśmy oczywiście kursy programowania, ale były to dla mnie głównie podstawowe rzeczy i nie nauczyłem się zbyt wielu nowych rzeczy. Wciąż się kształciłem dla radości i zawsze wiedziałem, że będę robił karierę w programowaniu, ale wszystkie moje projekty były wtedy dość małe. Nie miałem problemów z utrzymaniem ich w pamięci i utrzymaniem ich. Teraz jestem liderem w zespole, ale nie w środowisku korporacyjnym – pracuję na uniwersytecie tworząc oprogramowanie naukowe (w C++) do zastosowań inżynierskich. Nagle projekt rozrasta się (relatywnie) i przez większość czasu mam problem z zajęciem się nim. Tracę dużo czasu i wysiłku głównie na dwie rzeczy: 1. Kiedy muszę wrócić do fragmentu kodu, nad którym nie pracowałem przez jakiś czas, mam trudności z zapamiętaniem, jak to działało. Spędzam dużo czasu na przeglądaniu plików nagłówkowych odpowiednich klas i czytaniu komentarzy, które po drodze umieściłem w plikach źródłowych. Chciałbym, żeby istniała jakaś forma „schematu”, na którą mógłbym rzucić okiem i łatwiej odzyskać obraz; 2. Kiedy wprowadzam zmiany, czasami zdaję sobie sprawę, że to, co próbuję zrobić, zepsuje coś gdzie indziej (lub co gorsza, pojawia się to dopiero w czasie wykonywania jako niespodzianka). Cofam się i zaczynam robić to inaczej, tylko po to, by dowiedzieć się, że zaniedbałem wpływ na jakiś inny komponent. Szkoda, że nie ma jakiegoś "schematu architektury", na którym mógłbym zobaczyć, jak coś się robi, jak to, co próbuję zrobić, wpłynie na inne komponenty i sposób, w jaki mógłbym szczegółowo zaplanować, zanim zacznę wdrażać zmiany. Większość ludzi, z którymi pracuję, ma podobne historie jak moja - silna orientacja techniczna i czasami świetne umiejętności, ale bez możliwości zorganizowania swojej pracy. Jednak ich projekty są zazwyczaj dużo mniejsze niż moje, więc jakoś sobie radzą. W każdym razie oznacza to dla mnie, że jestem sam i nie mam od kogo uczyć się dobrych praktyk. Wziąłem udział w podyplomowym kursie zarządzania IT i chociaż uważam go za całkiem satysfakcjonujący, jest on skierowany głównie do osób nie będących programistami, ucząc metodologii zarządzania projektami, szacowania budżetu/harmonogramu, architektury korporacyjnej itp. - a nie projektowania oprogramowania i planowania jako takiego. W porządku, też próbuję się tego nauczyć. Oczywiście wprowadzono niektóre narzędzia (takie jak UML) i rodzaje procesów tworzenia oprogramowania (kaskadowe, iteracyjne, zwinne...), ale oczywiście nie są one zbyt szczegółowe i trudno mi zdecydować, co powinienem wybrać i użyć ( i w jakim stopniu). Czytałem wiele pytań i odpowiedzi na temat projektowania oprogramowania na SO - jest wiele o robieniu tego przy użyciu tego lub innego konkretnego narzędzia lub metodologii, a gdybym był przekonany, że dokumentacja UML rozwiąże moje problemy - podniosłbym ją i zacznij go używać. Ale niektórzy przysięgają, inni twierdzą, że jest bezużyteczny. Szukam odpowiedzi na wyższym poziomie abstrakcji – czy są sposoby na rozwiązanie dwóch moich problemów i jak Ty to robisz? Czego powinienem się nauczyć, aby móc to robić, być może bez przywiązania do jednego konkretnego narzędzia? Od czasu do czasu wychodzą one z mody i spodziewam się, że ich zastosowanie różni się w zależności od typu projektu. Bardzo dziękuję za przeczytanie, nie byłem w stanie powiedzieć, co mam na myśli krócej (brak doświadczenia w projektowaniu oprogramowania i słownictwa).


title: Szukasz zmian w bazie danych MySQL z node.js do pulpitu nawigacyjnego na żywo

text: Tak więc pracuję dla NOC w małym ISP. Planujemy zakup dużego monitora naściennego i chciałbym zrobić dashboard w Node.JS - nigdy wcześniej nie korzystałem z node, więc powinno być interesujące. Dążę do czegoś takiego jako niejasnego przykładu: https://gds.blog.gov.uk/wp-content/uploads/sites/60/2012/02/developmentprocess.png Dane, które będziemy pobierać, będą pochodzić Pudełka Nagios + Icinga (mamy ich wiele). Obecnie mam skrypt, który pobiera wszystkie problemy z naszych skrzynek Nagios + Icinga i wrzuca je do tabeli MySQL. Następnie możliwe jest posiadanie pulpitu PHP, który wyświetla tylko dane z tych tabel, oraz wtyczki do automatycznego odświeżania przeglądarki. To, co chcę zrobić, to użyć frontonu node.js, więc odświeżanie nie jest wymagane. Z samouczków wynika, że musisz wysyłać zdarzenia do węzła, aby działał poprawnie. To, co chcę zrobić, to metoda MySQL, ponieważ możemy jej użyć do raportów itp. Wyobraź sobie, że na tym obrazie po prawej stronie znajduje się lista wszystkich problemów, a liczby są zliczeniami wszystkich problemów. Jak sprawić, by węzeł zdał sobie sprawę, że pojawiły się nowe dane, porównać, co klienci już wyświetlają i wyświetlić zmiany? 1. Ciągle pobieraj dane z bazy danych, porównuj z tablicą aktualnie wyświetlanych danych, wysyłaj wszelkie zmiany do klienta 2. Jakoś skonstruuj zapytanie, aby znaleźć tylko nowe dane (może na podstawie aktualnego czasu?) wypchnij to (musisz się dowiedzieć co zostało jednak wyczyszczone i nie ma już w bazie danych) 3. Coś innego Jestem całkiem wykwalifikowanym programistą PHP, ale aktualizowanie na żywo za pomocą czegoś takiego jak node jest mi obce. Śledzę infrastrukturę używaną przez Manuela Kiesslinga w nodebeginner.org (indeks > serwer > router > obsługa żądań dla każdej strony - będą różne strony dla różnych informacji, np. Nagios/icinga, peery BGP itp.). Każda pomoc jest doceniana, jeśli nie mogę wymyślić solidnego sposobu, aby to zrobić, wrócę do PHP, co jest wstydem, ponieważ węzeł naprawdę mnie interesuje.


title: Słabe strony zabezpieczenia trzech uderzeń

text: Czytałem trochę literatury na temat bezpieczeństwa, w szczególności bezpieczeństwa/szyfrowania haseł, i zastanawiałem się nad jedną rzeczą: czy zasada trzech uderzeń jest idealnym rozwiązaniem bezpieczeństwa haseł? Oznacza to, że jeśli liczba prób podania hasła jest ograniczona do pewnej małej liczby, po której wszystkie żądania uwierzytelnienia nie będą honorowane, czy nie uchroni to użytkowników przed włamaniami? Zdaję sobie sprawę, że uzyskanie dostępu lub kontroli nad czymś nie zawsze oznacza przejście przez system uwierzytelniania, ale czy ta funkcja nie sprawia, że ataki słownikowe/brute-force są przestarzałe? Czy jest coś, czego mi brakuje?


title: Skąd wiedzieć, przy dobrej wydajności, w jakich obszarach znajduje się dany punkt?

text: Jestem zainteresowany zbudowaniem prototypu, który potrzebuje tego typu rzeczy: * Punkt A (xa, ya) o promieniu 500 metrów. * Punkt B (xb, yb) o promieniu 700 metrów. * Punkt C (xc, yc) o promieniu 1200 metrów. * Punkt D (xd, yd) o promieniu 200 metrów. * Osoba 123 jest w pewnym momencie. **Pytanie** : który punkt 123 jest w? Na przykład osoba znajduje się zarówno w obszarach A, B, jak i D, ale nie w C. Wszystkie punkty są współrzędnymi geograficznymi, tj. szerokość/długość. Chcę zrozumieć, jakie są najlepsze algorytmy i strategie do wdrożenia dobrego indeksu. Mój obecny pomysł (jeszcze nie wdrożony) to: > Mapa otworów jest podzielona na ćwiartki, małe jak (na przykład) 50~100 > > metrów. Kiedy punkt jest zaznaczony, wszystkie ćwiartki znajdujące się w ich obszarze będą > również > zaznaczone. Następnie, gdy szukam za pomocą „Osoby 123”, po prostu znajdę jej ćwiartkę i wyszukam wszystkie zaznaczone w niej punkty. Zasadniczo zbuduję ogromne drzewo prefiksów oparte na geohashach wszystkich punktów (+10k punktów). Problem w tym, że dla jednego punktu wewnątrz Drzewa będą liczne wpisy (choć myślę, że byłoby to lepsze do wyszukiwania). Uwaga: Brak mi formalnego zrozumienia indeksów przestrzennych.


title: Próbuję owinąć głowę wokół struktury klas dla języka specyficznego dla domeny

text: Moja praca polega głównie na programowaniu systemów wbudowanych w C, a właściwa struktura klas, aby to zrobić, umyka mi. Obecnie komunikujemy się za pomocą C# i Visual Basic z dużą kolekcją serw, pomp i czujników za pośrednictwem urządzenia ukrytego USB-CAN. Obecnie komunikacja z urządzeniami jest dość kłopotliwa. Aby odczytać wersję oprogramowania kontrolera numer 1, użyjesz: SendCan(Controller,1,ReadFirmwareVersion) lub SendCan(8,1,71) To wysyła trzy bajty na szynie CAN: (8,1,71) Podłączone do kontrolerów są różne czujniki. SendCan(Controller,1,PassThroughCommand,O2Sensor,2,ReadO2) powie kontrolerowi nr 1, aby przekazał polecenie do czujnika O2 nr 2, aby odczytał O2, wysyłając bajty 8,1,200,16,2,0 Chciałbym opracować język specyficzny dla domeny dla tej konfiguracji. Zamiast poleceń wydawanych tak, jak są obecnie, polecenia byłyby napisane tak: Controller1.SendCommand.O2Sensor2.ReadO2 do wysłania bajtów 8,1,200,16,0 Jak najlepiej to zrobić? Niektóre maszyny mają 20 czujników O2, inne mają 5 sterowników, więc liczby i typy sterowników i czujników, pomp itp. nie są statyczne.


title: Licencja na darmową (re)dystrybucję, ale bez dystrybucji zmodyfikowanych plików wykonywalnych

text: ## Pytanie Chcę umieścić aplikację na telefon/tablet na Github i zezwolić na pełne prawa do używania, studiowania, udostępniania i modyfikowania kodu źródłowego, ale nie zezwalam na jakąkolwiek redystrybucję plików wykonywalnych, które wynikają ze zmodyfikowanego kodu. Celem tego drugiego wymogu jest uniemożliwienie użytkownikom usuwania lub przekierowywania płatności w aplikacji. Rzeczywista aplikacja będzie bezpłatna. Moje wymagania są następujące: * Licencja musi obsługiwać rozwidlenie na Github, a zatem zarówno modyfikację, jak i redystrybucję kodu źródłowego przez innych (wyklucza to dystrybucję bez licencji objętą zwykłymi prawami autorskimi, Ms-RSL, a także CC BY-ND, jak ma to miejsce w przypadku). rozróżniać kod źródłowy i pliki wykonywalne) * Licencja powinna zezwalać na redystrybucję „Standardowych” plików wykonywalnych – tych pochodzących z mojej wersji kodu źródłowego – ale nie może zezwalać na jakąkolwiek dystrybucję „Zmodyfikowanych” plików wykonywalnych (wyklucza to wszelkie zgodne do definicji Open Source lub Wolnego Oprogramowania) (Zdaję sobie sprawę, że piractwo ma miejsce zwłaszcza w sklepach z aplikacjami na Androida, jestem gotów z tym żyć, ponieważ piraci musieliby zarówno edytować kod, jak i redystrybuować zmodyfikowaną wersję, zanim potencjalnie nawet wtedy teoretycznie mógłbym ich ścigać za pomocą środków prawnych.) ## Wcześniejsze badania Licencja artystyczna zaczyna się świetnie, mówiąc: > (1) Możesz używać standardu V wersji oraz tworzyć i używać > Zmodyfikowanych Wersji w dowolnym celu bez ograniczeń, pod warunkiem, że > nie Dystrybuujesz Zmodyfikowanej Wersji. ale następnie zezwala na wersje zmodyfikowane, jeśli są one oznaczone jako wystarczająco różne od wersji standardowej. qmail polegał na zwykłych prawach autorskich (wysyłka bez jakiejkolwiek licencji), aby zapewnić, że wersja standardowa nie zostanie naruszona, a ludzie dostarczali łatki do jej kodu źródłowego, aby zapewnić innym użytkownikom ich modyfikacje. To jest _prawie_ wystarczająco dobre dla moich celów, ponieważ inni mogliby swobodnie tworzyć moje własne repozytorium kodu źródłowego, jednak rozwidlenie zmodyfikowanego repozytorium innej osoby byłoby nielegalne, więc potrzebuję licencji, aby to umożliwić. To pytanie porusza pokrewny problem, ale zdecydowałem się otworzyć inne pytanie, ponieważ (a) pytanie nie dotyczy redystrybucji kodu źródłowego, jak jest to wymagane przez Github, (b) żadna z zawartych tam odpowiedzi nie spełnia wymagań, (c ) oryginalny autor zaakceptował już odpowiedź, która obejmie jego wymagania, więc pytanie jest w zasadzie zamknięte i (d) jest sformułowane niepotrzebnie specyficzne dla Androida i open source. To pytanie było najbliższym dopasowaniem, jakie udało mi się znaleźć tutaj. W celu zminimalizowania rozprzestrzeniania się licencji, chciałbym użyć istniejącej licencji. Jednak wyczerpałem swoją wiedzę na temat licencji i umiejętności googlowania i nie znalazłem niczego, co spełniałoby te (dość proste i potencjalnie popularne?) wymagania. Czy ktoś wie o licencji, z której mógłbym skorzystać, czy też muszę wylosować własną?


title: Jak mogę poprawić swoje umiejętności językowe i komunikacyjne, aby komunikować się z klientami?

text: Czy ktoś może mi powiedzieć, jak jako programista mogę poprawić swoje umiejętności komunikacyjne i doskonalić swój angielski, ponieważ nie jest on moim językiem ojczystym? Jakie kroki powinienem podjąć, aby poprawić te dwie kwestie?