title: Szukasz znaczącego, mocnego argumentu na rzecz oprogramowania antywirusowego na maszynach deweloperskich

text: Formułując opinie, dobrą praktyką jest podążanie za tradycją scholastyczną – myśl jak najmocniej „przeciwko” posiadanej opinii i staraj się znaleźć kontrargumenty. Jednak bez względu na to, jak bardzo się staram, po prostu nie mogę znaleźć rozsądnych argumentów przemawiających za antywirusem (i powiązanymi środkami bezpieczeństwa) na maszynach deweloperskich. Argumenty przeciwko programowi antywirusowemu (AV) w fazie rozwoju są obfite: 1. Nie jest niczym niezwykłym, że 1-minutowa kompilacja trwa 10 razy dłużej z AV włączonym 2. W rozmowie konferencyjnej programiści IntelliJ twierdzą, że oprogramowanie antywirusowe jest podejrzanym numerem 1, gdy ich IDE jest powolne 3. Rozpakowywanie przychodzi z prędkością około 100 kb/s przy włączonym AV 4. AV sprawia, że Cygwin jest całkowicie bezużyteczny (vimowi zajmuje 1 minutę, aby otworzyć prosty plik) 5. AV blokuje mi możliwość pobierania przydatnych plików (JAR, DLL) od kolegów -maile 6. Nie mogę używać wielu komputerów do programowania, ponieważ środki antywirusowe / zabezpieczenia uniemożliwiają mi odblokowanie portów 7. AV obniża wydajność programów z dużą rotacją plików, takich jak Maven lub Ant Last, ale nie mniej ważne - co robi AV faktycznie chronić mnie przed? Nie wiem, czy mój program antywirusowy kiedykolwiek zatrzymywał jakikolwiek wątek bezpieczeństwa. Jeśli powodem jest strach przed ujawnieniem informacji o NDA – żaden AV nie może mi tego przeszkodzić, jeśli się na to zdecyduję. Jeśli powodem jest obawa przed utratą kodu źródłowego i/lub dokumentacji – istnieją do tego rozproszone systemy rewizji (istnieje co najmniej 20 kopii naszego repozytorium i codziennie synchronizujemy). Jeśli powodem jest strach przed ujawnieniem danych klientów - programiści rzadko pracują w połączeniu z rzeczywistymi produkcyjnymi bazami danych, zamiast tego bawią się w środowiskach zabawek. Nawet jeśli istnieją znaczące argumenty przemawiające za posiadaniem AV na maszynach programistycznych, rozpadają się one w obliczu możliwości uruchomienia maszyny wirtualnej w paranoicznie chronionym środowisku. Ponieważ chcę mieć otwarty umysł w tej kwestii, czy ktoś mógłby przedstawić sensowny, mocny argument na rzecz oprogramowania antywirusowego dla programistów?


title: Programowanie JavaScript oparte na technologii AMD dla statycznych stron internetowych

text: Prowadzę pewne badania nad uczynieniem kodu bardziej testowalnym i modułowym, ale po wielu przeczytaniu o JavaScript opartym na AMD, wydaje się, że nie odpowiada on potrzebom statycznej strony internetowej. Czy to założenie jest poprawne? Czy rozwój oparty na AMD jest bardziej nastawiony na wysoce interaktywne aplikacje internetowe niż proste strony internetowe?


title: Nazewnictwo kontrolerów i ich metody

text: Obecnie używam jednego kontrolera na akcję. Jednym z problemów – poniekąd – jakie napotkałem, jest nazywanie metod tych kontrolerów, które mają tylko jeden. Czy powinienem użyć ogólnej nazwy metody, takiej jak `get()`, czy też powinienem zawrzeć wszystkie moje kontrolery w jeden i nazwać jego metody po akcji, którą wykonują, np. `indexAction()`, `userListAction()`?


title: Jakie jest dokładne znaczenie niezależności Platformy?

text: Co oznacza niezależność platformy? Biorę przypadek Javy. Czy mogę uruchomić aplikację Java w systemie Linux zbudowaną na platformie Windows? Albo odwrotnie? Czy mogę używać tego samego (lub dokładnego) algorytmu programowania w obu systemach operacyjnych? Moim zdaniem typy plików są niezależne od platformy, takie jak filmy, obrazy, dokumenty itp.


title: Jak mam postępować z negatywnymi kampaniami przeciwko mojej aplikacji?

text: Opracowałem aplikację kilka lat temu: chociaż jest przestarzała i bezużyteczna w porównaniu z tym, co jest dostępne dzisiaj, była pomocna dla ludzi, gdy została wydana po raz pierwszy. Niedawno szukałem swojego imienia i nazwiska w Google i natknąłem się na witrynę, która twierdziła, że moja aplikacja to złośliwe oprogramowanie, którego normalnie nie można odinstalować, oraz podała szczegółowe instrukcje jej usuwania. To oczywiście nieprawda i jestem bardzo sfrustrowany implikacją. Jak mam sobie radzić w takiej sytuacji? Czy powinienem skonfrontować się z właścicielem witryny, czy zająć się tym w inny sposób?


title: Znalezienie problemu z bazą danych dla aplikacji na iPhone'a

text: Wiem, że to głupie pytanie i może nie jest „konceptualne”, ale jako początkujący naprawdę chcę wiedzieć, jak połączyć się z jakąś „komercyjną bazą danych”? Projektuję aplikację narzędziową lokalnej stacji benzynowej na iPhone'a i iPada. Nie mam pojęcia, jak znaleźć odpowiednią bazę danych. Na przykład, jeśli chcę stworzyć aplikację do zamawiania pizzy w świetnym rejonie Chicago. Jak uzyskać informacje (cenę, menu, lokalizację itp.) o tych sklepach z pizzą rozsianych po całym Chicago? Czy ktoś może rzucić mi na to trochę światła?


title: Instancja wielu obiektów

text: Staram się opanować programowanie obiektowe, ponieważ dotyczy ono tworzenia stron internetowych (a dokładniej PHP). Rozumiem dziedziczenie i abstrakcję itp., i znam wszystkie „buzz-słowa”, takie jak enkapsulacja i pojedynczy cel, i wiem, dlaczego powinienem to wszystko robić. Ale moja wiedza jest niewystarczająca, jeśli chodzi o tworzenie obiektów, które odnoszą się do danych, które mam w mojej bazie danych, tworzenie pojedynczego obiektu, który reprezentant jednej jednostki ma sens, ale jakie są najlepsze praktyki podczas tworzenia 100, 1000 lub 10 000 obiektów tego samego typu. na przykład, próbując wyświetlić listę elementów, idealnie chciałbym być spójny z obiektami, których używam, ale gdzie dokładnie powinienem uruchomić zapytanie/pobrać dane, aby wypełnić obiekt(y), jak wydaje się uruchomienie 10 000 zapytań rozrzutny. Na przykład, powiedzmy, że mam bazę danych kotów i chcę listę wszystkich czarnych kotów, czy muszę ustawić `FactoryObject`, który pobiera dane potrzebne dla każdego kota z mojej bazy danych, a następnie przekazuje te dane do każdego indywidualny `CatObject` i zwraca wyniki w postaci tablicy/obiektu - lub powinienem przekazać każdemu `CatObject` jego identyfikator i pozwolić mu wypełnić się w osobnym zapytaniu.


title: projekt dla operacji przerywanych

text: Nie mogłem znaleźć lepszego tematu, ale oto jest; 1) Gdy użytkownik kliknie przycisk, kod zaczyna działać, 2) Gdy inny przycisk zostanie kliknięty, przestanie robić to, co robi i zacznie uruchamiać kod drugiego przycisku, 3) Lub bez interakcji z użytkownikiem wykryto awarię zasilania z podłączonego urządzenia, aby nasze oprogramowanie anulowało bieżące zdarzenie i rozpoczęło procedurę wyłączania. W jaki sposób ten projekt jest najczęściej stosowany do kodu? Mam na myśli część "przestań co robisz"? Jeśli powiedziałbyś zdarzenia, programy obsługi zdarzeń itp., jak powiązać warunek ze zdarzeniem? i jak powiedzieć programowi bez używania drabiny, jeśli ma zakończyć jego proces? metoda1(); jeśli (wyłączenie) powrót; metoda2(); jeśli (wyłączenie) powrót; itp.


title: Najlepszy sposób na przekonwertowanie istniejącego projektu na open source w GitHub

text: Od jakiegoś czasu pracuję nad osobistym projektem o zamkniętym kodzie źródłowym i chciałbym, aby był to open source. Nigdy wcześniej nie tworzyłem własnego projektu open source, więc będzie to dobre doświadczenie edukacyjne. Używałem GitHub jako kontroli źródła, więc kiedy napiszę kilka przyzwoitych dokumentów dotyczących tego, jak go używać i rozwijać itp., powinno to być tak proste, jak przełączenie repozytorium na prawo publiczne? Myślę, że moje główne pytanie dotyczy licencjonowania. Myślałem o skorzystaniu z licencji Apache 2.0 tylko dlatego, że wydaje się, że jest powszechnie używana. Wymaga, aby nagłówek licencji był dołączony do wszystkich plików źródłowych, ale jeśli zrobię to teraz, wszystkie inne zatwierdzenia z przeszłości będą go brakować. Czy to oznacza, że ktoś mógłby ściągnąć wcześniejszą wersję i nie miałby licencji? Czy najlepiej jest rozpocząć nowe repozytorium z początkowym zatwierdzeniem zawierającym cały kod z nagłówkami licencji? A może jest jakaś zaawansowana funkcjonalność Git, która pozwala mi w jakiś sposób zastosować nagłówek licencji do wszystkich istniejących zatwierdzeń? Twoje zdrowie.


title: Kilka pytań dotyczących ClearCase

text: Jestem osobą rtęciową. Używam go nawet jako narzędzia do przyrostowej kopii zapasowej. Kiedyś używałem SVN i CVS. W ostatnim projekcie musiałem użyć clearcase i napotkałem z nim wiele problemów. Na przykład nie mogłem wymyślić, jak rekurencyjnie włączyć całe drzewo kodu bez napisania skryptu lub użycia awk lub find. Czy istnieje sposób na łatwiejsze osiągnięcie tego celu? Wierzę również (ale nie jestem pewien), że clearcase integruje zarządzanie problemami/błędami z kodem. Nie chciałbym, aby zarządzanie moim weryfikacją kodu było mocno obciążone problemami, jakimikolwiek sugestiami? Moje dalsze pytania to: * Czy clearcase jest przestarzały jako env kontroli wersji? Czy to prawdopodobne, że w projekcie, nad którym pracuję, zmusza mnie do używania clearcase tylko dlatego, że jest to projekt odziedziczony? * Sprawia mi wrażenie, że jest przestarzały, przekombinowany i powinien zostać wycofany. Czy taka jest obecna sytuacja z clearcase wśród programistów? * Czy istnieją przekonujące powody/funkcje/funkcjonalność w Clearcase, że jest on preferowany w stosunku do SVN, GIT lub Mercurial? * Być może istnieje cała ekosfera powodów, dla których projekt wykorzystuje clearcase i że muszę porzucić moją mentalność rtęciową i spędzić czas na zanurzeniu się w ekosferze Clearcase, której jeszcze nie odkryłem? * Czy brak funkcji w Clearcase jest przyczyną braku funkcji w GUI Clearcase?


title: Czy podejście kopiuj/wklej jest zawodowo opłacalne podczas pracy z interfejsem API Map Google?

text: Zauważyłem, że rozumiem wiele pojęć JavaScript używanych w kodzie API Map Google, ale z drugiej strony jest sporo tego, co mi przerasta w składni. Na przykład składnia geokodera wydaje się być w formie Ajax, chociaż nie rozumiem, co się dzieje pod maską (zwłaszcza z liniami takimi jak `results[0].geometry.location`). Mogę _am_ modyfikować treść `if (status == google.maps.GeocoderStatus.OK)` do różnych celów. Skoro więc jestem w stanie wziąć różne kody z Przewodnika programisty i przerobić go do pewnego stopnia na własne potrzeby, nie rozumiejąc w pełni, co tak naprawdę robią Mapy Google, czy to czyni mnie programistą kopiuj-wklej? Czy to zła praktyka, czy jest to opłacalne zawodowo? Oczywiście interesuje mnie nauka jak najwięcej, ale co, jeśli ograniczenia czasowe przeważają nad procesem uczenia się?


title: Java IDE napisane w czystej Javie?

text: Czy istnieje Java IDE napisane w Javie? Właśnie dostałem dziś do szkoły laptopa DET z 9 roku i nałożono wiele ograniczeń. Nieco irytujące jest to, że nie można uruchomić żadnego pliku wykonywalnego innego niż te, które są już zainstalowane w systemie (z jakiegoś powodu nie wyłączono korzystania z wiersza polecenia, PowerShell lub, co dziwne, regedit). Pozwalają na uruchamianie plików wykonywalnych Javy, więc pomyślałem, że to jedyny sposób, aby móc programować na moim gównianym laptopie w szkole (po skończeniu całej pracy, oczywiście) :D **Edytuj:** Java, mam na myśli również to, że plik wykonywalny, który służy do uruchomienia programu, ma rozszerzenie pliku ".jar", a więc działa na JVM. **Edytuj 2:** Wypróbowałem DrJava IDE i działało świetnie, dzięki (mogę kompilować i uruchamiać programy)! Jeśli chodzi o uruchamianie Eclipse za pomocą wiersza poleceń za pomocą polecenia "java -jar "C:/Users.../org.eclipse..."". Skutkuje to błędem generującym dziennik z napisem plik, głównym błędem jest: > KOMUNIKAT Wystąpił błąd podczas automatycznej aktywacji pakietu > org.eclipse.ui.workbench (182). Jak naprawić ten błąd (o wiele wolę pracować z Eclipse niż z jakimkolwiek innym IDE)? **Edycja 3:** Jeśli chodzi o moją ostatnią edycję, po prostu ją zignoruj :D. Naprawiłem problem, pobierając najnowszą wersję Eclipse.


title: Ruby Drag-n-Drop IDE i związane z programowaniem Ruby

text: Piszę małą aplikację z graficznym interfejsem użytkownika, używając Rubiego i Gtk2. Używam RubyMine 3 w systemie Linux (Fedora). Stworzyłem prostą klasę do tworzenia okna Gtk, ale teraz czuję, że dodawanie kodu dla przycisku, rozwijanego i tekstowego itp. zajmuje więcej czasu. Muszę napisać jeszcze więcej kodu, jeśli DropDown musi być wypełniony podczas uruchamiania- czas. Czy istnieje IDE Ruby Gtk, które obsługuje dodawanie kontrolek za pomocą prostego przeciągania i upuszczania? Przynajmniej mogę skupić się na logice biznesowej, zamiast tylko definiować pozycję i rozmiary kontrolek. Jeszcze jedno pytanie. Zapisałem się na listę dyskusyjną Ruby-Forum, ale często jest ona zalewana spamem. Jakie jest oficjalne forum Ruby? Ostatnio NetBeans wycofał wsparcie dla Rubiego. Czy warto uczyć się Rubiego na poważnie i używać go w środowisku komercyjnym, czy nie?


title: Jakie jest najlepsze podejście do poznania dużego systemu, takiego jak CMS lub system forum, który nie ma dokumentacji?

text: _Mój problem_ jest następujący; Muszę poznać zupełnie nowy system, na przykład Wordpress, Drupal, framework typu Symfony, a może duży system forumowy typu PhpBB. Załóżmy, że nie ma w ogóle dokumentacji, ale kod jest dobry. _W końcu robię_, że zaczynam od `index.php` i klikam pierwszy plik dołączający, co prowadzi mnie do następnego pliku. Ale potem żąda innego pliku, a ten plik żąda innego, więc na końcu nawet zapominam, od czego zacząłem i nie mam pojęcia, które było poprzednie żądanie. Więc _moje pytanie_ brzmi, czy jest na to dobry sposób? Na przykład rysowanie wykresu przepływu aplikacji czy coś takiego. Kiedy chcę poznać nowy system, najpierw chciałbym uzyskać „**duży obraz**” o tym, co jest po czym, i jakie pliki robią jaką część systemu, jaka funkcja zostanie wywołana, kiedy, co jak te. Zasadniczo wszystko, co chcę zrobić, to napisać taki przepływ aplikacji, gdy zaczynam z nowym systemem. Czy jest dobry sposób na zrobienie tego bez poświęcania zbyt wiele czasu i zamieszania? Czy jest do tego jakieś oprogramowanie lub narzędzia do debugowania? Czy są jakieś typy wykresów dla tej sytuacji, które mogę tutaj zastosować? Czy możesz zasugerować małe sztuczki lub wskazówki, jak poznać duże systemy i czego szukasz najpierw bez zbytniego zagłębiania się w kod i marnowania zbyt wiele czasu na niezbyt ważne części?


title: Co zrobić, gdy po prostu nie wiem, co jest nie tak?

text: Jestem początkującym programistą, samoukiem i mam pytanie. Mam trochę kodu i nie wiem, dlaczego mój kod nie robi tego, co chcę. Moje pytanie brzmi; co robisz, gdy po prostu nie wiesz, dlaczego/jak Twój kod nie działa i spędziłeś nad tym całe wieki? Zacząć od nowa, czy kontynuować, czy co? Mówię tutaj o najlepszych praktykach, najlepszych praktykach dla niedoświadczonych programistów.


title: Cytaty za niewskazanie globalnie unikalnego hasła

text: Mam spór z kimś (klientem) na temat procesu identyfikacji/uwierzytelniania użytkownika w systemie. Sednem tego jest to, że chcą, aby każdy użytkownik miał globalnie unikalne hasło (tj. Żadnych dwóch użytkowników nie może mieć tego samego hasła). Wysunąłem wszystkie oczywiste argumenty przeciwko temu (jest to luka w zabezpieczeniach, myli identyfikację z uwierzytelnianiem, jest bezcelowa itp.), ale upierają się, że nie ma nic złego w tym podejściu. Zrobiłem różne wyszukiwania w Google, szukając autorytatywnych (lub pół-autorytatywnych, a nawet po prostu niezależnych) opinii na ten temat, ale nie mogę znaleźć żadnych (głównie jest to tak oczywiste faux pas, przed którym nie warto ostrzegać, ponieważ o ile wiem). Czy ktoś może skierować mnie na taką niezależną opinię, proszę? **[EDYTUJ]** Dziękuję za wszystkie odpowiedzi, ale rozumiem już problemy z tym proponowanym podejściem/wymaganiem i potrafię je nawet wyjaśnić klientowi, ale klient ich nie zaakceptuje, stąd moja prośba o niezależne i /lub wiarygodne źródła. Znalazłem również artykuł Daily WTF, ale cierpi on z powodu problemu, na który zwrócił uwagę Jon Hopkins – że jest to tak oczywisty WTF, że nie wydaje się warte wyjaśniania **dlaczego**. I tak, hasła będą solone i haszowane. W takim przypadku globalna wyjątkowość może być trudna do zapewnienia, ale to nie rozwiązuje mojego problemu - oznacza to po prostu, że mam wymóg, aby klient nie ustąpił, co jest nie tylko nierozważne, ale także trudne do spełnienia. wprowadzić w życie. A gdybym był w stanie powiedzieć „nie kręcę się na soleniu i haszowaniu”, to byłbym w stanie powiedzieć „nie wdrażam globalnie unikalnych haseł”. Wszelkie wskazówki do niezależnych i/lub autorytatywnych źródeł, dlaczego jest to **zły** pomysł, który wciąż jest wdzięczny... **[/EDIT]**


title: Nauka w pracy: JavaScript, CoffeeScript, BackBone i jQuery

text: Unikałem JavaScript tak długo, jak mogłem. Po prostu uważam, że to bardzo, bardzo brudny język skryptowy. Nie mam nic przeciwko nawiasom klamrowym, pracuję z PHP prawie na co dzień, nie mam nic przeciwko. Myślę, że największym problemem jest to, że jestem samoukiem i zacząłem od PHP. Wcześniej pracowałem z jQuery, więc zajmowało się to w dużej mierze moją JSfobią (jako że manipulowanie kilkoma elementami na stronie załatwiło mi sprawę, a także mnóstwem gotowych wtyczek). Teraz muszę tylko pójść o krok dalej. Ostatnio zrobiłem trochę eksploracji i muszę powiedzieć, że podoba mi się sposób, w jaki wygląda RoR. I cóż – jest podobny sposób pisania JS – CoffeeScript. Poza tym zbliża się (około tygodnia) projekt stworzenia aplikacji na iPhone'a, teraz już wiem, że będę przechowywać dane w telefonie, a następnie je wyświetlać. Na razie nic zbyt skomplikowanego, ale to dla mnie nowe podstawy. Prawdopodobnie będę pracował z PhoneGap, aby uczynić go aplikacją, ponieważ tak naprawdę nie chcę zaczynać mieszać w Objective-C (chociaż mógłbym, ale bez znajomości C/C++ może to zająć dużo więcej czasu niż bym chciał to do) Więc - to prowadzi do mojego pytania. Czy to jest w porządku, jeśli zacznę uczyć się CoffeeScript od podstaw zrozumienia JS i zacznę używać Backbone.js z jQuery/+jQuery Mobile w projekcie? Otwórz również na wszelkie dodatkowe sugestie.


title: Jak zrefaktoryzować kod do jakiegoś wspólnego kodu?

text: **Tło** Pracuję nad trwającym projektem C#. Nie jestem programistą C#, przede wszystkim programistą C++. Przydzielono mi więc w zasadzie proste i refaktoryzujące zadania. Kod to bałagan. To ogromny projekt. Ponieważ nasz klient wymagał częstych wydań z nowymi funkcjami i poprawkami błędów, wszyscy inni programiści byli zmuszeni do stosowania brutalnej siły podczas kodowania. Kod jest wysoce niemożliwy do utrzymania i wszyscy inni programiści się z nim zgadzają. Nie jestem tutaj, aby dyskutować, czy zrobili to dobrze. Podczas refaktoryzacji zastanawiam się, czy robię to we właściwy sposób, ponieważ mój zrefaktoryzowany kod wydaje się skomplikowany! Oto moje zadanie jako prosty przykład. **Problem** Istnieje sześć klas: „A”, „B”, „C”, „D”, „E” i „F”. Wszystkie klasy posiadają funkcję `ExecJob()`. Wszystkie sześć implementacji jest bardzo podobnych. Zasadniczo na początku napisano `A::ExecJob()`. Następnie wymagana była nieco inna wersja, która została zaimplementowana w `B::ExecJob()` poprzez modyfikację funkcji kopiuj-wklej- w `A::ExecJob()`. Gdy wymagana była inna nieco inna wersja, napisano `C::ExecJob()` i tak dalej. Wszystkie sześć implementacji ma jakiś wspólny kod, potem kilka różnych linii kodu, potem znowu jakiś wspólny kod i tak dalej. Oto prosty przykład implementacji: A::ExecJob() { S1; S2; S3; S4; S5; } B::ExecJob() { S1; S3; S4; S5; } C::ExecJob() { S1; S3; S4; } Gdzie `SN` jest grupą dokładnie takich samych instrukcji. Aby uczynić je powszechnymi, stworzyłem inną klasę i przeniosłem wspólny kod do funkcji. Użycie parametru do kontrolowania, która grupa instrukcji ma zostać wykonana: Base::CommonTask(param) { S1; jeżeli (param.s2) S2; S3; S4; jeśli (param.s5) S5; } A::ExecJob() // A dziedziczy Base { param.s2 = true; param.s5 = prawda; Wspólne zadanie(param); } B::ExecJob() // B dziedziczy Base { param.s2 = false; param.s5 = prawda; Wspólne zadanie(param); } C::ExecJob() // C dziedziczy Base { param.s2 = false; param.s5 = fałsz; Wspólne zadanie(param); } **Zauważ, że ten przykład używa tylko trzech klas i nadmiernie uproszczonych instrukcji. W praktyce funkcja `CommonTask()` wygląda na bardzo złożoną z tymi wszystkimi parametrami sprawdzania i jest o wiele więcej instrukcji. Ponadto, w prawdziwym kodzie istnieje kilka funkcji wyglądających na `CommonTask()`.** Chociaż wszystkie implementacje mają wspólny kod, a funkcje `ExecJob()` wyglądają ładniej, istnieją dwa problemy, które mnie nurtują: jakakolwiek zmiana w `CommonTask()`, wszystkie sześć (i może być więcej w przyszłości) funkcje muszą zostać przetestowane. * `CommonTask()` jest już złożony. Z czasem stanie się bardziej złożony. Czy robię to we właściwy sposób?


title: Indeksowanie wskaźnika

text: Obecnie czytam książkę pt. „Przepisy liczbowe w C”. W tej książce autor szczegółowo opisuje, w jaki sposób niektóre algorytmy z natury działają lepiej, gdy mamy indeksy zaczynające się od 1 (nie do końca zgadzam się z jego argumentacją i nie o to chodzi w tym poście), ale C zawsze indeksuje swoje tablice zaczynając od 0 Aby obejść ten problem, sugeruje po prostu zmniejszenie wskaźnika po alokacji, np.: float *a = malloc(size); a--; To, jak mówi, skutecznie da ci wskaźnik, który ma indeks zaczynający się od 1, który następnie zostanie zwolniony za pomocą: free(a + 1); O ile mi wiadomo, jest to niezdefiniowane zachowanie według standardu C. Jest to najwyraźniej książka ciesząca się dużym uznaniem w społeczności HPC, więc nie chcę po prostu lekceważyć tego, co mówi, ale zwykłe zmniejszanie wskaźnika poza przydzielonym zakresem wydaje mi się bardzo pobieżne. Czy to "dozwolone" zachowanie w C? Przetestowałem to używając zarówno gcc, jak i icc, i oba te wyniki wydają się wskazywać, że nie martwię się o nic, ale chcę być absolutnie pozytywny.


title: Python API: moduł rozszerzeń lub moduł czysty

text: Mamy aplikację C++, w której interfejsy C++ zmieniają się regularnie podczas rozwoju. Mamy również C API, które zostało zaprojektowane tak, aby było stabilne pomimo takich zmian; API C jest mocno skoncentrowane na operacjach, które kod klienta może chcieć wykonać. Teraz chcemy dodać API Pythona, aby ułatwić zewnętrznym klientom (lub naszemu zespołowi) tworzenie skryptów kontrolujących aplikację. Biorąc pod uwagę niestabilność kodu C++ i niezgodną z założenia naturę API C, sensowne jest budowanie API Pythona na C. Wiem, że sposobem na to jest dostarczenie modułu rozszerzenia (zaimplementowanego w C++), który będzie użyteczny w Pythonie i zawija funkcje C API. Zastanawiam się nad tym, czy powinienem uczynić ten moduł rozszerzenia interfejsem API Pythona (i tym samym uczynić go tak Pythonowym, jak to tylko możliwe), czy też powinienem zachować to jako „szczegół implementacyjny” interfejsu API Pythona i zbudować czysty moduł Pythona na go, który służyłby jako rzeczywisty zewnętrzny interfejs API. Moduł rozszerzający byłby wtedy bardzo owinięty wokół funkcji C, rezygnując z bycia ładnym kodem Pythona. Widzę następujące plusy i minusy: **Python API jest rozszerzeniem C++** Byłoby to bardziej wydajne, ponieważ jest mniej warstw pośredniczących. Jednocześnie wymaga standardowego kodu, aby zapewnić zachowanie Pythona w C++, a kod jest ogólnie trudniejszy do napisania i utrzymania (liczenie odwołań, tabele wskaźników itp.). **Python API to moduł opakowujący rozszerzenie C++** Dzięki temu możemy pisać kod Pythona w Pythonie, co jest łatwiejsze i mniej podatne na błędy. Prawdopodobnie doprowadziłoby to również do bogatszego, bardziej kompletnego API, ponieważ dodawanie funkcjonalności jest łatwiejsze i szybsze w Pythonie niż w C++. Wadą jest to, że dodatkowa warstwa obciąża środowisko wykonawcze i pamięć, a także konieczność utrzymywania dwóch oddzielnych bitów kodu dla jednej rzeczy. * * * Moje główne pytanie brzmi: czy są jakieś oczywiste zalety lub wady niektórych podejść, których nie rozważyłem, zwłaszcza tych, w których jeden wybór jest wyraźnie lepszy od drugiego? Ponadto, czy istnieje powszechnie akceptowana „najlepsza praktyka” dla tego typu rzeczy? Lub „listę kontrolną”, która pomoże wybrać właściwe podejście do konkretnej sytuacji?


title: Czy śledzisz postępy podczas zwinnego sprintu (iteracji)

text: Ostatnio przyjęliśmy (lub staramy się) zaadoptować zarządzanie naszymi projektami w sposób zwinny. Podczas naszego pierwszego sprintu zapytałem naszego Scrum mastera ( _który również jest naszym głównym rezydentem Agile go-to person_ ), czy można zobaczyć postęp naszego sprintu, abyśmy mogli określić, czy zrealizowaliśmy harmonogram, czy nie (możliwe ryzyko ). Odwrócili się i powiedzieli, że nie robisz tego na poziomie sprintu? Jestem naprawdę nowy w zwinności, ale pomyślałem, że bardzo dobrze byłoby wiedzieć, czy sprint jest celny, czy nie. Może jednak na tym etapie jest to zbyt trudne? Jeśli tak, czy są jakieś sugestie/metody, w jaki sposób można określić, czy sprint jest zagrożony?


title: Czy łatwiej jest zdefiniować i rozpoznać słaby projekt aplikacji niż dobry projekt aplikacji?

text: Kilka ostatnich pytań dotyczyło „dobrze zaprojektowanych aplikacji” i „źle zaprojektowanych aplikacji”. Patrząc na odpowiedzi, wydaje mi się, że może być łatwiej rozpoznać i zdefiniować kiepski kod i źle zaprojektowane aplikacje niż zdefiniować, czym jest dobry kod i dobry/poprawny projekt aplikacji. Co myślisz?


title: Jaka powinna być odpowiednia ilość czasu na rozmowę kwalifikacyjną przed odrzuceniem kandydata?

text: Jako panelista na rozmowach technicznych często spotykasz kandydatów, którzy mają wszystkie wymagane kwalifikacje edukacyjne, umiejętności i poziom doświadczenia w CV, ale mają trudności z odpowiedzią nawet na najbardziej podstawowe pytania. Najlepiej byłoby, gdyby rozmowy techniczne miały na celu sprawdzenie różnych aspektów kandydata i przetestowanie go pod kątem różnych umiejętności. Tak więc, jeśli kandydat słabnie w jednym aspekcie, należy przetestować inne przed wyciągnięciem wniosków. Ale często, jeśli kandydat słabnie przy pierwszych kilku pytaniach, czerwona flaga wznosi się dość szybko. Jaki, Twoim zdaniem, powinien być minimalny czas spędzony z kandydatem przed sprawiedliwym dostępem do jego umiejętności i przydatności do pracy?


title: Jaka jest formalna definicja pakietu meta?

text: Istnieje kilka przykładów pakietów, w których pakiet aplikacji jest zbudowany, nazwany, opisany, a nawet licencjonowany, ale zawiera tylko kod instalacyjny i zależności — nie ma własnego pierwszorzędnego oprogramowania wykonawczego. Nazwałbym to „metopakowaniem”. Wydaje się to być szczególnie popularne w świecie open-source, włączając w to przykłady takie jak _kde-meta_ (Gentoo Portage), _Plone_ i na pewno wiele innych. Widzę, jak jest to użyteczna praktyka, ale pomimo tego, że istnieje jako praktyka, nie mogłem znaleźć formalnej definicji „meta-opakowania” lub „meta-jajka” (Python) w przeszukiwaniu sieci. Czy to nie jest właściwy termin? Jeśli tak, to czy jest to tak zdroworozsądkowe, że nie wymaga formalnej definicji? Jeśli nie, jak to właściwie ująć?


title: Implementacje map skrótów szybkiego wyszukiwania

text: Jestem w trakcie wdrażania języka programowania na LLVM. Do mojego systemu polimorficznego szukam sugestii dotyczących ultraszybkiego słownika. Nie przejmuję się czasem wstawiania, ponieważ te mapy są zapisywane tylko do kilkunastu razy. Ale szukam super szybkiego wyszukiwania. Zrobiłem trochę badań nad implementacją otwartego adresowania dict w Pythonie i wydaje się, że jest to dość szybkie (kilka przesunięć i masek bitowych w najlepszym przypadku). Jednak chcę przeprowadzić swoje badania. Czy ktoś wie o superszybkiej implementacji słownika/hashmapy? W tym przypadku moje dane będą najprawdopodobniej wskaźnikami jako kluczami i wskaźnikami jako wartościami. A jeśli to wyjdzie lepiej, prawdopodobnie mógłbym sobie poradzić z liczbami całkowitymi jako kluczami. Wszelkie referaty lub dyskusje na ten temat byłyby świetne.


title: Dlaczego tablice C nie śledzą ich długości?

text: Jakie było uzasadnienie tego, że nie przechowuje się jawnie długości tablicy za pomocą tablicy w `C`? Z mojego punktu widzenia istnieją przytłaczające powody _aby to zrobić_, ale niewiele na poparcie standardu (C89). Na przykład: 1. Posiadanie długości dostępnej w buforze może zapobiec przepełnieniu bufora. 2. `arr.length` w stylu Javy jest zarówno przejrzysty jak i unikający konieczności utrzymywania przez programistę wielu `int` na stosie, jeśli ma do czynienia z kilkoma tablicami. 3. Parametry funkcji stają się bardziej przekonujące. Ale chyba najbardziej motywującym powodem, moim zdaniem, jest to, że zwykle nie oszczędza się miejsca bez zachowania długości. Zaryzykowałbym stwierdzenie, że większość zastosowań tablic wiąże się z alokacją dynamiczną. To prawda, mogą istnieć przypadki, w których ludzie używają tablicy alokowanej na stosie, ale to tylko jedno wywołanie funkcji* - stos może obsłużyć dodatkowe 4 lub 8 bajtów. Ponieważ menedżer sterty i tak musi śledzić wolny rozmiar bloku używanego przez dynamicznie alokowaną tablicę, dlaczego nie uczynić tej informacji użyteczną (i dodać dodatkową regułę, sprawdzaną w czasie kompilacji, że nie można jawnie manipulować długością, chyba że lubię strzelać sobie w stopę). Jedyną rzeczą, o której mogę pomyśleć po drugiej stronie, jest to, że żadne śledzenie długości nie uczyniło kompilatorów prostszymi, ale nie _tak_ znacznie prostszymi. *Technicznie można by napisać jakąś funkcję rekurencyjną z tablicą z automatycznym przechowywaniem, a w tym (bardzo skomplikowanym) przypadku przechowywanie długości może rzeczywiście skutkować efektywnie większym wykorzystaniem miejsca.


title: Sugestie dotyczące programów do rozwijania do nauki

text: Zastanawiam się, poza tymi bardzo prostymi aplikacjami hello world, jakie inne programy powinienem spróbować rozwijać do nauki. Wchodzę na studia w przyszłym roku i zastanawiam się, jakie programy będą rozwijane w tym środowisku. nie jest to tak naprawdę rzecz specyficzna dla języka, ale jeśli chcesz wiedzieć, czego obecnie używam, głównie * windows: C#/WPF - uczyłem się java/vb itp. w poly, ale myślę, że C# jest do zrobienia, może nawet F# * web : PHP/MySQL, Zend Framework/Doctrine, + oczywiście HTML/CSS/JS(jQuery). też chcesz wypróbować silnik aplikacji Google z pythonem. na razie myślę o * listach rzeczy do zrobienia * aplikacjach integrujących się z api np. twitter/tumblr, którego używam * edytor tekstu - obecnie staram się opracować edytor tekstu, który wykorzystuje markdown i generuje pliki html do przeglądania (link do wpisu na blogu). niezbyt praktyczne po tym, jak zacząłem go rozwijać. ponieważ podczas edycji nie ma formatowania i w formacie HTML, nie mogę edytować bezpośrednio * oprogramowanie blogowe (dla sieci)


title: Czy wzór Fabryki Abstrakcyjnej jest skalowany?

text: Wciąż próbuję zrozumieć tutaj wzorce projektowe, po zapoznaniu się z wzorcem Fabryka abstrakcyjna zdałem sobie sprawę, że ten wzorzec nie będzie się dobrze skalował. Spójrz na diagram uml wzorca fabryki abstrakcyjnej ![diagram uml](http://s11.postimg.org/okmvliygj/Abstract_Factory.gif) Jeśli mam stworzyć nowy 'AbstractProductC', będę musiał dodać abstrakcyjna metoda „CreateProductC” w „AbstractFactory”, która wpływa na implementację zarówno ConcreateFactory1, ConcreateFactory2. Moje pytanie brzmi: czy wzór Fabryki Abstrakcyjnej w ogóle skaluje się (lub) myślę w złym kierunku? Z góry dziękuję


title: Jak oszacować godziny realizacji projektu za pomocą narzędzia Pivotal Tracker, jeśli jesteś firmą usługową?

text: Jestem nowy w Pivotal Tracker i próbuję dowiedzieć się, jak najlepiej wykorzystać go w naszej firmie. Jesteśmy firmą świadczącą usługi doradcze w zakresie tworzenia aplikacji. Jak wiecie, klienci chcą mieć pojęcie o całkowitym czasie i kosztach, zanim podpiszą jakąkolwiek umowę. W jaki sposób mapujecie swój projekt w Pivotal na łączną liczbę godzin i osi czasu? Jakieś najlepsze praktyki? Wskaźniki? W tej chwili mój zespół i ja podzieliliśmy projekt na historie (uwielbiam to, jak Pivotal skłania nas do myślenia na znacznie niższym poziomie) i z grubsza wyznaczyliśmy punkty na godziny. * 1 - 1 godzina * 2 - 2 godziny * 3 - 6 godzin * 5 - 10 godzin Wtedy w zasadzie myślimy o 2 jako o kwadransie, 3 o 3/4 dnia, a 5 jako o pełnym dniu lub nieco dłużej . Następnie obliczam, ile musimy 1s, 2s, 3s i 5s, aby uzyskać przybliżoną łączną liczbę godzin. Pivotal podaje mi szacunkową datę ukończenia w oparciu o domyślną prędkość (wiem, że to może się zmienić). Następnie zgłaszam klientowi przybliżoną całkowitą liczbę godzin, koszt i termin. Rozumiem, że jest to sprawne i iteracyjne, gdy wszystko się zmienia, ale kiedy ludzie zatrudniają cię jako konsultanta, chcą kosztów z góry.


title: Kompozycja a dziedziczenie

text: Oto, co jest podane: public interface Request {} // istnieje 20 podklas klasy Request public CreateUserRequest implementuje Request { @NotEmpty public String userName; } // Procesor żądań to coś, co ma na celu przetwarzanie żądań publiczny interfejs RequestProcessor<TRequest extends Request> { boolean processRequest(TRequest request); } public class ServiceFacade { // 20 procesorów takich jak ten prywatny final RequestProcessor<CreateUserRequest> createUserRequestProcessor; public ServiceFacade( RequestProcessor<CreateUserRequest> createUserRequestProcessor) { this.createUserRequestProcessor = createUserRequestProcessor; } // 20 metod takich jak ta jedna public boolean createUser(CreateUserRequest request) { createUserRequestProcessor.processRequest(request); } } Obiekt implementujący `RequestProcessor<T>` jest przeznaczony do przetwarzania żądań typu `T`. Co więcej, jest odpowiedzialny za obsługę wszystkich powiązanych błędów (takich jak nieprawidłowe żądanie, awaria dostępu do bazy danych i tak dalej). Tak więc przepływ pracy dla `CreateUserRequest` powinien wyglądać tak: request walidacja/throw upewnij się, że użytkownik jeszcze nie istnieje/throw utwórz użytkownika Jak zwykle, inne typy żądań mogą wymagać wykonania większej liczby kroków. **Jako ilustracja** : w przypadku `AddUserAsFriendRequest` musimy sprawdzić, czy obaj użytkownicy istnieją i czy kandydat na przyjaciela pozwolił innym dodać go jako przyjaciela. Aha, a ponadto, jeśli jeden użytkownik doda więcej niż 10 znajomych dziennie, przez resztę dnia jest ograniczony do 1 znajomego na 2 godziny. **Pytanie brzmi** , jakiej hierarchii/struktury/podejścia użyć, aby móc rozszerzyć tę funkcjonalność zarówno w „liczbie typów żądań” jak i „przepływie procesu żądania”. Widzę tylko 2 podejścia. # Dziedziczenie public abstract class ValidatingRequestProcessor<TRequest extends Request> implementuje RequestProcessor<TRequest> { protected final Validator validator; public ValidatingRequestProcessor(Validator validator) { this.validator = walidator; } public boolean processRequest(żądanie TRequest) { Set<ConstraintViolation<TRequest>> naruszeń = validator.validate(request); if(!violations.isEmpty()) { return false; } return processValidatedRequest(request); } protected abstract boolean processValidatedRequest(żądanie TRequest); } public class CreateUserValidatingRequestProcessor extends ValidatingRequestProcessor<CreateUserRequest> { public CreateUserValidatingRequestProcessor(Validator validator) { super(validator); } protected boolean processValidatedRequest(TRequest request) { // żądanie jest prawidłowe, więc mogę spróbować utworzyć użytkownika tutaj } } i tak dalej tutaj. W przypadku `N` „kroków logicznych”, będę miał `(N-1)` zagnieżdżone klasy `extends` i `N`: klasa A implementuje RequestProcessor {} klasa B extends A {} klasa C extends B {} class D extends C {} ... class Z extends Y {} RequestProcessor requestProcessor = new Z(); // TADA! * * * # Kompozycja public class ChainingRequestProcessor<TRequest extends Request> implementuje RequestProcessor<TRequest> { private final RequestProcessor<TRequest> processorA; prywatne końcowe RequestProcessor<TRequest> procesorB; public ChainingRequestProcessor( RequestProcessor<TRequest> procesorA, RequestProcessor<TRequest> procesorB) { this.processorA = processorA; ten.procesorB = procesorB; } public boolean processRequest(TRequest request) { return processorA.processRequest(request) && processorB.processRequest(request); } } public RequestValidatorProcessor<TRequest extends Request> implementuje RequestProcessor<TRequest> { private final Validator validator; public RequestValidatorProcessor(Validator validator) { this.validator = walidator; } public boolean processRequest(TRequest request) { return !validator.validate(request).isEmpty(); } } public CreateUserProcessor implementuje RequestProcessor<CreateUserRequest> { public boolean processRequest(CreateUserRequest request) { // nie jestem pewien, czy żądanie jest prawidłowe, czy nie // można spróbować utworzyć użytkownika tutaj } } i tak dalej. W przypadku `N` "kroków logicznych" będę miał po prostu `N` klas. Czyli: klasa A implementuje RequestProcessor {} klasa B implementuje RequestProcessor {} klasa C implementuje RequestProcessor {} klasa D implementuje RequestProcessor {} ... klasa Z implementuje RequestProcessor {} // po prostu zgadnij RequestProcessor requestProcessor = new A(new B(), nowy C(nowy D())); // TADA! * * * **Które podejście jest lepsze do tego zadania? Lepsze oznacza:** * Łatwiejsze modyfikowanie logiki * Łatwiejsze dodawanie logiki * Łatwiejsze testowanie


title: Czy hurtownie danych są produktami szytymi na miarę, dostosowanymi do konkretnych potrzeb jednej organizacji?

text: Czy hurtownie danych są projektami dostosowanymi do potrzeb konkretnej organizacji, czy też można kupić gotowe produkty, które spełniłyby potrzeby wielu organizacji? Mowa o produkcie, który zintegruje informacje z wielu różnych systemów m.in. system finansowy, system sprzedaży, system produkcji itp. do raportowania zarządczego. Różne organizacje mają różne systemy, które mają różne projekty baz danych. Na przykład organizacja A może używać systemu finansowego A, który ma zupełnie inną konstrukcję niż system finansowy B używany przez organizację B. Dlatego uważam, że produkty Hurtowni Danych są produktami szytymi na miarę i nie jest możliwe opracowanie produktu, który mógłby być używany przez wiele organizacji m.in. organizacja A i organizacja B; które mają te same typy systemów, np. Finanse, Sprzedaż itp. Czy mam rację w tej analizie?


title: Czy należy używać WCF, surowych gniazd lub czegoś innego do wysyłania danych do odbierania z aplikacji wiersza polecenia?

text: Mam aplikację wiersza poleceń, która będzie wielowątkowa i będzie obsługiwać klientów przychodzących i wychodzących. Będzie wysyłał i odbierał binarne struktury danych generowane przez protobuf.net Moje pytanie brzmi, jak mam się zatroszczyć o to, aby klienci wysyłali i odbierali dane? Czy moje użycie protobuf.net oznacza, że WCF jest mniej istotny? czy tylko niektóre funkcje serializacji?


title: Usługa i zabezpieczenia WCF

text: Tworzę aplikację WP7 i teraz potrzebuję jej do komunikacji z usługą WCF, którą wprowadziłem w celu wprowadzenia zmian w bazie danych SQL. Jestem trochę zaniepokojony bezpieczeństwem, ponieważ nazwa użytkownika i hasło dostępu do bazy danych SQL znajdują się w App.Config. Wyczytałem w miejscach, że można zaszyfrować nazwę użytkownika i hasło w pliku konfiguracyjnym. Ponieważ nazwa użytkownika i hasło nigdy nie są ujawniane klientom podłączonym do usługi WCF, czy bezpieczeństwo w mojej sytuacji stanowiłoby duży problem? Na wypadek, gdyby ktoś zasugerował metodę bezpieczeństwa, nie mam SSL na moim serwerze WWW.


title: O ile trudniej jest nauczyć się Open GL ES 2.0 niż 1.x

text: Muszę nauczyć się otwartego GL i zbudować podstawową aplikację otwartego GL. Czy łatwiej jest nauczyć się otwartego GL 1.x ES w przeciwieństwie do 2.0, który używa języka shaderów? Czy wskazane jest nauczenie się 1.x przed 2.0?


title: Argumenty przeciwko wpisywaniu plików binarnych do SCM

text: Pracuję dla firmy zajmującej się głównie tworzeniem aplikacji Java i staram się przekonać wszystkich do zaprzestania wpisywania plików binarnych (zależności i produktów końcowych) do SCM. Wiedzą, że to zła praktyka, ale uważają, że "działa" i nie stanowi to problemu, nawet jeśli wiele osób wie o Mavenie i innych narzędziach do budowania poza Antem. Zarówno premierzy, jak i programiści (około 50 osób) są gotowi wysłuchać wszelkich argumentów przeciwko, a nawet przyznać, że jest to marnowanie miejsca na kopie zapasowe, ale chcę być naprawdę przekonujący, ponieważ zmiana nawyków wymagałaby wiele wysiłku. Jakich argumentów używasz, by wesprzeć zmianę? **Edycja:** OK, sensowne jest rozróżnienie między plikami, które prawie się nie zmieniają, takimi jak zależności, a plikami generowanymi. Mimo to interesują mnie powody przemawiające przeciwko temu drugiemu.


title: Jak przekonwertować dokument Word (.doc /.docx) do formatu RTF?

text: Mam wymagania dotyczące aplikacji, która pobiera zawartość Doc, Docx (oznacza cały dokument) i konwertuje je na zawartość RTF. Próbuję, ale nie konwertuje zawartości dokumentu na zawartość RTF. Ale wystarczy zmienić rozszerzenie .doc/.docx na .rtf, a nie zawartość dokumentu.


title: Jak rozwiązać ten problem bez użycia instrukcji if-else?

text: Właśnie rozpocząłem mój wykład C++. A nauczyciel dał nam następujące zadanie. > Napisz program, który określa, czy liczba jest parzysta, czy nieparzysta. Logika, której użyłbym w programie, to. 1. Pobierz wejście „a”. 2. Zapisz `a % 2` jako `b`. 3. Jeśli „b” wynosi 0, to „a” jest parzyste, w przeciwnym razie „a” jest nieparzyste. Jednak haczyk polega na tym, że musimy napisać program bez użycia instrukcji `if-else`. Od kilku godzin zastanawiam się, jak podejść do problemu, ale nie mam pojęcia, co zrobić. Jakieś wskazówki lub sugestie?


title: Strategia korzystania z kontroli wersji w systemie modułowym

text: Załóżmy (dla uproszczenia), że mamy aplikację z klientem i serwerem; czy jest lepszy pomysł, aby użyć jednego repozytorium dla obu, czy pary osobnych repozytoriów? Mieszanie ich prawdopodobnie ułatwi śledzenie skorelowanych zmian i utrzymywanie skorelowanych gałęzi (tj. ewolucję protokołu), ale z drugiej strony sprawi, że indywidualny rozwój będzie bardziej zagracony...


title: Nierozważne jest umieszczanie ustawień edytora w plikach kodu?

text: Wiem, że to trochę subiektywne pytanie, ale jestem ciekaw, czy jest jakiś dobry powód, aby umieszczać (lub nie umieszczać) ustawienia edytora w plikach kodu. Myślę o modelinach `vi`, ale możliwe, że dotyczy to innych edytorów. W skrócie, modeline `vi` to linia wewnątrz pliku, która mówi `vi`, jak ma się zachowywać (wcięcie ze spacjami lub tabulatorami, ustawienie szerokości tabulacji na X, automatyczne wcięcie domyślnie lub nie, ...), który jest umieszczany wewnątrz komentarza , więc nie wpłynie to na program/kompilator podczas działania. W pliku `.c` mogłoby to być podobne do // vim: noai:ts=4:sw=4 Z jednej strony myślę, że nie powinno to być wewnątrz pliku, ponieważ jest to ustawienie edytora i należy do plik konfiguracyjny edytora lub właściwość. Z drugiej strony, w przypadku projektów angażujących programistów spoza jednej firmy (które nie mają narzuconego edytora/ustawień) lub współpracowników na github/bitbucket/... jest to łatwy sposób na uniknięcie łamania stylu kodu (np. tabulatory vs spacje) , ale tylko dla tych, którzy używają tego edytora. Nie widzę wystarczająco silnego powodu, aby decydować za lub przeciw tej praktyce, więc mam wątpliwości, co robić.


title: Adresowanie płaskie a adresowanie segmentowe

text: Czy model adresowania płaskiego jest generalnie lepszy od modelu segmentowego? Jeśli tak, dlaczego? Jeśli nie, to jakie przypadki będą wymagały od siebie nawzajem i dlaczego? Moje rozumienie modeli pamięci obejmuje architekturę IA32/x86-64. Więc jeśli podasz konkretne przykłady architektury, będą one najbardziej pomocne, jeśli będą do tego odpowiednie.


title: Jaki jest najprostszy sposób udostępnienia przenośnej, działającej lokalnie aplikacji serwera usług internetowych?

text: Mamy uruchomioną dużą witrynę internetową, która oferuje usługę sieciową JsonRpc. Dla celów demonstracyjnych offline, chcę stworzyć przenośny, działający lokalnie serwer WWW z minimalistyczną replikacją funkcji usługi internetowej na żywo i połączyć to razem z plikami HTML, które wysyłają do niego żądania Ajax. Ten plik wykonywalny serwera lokalnego powinien mieć jak najmniej zależności. Będzie uruchamiany i prezentowany przez nie-deweloperów na nie-deweloperskich maszynach Windows, więc wolałbym mieć prosty plik wykonywalny plus kod usługi. Językiem musiałby być .NET, PHP lub Java. Potrzebuję małej bazy danych, za którą prawdopodobnie będzie Sqlite. Ważne jest, aby powiedzieć, że z powodów, których tu nie będę omawiał, nie możemy użyć oryginalnego kodu usługi sieciowej, ale musimy przepisać go na nowo dla lokalnego serwera demonstracyjnego. Dlatego chcę włożyć minimalny wysiłek w technologię serwerów lokalnych. Instalator do dystrybucji nie jest obowiązkowy, można mieć plik zip z plikiem wykonywalnym, który uruchamia lokalny serwer WWW. **Co poleciłbyś, aby spełnić te wymagania?**


title: Wyjątki a kody błędów podczas pracy z urządzeniami

text: Nasz zespół jest u szczytu nowego projektu. Jednym z komponentów na granicy systemu jest komponent, który współdziała z drukarką poprzez zewnętrzny komponent COM (określany jako zwykła biblioteka dll). Składnik COM zwraca kody całkowite, jeśli wystąpił błąd podczas wykonywania polecenia. Rozważmy konkretny kod. klasa publiczna OperationException:Exception { public int ErrorCode { get; zestaw prywatny; } ciąg publiczny Opis błędu { get; zestaw prywatny; } public OperationException(int errorCode, string errorDescription) { ErrorCode = errorCode; opis błędu = opis błędu; } } //Sposób rzucania wyjątków public class Provider1:IFrProvider { private readonly IDrvFR48 driver; public string GetSerialNumber() { //musi odczytać status przed uzyskaniem SerialNumber int resultCode = driver.ReadEcrStatus(); if (resultCode != 0) { wyrzuć nowe OperationException(resultCode, driver.ErrorDescription); } return driver.SerialNumber; } } //Sposób zwracania parametrów wyjściowych. klasa publiczna Provider2 : IFrProvider { prywatny sterownik IDrvFR48 tylko do odczytu; public string GetSerialNumber(out Result result) { //musi odczytać status przed uzyskaniem SerialNumber int resultCode = driver.ReadEcrStatus(); if (ResultCode != 0) { wynik = new Result(ResultCode, driver.ErrorDescription); zwróć null; } wynik = nowy Wynik(0, null); zwróć sterownik.SerialNumber; } } //Sposób ustawienia właściwości LastResult. klasa publiczna Provider3 : IFrProvider { prywatny sterownik IDrvFR48 tylko do odczytu; public Result LastResult { get { return new Result (driver.ErrorCode, driver.ErrorDescription); } } public string GetSerialNumber() { //musi odczytać status przed uzyskaniem SerialNumber if (driver.GetECRStatus() == 0) return driver.SerialNumber; zwróć null; } } public class Wynik { public int Kod Wyniku { get; zestaw prywatny; } ciąg publiczny Opis { get; zestaw prywatny; } public Wynik(int KodWyniku, opis ciągu) { Kod Wyniku = Kod Wyniku; Opis = opis; } } public class Caller { public void CallProvider1() { var provider = new Provider1(); try { string numer_seryjny = provider.GetSerialNumber(); //przepływ sukcesu } catch (OperationException e) { if (e.ErrorCode == 123) { //logika obsługi } } } public void CallProvider2() { var provider = new Provider2(); Wynik wyniku; string serialNumber = provider.GetSerialNumber(wynik); if (result.ResultCode == 123) { //obsługa błędów } //przepływ sukcesu } public void CallProvider3() { var provider = new Provider3(); string numer_seryjny = dostawca.Pobierz numer_seryjny(); if (provider.LastResult.ResultCode == 123) { //handling } //success flow } } Mamy więc trzy sposoby obsługi błędów. Najbardziej konkretną rzeczą w tym wszystkim jest to, że każda operacja może się nie powieść, ponieważ zależy to od urządzenia. Nasz zespół myśli o wykorzystaniu parametrów z powodu nieobsługiwanego strachu przed propagacją wyjątków. Innym powodem, związanym z lękiem, jest to, że będziemy musieli zakrywać wszystkie wywołania blokami try\catch, aby przestać się bać, ale taki kod będzie dość brzydki. Jakie zalety i wady dostrzegasz i co możesz doradzić?


title: Czy istnieje różnica między iterowalnym a przeliczalnym?

text: Wiele języków wydaje się mieć bardzo podobne struktury zwane iterowalnymi lub przeliczalnymi. Są to struktury, które można powtarzać lub wyliczać, które wydają mi się niezwykle podobne. Czy te słowa są synonimami, czy też istnieje subtelna różnica semantyczna między iterowalnym a przeliczalnym, która uzasadnia wybór terminu?


title: DRY sposób na pisanie Javadoc na metodach przeciążenia

text: Chcę pisać Javadoc na sucho. Ale dokument oracle o Javadoc mówi, że napisz to samo ponownie w komentarzu metody przeciążenia. Czy nie mogę uniknąć powtórzeń?


title: Znaczenie różnicowania i łączenia w dokumentacji specyfikacji projektowych

text: Kontekstem tego pytania jest wybór narzędzi do pisania specyfikacji projektowych dla projektów oprogramowania. Te dokumenty będą pisane i utrzymywane przez architektów i programistów, nie mówię o wymaganiach marketingowych. Niektóre z nich mogą być udostępniane poza zespół, ale tylko w przetworzonej, nieedytowalnej formie (PDF, zakłada się, że wszystkie dokumenty można wyeksportować do tego formatu). Są to dokumenty architektury, opisujące strukturę komponentów kodu, metody implementacji, protokoły, formaty danych itp. Przybierają formę tekstu z diagramami i nazwami identyfikatorów oraz okazjonalnie fragmentami kodu, nie chodzi tu o dokumentację API, która może być generowana z plików źródłowych. Dokumentacja będzie pod kontrolą źródła, na szczęście nikt tutaj nie musi być edukowany w tym zakresie. Z czasem pojawi się wersja nieunikniona: utrzymujemy stare wersje oprogramowania. Śledzenie problemów może nie być przestrzegane tak ściśle w przypadku dokumentacji, jak w przypadku kodu. **Jak ważna jest możliwość łatwego porównywania i łączenia takich dokumentów?** W zespole mamy różne opinie, od „nikt nigdy nie łączy dokumentacji, a w razie potrzeby Word ma narzędzie do scalania” po „scalanie jest kluczowe i ` git merge` musi działać”. Uwaga „Word ma narzędzie do scalania” jest czymś, co cytuję, ale nie zgadzam się z tym, po bolesnym doświadczeniu scalania dwóch poprawek _które zrobiłem_ z dwiema kopiami tego samego dokumentu. firma (może Google, bo tak często się ją przytacza), że „jeśli nie da się tego scalić, to nie istnieje”, ale nie mogę jej teraz znaleźć. Szukam albo dobrze uzasadnionych argumentów, albo autorytatywnych (i najlepiej umotywowanych) cytatów.


title: jakie są wzory/koncepcje matematyczne stosowane przy implementacji Chart API (wykres słupkowy, kołowy itp.)

text: Próba zaimplementowania API wykresów w Javie. Ale nie jestem pewien matematycznych wzorów/pojęć użytych przy rysowaniu każdego typu wykresu. Czy ktoś może określić pojęcia matematyczne, które są znane przy rysowaniu każdego rodzaju wykresu.


title: Funkcja „ukończenia strony” sterowana AJAX? Czy robię to dobrze?

text: Ten może mnie zamordować, ponieważ jestem prawie pewien, że to zła praktyka kodowania, więc oto: Mam witrynę opartą na AJAX, która ładuje zarówno zawartość, jak i javascript za jednym razem, używając `Request.HTML` Mootools. Ponieważ mam skrypty inicjujące, które muszą zostać uruchomione, aby zakończyć "ustawianie" szablonu, dołączam je do funkcji o nazwie `pageComplete()`, **na każdej stronie** Odwiedzenie jednej strony na drugą powoduje poprzednią `pageComplete( )` nie ma już zastosowania, ponieważ zdefiniowano nową. Funkcja javascript, która ładuje strony dynamicznie, wywołuje na ślepo `pageComplete()` po zakończeniu wywołania AJAX i załadowaniu go na stronę: function loadPage(page, params) { // strona to ciąg, params to obiekt javascript if (pageRequest && pageRequest.isRunning) pageRequest.cancel(); pageRequest = new Request.HTML({ url: '<?=APPLICATION_LINK?>' + page, evalScripts: true, onSuccess: function(tree, elements, html) { // Opróżnij poprzednią zawartość i wstaw nową zawartość $('content' ).empty(); $('content').innerHTML = html; pageComplete(); pageRequest = null; } }).send('params='+JSON.encode(params)); } Więc tak, jeśli `pageComplete()` nie jest zdefiniowany na jednej ze stron, wywoływana jest _stara_ `pageComplete()`, co może być katastrofalne, ale jak na razie każda strona ma zdefiniowaną `pageComplete()`, nawet jeśli jest pusty. Dobry pomysł, zły pomysł?


title: Jaka jest różnica w znaczeniu między „oprogramowaniem”, „programem”, „aplikacją” i „gadżetem”?

text: Wydaje się to pytaniem naiwnym, ale nie udało mi się znaleźć jednoznacznej definicji i różnicy w znaczeniu słów „oprogramowanie”, „program”, „aplikacja” i „gadżet”. Jaki jest właściwy (przynajmniej teoretycznie) sposób użycia każdego z tych słów?


title: Co jest najważniejsze, aby najpierw nauczyć się OOP, czy nauczyć się języka OOP, którego chcesz się nauczyć?

text: W dzisiejszych czasach mam problem, mam naprawdę dobrą książkę wyjaśniającą OOP, ale używa języka, którego nie chcę się uczyć, jakim jest Java, ponieważ moim celem jest nauka C#. I nie wiem, czy powinienem najpierw zrozumieć OOP z Javą, a potem nauczyć się C#, czy powinienem znaleźć jakąś książkę o C#, nawet jeśli książka o Javie jest doskonała w nauczaniu OOP?


title: Odniesienie stylu przechodzenia anty wzór

text: Pracuję na starszej bazie kodu VB.Net. Istnieje bardzo niewiele funkcji zwracających wartości, większość kodu znajduje się w metodach subs/void. Ogólna strategia wydaje się polegać na przekazywaniu wszystkiego przez odniesienie, mutowaniu, a następnie obserwowaniu zmutowanego stanu. Istnieje kilka metod, które mają aż tuzin parametrów, które są mutowane w ten sposób. Bardzo trudno mi wytłumaczyć kod napisany w ten sposób. Trudno też pisać testy pomagające w refaktoryzacji. Chciałbym wiedzieć, czy jest na to nazwa, głównie w nadziei, że uda mi się znaleźć lepsze sposoby na przeniesienie aplikacji w kierunku lepszej struktury. EDYCJA Prawdopodobnie powinienem wspomnieć, że wywołania są zwykle ograniczone do własnych wielotysięcznych plików klas. Na podstawie poniższej odpowiedzi wygląda na to, że muszę użyć metody extract, aby metody miały znaczące nazwy i radziły sobie z parametrami opcjonalnymi. Kiedy już to zrobię, mogę zacząć używać Extract Class do wydzielenia jednostki funkcjonalnej. Dobre czasy.


title: Czy klasy mogą naruszać Single Responsibility, jeśli delegują zadania wewnętrzne?

text: Mam dwie klasy `Output` i `Timeline`, z których żadna nie narusza SR, ale obie są ze sobą połączone. Więc to, co chciałbym zrobić, to mieć klasę o nazwie „Elco” (jest powód tej nazwy), która ma je obie jako podklasy. Z różnych powodów (to tylko uproszczona wersja) ważne jest, abym nie naruszał LoD (Prawo Demeter). Problem polega na tym, że technicznie „Elco” ma teraz dwa obowiązki. Deleguje te dwa obowiązki na dwie klasy, z których każda ma jedną odpowiedzialność. Czy to nie jest w porządku? Czemu? Jakie jest lepsze rozwiązanie?


title: Najlepsze podejście do napisania silnika szachowego?

text: Jestem entuzjastą szachów i programistą. Niedawno zdecydowałem się rozpocząć tworzenie silnika szachowego, wykorzystując moją wiedzę o szachach i programowaniu. A więc oto moje pytanie: Jaki język (jestem zaznajomiony z Javą, C++ i Pythonem) i metodologię powinienem dostosować podczas pisania silnika szachowego? Przydałoby się trochę wskazówek. **Edycja:** Postanowiłem więc zrobić to w JavaScript. Pobieram ten szachowy interfejs użytkownika z github i teraz wszystko gotowe! Moim pierwszym krokiem byłoby napisanie w tym celu kroków prawnych. Czy ktoś może wskazać mi właściwy kierunek? (Jestem nowy w jQuery, ale mam duże doświadczenie w programowaniu). PS: Nie staram się robić bardzo wydajnego silnika (wiem, że jest to zbyt trudne), chcę tylko zapoznać się z procesem i przy okazji nauczyć się nowych technik.


title: Jak przetłumaczyć niemiecką aplikację komputerową na angielski?

text: Pracuję na aplikacji desktopowej w języku niemieckim. A to nie jest dla mnie wygodne, aby zobaczyć słowa i przejść do tłumaczenia Google, aby je przetłumaczyć. Więc chcę zrobić dodatkowy wysiłek, aby spróbować przetłumaczyć aplikację na język angielski za pomocą usługi internetowej Google Translate. Ale Aplikacja nie używa Springa ani AOP w celu wykonania pojedynczego punktu wywołania usługi sieciowej. Moje pytanie, czy istnieje sposób na stworzenie nowego projektu, aby wprowadzić wiosnę z AOP, aby to osiągnąć. czy istnieje inny sposób na osiągnięcie tego?


title: Ciągła integracja i modyfikacja istniejących testów automatyzacji UI

text: Nasz zespół stoi obecnie w obliczu sytuacji, w której zmieniamy funkcję obecną w produkcie. Z tą funkcją powiązane są testy automatyzacji Selenium. Przeprowadzamy dość poważny przegląd systemu, w tym jego interfejsu użytkownika. Spodziewamy się, że ta praca zajmie sporo sprintów. W tym czasie inne zespoły mogą wykonywać prace, które wpłyną na tę funkcję, która istnieje obecnie. Z tego powodu chcemy, aby istniejące testy automatyzacji funkcji pozostały nienaruszone, aby mogły wykrywać problemy. Oczywiście będziemy musieli napisać automatyzację dla tej funkcji, tak jak będzie po wprowadzeniu naszych zmian. Najskuteczniejszym sposobem, aby to zrobić z perspektywy Dev/QA, byłoby zmodyfikowanie istniejących przypadków testowych w oddzielnej gałęzi (testowanie lokalnie), a następnie scalenie tych zmian, gdy funkcja będzie gotowa. W ten sposób istniejąca automatyzacja będzie nadal funkcjonować i nie musimy wykonywać dodatkowej pracy, powielając każdy test. Jednak ta osobna gałąź nie pasuje do zasad ciągłej integracji (które nasza organizacja lubi przestrzegać). Czy nasza jedyna opcja zgodna z CI pozwala na dodatkowe obciążenie polegające na powielaniu testów w celu modyfikacji?


title: Aplikacja/wtyczka do wizualizacji algorytmów

text: Szukam aplikacji (lub wtyczki IDE), której mogę użyć do przetestowania niektórych implementowanych przeze mnie algorytmów. Głównie metaheurystyki stosowane w TSP, VRP i innych problemach optymalizacyjnych. Sprawdziłem już kilka typowych sugestii w sieci, ale są one raczej zbyt proste, np. Zest. Jakieś sugestie?


title: Przyzwoity model rozgałęziania git dla produktów, które powinny towarzyszyć wersji innego, zewnętrznego produktu (oraz plusy i minusy jednej propozycji)

text: **Uwaga:** _Moje pytanie dotyczy konkretnego problemu (który dotyczy Liferay), ale mam nadzieję, że może być przydatne dla każdego, kto potrzebuje zarządzać różnymi wersjami tego samego projektu w git._ Pracuję w firmie, która pisze wiele wtyczek do Liferay Portal. Wtyczki te (portlety, motywy itp.) są zazwyczaj wielokrotnego użytku i oczywiście należy je aktualizować do nowych wersji portalu. Jednak zazwyczaj trzeba przeprowadzić migrację, powiedzmy, portletu do nowej wersji Liferay _i_, aby zachować jego poprzednią wersję. Często też musimy tworzyć bardzo specyficzne dostosowania dla niektórych klientów, co nie ma sensu dodawać do „głównej wersji”. Te wymagania komplikują naszą pracę, ale na szczęście możemy założyć pewne uproszczenia. Na przykład wtyczki są często aktualizowane tylko przez jednego programistę na raz. Bardzo rzadko zdarza się, aby dwie lub więcej funkcji było dodawanych do wtyczki w tym samym czasie. Teraz migrujemy do Gitorious. Staramy się stworzyć model rozgałęzienia dla takiego scenariusza. # Mój model Zaproponowałem: 1. Każda wtyczka miałaby swoje własne repozytorium w Gitorious wewnątrz projektu. Na przykład portlet do wyświetlania kociąt będzie miał repozytorium `kittens-portlet` wewnątrz projektu `liferay-portlets`. 2. Tworząc nową wtyczkę, utwórz ją w gałęzi o nazwie zgodnej z wersją Liferay (na przykład `lf5.2`). 3. Za każdym razem, gdy dokonywana jest aktualizacja wtyczki, aktualizacja jest zatwierdzana i wdrażana w środowisku produkcyjnym, otaguj wtyczkę wersją (na przykład `lf5.2v1`, `lf5.2v2` itp.)* 4. Za każdym razem wtyczka powinna zostać przeportowana do nowej wersji Liferay, rozgałęziamy najnowszą wersję (tworząc np. branch `lf6.0`). 5. Po uruchomieniu produkcji szef nowego oddziału otrzyma tag, taki jak `lf6.0v1`. 6. Za każdym razem, gdy musimy dostosować wtyczkę w sposób specyficzny dla klienta, tworzymy gałąź z nazwą klienta (na przykład stworzylibyśmy gałąź `lf5.2clientcorp` dla naszego klienta „ClientCorp Inc.”) To nietypowy model: nie miałby „mastera” i wiele niesklejających się gałęzi. Tak _przypuszczam_ by wyglądało repozytorium z takim modelem: ![Jak przypuszczam, że moje gałęzie będą działać.](http://i.stack.imgur.com/IQ6jZ.png) Znajomy uznał ten system za dość skomplikowany i podatne na błędy. Zaproponował znakomity i popularny model Vincenta Driessena, który był dla mnie jeszcze trudniejszy do opanowania i wymagający dyscypliny. Jest to oczywiście świetne (i przetestowane!), ale wydaje się zbyt skomplikowane w naszej sytuacji. # Model mojego przyjaciela Następnie zasugerował inny model: mielibyśmy repozytorium dla każdej wtyczki w wersji Liferay (więc zaczęlibyśmy tworzyć `kittens-lf5.2-portlet` a potem `kittens-lf6.0-portlet` ), każdy z gałęziami `master` i `develop`. `master` byłby zawsze gotowy do wdrożenia. (Albo może być odwrotnie, „master” i „stabilny”, jak sugeruje Steve Losh). Jest to bardzo proste, ale nie podobał mi się ten system: 1. może skutkować strasznie dużą ilością repozytoriów w projekcie, co utrudnia przeglądanie Gitoriousa. 2. Odpowiednia jest nazwa katalogu projektu. Jeśli ktoś sklonuje repozytorium do katalogu `kittens-lf6.0-portlet` i wygeneruje plik WAR za pomocą programu ant (jak zwykle), nazwą WAR będzie również `kittens-lf6.0-portlet`. Stare wersje tego portletu (na przykład o nazwie `kittens-portlet`) byłyby uważane za inne (i prawdopodobnie brakujące) portlety w zaktualizowanym portalu. Trochę troski może tego uniknąć, ale wolałbym tego uniknąć. 3. Różne wersje tej samej wtyczki byłyby utrzymywane oddzielnie. Łamię sobie serce :( 4. `kocięta-lf6.0-portlet` to chyba brzydka nazwa repozytorium. Podejrzewam, że dwa ostatnie punkty - które są również dwoma bardziej subiektywnymi - są głównym powodem moja niechęć.Niemniej jednak wszystkie cztery obiekcje są aktualne.OTOH, moja własna propozycja wydaje mi się dziwna i zastanawiam się, czy nie ma w niej ukrytych błędów.Git OT3rdH jest tak potężny i elastyczny, że myślę, że nie powinienem się wstydzić, badając jego możliwości. Pytam więc: 1. Jaki byłby najlepszy model? Moja propozycja? Model mojego przyjaciela? Obecnie tradycyjny system Vincenta Driessena? 2. Jaki inny model rozgałęzienia byś zaproponował? 3. Jeśli uważasz, że mój model jest zły, dlaczego tak myślisz?Chciałbym dowiedzieć się, jakie są wady i martwe punkty.* Właściwie wolałbym oznaczyć commit wersją taką jak `v1`, ale najwyraźniej tag w git nie jest objęty zakresem w gałęzi - to jest , nie mogłem mieć znacznika 1 `v1` w `lf5.2` i innego w `lf6.0` \- więc muszę nazwać gałąź.Czy to poprawne BTW?


title: Jak sprawdzić, czy dwa obrazy są takie same?

text: Mam ponad 10000 obrazów, z czego około 2000 to duplikaty w innych formatach (np. JPEG, PNG, GIF). Obie te liczby rosną z każdym dniem. Muszę usunąć te duplikaty, a do tego muszę najpierw wiedzieć, jak je znaleźć. Moją pierwszą myślą było sprawdzenie pikseli obrazów i znalezienie innych obrazów, które mają te same kolorowe piksele w tych samych współrzędnych. Ale ta opcja nie zawsze działa. Załóżmy, że szukam duplikatu. Jeśli chodzi o przeszukiwalny obiekt, wybrałem 8-bitowy plik PNG. Znajdzie wszystkie duplikaty tego obrazu, ale tylko 8-bitowy PNG, czasami 8-bitowy GIF i rzadko JPEG (z powodu algorytmicznych obrazów, jak przypuszczam?). Moją drugą myślą było zduplikowanie wszystkich tych obrazów i ponowne ich pokolorowanie w ścisłej dwukolorowej palecie (powiedzmy czarno-białe) i zrobienie tego samego skanu, jak opisano powyżej. Po raz kolejny obraz JPEG nie jest w 100% podobny do formatu PNG lub GIF (z tego samego powodu, co powyżej?). Trzecią myślą było _zmniejszenie_ odsetka tego, jak bardzo obraz musi być znajomy i _zwiększenie_ zakresu, w jakim kolory mogą się różnić, co skutkuje niepożądanym usunięciem obrazu... Jakieś myśli?


title: Jak rozpocząć programowanie zespołowe

text: Pracuję w małym (7 deweloperskim) zespole programistycznym i wszyscy pracujemy nad własnymi projektami. Niektóre z barier w pracy zespołowej to języki i platformy, na których pracujemy (programowanie .NET vs mainframe RPG), ale inne bariery polegają na tym, że wszyscy jesteśmy tak zajęci, że nie poświęciliśmy czasu na cofnięcie się i zorganizowanie zespołów . Ja i dwóch innych programistów .NET podejmujemy inicjatywę założenia małego zespołu, ale wszyscy trochę utknęliśmy w tym, co robić. Zaczynamy od dzielenia się wiedzą na temat produktów, nad którymi pracujemy, abyśmy mogli się wzajemnie wspierać, ale ostatecznie chcemy realizować projekty jako zespół, a nie indywidualnie. Jaką radę dałbyś grupie facetów takich jak my, próbującej rozpocząć pracę zespołową?


title: Algorytm sugerujący synonimy na podstawie jakiegoś terminu?

text: Czy istnieje algorytm, którego mogę użyć w celu wygenerowania synonimów dla jakiegoś terminu (słowa) w odniesieniu do spamu. Piszę prosty filtr antyspamowy. Na przykład ustawiłem, że aplikacja musi pominąć słowo „viagra” i nacisnąć przycisk, który zapisuje ten termin w bazie danych filtrów. Skrypt automatycznie tworzy synonimy tego słowa, takie jak: v.i.a.g.r.a, via_gra, via-gra i tym podobne. Albo filtruję klątwę, która generuje wszystkie sztuczki, których ludzie używają, aby ich przekleństwa pojawiały się w ich komentarzach.


title: Czy te obawy należy rozdzielić na osobne przedmioty?

text: Mam obiekty, które implementują interfejs `BroadcastInterface`, który reprezentuje wiadomość, która ma być rozesłana do wszystkich użytkowników danej grupy. Posiada metodę ustawiającą i pobierającą dla właściwości `Subject` i `Body` oraz metodę `addRecipientRole()`, która przyjmuje daną rolę i znajduje token kontaktu (np. adres e-mail) dla każdego użytkownika w roli i przechowuje go. Następnie ma metodę `getContactTokens()`. Obiekty `BroadcastInterface` są przekazywane do obiektu, który implementuje `BroadcasterInterface`. Obiekty te są odpowiedzialne za rozgłaszanie przekazanego obiektu `BroadcastInterface`. Na przykład, implementacja `EmailBroadcaster` interfejsu `BroadcasterInterface` przyjmie obiekty `EmailBroadcast` i użyje usług pocztowych do wysłania ich pocztą elektroniczną. Teraz, w zależności od tego, jaka implementacja `BroadcasterInterface` jest używana do rozgłaszania, kod klienta używa innej implementacji `BroadcastInterface`. Zasada pojedynczej odpowiedzialności wydaje się sugerować, że powinienem mieć oddzielny obiekt `BroadcastFactory` do tworzenia obiektów `BroadcastInterface`, w zależności od tego, jaka implementacja `BroadcasterInterface` jest używana, ponieważ tworzenie obiektu `BroadcastInterface` jest inną odpowiedzialnością niż ich rozgłaszanie. _Ale_ klasa użyta do tworzenia obiektów `BroadcastInterface` zależy od implementacji `BroadcasterInterface` do ich rozgłaszania. Myślę, że ponieważ wiedza o tym, jaka metoda jest używana do wysyłania rozgłoszeń powinna być skonfigurowana tylko raz, obiekt `BroadcasterInterface` powinien być odpowiedzialny za dostarczenie nowych obiektów `BroadcastInterface`. **Czy odpowiedzialność za „tworzenie i rozgłaszanie obiektów implementujących interfejs`BroadcastInterface`” narusza zasadę pojedynczej odpowiedzialności?** (Ponieważ token kontaktu do wysyłania transmisji do użytkowników będzie różny w zależności od sposobu jej emisji, Potrzebuję różnych klas rozgłoszeniowych — chociaż kod klienta nie będzie w stanie odróżnić).


title: Jaka jest różnica między byciem informatykiem w banku inwestycyjnym a profesjonalną firmą IT?

text: Załóżmy, że są dwa stanowiska: 1. IT w banku inwestycyjnym: programista dla infrastruktury lub platformy 2. słynna firma IT: embedded developer, linux O ile rozumiem, bo w banku inwestycyjnym nie każdy będzie miał szansę pracować w przypadku podstawowego systemu handlowego większość ludzi wykonuje tę samą pracę, co w normalnej firmie informatycznej. A niektóre zadania można nawet zlecić na zewnątrz. Ale w profesjonalnej firmie informatycznej będziesz miał większą szansę na ćwiczenie umiejętności kodowania i poszerzanie wiedzy zawodowej. Tak więc istnieje wiele możliwości wyboru, kiedy chcesz zmienić pracę, podczas gdy IT w banku nie inwestuje. Czy to jest poprawne?


title: Jakie są niebezpieczeństwa związane z ustawieniem nieograniczonego limitu czasu trwania transakcji bazy danych?

text: Mamy proces, który może trwać od kilku sekund do kilku minut. W związku z tym możemy zaktualizować tylko kilka rekordów lub tysiące z nich. Proces można zatwierdzić tylko wtedy, gdy wszystko zostało wykonane poprawnie. Ostatnio zaczęliśmy mieć problemy podczas próby zatwierdzenia transakcji, ponieważ były one oznaczone jako "rollbackOnly". Odkryłem, że w rzeczywistości transakcja została oznaczona jako „rollbackOnly”, ponieważ upłynął nieco wcześniej limit czasu (nie jest jasne, aby zobaczyć w plikach dziennika, ponieważ naszym serwerem aplikacji jest Websphere, a jego menedżer transakcji wyświetla tylko jednowierszowe ostrzeżenie) i jako takie nie mogło zostać popełnione. Oczywiście ma sens, że nie możesz zatwierdzić transakcji, która wygasła. Problem polega na tym, że nigdy nie ustawiamy limitu czasu transakcji w definicjach transakcji i że w takim przypadku wartość limitu czasu jest ustawiona na poziomie serwera aplikacji (zobacz ustawienia transakcji Websphere, akapit „Całkowity limit czasu życia transakcji” ). Ta wartość wynosi 2 minuty i czasami ją przekraczamy. Teraz wyjaśnia to ustawienie (a w przypadku, gdy ktoś napotka transakcję "rollbackOnly", podałem tutaj możliwe wyjaśnienie). Kusi mnie, aby zwiększyć limit czasu, ale **Widziałem też w dokumentacji, że limit czasu można ustawić na 0, co oznacza, że nie ma limitu czasu**. W związku z tym moje pytanie brzmi: **jakie są niebezpieczeństwa związane z ustawieniem nieograniczonego limitu czasu trwania transakcji** ? Zauważ, że znam programistyczne/bazy danych rozwiązania mojego problemu, takie jak na przykład praca na tabelach tymczasowych i odwracanie danych z tabel tymczasowych do tabel rzeczywistych, gdy wiemy, że wszystko zostało zrobione poprawnie (na przykład przy użyciu PL/SQL). Ciekawi mnie tylko kwestia limitu czasu transakcji.


title: Nazywanie klasy, która wykonuje Importowanie i eksportowanie danych

text: Myślałem o stworzeniu klasy, która obsługuje importowanie i eksportowanie danych i czuję, że nazwanie jej FooImporterExporter może wyglądać zbyt długo, nie chcę widzieć, czy istnieje konwencja nazw, której mógłbym użyć do jej nazwania. Oto niektóre z nazw, które moim zdaniem byłyby odpowiednie: * `FooProcessor` * `FooPorter` / `FooPort` \- (ponieważ import/eksport pochodzi z handlu towarami w porcie ) * `FooTrader`


title: Znaczenie nazw katalogów

text: Szukałem _słownika_, w którym opisano znaczenie i cele każdej nazwy katalogu używanej w drzewach plików oprogramowania. Nie mogę znaleźć niczego poza systemem Linux FHS, ale jest to ograniczone do systemu operacyjnego GNU/Linux. Chciałbym więc zapytać o coś, co pozwoliłoby zrozumieć znaczenie następujących folderów: /controllers /models /vendor /src Tak właśnie zrozumiałem do tej pory: * **`/controllers`** ~~jest tam, gdzie powinienem umieść pliki, które mają _kontrolować_ inne pliki. Na przykład w kontrolerach mógłbym mieć plik PHP, który ładuje plik w celu wywołania zapytań MySQL, potem taki, który parsuje zapytania w celu ustrukturyzowania tablicy, a następnie taki, który wywołuje menedżera szablonów.~~ * **`/models`** Nie mam pojęcia do czego służy... * **`/vendor`** to miejsce, w którym znajdują się zewnętrzne zależności wymagane przez oprogramowanie. * **`/src`** to miejsce, w którym znajdują się pliki źródłowe. Moje wątpliwości to: 1. Co to jest folder **`/models`**? 2. Jeśli w swoim projekcie umieszczę np. Mustache.php, będę miał Mustache w **`/src/Mustache`**. Ale dodaje też kilka zależności w folderze **`/vendor`**. Problem polega na tym, że w moim projekcie nawet **Wąsy** są (chyba) „dostawcą”, więc czy nie powinno się ich przenieść do **`/vendor`**? 3. Jeśli piszę w PHP, HTML, JS i CSS. Każdy plik, którego użyję do produkcji, będzie również plikiem źródłowym, więc dlaczego nie umieścić wszystkiego w folderze **`/src`** i pozostawić może tylko zminimalizowane `.js`, `.css` i `.html`?


title: Rozwiązywanie zagadek: Minimalna liczba kroków do osiągnięcia celu

text: Robiłem kilka zadań z konkursów programistycznych i zauważyłem, że wiele z nich dotyczy czegoś w stylu „uzyskaj minimalną liczbę kroków potrzebną do osiągnięcia określonego celu”. Przykłady: * Biorąc pod uwagę pozycję skoczka i określone pionki na szachownicy, jaka jest minimalna liczba skoków, które musi wykonać skoczek, aby zabić wszystkie pionki? * Biorąc pod uwagę parking z nieuporządkowanymi samochodami oznaczonymi alfabetycznie, „przeprowadzka” to proces zabierania samochodu i umieszczania go w innym miejscu. Jaka jest minimalna liczba przeprowadzek, aby zamówić ten parking? Tak więc wiele łamigłówek wydaje się mieć tę samą strukturę: biorąc pod uwagę scenariusz, pewne zasady i zestaw „operacji”, określają najmniejszą liczbę operacji do osiągnięcia określonego celu. W niektórych z tych łamigłówek jest jednak pewien zwrot - czasami łamigłówki będą również pytać, czy jest to niemożliwe do osiągnięcia. Odkryłem, że jestem szczególnie okropny z tego rodzaju zagadkami. Właściwie nie sądzę, żebym kiedykolwiek rozwiązał je w elegancki sposób. Nie jestem pewien, jak „przetestować wszystkie przypadki”, „wybrać najkrótszy” lub „określić, że to niemożliwe”. Czy możesz mi tutaj doradzić? Ze względu na pytanie możemy oprzeć się na układance szachowej: # Przykładowy problem Mamy szachownicę. Każde pole jest oznaczone numerem (który reprezentuje pozycję), od 1 do 64. **(Możliwe) Dane wejściowe** 2 8 31 13 Oznacza to „dwa pionki na pozycjach 8 i 31. Skoczek jest na pozycji 13. " **Wyjście** 2 Dwa kroki. Z pozycji `13` rycerz może skoczyć do `8`, a z `8` może skoczyć do `31`. * * * # Pytanie Jak mogę podejść do tego rodzaju problemu? Rozwiązałem szachowy, generując listę wszystkich możliwych kroków, a następnie wybrałem najkrótszy. Ale to było bardzo powolne.


title: Produktywność programisty Cobol a C#

text: Przeprowadzamy analizę kosztów i korzyści w projekcie migracji. Fajnie byłoby móc powiedzieć, że przyszłe zmiany będą x procent tańsze ze względu na migrację. Czy ktoś ma jakieś doświadczenie lub wie o jakimkolwiek badaniu, które pokazuje, jakich korzyści możemy się spodziewać?


title: Model łyżki według czasu

text: Mam model, który ma encje ze znacznikiem czasu. Teraz chcę zrobić bucketing - "wiadra" encji, które można rozumować na temat pojedynczej encji. Również chcę mieć dostęp do powiązanych jednostek z wiaderka i uzyskać wiadro tych jednostek. Moje główne obawy to implementacja samego bucketingu i stojąca za tym architektura kodu. 1. Czy powinienem utworzyć osobny model dla danych zbiorczych, czy powinienem wdrożyć narzędzia do pracy z istniejącym modelem? 2. Ponieważ mam już metamodel ze wszystkimi podklasami i relacjami, chciałbym móc łatwo dodać na wierzchu wiaderka. Myślałem o podklasowaniu wszystkich klas encji w celu utworzenia klasy encji wiaderkowej, która rozszerzyłaby ich wspólną funkcjonalność wiaderka o cechy.


title: Czy przechowywanie wskaźnika (nowego obiektu) w statycznej kolekcji z konstruktora obiektów jest powszechnym idiomem w C++

text: W kodzie przeglądam wspólne podejście, które widzę do przechowywania obiektów (np. obiektu klienta gniazda), jest użycie statycznego kontenera do przechowywania obiektów. Obiekty są tworzone przez jakąś funkcję pomocniczą, np. tak: create_client(params) { ... client* cl = new client(...); powrót kl; } Na początku zdezorientowała mnie funkcja o nazwie if (!create_client (...)) //generuj komunikat o błędzie, czyli kopia wskaźnika wydaje się po prostu wyrzucona. Ale podczas dochodzenia widzę to w konstruktorze klienta: client::client(...) { ... coll[id] = this; } Gdzie coll jest mapą id na wskaźnik do obiektu. Ale tak czy inaczej, tylko kolekcja. coll jest statyczny (nie jestem pewien, czy to istotne). Czy istnieje nazwa tego idiomu? Czy to dobra praktyka?


title: Pierwsze dedykowane IDE?

text: Jaki był pierwszy program, który powstał jako dedykowane IDE? Oznacza to, że jest przeznaczony do kodowania, a nie po prostu umożliwia integrację w ramach opcji rozbudowy. Jest to przeciwieństwo edytora tekstu, który ma ogólne funkcje wtyczek/dodatków/powłoki, które nie są przeznaczone do prac programistycznych. Funkcje, o których myślę, które kwalifikują edytor jako IDE: * Podświetlanie kodu * Zintegrowane wywoływanie kompilatora (z raportowaniem błędów) * Funkcje nawigacji po kodzie * (opcjonalnie) zintegrowany debugger Pytanie dodatkowe - jakie było pierwsze wizualne IDE? (przez co mam na myśli ze zintegrowanym projektantem GUI).


title: Jak postępować z wcześniej przesłanymi plikami

text: Jestem nowy w PHP i MySQL i widziałem tylko posty związane z tym na Zend i ASP, więc szukam porady, która wskaże mi właściwy kierunek dla projektu LAMP. Tworzę formularz internetowy dla mojego projektu, do którego zalogowani użytkownicy będą mieli dostęp, aby przesłać zgłoszenie. Każdy użytkownik ponownie użyje wcześniej przesłanych plików dla każdego zgłoszenia. Na dole formularza użytkownik może przesłać wiele plików. Obrazy, arkusze kalkulacyjne, pliki PDF itp., ale chciałbym dać im dostęp do przesłanych wcześniej plików, zamiast ponownego przesyłania wszystkich nowych plików dla każdego zgłoszenia. Moje pytanie brzmi, jaka jest twoja rada, jak to osiągnąć? Wyobrażam sobie, że każdy użytkownik mógłby stworzyć bibliotekę plików, do której miałby w jakiś sposób dostęp z formularza. Może lista plików z checkboxami do zaznaczenia wcześniej wgranych plików? Nie znalazłem wiele tutaj ani w Google, więc nie jestem pewien, czy istnieje standardowy sposób na poradzenie sobie z czymś takim. Pamiętaj, że użytkownicy będą ponownie wykorzystywać tylko własne obrazy, a nie obrazy społeczności. Jeśli to robi różnicę, przechowuję obrazy w MySQL jako BLOB. Dzięki za wszelkie rady i informacje.


title: Najlepsze praktyki tworzenia widoków w wiosennej i hibernowanej aplikacji internetowej

text: Cześć Obecnie tworzę aplikację internetową w Spring i Hibernate, gdzie mam kilka różnych tabel. Na przykład tabela Dostawy jest mapowana wiele-do-jednego z tabelą Klient i tabelą Produkt. Zastanawiam się, jaka jest najlepsza praktyka tworzenia funkcji widoku, w której wyświetlam wszystkie kolumny związane z każdą dostawą, ale wykluczam różne identyfikatory. Przychodzą mi do głowy dwa sposoby na zrobienie tego: 1. Utwórz DTO (obiekt transferu danych) ze wszystkimi kolumnami, które chcę wyświetlić, a następnie w kontrolerze tworzę jego nową instancję i ustawiam różne wartości za pomocą seterów i usług w pętla for dla każdego identyfikatora dostawy. jest to metoda użyta w tym przykładzie. Oto część kodu kontrolera z niego: @RequestMapping(value = "/list", method = RequestMethod.GET) public String getRecords(Model modelu) { logger.debug("Otrzymane żądanie wyświetlenia strony rekordów"); // Pobierz wszystkie osoby List<Person> persons = personService.getAll(); // Przygotuj obiekt modelu List<PersonDTO> personsDTO = new ArrayList<PersonDTO>(); for (Osoba osoba: osoby) { // Utworzenie nowego obiektu transferu danych PersonDTO dto = new PersonDTO(); dto.setId(osoba.getId()); dto.ustawImię(osoba.uzyskajImię()); dto.setLastName(osoba.getLastName()); dto.setMoney(osoba.getMoney()); dto.setCreditCards(creditCardService.getAll(person.getId())); // Dodaj do listy modeli peopleDTO.add(dto); } // Dodaj do modelu model.addAttribute("osoby", personDTO); // To zamieni się na /WEB-INF/jsp/records.jsp return "records"; } 1. Drugim sposobem, który rozważam, jest utworzenie zapytania HQL, które łączy odpowiednie tabele, a następnie wyświetla je. Nie jestem jeszcze pewien, jak to zrobić. Więc która z alternatyw jest lepszą drogą? Czy są jakieś inne, o których nie pomyślałem? Dziękuję za radę, D


title: Wątpliwości licencyjne

text: Jestem całkiem nowy w programowaniu i teraz tworzę własny program w ramach mojej pracy magisterskiej. Mój program jest napisany w Javie i korzysta z kilku bibliotek firm trzecich. Biblioteki te mają różne licencje, głównie: * LGPL 2.1 * GPL 2 + GPL Wyjątek linkowania * Apache w wersji 2 * BSD Właściwie nie dotknąłem kodu źródłowego tych bibliotek, ale używam ich w swoim programie i w niektórych przypadkach tworzę klasy, które rozszerzać klasy w tych bibliotekach. Jeśli zdecyduję się udostępnić swój program publicznie (prawdopodobnie za darmo), jakiego rodzaju licencji mogę użyć? Dużo czytałem o kompatybilności licencji (Apache vs GPL vs cokolwiek), dyskusjach na temat prac pochodnych i jestem bardzo zdezorientowany. Komentarze i wyjaśnienia byłyby bardzo pomocne.


title: Czy możliwe jest utworzenie portu z aplikacji C++ na Javę przez LLVM?

text: jak opłacalne jest przeniesienie aplikacji C++ do kodu bajtowego Java przy użyciu LLVM (chyba LLJVM)? Chodzi o to, że obecnie mamy proces napisany w C++, ale nowy klient wprowadził obowiązek uruchamiania programu w sposób wieloplatformowy, **używając** wirtualnej maszyny Javy, oczywiście bez kodu natywnego (bez JNI). Pomysł polega na tym, aby móc wziąć wygenerowany jar i skopiować go do różnych systemów (Linux, Win, 32 bity - 64 bity) i powinno po prostu działać. Rozglądanie się wygląda na to, że można skompilować C++ do kodu LLVM IR, a następnie ten kod do kodu bajtowego java. Wygenerowany kod nie musi być czytelny. Testowałem trochę z podobnymi rzeczami za pomocą emscripten, to wymaga kodu C++ i kompilacji go do JavaScript. Wynik to poprawny JS, ale całkowicie nieczytelny (wygląda jak assambler). * Czy ktoś wykonał port aplikacji z C++ do kodu bajtowego Java przy użyciu tej techniki? * Jakie problemy możemy napotkać? * Czy prawidłowe podejście do kodu produkcyjnego? Aby wyjaśnić mój punkt widzenia po kilku komentarzach, być może port nie jest dobrze wykorzystany, nie oczekuję w rezultacie czytelnego kodu źródłowego, po prostu kodu bajtowego java, więc nie jest to „port”, który będzie już rozwijany, po prostu platformą docelową musi być Java JVM, a nie natywny assamblear. Uwaga: Zdaję sobie sprawę, że obecnie mamy kilka niestandardowych bibliotek C ++ i Close Source, chcemy usunąć ten niestandardowy kod i wszystkie biblioteki Close Source i użyć Free Libre Open Source Software, więc załóżmy, że cały kod jest standardowym kodem C ++ z cały kod dostępny w czasie kompilacji. Uwaga 2: Nie jest opcją napisania przenośnego kodu C++, a następnie skompilowania go na żądaną platformę docelową, skompilowany program musi być wieloplatformowy, stąd użycie JVM. Uwaga 3: W tej chwili nie szukamy podobnych rozwiązań zastosowanych w Pythonie lub innej bazie językowej, ale chciałbym również o tym usłyszeć. Mam na myśli to, że nasz docelowy plik wykonywalny musi być kodem bajtowym java, ale jeśli istnieją opcje kompilacji C++ do prawidłowego kodu skompilowanego w Pythonie, również chciałbym o nich usłyszeć.


title: Wdrażanie DAO dla struktury podmiotowej

text: Czy ktoś mógłby mi pomóc w znalezieniu dobrego samouczka o tym, jak mogę zaimplementować wzorzec DAO, a także narzędzi, które pomogą mi tworzyć te klasy w sposób zautomatyzowany.


title: Algorytm „złego jabłka” lub awarie procesu współdzielonej piaskownicy

text: Szukam algorytmu, który poradzi sobie z następującym problemem, który (na razie) nazywam algorytmem „złego jabłka”. ### Problem * Mam N procesów działających w M piaskownicach, gdzie N >> M. * Niepraktyczne jest nadawanie każdemu procesowi własnej piaskownicy. * Co najmniej jeden z tych procesów jest źle zachowywany i powoduje wyłączenie całej piaskownicy, zabijając w ten sposób wszystkie inne procesy w tej samej piaskownicy. Gdyby to był pojedynczy źle zachowujący się proces, mógłbym użyć prostej sekcji, aby umieścić połowę procesów w jednej piaskownicy, a połowę w innej piaskownicy, dopóki nie znajdę łajdaka. ### Pytanie Jeśli _więcej niż jeden_ proces zachowuje się niewłaściwie – łącznie z możliwością, że _wszystkie_ zachowują się niewłaściwie – czy ten naiwny algorytm „działa”? Czy gwarantuje to działanie w pewnych rozsądnych granicach? ### Uproszczenia Ze względu na argument, załóżmy, że zły proces powoduje natychmiastowe wyłączenie swojej piaskownicy, a dobry proces nigdy tego nie robi.


Jak utrzymujesz wydane binaria pod kontrolą wersji? Pozwala to śledzić, jakie składniki są zmieniane między poszczególnymi wydaniami. Mam na myśli oddzielenie wydanych binariów od repozytorium źródłowego. Zwolnione pliki binarne są albo zbudowane z oprogramowania Continuous Integration lub ręcznie kompilowane.


title: Co to znaczy wykonać „sprawdzanie wartości null” w C lub C++?

text: Uczę się C++ i mam trudności ze zrozumieniem wartości null. W szczególności samouczki, które przeczytałem, wspominają o „sprawdzaniu wartości zerowej”, ale nie jestem pewien, co to oznacza i dlaczego jest to konieczne. * Czym dokładnie jest null? * Co to znaczy „sprawdzić, czy nie ma wartości null”? * Czy zawsze muszę sprawdzać, czy nie ma wartości null? Wszelkie przykłady kodu byłyby bardzo mile widziane.


title: Czy ciągła integracja polega na automatycznym łączeniu oddziałów?

text: Czy konfigurowanie środowiska ciągłej integracji zawsze wiąże się z koniecznością ściągania kodu przez serwer kompilacji i łączenia oddziałów? A może jest to coś, czego NIGDY nie chcesz robić, ponieważ polegasz na automatycznym łączeniu, które zwykle kończy się problemami (i wymaga ręcznej interwencji).


title: Uzupełniasz braki w "domowym" programiście?

text: Zacząłem od uczenia się BASIC na Vic 20, a na studiach (w połowie lat 80.) miałem Fortran, Pascal, ograniczone C, maszynę i asembler (z odrobiną COBOL) jako część informatyki na studiach. Nie zajmowałem się programowaniem od około 1989 do 1999 roku. W tym momencie miałem szczęście, że zostałem zatrudniony jako programista Clipper. Nauczenie się większości zajęło mi około 6 miesięcy, a teraz (13 lat) jestem w tym całkiem ekspertem. Nauczyłem się też Cold Fusion, trochę C#, trochę ASP, SQL itp. Znam struktury programistyczne, ale w większości współczesnych języków brakuje mi ezoteryki i wiem, że mój kod może być znacznie bardziej zwarty. Problem polega na tym, że nauczyłem się tego, czego potrzebuję, aby wykonać pracę. Powoduje to wiele luk w wiedzy praktycznej. Brakuje mi też TONY teorii. Rzeczy takie jak SRP, Refaktoryzacja itp. są obcymi terminami. (Chociaż po krótkiej lekturze orientuję się w intencji). Ponadto jestem teraz w stanie uczyć młodszych programistów firmy i naszego oprogramowania i nie chcę przekazywać luk w wiedzy. Wiem, że to jest trochę subiektywne pytanie i może być zamknięte, ale jak wrócić i odebrać to, co przegapiłeś?


title: Jak zoptymalizować algorytm analizy sentymentu dla większych zbiorów danych?

text: Jestem noobem do analizy sentymentów i znalazłem dobre źródło dla Bayesian Opinion Mining i sposób na samodoskonalenie się. Zastanawiałem się jednak, czy optymalna analiza zależy od dostarczonego zestawu danych, a ponieważ samodoskonalenie oznaczałoby dodawanie znanych wzorców do zestawu danych (moje zrozumienie), czy aplikacja nie byłaby zbyt przeciążona ogromnym zestawem danych w odpowiednim czasie czas, w którym każdego dnia do zestawu danych dodawanych jest coraz więcej wzorców? Jakie powinno być właściwe podejście, aby aplikacja była skalowalna (jeśli używam właściwego terminu we właściwym miejscu)?


title: GPL: warunki licencji

text: Chciałbym użyć biblioteki DLL VLC w jednym z moich programów. VLC jest na licencji GPL. Czy muszę redystrybuować wszystkie źródła na licencji GPL, czy mogę redystrybuować tylko zmodyfikowane źródła VLC na tych warunkach, jednocześnie redystrybuując resztę mojego programu na licencji, którą chcę? Dziękuję, Sébastien **Edytuj** : A co, jeśli używam biblioteki DLL VLC tylko w przypadku, gdy są one zainstalowane na komputerze użytkownika?


title: DDD identyfikujący korzeń agregatu

text: Projektuję aplikację internetową za pomocą projektowania opartego na domenie. Mam następujący scenariusz: Każda grupa aplikacji może mieć jedną aplikację, a każda aplikacja może mieć wiele konfiguracji. Próbuję ustalić, który z nich będzie zagregowany obiekt ... który będzie zagregowany korzenie i dlaczego?


title: Emocjonalne przywiązanie do kodu

text: Jako pracownik firmy, pisząc kod czujesz, że jesteś do niego przywiązany? Czy uważasz, że masz prawo własności do kodu? A może piszesz go całkowicie oderwany od niego, nie martwiąc się o to, co się z nim stanie po przejściu do czegoś innego? EDIT: Nie mówię o pisaniu złego kodu, a następnie uruchamianiu...


title: Potrzebne jest wyjaśnienie różnych terminów architekta i ich ról

text: Po przejrzeniu wielu pytań i odpowiedzi SO na temat "Architekci", jestem teraz w zasadzie zdezorientowany różnymi terminami i ich rolami. Proszę o jasne wyjaśnienie terminów i ich ról A) Architekt techniczny B) Architekt rozwiązań C) Architekt domeny D) Architekt przedsiębiorstwa E) Architekt projektu F) Architekt systemów G) Architekt oprogramowania H) Architekt projektu Podziękowania


title: Jak zorganizować logowanie między wieloma programistami?

text: Pracowałem w kilku miejscach z 2-10 programistami i każde miejsce miało problemy z śledzeniem, czy firma ma konto w danej witrynie lub serwisie. Zawsze się zastanawiamy... * Jaka jest nazwa użytkownika * Jakie jest hasło (Oczywiście nie chcesz tego przechowywać, nie szukam czegoś, co robi) * Jaki jest numer konta * Kto to stworzył * Kiedy był utworzyło * Pod jakim adresem e-mail jest zarejestrowane nasze konto **Jakiego używasz do śledzenia tego rodzaju rzeczy między wieloma programistami?** Mam skonfigurowane co najmniej tuzin kont dla firmy, w której obecnie pracuję, a nie mam jakąkolwiek dokumentację, aby pokazać następnemu facetowi, co zostało zrobione. Idealnie szukam rozwiązania internetowego, które zostanie zablokowane w naszej sieci VPN.


title: Protokół zamykania połączenia z gniazdem

text: Stosuję własny protokół aplikacji na szczycie TCP. Używam Linuksa i C. Zastanawiam się, czy istnieje wskazana kolejność zamykania połączenia z gniazdem. Klient zawsze inicjuje zamknięcie, wysyłając specjalnie utworzony ciąg; powiedz „ZAMKNIJ”. Chciałbym otrzymać jakieś potwierdzenie od serwera, że widział moje żądanie CLOSE, więc być może musi odesłać specjalny ciąg, taki jak "CLOSE_OK". Widziałem również wywołania systemowe close() i shutdown(), ale nie jestem pewien, jak z nich korzystać. Na przykład, czy klient po otrzymaniu komunikatu „CLOSE_OK” powinien wykonać zamknięcie (OUTPUT), a następnie poczekać na otrzymanie ciągu o zerowej długości? A czy serwer po wysłaniu "CLOSE_OK" powinien wydać close(), a potem uznać gniazdo za martwe? Mam nadzieję, że istnieje "najlepsza praktyka" w tym temacie, której jeszcze nie znalazłem... Dzięki, rozdz.


title: Dlaczego Schemat r5rs nie ma systemu modułów?

text: Przy całej kontrowersji wokół schematu r6rs utknąłem przy r5rs i zastanawiam się, dlaczego projektanci zdecydowali się nie wdrażać systemu modułowego. Jak w tym organizować kod?


title: Tablica Mongodb a obiekt

text: Nowość w Mongodb i nie jestem pewien, jakie implikacje lub korzyści istnieją między użyciem tablicy a obiektu. A więc... 1. Jak wyżej, jakie są implikacje i korzyści pomiędzy wykorzystaniem tablic i obiektów? 2. Na przykład moja sprawa. Pomysł polega na przechowywaniu dokumentu z czasem "przechwytywania" i 2000 slotów liczników "pakietów". Użyłem obiektu do przechowywania pakietów, zobacz to , ale najwyraźniej lepiej jest użyć tablic. Jakie rozważania należy podjąć, aby określić, czy tablica lub obiekt jest bardziej odpowiedni (z przykładem)?


title: Ogólny sposób na uzyskanie grafiki do projektu open source

text: Jestem w trakcie tworzenia aplikacji open source dla systemu Windows. W końcu potrzebowałbym ikon dla mojej aplikacji i jej interfejsu użytkownika. Jestem wielkim fanem ikon w stylu Tango, ale jego pakiet nie zawiera wszystkich ikon, których potrzebuję. Projekt Gnome wydaje się zapewniać te dla bardziej dojrzałych projektów, które działają na Linuksie. Jaki jest ogólny sposób, procedura uzyskiwania pomocy w zasobach graficznych dla projektu open source?


title: losowe unikalne numery par z dwóch zakresów

text: Chcę napisać funkcję, która zwraca losowe unikatowe numery par za każdym razem, gdy wywoływana jest z zakresu, aż do jej zresetowania. Coś takiego: function randomUniquePairs($ranges, $reset = false){ if ($reset === false){ // kod do resetowania } /* kod do tworzenia losowych unikalnych liczb par */ return $result; } randomUniquePairs(range(1,10), range(1,20)); /* ta funkcja zwraca na przykład: array(2,9) */ randomUniquePairs(range(1,10), range(1,20)); /* ta funkcja zwraca na przykład: array(5,19) */ randomUniquePairs(range(1,10), range(1,20)); /* ta funkcja zwraca na przykład: array(5,9) */ //ta funkcja zwraca losowe unikalne pary, dopóki nie przekażemy parametru resetującego true Spróbowałem dwóch podejść: **Podejście 1** Moją pierwszą próbą było utworzenie tablicy wszystkie możliwe pary następnie wybierają z nich losowo, ale jest to bardzo nieefektywne, ponieważ jeśli zakresy są tak szerokie, zużywa dużo pamięci. kod: class a { private $asqar; function __construct() ($range) { // cykl dla zakresów foreach ($range[0] as $v1) { foreach ($range[1] as $v2) { $asqar[] = array( $v1, $v2 , ); } } } function randomUniquePairs($reset = false){ if ($reset === true){ $this->asgar = array(); } $rndKey = array_rand($this->asgar); $wynik = $this->asqar[$rndkey]; unset($this->asqar[$rndkey]); zwróć $wynik; } } $c = nowy a(zakres(1,10), zakres(1,20)); $c->losoweUnikalnePary(); **Podejście 2** Moją drugą próbą było napisanie funkcji, która tworzy parę z tych zakresów, a następnie przechowywanie jej w zmiennej, za każdym razem, gdy ta funkcja wywołuje po wytworzeniu pary , sprawdza, czy ta para powstała przed wywołaniem funkcji rekurencyjnie, trwa, dopóki nie wytworzy unikalnej pary. Oto kod: class a{ private $__uniqueVariables = array(); public function randomUniquePairs($range, $reset = false) { if ($reset === true){ $this->__uniqueVariables = array(); } // cykl dla każdej wartości foreach ($zakres jako $wartość) { // shuffle shuffle($value); // wybrany identyfikator $selectedId[] = $value[0]; } // sprawdź wybraną zmienną if (in_array($rndUnqNum, $this->__uniqueVariables)) { // zwróć, aby spróbować ponownie return $this->uniqueVariable($range); } // dodane do bieżących unikalnych zmiennych $this->__uniqueVariables[] = $rndUnqNum; // powrót return $rndUnqNum; } } ale to drugie podejście ma problem, który czasami powoduje wyświetlenie `Błąd krytyczny: Osiągnięto maksymalny poziom zagnieżdżenia funkcji równy '100'. Szukam lepszego podejścia do mojego algorytmu.


title: Programowanie internetowe, standardowy sposób radzenia sobie z odpowiedziami, których ukończenie wymaga czasu

text: Przy normalnym przesyłaniu formularzy używam wzorca Post/Redirect/Get podczas przetwarzania formularzy. Mam aplikację bazodanową zbudowaną w Django. Chcę, aby użytkownicy mogli wybrać pewną liczbę elementów z bazy danych, a następnie uruchomić wymagające obliczeniowo zadanie na podstawie tych elementów. Spodziewam się, że wykonanie zadania zajmie od 10 minut do 2 godzin. Czy istnieje standardowe podejście do radzenia sobie z takimi żądaniami (tj. które nie wracają natychmiast)? Najlepiej byłoby, gdyby istniał jakiś sposób na pokazanie postępu.


title: Pusty interfejs do łączenia wielu interfejsów

text: Załóżmy, że masz dwa interfejsy: interface Readable { public void read(); } interfejs Zapisywalny { public void write(); } W niektórych przypadkach obiekty implementujące mogą obsługiwać tylko jeden z nich, ale w wielu przypadkach implementacje będą obsługiwać oba interfejsy. Osoby korzystające z interfejsów będą musiały zrobić coś takiego: // nie mogą pisać do niego bez jawnego rzutowania Readable myObject = new MyObject(); // nie można odczytać z niego bez jawnego rzutowania Writable myObject = new MyObject(); // ścisłe sprzężenie z rzeczywistą implementacją MyObject myObject = new MyObject(); Żadna z tych opcji nie jest strasznie wygodna, tym bardziej, jeśli weźmiesz pod uwagę, że chcesz to jako parametr metody. Jednym z rozwiązań byłoby zadeklarowanie interfejsu opakowującego: interface TheWholeShabam extends Readable, Writable {} Ale to ma jeden konkretny problem: wszystkie implementacje obsługujące zarówno Readable, jak i Writable **muszą** zaimplementować TheWholeShabam, jeśli chcą być kompatybilne z osobami używającymi Interfejs. Mimo że nie oferuje nic poza gwarantowaną obecnością obu interfejsów. Czy istnieje czyste rozwiązanie tego problemu, czy powinienem przejść do interfejsu wrappera? **AKTUALIZACJA** W rzeczywistości często konieczne jest posiadanie obiektu, który jest zarówno czytelny, jak i zapisywalny, więc proste oddzielenie wątpliwości w argumentach nie zawsze jest czystym rozwiązaniem. **UPDATE2** (wyodrębnione jako odpowiedź, aby łatwiej było komentować) **UPDATE3** Pamiętaj, że głównym przypadkiem użycia tego **nie** są strumienie (chociaż one również muszą być obsługiwane). Strumienie dokonują bardzo szczegółowego rozróżnienia między danymi wejściowymi a wyjściowymi i istnieje wyraźny rozdział odpowiedzialności. Pomyśl raczej o czymś w rodzaju bufora bajtów, w którym potrzebujesz jednego obiektu, do którego możesz pisać i czytać, jednego obiektu, który ma bardzo specyficzny stan. Obiekty te istnieją, ponieważ są bardzo przydatne w przypadku niektórych rzeczy, takich jak asynchroniczne operacje we/wy, kodowanie... **UPDATE4** Jedna z pierwszych rzeczy, które wypróbowałem, była taka sama jak sugestia podana poniżej (sprawdź zaakceptowaną odpowiedź), ale okazał się zbyt kruchy. Załóżmy, że masz klasę, która musi zwrócić typ: public <RW extends Readable & Writable> RW getItAll(); Jeśli wywołasz tę metodę, rodzajowy RW jest określany przez zmienną otrzymującą obiekt, więc potrzebujesz sposobu opisania tej zmiennej. MójObiekt mójObiekt = jakaśInstancja.getItAll(); To zadziała, ale po raz kolejny wiąże to z implementacją i może faktycznie wyrzucić wyjątki klas w czasie wykonywania (w zależności od tego, co zostanie zwrócone). Dodatkowo, jeśli chcesz mieć zmienną klasy typu RW, musisz zdefiniować rodzajową na poziomie klasy.


title: Narzędzie dla zespołu programistów

text: Szukam narzędzia dla zespołu programistów. Generalnie jesteśmy podzieleni na dwie grupy, budujemy dwie aplikacje na tym samym frameworku iw tym samym momencie budujemy framework. Szukam narzędzia, które może usprawnić naszą komunikację. Problem do rozwiązania polega na tym, że jeden zespół rozwiązał problem w pierwszej aplikacji i dał trochę kodu do frameworka, ale drugi zespół nie wie o tym i wymyśla koło. Dokumentacja nie rozwiązuje problemu. Myślę o blogu na Wordpressie - rozwiązałeś problem, więc powinieneś podać post: dodaj jakieś tagi, opis, nazwy plików itp.


title: Czy kod może być dokumentacją w narzędziach programistycznych typu open source? Jak często to jest?

text: Zrozumiałe jest, że po dużym wysiłku programistycznym niektórzy autorzy OSS uważają za rozsądne, że użytkownicy projektu również powinni podjąć wysiłek, aby zacząć. Czy kod źródłowy może skutecznie stanowić dokumentację projektu? Czy aby to osiągnąć, musi mieć określoną strukturę? A jak często stosuje się takie podejście? Oczywiście byłoby to możliwe tylko wtedy, gdyby projekt był skierowany do programistów i napisany w tym samym docelowym języku aplikacji (np. nie można zrozumieć silnika V8 znając tylko JavaScript).