title: Uwalnianie pamięci: wzorzec obserwatora?

text: Buduję aplikację naukową w Matlabie, która obsługuje kilkaset dużych matryc (dużych, jak w "bardzo niewiele z nich zmieści się do pamięci RAM"). Każda macierz jest zawarta w dedykowanym obiekcie do obsługi jej metadanych (nazwa właściwości to .data). Używam metody gettera, aby załadować dane z pliku do pamięci RAM, gdy tylko jest to potrzebne. Jak zdecydować, kiedy rozładować? Większość dostępu do danych obiektu będzie wiązana, dlatego nie chcę rozładowywać za każdym razem, gdy skończę z pobieraniem danych. Co więcej, być może będę musiał używać jednego lub dwóch częściej niż innych. Nie sądzę, żebym mógł rozwiązać ten problem w każdym obiekcie, więc pomyślałem, że mógłbym zaimplementować funkcję publiczną, aby wyczyścić macierz z pamięci RAM, wywoływaną przez zewnętrzny obiekt, który decyduje, kiedy (i ewentualnie, którego) obiektu jest w tej chwili za dużo. Czy to ma sens, czy jest to recepta na katastrofę? Czy to liczy się jako obserwator, czy jest coś innego, czego mógłbym użyć? Jak zidentyfikować „dobre” kryteria decyzyjne? Dziękuję!


title: Co zrobić z „Rozwój oparty na awariach”?

text: W naszym sklepie staramy się być zwinni. Powiedziałbym, że robimy wielkie postępy. To powiedziawszy, kilku z nas zauważyło wzorzec, który zaczęliśmy nazywać „Rozwój napędzany porażką”. Rozwój oparty na błędach można zasadniczo opisać jako zwinny cykl wydań/iteracji, w którym błędy/funkcje są kierowane nie zadaniami i historiami z kryteriami akceptacji, ale defektami wprowadzonymi do oprogramowania do śledzenia defektów. Nasz zespół ma świetnego Project Managera, który stara się uzyskać kryteria akceptacji od klienta (klientów), ale nie zawsze jest to możliwe. Z mojego fotela rozwojowego wynika to z tego, że klient albo nie wie _dokładnie_, czego chce, albo (i to jest bodziec) dwa różne „obozy” w głównym biurze klienta są w konflikcie z tym, jak należy wdrożyć historię. Obóz A będzie luźno dyktować, że Cecha X działa jak _ta_, a następnie Obóz B nie zadziała, ponieważ nie będzie działał tak _tam_. Stąd termin „FDD”. Proces ten jest napędzany przez „niepowodzenia”. Prowadzi to do mojego pytania: czy ktoś inny się z tym spotkał, a jeśli tak, jakieś wskazówki/sugestie, jak sobie z tym poradzić? Oczywiście staraliśmy się wcześniej skłonić obóz A i B do porozumienia, ale wszyscy wiedzą, że nie zawsze tak jest. Dziękuję


title: Nauka o językach

text: Chcę dowiedzieć się więcej _o_ językach programowania. W szczególności chciałbym przyjrzeć się niektórym nowym osiągnięciom w językach programowania (nawet tym bardzo mało znanym, o które dbają tylko naukowcy). Muszę też nauczyć się czytać specyfikacje gramatyczne. Od czego powinienem zacząć?


title: Jakie są inne technologie, które umożliwiają tworzenie stron internetowych z animacją, ładowaniem szczegółowych obrazów i różnymi przeglądarkami?

text: Jestem Junior Web Programmerem, którego zadaniem jest przeprojektowanie naszej strony internetowej. Obecnie strona jest tworzona w ActionScript przy użyciu FLEX API (a więc jest oparta na Flash). **Szukam porady, jakich technologii mogę użyć do tworzenia interaktywnych stron internetowych.** Otrzymałem następujące wymagania: \- musi działać i wyglądać tak samo w przeglądarkach iOS \- zawierać animację, ruch elementów i pokaz szczegółowa grafika \- wyglądają dokładnie tak samo we wszystkich przeglądarkach _Jakie technologie są dostępne do stworzenia witryny internetowej z tymi funkcjami?_ Do tej pory wiem: \- Witryny oparte na technologii Flash mogą to osiągnąć (ActionScript) \- JQuery może tworzyć rozbudowane okna dialogowe ( nie jestem pewien, czy obsługuje animację graficzną lub jest kompatybilny z różnymi przeglądarkami, prawda?) \- Czy mogę do tego użyć .NET? Czy to oznacza, że piszę stronę w ASP .NET? \- Raphael.js - może obracać i animować obrazy, czy jest to możliwe w różnych przeglądarkach? \- Czy znasz inne osoby? Jakie są inne technologie, o których nie wiem?


title: Jaki jest cel tablic w C, skoro wskaźniki mogły wykonać zadanie?

text: Tablice i wskaźniki to nie to samo w C, chociaż są powiązane i mogą być używane podobnie. Jak dotąd wszyscy się zgadzamy. Jednak nie rozumiem, dlaczego tablice zostały uwzględnione w C, podczas gdy wskaźniki mogły wykonać swoją pracę doskonale. Nie mówię, aby usunąć notację tablicową (np. a[5] lub int a[4] = {0,1,2,3};), co jest całkiem przydatne i wygodne. Ale możesz mieć tę samą notację działającą na wskaźnikach (tak jak w przypadku), jako środek kosmetyczny. Tak więc notacja tablicowa nie jest powodem do posiadania tablic, tylko notacja! Jedyną różnicą, jaką widzę, jest to, że tablice są stałymi wskaźnikami, a rozmiaru pamięci, na którą wskazują, nie można zmienić. Ale można to również osiągnąć za pomocą wskaźników, dokładnie przez uczynienie ich stałymi (pamięć nie miałaby stałego rozmiaru, ale nie jestem pewien, czy to jest problem). Dlaczego więc nie mieć tylko wskaźników i pozwolić programiście zdecydować, jak wskaźnik powinien się zachowywać (tj. stały, nie stały, stały rozmiar, zmienny rozmiar itp.)?


title: terminologia dotycząca przenoszenia w górę z modułów na framework

text: Czy istnieje słowo opisujące problem łączenia się frameworka z modułami oprogramowania, które obsługuje, na przykład dodawanie metod do klasy bazowej, które mogą mieć zastosowanie tylko do określonych podklas lub przypadków użycia? To szczególny rodzaj naruszenia rozdziału obaw. Słowa, które przychodzą mi do głowy, to „dewolucja w górę” lub „przechwytywanie cech”, ale wydają się należeć do polityki, a nie inżynierii. Wikipedia ma artykuł o „subsydiarności”, w którym w jednym zdaniu wspomina się o polityce i programowaniu obiektowym, ale nadal nie jestem pewien.


title: Pomoc w analizowaniu plików dziennika Java

text: Piszę parser dziennika, który stale szuka określonych wzorców, a następnie odpala zdarzenia do innego systemu, gdy znajdzie te dopasowania. Odpalenie zdarzenia ma krytyczne znaczenie dla wyłapania błędów lub wynikających z nich problemów. Ta część nie podlega negocjacjom projektowym. Pliki dziennika należą do Aplikacji i Systemu Operacyjnego; dzięki temu mogą być szybkie w rejestrowaniu, duże rozmiary i obracać się w zależności od czasu lub rozmiaru. Jakie jest lepsze podejście do odczytywania tych plików dziennika, wykrywania, kiedy się zmieniają i odczytywania od ich ostatniej odczytanej lokalizacji, ponieważ pisałem kod, aby to zrobić, używając RandomAccessFile, który zachowywał ostatnią odczytaną lokalizację dla każdego pliku. Aby poradzić sobie z dużymi plikami i szybkim rejestrowaniem, zrobiłem tak: 1. DataProducer - uzyskał ostatni punkt odczytu w pliku, a następnie znalazł wszelkie zmiany, a następnie dodałby je do kolejki 2. DataConsumer - wszelkie zmiany w kolejce pod względem rozmiaru, spowodowałyby ten wątek, aby obudzić i rozpocząć analizowanie wszystkich elementów w kolejce dla tego pliku dziennika. Usuwam to, co przeanalizowało. Szukam kilku sugestii (w świetle tego, co zrobiłem), które mogą poprawić obecny sposób, w jaki zarządzam odczytywaniem pliku i odbieraniem, gdy są zmiany, oraz wydajną analizą pliku (biorąc pod uwagę rozmiar i rotację). Wystarczy kod lub API.


title: typowy sposób udostępniania połączenia z bazą danych dla projektu open-source, bez ujawniania zbyt wiele

text: Mam projekt open source dla `moja_domena.com`, który wymaga połączenia z bazą danych (...jak to jest w tradycji). Jaka jest standardowa praktyka umożliwiająca innym pracę w witrynie bez zapewniania im pełnego dostępu do poświadczeń bazy danych? Na przykład: Jeśli mam stronę `connect.php`, która łączy się z bazą danych. Nie chcę, aby ktoś mógł odczytać ten plik lub po prostu napisać `<?php include("http://mojadomena.com/connect.php")` ponieważ wtedy będzie miał pełny dostęp do bazy danych. Jeśli umieszczę plik w moim pliku `.gitignore`, na pewno plik nie będzie w repozytorium, ale nadal będzie widoczny w kodzie źródłowym. Czy mam po prostu utworzyć użytkownika tylko do odczytu i dać mu do niego dostęp, a następnie umieścić pełny plik połączenia do odczytu i zapisu i postępować zgodnie z wytycznymi tej odpowiedzi?: Upewnianie się, że informacje o połączeniu z bazą danych są zabezpieczone Jaka jest tutaj standardowa praktyka? lub co mogę zbadać, aby dowiedzieć się więcej na ten temat?


title: Czym jest selekcja, a czym projekcja

text: Pracuję na Androidzie z metodą query() klasy ContentResolver, która przyjmuje 6 parametrów `(uri,projection,selection,selectionArgs,sortOrder,cancellationSignal)` dla parametrów selekcji i projekcji. Jestem trochę zdezorientowany częścią zapytania dotyczącą selekcji i projekcji. W poniższym przykładzie, czym jest wybór i część projektu w zapytaniu? wybierz * z osoby gdzie name='zeus';


title: Testowanie jednostkowe klasy DatabaseOpenHelper w systemie Android

text: Napisałem kilka testów jednostkowych dla już istniejącej klasy `DatabaseOpenHelper`. Omówiłem scenariusz tworzenia i migrację ze starego schematu do nowego. Niestety nie czuję, że moje testy są dobre. Na przykład do tworzenia bazy danych sprawdzam `SQLiteDatabase. execSQL()` został wywołany trzy razy (do tej pory mamy trzy tabele) i sprawdź, czy ciąg zapytania znajduje się w zestawie określonych ciągów SQL. Problem do tej pory - jeśli ktoś zmieni kolejność kolumn to test się nie powiedzie. Prawdopodobnie to jest w porządku. Ale jakie są inne sposoby testowania jednostkowego schematu SQL? A może nie masz do tego testów jednostkowych i polegasz tylko na integracji?


title: Używanie wiadomości e-mail o wyjątkach jako wskaźnika stanu systemu

text: Pracuję dziś nad naszą listą błędów i próbuję wyjaśnić/naprawić problemy, z których często otrzymujemy e-maile o wyjątkach. Chociaż wszystkie wyjątki (jak dotąd) są obsługiwane, niektóre w rzeczywistości nie reprezentują błędu w kodzie. Na przykład, jeśli usługa strony trzeciej tymczasowo przestanie działać, nasz kod zawiedzie, obsłuży wyjątek i wyśle nam wiadomość e-mail. Może to być szczególnie przydatne w godzinach pracy, ponieważ pozwala nam szybko sprawdzić, czy coś jest nie tak i na to zareagować. Jednak istnieją również zaplanowane czasy przestojów, a e-maile z wyjątkami mogą szybko wypełnić skrzynkę odbiorczą. Moje pytanie brzmi, czy istnieje najlepsza praktyka uzyskiwania wglądu w stan systemu? Czy wiadomość e-mail o wyjątku, jak opisałem tutaj, jest akceptowalną praktyką, czy też powiadomienia o wyjątkach powinny być zawsze nieoczekiwane?


title: Jak mogę wyrazić kompozycję rekurencyjną w diagramach klas UML?

text: Mam jedną klasę o nazwie "Institution", która reprezentuje instytucję publiczną (z właściwościami takimi jak id_inst, name_inst, tel_inst, fax_inst...). Instytucja może mieć instytucje stowarzyszone, na przykład uniwersytet składa się z różnych wydziałów (które są również instytucjami o tych samych właściwościach i metodach). Te wydziały mogą mieć również instytucje stowarzyszone: laboratoria, aneksy itp. Jak wyrazić tę koncepcję w diagramie klas UML?


title: Jaka jest właściwa etykieta i zalecany przepływ pracy GitHub, aby jednocześnie przyczyniać się do tworzenia repo i odbiegać od niego?

text: Generalnie jestem nowy w GitHubie i VCS. Od lat programuję w różnych językach, ale zawsze pracowałem solo nad niestandardowymi projektami (bez publicznych wydań). Niedawno zacząłem używać widżetu jQuery UI, który pobrałem z GitHub w projekcie, nad którym pracuję. Repozytorium nie jest już utrzymywane przez pierwotnego autora. Inny widelec zawierał niektóre z oryginalnych żądań ściągnięcia. To jest ten, z którego się rozwidlałem. Znalazłem kilka błędów i wymyśliłem dla nich poprawki. Chciałbym wnieść te poprawki, ale mam też wiele innych zmian, które chcę wprowadzić na własny użytek, które zepsują niektóre z istniejących funkcji. Dodatkowo chciałbym włączyć pomysł z innego widelca. Nadal uczę się GIT i GitHub i próbuję znaleźć najlepszy sposób na wszystko. Dużo czytałem (tutaj, SO, strony pomocy GitHub, Pro Git) na temat różnych koncepcji/zadań: przepływów pracy, scalania, pull requestów, cherry picking, rebase, branching. Moja istota szara pływa i muszę zacząć _działać_, aby lepiej zrozumieć, co przeczytałam. ### Główne problemy: 1. Wydaje mi się, że przeczytałem (gdzieś), że możesz mieć tylko jedno pull request na gałęzi na raz. Czy to oznacza, że powinienem mieć osobną gałąź dla każdego błędu, a następnie wykonać osobne żądanie ściągnięcia dla każdego z nich? 2. Chcę posprzątać problemy z białymi znakami i wydaje mi się, że pamiętam, jak czytałem, że najlepiej zrobić to w osobnym zatwierdzeniu. Czy powinienem to zrobić w moim master czy w osobnej gałęzi? Nie chcę wykonywać żądania ściągnięcia dla czegoś tak _trywialnego_ , ale jeśli wprowadzę zmiany w odstępach przed rozgałęzieniem, czy wpłynie to na żądanie ściągnięcia dla poprawek błędów? Niektóre forki wyczyściły białe znaki i skutecznie uczyniły diff całkiem bezużytecznym. 3. Myślałem o tworzeniu problemów z moim widelcem jako sposobem na udokumentowanie błędów, mimo że mam już na nie poprawkę. Czy to dobry pomysł? Jak mam połączyć ze sobą problem, zatwierdzenie i scalanie do wzorca? Jeśli wyślę żądanie ściągnięcia wcześniej, czy mój problem pojawi się również na początku, czy też link do dokumentacji zostanie utracony? Nie mogę otworzyć problemu z repozytorium upstream (nie ma karty problemu). 4. Jaki jest najlepszy sposób na uznanie drugiego autora widelca za pomysł, z którego chcę skorzystać? Nie mogę dokładnie użyć jego kodu, zwłaszcza, że jego zmiana została zastosowana do starszej wersji autora i nie jest zgodna z innymi moimi zmianami w obecnej postaci. Ale chcę wykorzystać ten pomysł i chcę udzielić uznania tam, gdzie zasługuje na uznanie. Czy powinienem po prostu połączyć się z jego repozytorium (lub profilem lub konkretnym zatwierdzeniem) w mojej wiadomości o zatwierdzeniu? 5. Jaka jest etykieta dotycząca zmiany pliku readme i DocBlock na górze głównego pliku? Czy mogę wprowadzać zmiany, dodawać moje imię i nazwisko, dodawać linki do mojego repozytorium i demo, usuwać linki do oryginalnego demo (ponieważ mój widelec będzie niezgodny z oryginałem)? Oczywiście zostawię oryginalne imię i nazwisko autora oraz informacje o licencji. Dla przypomnienia, jest licencjonowany na podstawie licencji MIT. Jako samodzielny programista, który nigdy nie używał VCS, jestem przyzwyczajony do _przepisywania historii_. Jestem perfekcjonistką i lubię porządek i porządek. Pomysł nagranej historii trochę mnie denerwuje i chcę _zrobić to dobrze za pierwszym razem_. Utworzyłem nowe repozytorium do zabawy/nauki, ale nie mogę się doczekać, aby przejść do naprawy widżetu jQuery UI, abym mógł kontynuować mój projekt.


title: Zbuduj natywną bibliotekę dll lub .net dll, która będzie używana niezależnie w każdej konfiguracji

text: Oto proste pytanie (tak jakby), ale trudno mi podjąć decyzję. Najpierw historia o tym, jak doszedłem do tego problemu. W mojej nowej pracy musimy używać zewnętrznego API do komunikacji z ich zastrzeżoną bazą danych (to technologie produkcyjne). Ten interfejs API zawiera tylko bardzo prosty przykład w c (nie prostą składnię ;) ) na temat korzystania z tego interfejsu API. Funkcje nie mają dokumentacji, a składnia jest gruba, ponieważ prawdopodobnie została zbudowana w ostatnim stuleciu, więc parametry mają krótkie, nieznaczące nazwy, takie same jak nazwy funkcji. W sieci znajduje się bardzo niewiele pomocy, a sama firma tak naprawdę nie może nam pomóc. W sieci znalezione małe okruchy dotyczą osób, które nie są w stanie przetłumaczyć go na prostsze połączenie językowe (takie jak VB6). Ludzie przede mną próbowali z niego korzystać, bez powodzenia. Dobrą wiadomością jest to, że udało mi się sprawić, by przykład działał i zmodyfikowałem go tak, aby pasował do naszych podstawowych potrzeb związanych z wysyłaniem lub odczytywaniem danych. Umieściłem te nową wersję w asemblerze dll c++/CLR, aby używać go w c#, który jest naszym prawie aktualnym językiem (tak, porusza się powoli w tym świecie) W zależności od wersji używanego oprogramowania (każdy klient, którego mamy może mieć inną konfigurację, od starszej do zupełnie nowej konfiguracji). Może to mieć wpływ na to, jakiego języka używamy. Poproszono mnie więc, abym spróbował udostępnić moją bibliotekę dll w natywnym i zarządzanym ustawieniu. Oto moje pytanie. Czy powinienem zostawić moją bibliotekę dll, aby miała zarządzany podpis i jeśli musi być używana w vb6, upewnij się, że rozumiem, jak sprawić, aby działała w trybie natywnym (czego muszę się nauczyć), czy też powinienem utworzyć natywną bibliotekę dll i zrobić to P/Invoke w zarządzanym ustawieniu? A może powinienem zbudować dwie różne biblioteki dll? IMO zachowałbym to jako zarządzaną bibliotekę dll, ale zastanawiałem się, czy to najlepszy sposób na zrobienie tego? Na koniec, obecna wersja to wersja v.1, aby pokazać, jak możemy z niej korzystać i szybko zacząć z niej korzystać. Pisząc to uświadamiam sobie, że muszę zbudować interfejs!:). Planuję przebudować cały program, ale wywołania API będą zawsze skierowane do ich natywnej biblioteki dll, chyba że mają nadchodzące SDK .net, ale jeszcze nic na ten temat.


title: zarządzanie zdalnym programatorem

text: Mamy okazję zatrudnić do naszego zespołu świetnego webdevelopera. Problem w tym, że za 6 miesięcy wyjeżdża do Ameryki Południowej. Nadal będziemy go mieć na miejscu przez sześć miesięcy. Myślimy o tym, żeby potem pracował zdalnie, ale mamy swoje obawy. Nasz zespół to 4 osobowy zespół z Chicago, który wykorzystuje scrum. Nasze biuro to sala wojenna, w której stale współpracujemy. Jak moglibyśmy włączyć pracownika zdalnego do takiego procesu? Jakie technologie i techniki mogą sprawić, że to zadziała? A może to przegrana sprawa? W tym wątku wymieniono niektóre narzędzia, ale mam nadzieję na pewne doświadczenia z prawdziwego świata.


title: Jak właściwie działa BLOB MySQL?

text: To pytanie napędzane ciekawością. Uczę się bazy danych Oracle, a baza danych Oracle obsługuje dane Blob w oddzielnej przestrzeni tabel, co moim zdaniem zmniejsza obciążenie podczas próby odczytu dużych danych Blob. Zastanawiam się, jak MySQL obsługuje Blob? Właściwie planuję rozpocząć projekt i chciałbym spróbować zapisywania obrazów w bazach danych MySQL zamiast standardowego podejścia do zapisywania plików w systemie plików. Dziękuję Ci.


title: Testowanie jednostkowe: o strategiach łatwych i trudnych na początek

text: Nigdy nie napisałem testu jednostkowego. Czytam _The art of Unit Testing_ autorstwa Osherove'a, który wyjaśnia, jak wybrać, od czego zacząć, gdy piszesz testy dla starszego kodu. Zasadniczo otrzymujesz dwa rodzaje testów do napisania: **łatwy** (na komponentach z kilkoma zależnościami) i **trudny** (na komponentach z wieloma zależnościami). Następnie mówi, że zaczynając od tych trudnych, trzeba mieć większe doświadczenie, ale pozwala to na refaktoryzację i testowalność szerokiej części systemu, co znacznie ułatwia późniejszą pracę. Ale czy nie jest to również prawdą naokoło? To znaczy, jeśli zaczynasz od łatwych testów, czy nie powinieneś skończyć na ułatwianiu trudnych testów?


title: Sortuj prostokąty w siatce na podstawie porównania punktu środkowego każdego

text: Jeśli mam siatkę prostokątów i przesunę jeden z prostokątów, powiedzmy powyżej i na lewo od innego prostokąta, w jaki sposób zmieniłbym prostokąty? Zauważ, że prostokąty są w tablicy, więc każdy prostokąt ma indeks i pasujący znacznik. Wszystko, co naprawdę muszę zrobić, to ustawić właściwy indeks na podstawie nowej pozycji punktu środkowego prostokąta w prostokącie, w porównaniu z pozycją punktu środkowego innych prostokątów w siatce. Oto, co robię teraz w pseudokodzie (działa trochę, ale nie jest dokładnie): -(void)sortViews:myView { int newIndex; // myView to widok, który został przeniesiony. [viewsArray removeObject:myView]; [viewsArray enumerate:obj*view]{ if (myView.center.x > view.center.x) { if (myView.center.y > view.center.y) { newIndex = view.tag -1; *stop = TAK; } else { nowyIndeks = view.tag +1; *stop = TAK; } } else if (myView.center.x < view.center.x) { if (myView.center.y > view.center.y) { newIndex = view.tag -1; *stop = TAK; } else { nowyIndeks = view.tag +1; *stop = TAK; } } }]; if (nowyIndeks < 0) { nowyIndeks = 0; } else if (nowyIndeks > 5) { nowyIndeks = 5; } [viewsArray insertObject:myView atIndex:newIndex]; [układ własnySiatka]; }


title: Czy mogę zacząć od zdania testu jednostkowego?

text: Zasady wujka Boba dotyczące TDD są określone tutaj. 1. Nie możesz pisać żadnego kodu produkcyjnego, chyba że jest to wykonanie nieudanego testu jednostkowego. 2. Nie możesz napisać więcej testów jednostkowych, niż jest to wystarczające, aby oblać; a niepowodzenia kompilacji to niepowodzenia. 3. Nie możesz napisać więcej kodu produkcyjnego, niż wystarczy, aby przejść jeden nieudany test jednostkowy. Ale czy można napisać kilka testów, które przechodzą zaraz po skompilowaniu testu? Na przykład test, który potwierdza wartość null i domyślny impl metody, którą testuję, zwraca wartość null. Czy robię coś złego, robiąc to? Czy powinienem przejść do pierwszego testu, który zakończy się niepowodzeniem, czy można pisać testy, które automatycznie przechodzą jako pierwsze?


title: Jak pisać komentarze wyjaśniające „dlaczego” stojące za funkcją zwrotną, gdy nazwy funkcji i parametrów są do tego niewystarczające?

text: Jak mam podejść do pisania komentarzy do funkcji zwrotnych? Chcę wyjaśnić „dlaczego” stojącego za funkcją, gdy nazwy funkcji i parametrów są niewystarczające, aby wyjaśnić, co się dzieje. Zawsze zastanawiałem się, dlaczego takie komentarze mogą być tak zwyczajne w dokumentach bibliotek w językach dynamicznych: /** * cb: callback // gdzie są argumenty i efekty? */ func foo( cb ) Być może powszechną postawą jest „w końcu możesz sam zajrzeć do kodu źródłowego”, co skłania ludzi do pozostawiania takich minimalistycznych komentarzy. Wydaje się jednak, że powinien istnieć lepszy sposób komentowania funkcji wywołania zwrotnego. * * * Próbowałem komentować wywołania zwrotne w sposób Haskell: /** * cb: Int -> Char */ func foo(cb) I żeby być uczciwym, zwykle jest to dość porządne. Ale wpada w kłopoty, kiedy muszę przekazać jakąś złożoną strukturę. Problem częściowo wynika z braku systemu typów: /** * cb: Int -> { err: String -> (), success: () -> Char } // za długa... */ func foo( cb) Lub też próbowałem tego: /** * cb: Int -> { err: String -> (), * success: () -> Char } // lepiej? */ func bar(cb) Problem polega na tym, że możesz umieścić strukturę w innym miejscu, ale musisz nadać jej nazwę, aby się do niej odwoływać. Ale kiedy nazywasz strukturę, której zamierzasz użyć, od razu wygląda na tak zbędną: // Gdzieś indziej... // ResultCallback: { err: String -> (), success: () -> Char } /** * cb: Int -> ResultCallback // lepiej ?? */ func foo(cb) I niepokoi mnie, jeśli podążam za stylem komentowania Java-doc, ponieważ nadal wydaje się niekompletny. Komentarze nie mówią niczego, czego nie można od razu zobaczyć patrząc na funkcję. /** * @param cb {Funkcja} tak, to jest funkcja, ale nic mi o niej nie powiedziałeś... * @param err {Funkcja} gdzie powinienem umieścić argument tego wywołania zwrotnego? * Nie wspominając o własnych argumentach błędu... */ func foo(cb) Te przykłady są podobne do JavaScriptu w przypadku ogólnych funkcji i nazw parametrów, ale napotkałem podobne problemy w innych dynamicznych językach, które umożliwiają złożone wywołania zwrotne.


title: Jak osiągnąć typ N-Tier w Codeigniter MVC?

text: Wiem, że N-Tier ma na celu separację warstw w różnych sieciach, ale chciałbym mieć taką samą separację kodu w codeigniter. Wpadłem na pomysł, aby mieć **Model** : dla bazy danych CRUD -> Warstwa danych **REST** API : dla logiki biznesowej—> Warstwa biznesowa wywołująca metodę CRUD z modeli **Kontroler** i **Widok** idą jak dotychczas i przepływ będzie **Widok** <—> **Kontroler** <—> * *API** (z klasami Business) <—> **Model** Chcę wiedzieć jakie wady to może być taka architektura


title: Czy wywóz śmieci jest potrzebny do wdrożenia bezpiecznych zamknięć?

text: Niedawno uczestniczyłem w kursie online z języków programowania, w którym prezentowane były m.in. domknięcia. Zanim zadam pytanie, opiszę dwa przykłady zainspirowane tym kursem, aby nadać im kontekst. Pierwszym przykładem jest funkcja SML, która tworzy listę liczb od 1 do x, gdzie x jest parametrem funkcji: fun countup_from1 (x:int) = let fun count (from:int) = if from = x then from :: [] else from :: count (from + 1) in count 1 end W SML REPL: val countup_from1 = fn : int -> int list - countup_from1 5; val it = [1,2,3,4,5] : int list Funkcja `countup_from1` używa zamknięcia pomocniczego `count`, które przechwytuje i używa zmiennej `x` z jej kontekstu. W drugim przykładzie, kiedy wywołuję funkcję `create_multiplier t`, otrzymuję funkcję (właściwie zamknięcie), która mnoży jej argument przez t: fun create_multiplier t = fn x => x * t W SML REPL: - zabawa twórz_mnożnik t = fn x => x * t; val utwórz_mnożnik = fn : int -> int -> int - val m = utwórz_mnożnik 10; val m = fn : int -> int - m 4; val it = 40 : int - m 2; val it = 20 : int Czyli zmienna `m` jest powiązana z zamknięciem zwracanym przez wywołanie funkcji i teraz mogę jej używać do woli. Teraz, aby zamknięcie działało poprawnie przez cały czas życia, musimy wydłużyć czas życia przechwyconej zmiennej `t` (w przykładzie jest to liczba całkowita, ale może to być wartość dowolnego typu). O ile mi wiadomo, w SML jest to możliwe dzięki zbieraniu śmieci: zamknięcie zachowuje odniesienie do przechwyconej wartości, która jest później usuwana przez garbage collector, gdy zamknięcie zostanie zniszczone. Moje pytanie: ogólnie rzecz biorąc, czy wywóz śmieci jest jedynym możliwym mechanizmem zapewniającym bezpieczeństwo zamknięć (możliwość wywołania przez cały okres ich użytkowania)? Lub jakie są inne mechanizmy, które mogą zapewnić ważność zamknięć bez zbierania śmieci: Skopiuj przechwycone wartości i przechowuj je w zamknięciu? Ograniczyć okres istnienia samego zamknięcia, aby nie można go było wywołać po wygaśnięciu przechwyconych zmiennych? Jakie są najpopularniejsze podejścia? **EDYTUJ** Nie sądzę, że powyższy przykład można wyjaśnić / zaimplementować, kopiując przechwycone zmienne do zamknięcia. Ogólnie rzecz biorąc, przechwycone zmienne mogą być dowolnego typu, np. mogą być przypisane do bardzo dużej (niezmiennej) listy. Tak więc w implementacji kopiowanie tych wartości byłoby bardzo nieefektywne. Dla kompletności, oto kolejny przykład z wykorzystaniem odwołań (i efektów ubocznych): (* Zwraca zamknięcie zawierające licznik, który jest inicjowany na 0 i jest zwiększany o 1 za każdym razem, gdy zamknięcie jest wywołane. *) fun create_counter() = let (* Utwórz odwołanie do liczby całkowitej: przydziel liczbę całkowitą i pozwól zmiennej c na nią wskazywać. *) val c = ref 0 in fn () => (c := !c + 1; !c) end (* Utwórz zamknięcie, które zawiera c i zwiększa wartość, do której się odwołuje, za każdym razem, gdy jest wywołane.*) val m = create_counter (); W SML REPL: val create_counter = fn : unit -> unit -> int val m = fn : unit -> int - m (); val it = 1 : int - m (); val it = 2 : int - m (); val it = 3 : int Tak więc zmienne mogą być również przechwytywane przez referencję i pozostają aktywne po zakończeniu wywołania funkcji, która je utworzyła (`create_counter()`).


title: Jak mogę przedstawić wydrukowany kod źródłowy Visual Basic w estetyczny sposób?

text: Obecnie odbywam staż w dużej firmie inżynieryjnej. Wyjeżdżam jednak za kilka miesięcy, więc mój kierownik projektu poprosił o wydrukowanie mojego kodu źródłowego dla projektu VBA, nad którym pracowałem. Chciałby go przejrzeć, aby upewnić się, że nie zrobiłem niczego śmiesznego i aby upewnić się, że jest wystarczająco dobrze zorganizowany, aby ktoś mógł go łatwo utrzymać, gdy odejdę. Nie jestem do końca pewien, dlaczego miałby chcieć wydrukować zamiast plików, ale ponieważ edytor VBA jest brzydki jak grzech, prawdopodobnie jest to dobra rzecz. Chciałbym tym zrobić wrażenie - jakkolwiek drobne - więc moje pytanie brzmi, jak mogę sprawić, by wyglądało to profesjonalnie? Np. może są jakieś czcionki, które mają tu sens, może mógłbym zastosować schemat kolorów do słów itp.?


title: MVCS - Sklep z kontrolerami widoku modelu

text: Niedawno zdecydowałem się rozpocząć naukę programowania na iOS i w tym celu przeczytałem programowanie na iOS: Poradnik The Big Nerd Ranch Guide. W książce autorzy opisują wzorzec projektowy _MVCS - Model-View-Controller-Store_ , którego podstawową ideą jest to, że ponieważ wiele aplikacji korzysta z wielu zewnętrznych źródeł danych, utrzymanie logiki żądań w kontrolerze może być bardzo nieuporządkowane, zamiast tego autorzy Proponuję przeniesienie całej logiki żądań z kontrolera do osobnego obiektu. W skrócie, cytując książkę, > Model-View-Controller-Store umieszcza logikę żądań w osobnym obiekcie i > nazywamy ten obiekt sklepem (rysunek 28.4). Korzystanie z obiektu sklepu minimalizuje > nadmiarowy kod i upraszcza kod, który pobiera i zapisuje dane. Co najważniejsze, przenosi logikę postępowania z zewnętrznym źródłem do > uporządkowanej klasy z jasnym i skoncentrowanym celem. Dzięki temu kod jest > łatwiejszy do zrozumienia, co ułatwia utrzymanie i debugowanie, a także udostępnianie > innym programistom w zespole. I > Fajną rzeczą w sklepach asynchronicznych jest to, że chociaż wiele > obiektów wykonuje dużo pracy, aby przetworzyć żądanie, przepływ żądania i jego odpowiedź są w jednym miejscu w kontrolerze. Daje nam to > korzyść w postaci kodu, który jest łatwy do odczytania, a także łatwy do modyfikacji. Chciałem dowiedzieć się więcej o tym wzorze i zobaczyć, co inni mogą mieć na jego temat do powiedzenia, ale podczas wyszukiwania w Internecie jedyne odniesienia, jakie udało mi się znaleźć, dotyczyły tej samej książki (czy wzorzec może być znany pod inną nazwą?). Logika autora wydaje mi się sensowna i wydaje się być logicznym rozszerzeniem zwykłego wzorca MVC, ale być może dlatego, że tak naprawdę nie mam zbyt dużego doświadczenia z wzorcem MVC w praktyce (oprócz wypadu w rozwój iOS mam rodzaj używanego MVV z backbone.js (to znaczy, jeśli uważasz, że jest to MVC)). Miałem nadzieję, że być może ktoś z większym doświadczeniem może rzucić trochę światła na to, czy istnieją jakieś oczywiste wady/problemy ze wzorcem _MVCS_, których mi brakuje.


title: Czy w przypadku aplikacji typu front-end podzielonej w sposób MV* powinienem mieć modele dedykowane logice UI?

text: Nie mówię o prostej logice interfejsu użytkownika, takiej jak kliknięcie przycisku przekierowuje Cię do innej strony, ale gdzie jedna akcja może skutkować kilkoma różnymi zachowaniami w zależności od aktualnego stanu aplikacji, a także może wywołać reakcję w innych częściach aplikacji. Obecnie mój widok publikuje wszystkie zdarzenia interfejsu użytkownika, więc odpowiedź może być delegowana do innych części. Problem polega na tym, która inna część? Aby uniknąć pisania „grubych” kontrolerów, które przechowują dowolną ilość logiki domeny, pomyślałem, że fajnie byłoby mieć nietrwały obiekt, który modeluje zachowanie interfejsu użytkownika, ale nie jestem pewien, czy to ma sens, czy po prostu naciskam problem wokół i bycie zadowolonym z przedmiotu?


title: Jakie narzędzia lub techniki są przydatne do opisywania nieznanej bazy kodu?

text: Podczas ręcznego sprawdzania nieznanego kodu (w celu przejrzenia lub modyfikacji), wydaje mi się, że mam trzy opcje. * **Odczyt odgórny** kodu, wybieranie każdego następnego pliku źródłowego według tego, jak fundamentalna wydaje się nazwa pliku. _Zazwyczaj czytam prawie wszystko. Niektóre pliki dwa razy._ * **breadth-first read** , gdzie znajduję i czytam całą metodę wywołującą z minimalnym zrozumieniem. Następnie przeczytaj wszystkie funkcje wywołane przez funkcję i tak dalej. _Mój stos mentalny ma tendencję do przepełnienia, jeśli wykonam kilka wywołań głębokich._ * **Odczyt w pierwszej kolejności**, w którym przechodzę przez cały kod w debuggerze, nie mając pewności, czy zajmie to 8 minut, czy 8 godzin. Kiedy przeczytałem wystarczająco dużo kodu, aby mieć dość solidne zrozumienie tego, co robi, często stwierdzam, że **Przeczytałem 80% lub więcej kodu, podczas gdy podstawowy kod to 20% lub mniej**. Zmarnowałem dużo czasu. Jakie narzędzia są przydatne do szybkiego zrozumienia nieznanego kodu? Czy są jakieś narzędzia, które mogą dać „duży obraz” krytycznej ścieżki kodu i pozwolić mi przejść do szczegółów dowolnej części?


title: Usługa WCF jako serwer proxy do publikowania danych w czasie rzeczywistym klientom WPF/MVVM

text: Otrzymałem zadanie stworzenia aplikacji do pulpitu nawigacyjnego do pokazywania aktualizacji w czasie rzeczywistym dla naszych serwerów. Surowe dane pochodzą z pliku XML w naszym intranecie, który muszę przeanalizować i przedstawić użytkownikowi. Nie jest możliwe, aby każdy użytkownik pulpitu nawigacyjnego pobierał ten plik XML w tym samym czasie w celu aktualizacji. Z tego, co czytałem, muszę użyć usługi WCF, aby wykorzystać stronę serwera plików XML, a następnie wysłać aktualizacje do wszystkich klientów, którzy patrzą na usługę. Potrzebuję, aby był skalowalny, na początku będzie około 20 równoczesnych użytkowników, ale w przyszłości będę musiał skalować do setek. Będę musiał aktualizować z pliku XML co 30 sekund do 1 minuty. Czy jestem na dobrej drodze z WCF? Czy są inne opcje, które powinienem rozważyć?


title: Zaprojektuj drzewo z wykorzystaniem wzorca zwiedzającego, jak zaimplementować różne rodzaje przemierzania?

text: Zostałem poproszony o teoretyczne pytanie projektowe z myślą o wzorach GoF.: „Biorąc pod uwagę projekt drzewa przy użyciu standardowego wzoru gościa, jak wyglądałby twój projekt, aby umożliwić użytkownikowi wybór między zamówieniem w przedsprzedaży, w- przemierzanie zamówień czy posprzedażowych?” Myślę o tym, żeby po prostu pozwolić odwiedzającemu być, ale przekaż przejście do obiektu Iterator zgodnie ze wzorcem Iterator. Pomysł polegałby na zaimplementowaniu 3 iteratorów, które umożliwiłyby pożądane przechodzenie. Mają interfejs, a Odwiedzający musi tylko wchodzić w interakcję z tym interfejsem, podając się jako argument dla iteratora, który zapewnia przechodzenie. Użytkownik może wybrać, którego iteratora użyć, podając go odwiedzającemu. Czy to brzmi jak eleganckie rozwiązanie? Jakieś lepsze pomysły?


title: Czy mam naprawić drobne problemy, czy pozwolić im odejść?

text: Natknąłem się na następujący problem, w którym skrót klawiaturowy, do którego byłem przyzwyczajony, nie działał już w Ubuntu. To tylko przykład. W przypadku programowania takie rzeczy zdarzają się często, ale zdarzają się również w każdym aspekcie pracy i życia. Zawsze kusi mnie, aby naprawić to od razu, ponieważ mam pomysł, co może to naprawić w ciągu kilku minut. Oczywiście często pomysł jest błędny i wymaga znacznie więcej wysiłku. Zasadniczo przechodzę proces optymalizacji, w którym ciągle zadaję sobie pytanie: „Czy spędziłem już zbyt dużo czasu na szukaniu rozwiązania?” próbując zdecydować, czy zrezygnować z wysiłku. Myślę, że każdy problem można porzucić, ale myślę, że jeśli zrobię to dla wszystkich, moje życie będzie bałaganem nieefektywności. **Pytanie:** Jak skutecznie podchodzisz do tej pokusy małych problemów? Jak napisałem w powyższym, chaotycznym poście na blogu, plusy i minusy decyzji o zajęciu się jakimkolwiek pojedynczym problemem to: **Zalety:** * Naprawiam mały problem we „właściwy” sposób, więc nie muszę zadowolić się rozwiązaniem na pół dupy zamiatania pod dywan. * Spędzam godzinę będąc otwartym na możliwość uczenia się nowych rzeczy związanych z moją pracą i wymiany informacji ze społecznością innych użytkowników Linuksa. Świat komputerów ewoluuje z dnia na dzień, stale pojawiają się nowe technologie, podejścia, pomysły. Dlatego ważne jest, aby pozostać w kontakcie z najnowszymi osiągnięciami. * Ćwiczę wytrwałość w rozwiązywaniu frustrujących problemów. **Wady** : * Nie ma gwarancji, że znajdę rozwiązanie. * To zawsze trwa dłużej niż chudniesz. Na początku wydaje się, że naprawa nie zajmie więcej niż 5 minut, a kiedy to nastąpi (50+% czasu), stopniowo coraz bardziej w nią inwestuję w miarę upływu czasu. Jest to ta sama zasada, która sprawia, że grasz w kasynie, dopóki nie skończą się wszystkie twoje pieniądze. * Perfekcjonizm to uzależnienie. Żyjemy w świecie nieefektywności, który można łatwo zoptymalizować, poświęcając tylko kilka minut. Czasami zajmuje to kilka minut, ale czasami może potrwać kilka dni. Im bardziej karmisz to uzależnienie, tym trudniej jest pokojowo istnieć w nieefektywnym świecie.


title: Czy elementy tezaurusa mogą mieć więcej niż jedną relację USE?

text: Chcę wymodelować tezaurusa przy użyciu standardowego opisu relacji ANSI/NISO, takiego jak „szerszy termin”, „wąski termin” itp. (szczegółowe informacje można znaleźć w tym artykule Wikipedii). Czy prawidłowe jest, aby element tezaurusa w tym standardzie opisu miał więcej niż jedną relację „użytkowania”?


title: Czy umiejętności programistyczne i wiedza komputerowa nauczane na uczelni wystarczą dla przemysłu?

text: Jestem studentem czwartego roku na szwedzkim uniwersytecie i jeśli wszystko pójdzie dobrze, zdam zimą 2011 r. tytuł magistra informatyki. To szanowana uczelnia, przynajmniej tutaj, i jestem ogólnie zadowolony z mojego wyboru - zarówno na uniwersytecie, jak i na kierunku studiów. Chociaż nauczyłem się wiele na kursach, w których uczestniczyłem, jestem trochę zaniepokojony, czy to, czego się uczy, wystarczy, gdy przenoszę się z bezpiecznych poligonów uniwersyteckich na niestabilne pola bitew przemysłu. Prawdę mówiąc, powiedziałbym, że ponad połowa moich umiejętności programistycznych i wiedzy o oprogramowaniu i sprzęcie była samoukiem w wolnym czasie - albo poprzez projekty zainicjowane z własnej woli, albo studiowanie nieobowiązkowych tematów materiału w połączeniu z kursami . Rzeczywiście, czasami te „nie na temat” okazywały się bardziej interesujące i wartościowe niż sam materiał kursu. Jeśli chodzi o umiejętności programowania, jeszcze mniej nauczono się bezpośrednio na kursach uniwersyteckich. O ile mi wiadomo, nie znam na mojej uczelni ani jednego kursu, który obejmowałby efektywne programowanie. Oczywiście, jest wiele kursów na temat programowania w konkretnym języku, kilka na temat pisania algorytmów do rozwiązywania konkretnego problemu, a także jeden na temat programowania pod presją, ale żaden z nich o tym, jak _myśleć_ o programowaniu i jak podejść problemy w efektywny sposób. Spotykam też wielu studentów, którzy nigdy nie zajmowali się C lub C++: językami intensywnie używanymi w przemyśle. Nawet po pisaniu kodu w takiej czy innej formie przez 15 lat nadal czuję, że pozostało mi tak wiele do nauczenia. Prawdę mówiąc, im więcej się uczę, tym bardziej czuję się ignorantem. Wszystko to budzi we mnie obawy, że gdybym polegał wyłącznie na tym, czego uczono mnie na uniwersytecie, nie byłbym odpowiednio przygotowany do stawienia czoła rynku pracy; i nawet w czasie wolnym od nauki nie jestem pewien, czy moje umiejętności są odpowiednie. Czy to powszechny problem? Czy umiejętności i wiedza programistyczna kształcone na uczelni wystarczą dla przemysłu? Jakie doświadczenia mieli Twoi pracodawcy z nowymi pracownikami, świeżo po studiach, pod względem ich wiedzy i umiejętności? Czy uważasz, że są one odpowiednie, czy też uczelnie powinny poprawić lub zrewidować swoje nauczanie? **UWAGA:** Pierwotnie zadałem to pytanie na SO (http://stackoverflow.com/questions/3720486/are-programming-skills-and-computer-knowledge-taught-at-university-sufficient-for), ale została zamknięta, ponieważ nie była odpowiednia dla takiej witryny z pytaniami i odpowiedziami. Ale polecono mi zamieścić je tutaj, więc po prostu skopiowałem i wkleiłem pytanie.


title: Jaki jest najlepszy sposób na oddzielne zarządzanie klasami/bibliotekami wielokrotnego użytku?

text: Podczas kodowania naturalnie często wymyślam klasy lub zestaw klas o dużej reużywalności. Szukam łatwego, prostego sposobu pracy nad nimi osobno. Chciałbym móc łatwo zintegrować je z dowolnym projektem; powinno być również możliwe przełączenie na inną wersję za pomocą jak najmniejszej liczby poleceń. Czy mam rację zakładając, że git (lub inny VCS) najlepiej się do tego nadaje? Myślałem o skonfigurowaniu lokalnych repozytoriów dla każdej klasy/projektu/biblioteki/wtyczki, a następnie po prostu je sklonować/wyciągnąć. Byłoby wspaniale, gdybym mógł odwoływać się do tych projektów po nazwie, a nie po pełnej ścieżce. Jak `git clone someproject`. edit: Aby wyjaśnić, wiem, o co chodzi w VCS i korzystam z nich. Po prostu szukam wygodnego sposobu na przechowywanie i edycję niektórych fragmentów kodu wielokrotnego użytku (w tym testów jednostkowych) osobno i możliwość włączenia ich (bez testów jednostkowych) do innych projektów, bez konieczności ręcznego kopiowania plików. Dobrym przykładem jest Apache Maven, ale szukam rozwiązania niezależnego od języka, optymalnie opartego na wierszu poleceń.


title: Wieloplatformowa aplikacja do map

text: Pracuję nad projektem webowym (PHP, jQuery), który obecnie korzysta z Google Maps, wzmacniając funkcjonalność mapową aplikacji, jednak musimy uczynić ją multiplatformową tak jak można przejść do dashboardu i wybrać jedną z 5-10 dostawców map (których Google Maps jest tylko jednym z nich) do obsługi funkcji map. Ponieważ aplikacja ma pokazywać dane na mapie, niemal w każdym miejscu mamy do czynienia z API dostarczanym przez tego konkretnego dostawcę map. Obecnie myślimy o zrewidowaniu naszej modułowej struktury i/lub stworzeniu czegoś w rodzaju adaptera dla każdego dostawcy, aby poradzić sobie z ich natywną składnią, ale za pomocą naszych standardowych metod. Chciałbym mieć twoje pomysły i doświadczenia, szczególnie jeśli kiedykolwiek stworzyłeś interfejs do obsługi przez 2-3 różnych dostawców map. To by bardzo pomogło i naprawdę to doceniam. Jeśli potrzebujesz dodatkowych informacji, poproś mnie o zaktualizowanie pytania. **Aktualizacja:** Zgodnie z sugestią `Vicky Chijwani` **Mapstraction** , teraz zastanawiam się również, który z nich jest lepszy (za i przeciw), mając adapter zaimplementowany w JavaScript czy PHP?


title: Czy istnieje symbol lub skrót dla „i rośnie/maleje”?

text: Zwykle dzieje się tak, gdy piszę do programistów lub innych specjalistów IT. Kontekst byłby czymś w rodzaju „… mierzonego przy 100 MB/s (i wzrasta)”. Na papierze lub tablicy zawsze rysowałem pogrubioną strzałkę w górę/w dół. Ta sytuacja pojawia się najczęściej, gdy wpisuję komentarze w e-mailu, kodzie lub poprawkach. Nie wiedziałem, czy w Unicode jest jakiś symbol lub skrót, który mógłby pomóc.


title: Najmniejsza i największa ciągła powtarzająca się podsekwencja w sekwencji

text: Próbuję rozwiązać przestarzały problem quizowy. Mam za zadanie znaleźć najmniejszy i największy ciągły ciąg powtarzających się liczb w większej sekwencji. np. {1,3,6,17,19,3,6,5,4,2,5,6,17,19,3,6,7,5,78,100,101} Dla powyższej sekwencji najmniejsza (niezerowa sekwencja elementów), a największa nierozszerzalna podsekwencja to „najmniejsza – 3,6” i „największa – 6,17,19,3,6” Nie można rozpocząć z algorytmem. Jakakolwiek pomoc w rozpoczęciu pracy byłaby bardzo mile widziana.


title: Projekt do uruchamiania aktywnych komponentów x z lokalnego serwera

text: Mam wymóg, w którym niektóre skrypty szkoleniowe (aktywne składniki x) muszą być renderowane w aplikacji klienckiej (IE 8). Do tej pory serwer hostował te skrypty za pomocą IIS, a IE renderował je za pomocą protokołu HTTP. Jednak w niektórych nowych scenariuszach klientów muszę przyjrzeć się możliwości braku serwera obsługującego te treści z powodu złej łączności sieciowej. Różne opcje, na które patrzę, to 1. Wewnątrz sieci LAN masz lokalny serwer i używaj w nim IIS do hostowania tych skryptów szkoleniowych 2. Hostuj skrypty szkoleniowe na dysku lokalnym każdego użytkownika Opcja (1) może nie być odpowiednia dla wszystkich klientów, ponieważ wymaga dodatkowego serwera, a ponieważ moimi klientami są banki, mogą nie być z tym w porządku. Opcja (2), odtwarzanie zawartości z lokalnego systemu plików będzie uważane za zagrożenie bezpieczeństwa, a podniesienie uprawnień bezpieczeństwa w przeglądarce w środowisku bankowym jest całkowitym zakazem. Również wysyłanie aktualizacji w materiałach szkoleniowych jest kłopotliwe, ponieważ może być konieczne wysyłanie aktualizacji, powiedzmy, do 30000 bankomatów zamiast 1 maszyny serwerowej. Jeśli zdecyduję się na opcję (2), czy istnieje możliwość korzystania z tymczasowego lokalnego serwera WWW? Czy istnieją inne alternatywy, aby to osiągnąć?


title: Używać lub nie używać aplikacji wspierającej witrynę?

text: Sugerując się w komentarzach, postaram się przeformułować pytanie, aby lepiej odzwierciedlić mój problem: muszę zaprezentować użytkownikom (niewielu na początku, jak najwięcej później) stronę internetową. Tam będą mogli przeglądać różne dane. Dane będą podawane z lokalnej bazy danych „cache”. Użytkownikom należy zawsze przedstawiać jak najświeższe dane. Źródłem większości danych będą usługi zewnętrzne z możliwymi limitami, długimi czasami odpowiedzi itp. Proces przetwarzania danych z tych źródeł do schematu bazy lokalnej również nie jest prosty (konwersja, obliczenia, rozprzęganie, odtwarzanie relacji itp.) Czy umieszczanie całego tego eksploracji danych i przetwarzania kodu jest w porządku (i robienie tego wszystkiego w czasie pomiędzy kliknięciem w link i otrzymaniem danych), czy też mój drugi pomysł - kolejna, stale działająca aplikacja do eksploracji danych - jest lepszy? A może jest inna opcja? Stary tekst: Obecnie pracuję nad serwisem, który będzie prezentował zarówno własne dane (profile użytkowników, przesłane przez nich treści), jak i dane pozyskane z różnych źródeł zewnętrznych (np. poprzez wywołania serwisów internetowych). Zróżnicowane źródła będą miały różne limity dozwolonych wywołań, będą odpowiadać z różną szybkością itp. Nie, dane, które są prezentowane użytkownikowi powinny być domyślnie jak najświeższe z opcją żądania odświeżenia (chyba że zostały odświeżone bardzo niedawno). Rozpocząłem programowanie w ASP.NET (na dobre lub na złe), z kilkoma szablonami i pewnymi dostosowaniami, a także sporą ilością kodowania, uzyskując działający dowód koncepcji. Ale potem zacząłem myśleć o operacjach na dużą skalę. Wyświetlanie danych z pamięci podręcznej jest szybkie i łatwe, nie zepsułem tego. Problemem jest jednak odświeżenie. a) Żądanie danych dla jednego użytkownika jest szybkie, ale szybko zjedzą dozwolone wywołania interfejsu API. b) Żądanie danych dla wielu użytkowników (dla API, które na to pozwala) oszczędza potencjalnie dużą liczbę wywołań API, ale trwa liniowo dłużej (nie 1:1, ale wciąż wymaga czasu, aby zażądać, odebrać i przeanalizować dziesiątki razy więcej danych niż pojedyncze żądanie). Pojawia się też problem przekraczania limitów. Zwykle zmusiłoby to aplikację do anulowania odświeżania lub odczekania kilku sekund na nowy przydział. Ale tak naprawdę nie widzę, żeby użytkownik z radością czekał kilka sekund na załadowanie strony. Obecnie rozważam wypatroszenie części witryny gromadzącej dane i przeniesienie jej do jednej aplikacji zarządzającej, współdzielącej bazę danych ze stroną. Witryna podałaby informacje, którzy użytkownicy potrzebują odświeżenia swoich danych, aplikacja równoważyłaby obciążenie usług zewnętrznych, aby efektywnie z nich korzystać (nie tylko „kiedy użytkownik otworzy stronę internetową”) i zachowałaby jak najświeższe dane - ewentualnie zachowanie części dodatku na przymusowe odświeżenie. Teraz głównym problemem, który widzę, jest koszt hostingu nie tylko strony internetowej, ale także działającej w tle aplikacji .NET. Załóżmy jednak, że koszt nie jest aż tak istotny. Właściwie obawiam się, że nadmiernie komplikuję rozwiązanie. Mógłbym po prostu umieścić więcej strony internetowej w Ajax i po prostu poczekać na zakończenie żądania w tle (gdy połączenia będą dostępne). Czy ktoś ma podobne doświadczenia? Szczególnie interesuje mnie scenariusz, w którym wszystko jest przeskalowane, czyli możemy założyć, że zawsze będzie deficyt dostępnych połączeń. PS Martwię się też o to, aby strona (która może być uruchamiana niezależnie przez wielu użytkowników) przed próbą dwukrotnego odświeżenia tych samych rekordów itp. - Myślę, że powinienem umieścić jakieś dodatkowe zabezpieczenia, zablokować lub przynajmniej zaznaczyć rekordy podlegające odświeżaniu itp. - a dużo kodu tylko po to, aby rozwiązać problem, który nie istniałby z jednym backendem....


title: myeclipse: czy mogę dostosować szablony, takie jak sysout w jsp?

text: Szablony kodu Java Myeclipse, takie jak _sysout_, ułatwiają kodowanie, a także można je dostosować. Ale wygląda na to, że edytor jsp nie ma takiej możliwości. Czy można tworzyć i dostosowywać niektóre szablony, takie jak _sysout_ w edytorze jsp myeclipse, a jeśli tak, to w jaki sposób?


title: Jak zaplanować dużą liczbę zadań zdefiniowanych przez użytkownika?

text: Załóżmy, że prowadzisz witrynę internetową, która generuje dużą liczbę zadań, które powinny być uruchamiane w określonych godzinach (np. e-maile z przypomnieniami). Możesz uruchomić cron, który wybiera tabelę bazy danych dla nieprzetworzonych zdarzeń przed bieżącym czasem (lub nawet długo działający proces, który odpytuje tabelę), ale wydaje się to nieuporządkowane. Z drugiej strony, o ile wiem, większość systemów przesyłania wiadomości dla producentów/konsumentów nie obsługuje arbitralnych priorytetów. Jak do tego podejść?


title: Czy używanie klas częściowych do obsługi wielu wersji jednostek danych dla scenariuszy ciągłego dostarczania to zły pomysł?

text: Jeśli chcesz mieć ciągłe dostarczanie, dowolne schematy danych, które posiadasz, muszą obsługiwać wiele wersji Twojej aplikacji w tym samym czasie (ponieważ możesz mieć wiele wersji wdrożonych, gdy nowe wersje są wprowadzane) W moim konkretnym przypadku mam encje przechowywane w tabeli Azure magazynowanie. Kiedy wprowadzam zmiany w moich encjach, zwykle muszę dodać właściwości (ponieważ usuwanie lub zmiana nazwy jest złym pomysłem, ponieważ stare wersje aplikacji mogą się zepsuć), ale po całkowitym wdrożeniu nowej wersji nie potrzebuję właściwości starych wersji już teraz, ponieważ wszystkie serwery korzystają z nowej wersji, co oznacza, że w następnym wdrożeniu mogę usunąć niektóre stare właściwości. Zastanawiam się, czy ten problem można łatwiej rozwiązać, mając klasy częściowe dla każdej wersji jednostki. Gwarantuje to, że jedna wersja zawsze będzie akumulowana z poprzednią wersją (tj. nigdy niczego nie zabierze ani niczego nie zmieni), ale pozwoli na delegację do istniejącej właściwości, jeśli coś wymaga tylko zmiany nazwy. Gdy wersja zostanie całkowicie wdrożona i stara wersja nigdy nie będzie potrzebna, klasy częściowe mogą zostać ponownie skonsolidowane w jedną klasę (i wszelkie niepotrzebne właściwości usunięte). Jeśli wiesz, że będziesz mieć tylko kilka wersji „na żywo” w dowolnym momencie, możesz być może wyraźnie użyć wersji „bieżącej” i wersji „vNext”. Nie próbowałem tego jeszcze jako rozwiązania, ale zastanawiałem się, czy ktoś inny próbował takiego podejścia i ma jakieś uwagi, lub czy ktoś ma przemyślenia na temat tego, czy jest to dobry czy zły pomysł?


title: Czy Debug.Assert jest przestarzały, jeśli piszesz testy jednostkowe?

text: Tak jak pytanie, czy istnieje potrzeba dodania Debug.Assert do kodu, jeśli piszesz testy jednostkowe (które mają własne asercje)? Widziałem, że może to uczynić kod bardziej oczywistym bez konieczności wchodzenia w testy, jednak wydaje się, że możesz skończyć ze zduplikowanymi potwierdzeniami. Wydaje mi się, że `Debug.Assert` był pomocny zanim testy jednostkowe stały się bardziej rozpowszechnione, ale teraz jest niepotrzebne. A może nie myślę o jakimś przypadku użycia?


title: IntelliJ z kompilacją Maven

text: Mam projekt, który potrzebuje słoików Hibernate. Dodałem je jako zależności w pom.xml i Maven dobrze kompiluje mój projekt. Jednak w środowisku IDE wszystkie adnotacje i wywołania interfejsu API Hibernate są oznaczone jako nierozwiązane (na czerwono). Jak mogę sprawić, by IntelliJ był w stanie je rozwiązać? Czy istnieje sposób na użycie Mavena po kliknięciu opcji Zbuduj projekt? (ctrl+F9) Również myliłem się z koncepcją aspektów w IntelliJ. Czy potrzebuję ich, powiedzmy aspektów JPA, aby włączyć Asystenta Persistence itp. Czy jest opcja, aby pozwolić Mavenowi się tym zająć?


title: Dlaczego magazyn zapasowy tablicy wiąże się z najmniejszym typem?

text: W C# dozwolone jest pisanie Animal[] a = new Giraffe[4]; //z oczywistymi relacjami Ponieważ tablice są kowariantne. Jest to jednak związek zrywający. Jest to wyjątek środowiska uruchomieniowego, aby zastosować inny typ Animal do tej tablicy, ponieważ magazyn zapasowy to `Żyrafa`. a[0] = nowy Kot(); //KABOOM Dlaczego język nie tworzy kowariantnego magazynu zapasowego? Nie wydaje się to być ograniczeniem języka, ponieważ sam mogę stworzyć tego typu strukturę danych: class Program { static void Main(string[] args) { A[] a = new B[2]; a[0] = nowy B(); a[1] = new C();//wyjątek środowiska uruchomieniowego var containerLegal = new Container<B, A>(); containerLegal.Add(nowy B()); containerLegal.Add(new C());//działa dobrze } } class A { } class B : A { } class C : A { } class Container<T,S> gdzie T: class, S { S[] s = nowy S[4]; int currentIndex = 0; public void Dodaj(S t) { s[currentIndex] = t; aktualnyIndeks++; } } Trochę oszukuję, bo nie używam `T` w `Container<>`...ale myślę, że to i tak uczciwa relacja.


title: Zmienne tymczasowe a wymagania dotyczące długości linii

text: Czytałem _Refaktoring_ Martina Fowlera. Ogólnie jest doskonały, ale jedna z rekomendacji Fowlera wydaje się sprawiać trochę kłopotów. Fowler zaleca zastąpienie zmiennych tymczasowych zapytaniem, więc zamiast tego: double getPrice() { final int basePrice = _quantity * _itemPrice; ostateczna podwójna zniżka Współczynnik; if (cena podstawowa > 1000) współczynnik dyskonta = 0,95; w przeciwnym razie współczynnik rabatu = 0,98; podstawa zwrotuCena * rabatFactor; } wyciągasz do metody pomocniczej: double basePrice() { return _quantity * _itemPrice; } double getPrice() { final double rabatFactor; if (basePrice() > 1000) DiscountFactor = 0,95; w przeciwnym razie współczynnik rabatu = 0,98; return cena podstawowa() * współczynnik rabatu; } Generalnie się zgadzam, ale jednym z powodów, dla których używam zmiennych tymczasowych, jest zbyt długa linia. Na przykład: $host = 'https://api.twilio.com'; $uri = "$host/2010-04-01/Konta/$identyfikator konta/Użycie/Rekordy/Cały czas"; $odpowiedź = Api::makeRequest($uri); Gdybym spróbował tego dodać, linia byłaby dłuższa niż 80 znaków. Alternatywnie kończę z łańcuchami kodu, które same w sobie nie są tak łatwe do odczytania: $params = MustacheOptions::build(self::flattenParams($bagcheck->getParams())); Jakie są strategie pogodzenia tych dwóch?


title: Czy w tym diagramie przypadków użycia używane są relacje <<include>> i <<extend>>?

text: Próbuję narysować diagram przypadków użycia UML do wymagań modelu dla projektu oprogramowania. Dwa wymagania, które mam do modelowania to: 1. `TravelAgent` tworzy rezerwację dla [starego] klienta, który prosi o mieszkanie. 2. Gdy nowy klient chce dokonać rezerwacji, „TravelAgent” rejestruje go w systemie przed dokonaniem rezerwacji. Mam dwa podejścia do modelowania tych wymagań: 1. Modelowanie pierwszego przypadku użycia jako podprocedury drugiego przypadku użycia (rysunek 1). 2. Rozszerzenie pierwszego przypadku użycia (rysunek 2). Oba podejścia oznaczają, że pierwszy przypadek użycia może zostać wykonany niezależnie, ale kiedy drugi przypadek użycia jest wykonywany, pierwszy MUSI zostać wykonany. Czy rzeczywiście są takie same i oba są poprawne? PS Jako kolejne pytanie, skoro `NewClient` konwertuje się do `Client` po rejestracji, czy powinienem pokazać `NewClient` jako podklasę `Client` czy coś takiego? Rysunek 1 ![Rysunek 1](http://i.stack.imgur.com/hGSC4.png) Rysunek 2 ![Rysunek 2](http://i.stack.imgur.com/Lg39Q.png)


title: konwencja nazewnictwa dla różnych typów funkcji (użyj przedrostków lub przyrostków?)

text: Czy ktoś ma sugestie dotyczące konwencji nazewnictwa dla różnych typów funkcji, w szczególności funkcji opakowujących, które muszą łączyć się i rozłączać z bazą danych, w porównaniu do funkcji opakowujących, które są przekazywane przez łącze bazy danych i nie muszą się łączyć i rozłączać? Projekt nad którym pracuję posiada następujące typy funkcji (między innymi): * funkcje opakowujące, które muszą połączyć się z bazą danych, a następnie wywołać inne funkcje, a następnie rozłączyć * funkcje opakowujące, które są przekazywane do łącza db i wywoływać inne funkcje ( te funkcje nie muszą łączyć się z db, co już zostało zrobione) Czy ktoś pracował w podobnym środowisku? Czy stosowałeś się do jakichkolwiek konwencji nazewnictwa, aby odróżnić te funkcje opakowujące, które muszą się połączyć, od przekazywania łącza bazy danych, na przykład używając określonego prefiksu lub sufiksu?


title: Wzorzec dla wybierz przypadek na typ obiektu (interfejsu)

text: Czytałem, że robienie wybranych przypadków jest często zapachem kodu. Są jednak przypadki, w których interfejs nie może rozwiązać mojego problemu. Na przykład mam zestaw obiektów filtru daty (ostatnie 7 dni, zeszłego roku itp.), które implementują interfejs IDateFilter. W innej części kodu muszę określić typ filtra daty, aby można było ustawić właściwości wykresu. Mogę na przykład użyć innego interwału taktu wykresu w zależności od filtra daty. Problem polega na tym, że nie chcę przechowywać tych informacji w obiekcie filtru daty, ponieważ jest to związane z interfejsem i nie chcę łączyć tych dwóch. Jak w tym przypadku można uniknąć wybranego przypadku? Poza używaniem select case w gettype lub tworzeniem wyliczenia dla wszystkich typów, a następnie wystawianiem typu i robieniem w tym przypadku wyboru, nie widzę czystego sposobu na zrobienie tego? Przychodzi mi do głowy wzór dekoratora, ale nawet wtedy nadal potrzebowałbym wybranej obudowy. Jakieś pomysły? if (typ = ostatnie 7 dni) ustaw tę właściwość inaczej if (typ = ostatni rok) ustaw tę właściwość na coś innego Używam asp net c# na wypadek, gdyby miało to znaczenie.


title: W programach do rozpoznawania głosu, jakie metody są zwykle używane do oddzielania głosu od hałasu?

text: Myślę, że rozpoznawanie głosu jest fajne i być może wkrótce zacznę się nim uczyć, ale jedno wielkie pytanie, nad którym zawsze się zastanawiałem, brzmi: „Jak programiści oddzielają hałas od głosu?” To znaczy, jeśli oglądałeś „Ją”, zauważysz, że główna bohaterka często używa poleceń głosowych w cichych miejscach, ale dzisiaj rozpoznawanie głosu jest używane głównie w samochodzie, pośród DUŻO hałasu w tle, a nawet prawdopodobnie w tle głosy. Używałem Siri w tych głośnych sytuacjach i zawsze jestem pod wrażeniem, że program nadal rozumie mnie przez hałas. Tak więc, nie wchodząc w szczegóły, **Chciałbym wiedzieć, jakie metody lub koncepcje są zazwyczaj używane przez programistów do tego celu.**


title: Jak używać Dependency Injection w połączeniu z wzorcem Factory

text: Rozważmy moduł odpowiedzialny za parsowanie plików dowolnego typu. Zastanawiam się nad wykorzystaniem wzorca strategii do rozwiązania tego problemu, jak już wyjaśniłem tutaj. Zanim przejdziesz do odpowiedzi na to pytanie, zapoznaj się z postem, do którego prowadzi link. Rozważmy klasę B, która wymaga zawartości pliku product.xml. Ta klasa będzie musiała utworzyć odpowiedni konkretny realizator interfejsu Parser, aby przeanalizować plik XML. Mogę delegować instancję odpowiedniego realizatora konkretnego do fabryki tak, że klasa B „ma” Factory. Jednak klasa B będzie wtedy „zależeć” od fabryki w celu utworzenia wystąpienia konkretnego realizatora. Oznacza to, że konstruktor lub metoda ustawiająca w klasie B będzie musiała przekazywać Factory. Dlatego Factory i klasa B, które muszą przeanalizować plik, będą ze sobą ściśle powiązane. Rozumiem, że mogę się całkowicie mylić co do tego, co do tej pory wyjaśniłem. Chciałbym wiedzieć, czy mogę użyć wstrzykiwania zależności w scenariuszu, w którym wstrzykiwana zależność to Factory i jaki byłby właściwy sposób na zaimplementowanie tego, aby móc skorzystać z takich obszarów, jak mockowanie Factory w moich testach jednostkowych.


title: Używanie gałęzi testowych w Git

text: Mamy kogoś (nazwijmy go Ted), który jest odpowiedzialny za testowanie nowych funkcji i poprawki błędów. Używamy Git i GitHub. `master` powinien być/jest zawsze możliwy do wdrożenia, a `development` to miejsce, w którym zatwierdzamy/łączymy nowe funkcje lub poprawki błędów, ale dopiero po ich przetestowaniu przez Teda. Projekt jest w PHP. Chciałbym, aby proces testowania przebiegał tak: 1. Deweloper chce pracować nad nową funkcją (powiedzmy, że funkcja/błąd #123, jak udokumentował Ted w trackerze problemów), więc ciągnie `początek/rozwój` do `development` na swoim lokalnym repozytorium i tworzy tam nową gałąź (powiedzmy `issue-123`). 2. Gdy jest zadowolony ze swojej pracy, zobowiązuje się i pcha swój nowy oddział do `początku`. 3. Ted łączy się z `test.ourproject.com/choose-branch` i widzi listę gałęzi na `origin` i wybiera opcję `issue-123` (powinno być to możliwe przez stronę internetową). Następnie przechodzi na `test.ourproject.com`, testuje do diabła aplikację internetową (jest naprawdę bezlitosny) i po kilku rozmowach z deweloperem jest zadowolony z tej funkcji. 4. Ted mówi deweloperowi, że może połączyć `issue-123` z `development` na `origin`. 5. Opłucz i powtórz. W trzecim kroku mógłbym zhakować coś, co robi robotę (pokazywanie i przełączanie gałęzi z określonej strony), ale czuję, że to, co opisałem, jest bardzo powszechnym wzorcem. Więc moje pytanie brzmi: **Czy jest to dobry / zrównoważony / możliwy do utrzymania przepływ pracy dla gałęzi?** Czy możesz poprzeć swoją odpowiedź, przytaczając kilka przykładów innych projektów po tym przepływie pracy?


title: Jak powinien być zbudowany mój "kreator" AngularJS?

text: Dla zwięzłości rozważmy następujący scenariusz: Część mojej aplikacji to kreator do pozyskiwania nowych klientów i jest to strona dynamiczna. Jeden krok zawiera informacje rozliczeniowe, drugi krok to informacje konfiguracyjne itp. Ponieważ jest to jedna strona, w mojej głowie mam jeden kontroler dla całego kreatora, ale oznacza to również, że mam modele i funkcje dla każdego kroku w jednym **controllername.js ** plik oprócz używania kilku dyrektyw ng-show do "pokazywania" kroków. To nie wydaje się całkiem słuszne..przeoczyłem coś w dokumentach? Edycja: Aby nieco rozwinąć, czuję się, jakbym naruszał SRP i czuję się brudny.


title: Railsy - używać STI czy nie... oto jest pytanie

text: Sześć miesięcy temu zadałem pytanie dotyczące modelowania danych dla mojej aplikacji i otrzymałem kilka porad, które skierowały mnie do STI (szczegóły w artykule Model danych Railsów - pytanie o najlepsze praktyki). Pobawiłem się tym, trochę go uruchomiłem, a potem rozproszyłem się i zawiesiłem projekt. Właśnie zacząłem go ponownie rozwijać od zera, korzystając z dodatkowych 6 miesięcy doświadczenia w programowaniu / ROR i po raz kolejny uderzyłem w tę ścianę, jeśli chodzi o modelowanie składników do moich przepisów na piwo. Aby dać krótkie podsumowanie, załóżmy, że mam trzy rodzaje składników (słód, chmiel i drożdże) – każdy z nich ma kilka atrybutów (nazwa, cena, sprzedawca), ale każdy ma również atrybuty specyficzne dla tego typu składnika. Wszystkie są ze sobą powiązane (wszystkie są składnikami), ale mają inne „zachowanie” (na przykład ziarno jest tłuczone i istniałaby logika, aby poradzić sobie z tym, co nie miałoby zastosowania do chmielu/drożdża itp.). składniki są na tyle różne, że rozważam posiadanie tylko trzech oddzielnych tabel w db ... ale co z kontrolerami? Czy mogę używać jednego kontrolera Ingredients do zarządzania oddzielnymi modelami? Czytałem o alternatywach dla STI (dziedziczenie tabel klas i dziedziczenie wielu tabel), ale wszystkie rozwiązania wydają się niezgrabne. Czy są jakieś alternatywy, które dają mi wygodę STI (takie jak pobieranie wszystkich składników, niezależnie od ich typu, za pomocą pojedynczego zapytania tabeli) bez wad (pola puste, nieporęczne tabele przy ciągłym dodawaniu podklas i pól itp.) Przepraszam, ja wiem, że to pytanie jest nieco niejasne, ale czuję, że nie mogę znaleźć czystego rozwiązania, a teraz próbuję dowiedzieć się, która metoda jest mniejszym złem. Jestem pewien, że inni sobie z tym poradzili i chciałbym usłyszeć plusy i minusy różnych rozwiązań. Dziękuję!


title: Czy pisanie martwego kodu jest przydatne?

text: Czy uważasz, że pisanie martwego kodu jest przydatne? Niektórzy mówią: „Jeśli masz 2 logikę do wykonania jakiejś operacji, zamiast komentować inny kod logiczny lub usuwać kod, spraw, aby był to martwy kod, ponieważ nie wpłynie to na operację”. Przykład:- if(true){ // logika - 1 } else { // logika - 2 // martwy kod } Czy to prawda? * * * Zwykle nie piszę martwych kodów zamiast tego po prostu usuwam drugą logikę.


title: Potrzebuję usługi sieciowej generatora liczb losowych

text: Potrzebuję sposobu na uzyskanie niedeterministycznych liczb losowych na żądanie dla mojej aplikacji. Jednak nie chcę/mam możliwości samodzielnego budowania sprzętu, dlatego szukam usługi sieciowej, która właśnie to robi. Zasadniczo szukam niedeterministycznego generatora liczb losowych dla mojej aplikacji. Najwyraźniej moje wymagania są takie, że zdecydowanie musi brać świat analogowy jako wejście. Znalazłem jeden na http://random.org. Jest dla mnie wystarczająco dobry, jednak ma limit 200k bitów (tylko 6250 32-bitowych liczb całkowitych!) na każdy adres IP dziennie. 6250 liczb całkowitych dziennie to zdecydowanie za mało dla mojej aplikacji. Więc szukam takiego, który daje lepszy limit. Nie mam nic przeciwko płaceniu za korzystanie z usługi (ale oczywiście bezpłatna byłaby lepsza). Nie zadaję bezużytecznego pytania. W rzeczywistości aplikacje takie jak kasyna online będą wymagały wielu niedeterministycznych liczb losowych na żądanie. W mojej sytuacji moja gra ekonomiczna/inwestycyjna wymaga prawdziwej liczby losowej dla dobrej symulacji. Pseudolosowa liczba jest po prostu „niewystarczająca” dla „dobrej” symulacji, którą widzisz. Btw proszę nie mów mi, że generator liczb pseudolosowych byłby "wystarczająco dobry" dla mojej aplikacji. Najwyraźniej nie jest to wystarczająco dobre w mojej sytuacji, która jest pierwszym, ostatnim i jedynym powodem, dla którego potrzebuję niedeterministycznego generatora liczb losowych. W każdym razie zdaję sobie sprawę, że wszelkie dane przesyłane przez HTTP/HTTPS mogą być podsłuchiwane. Nie przeszkadza mi to. Potrzebuję prawdziwej liczby losowej. Po otrzymaniu numeru jestem szczęśliwy. Szpieg może podsłuchiwać wszystko, czego chce, i nie będzie mi to przeszkadzać.


title: Prawa autorskie i przenoszenie aplikacji

text: Zastanawiałem się, kto jest właścicielem praw autorskich do kodu źródłowego, jeśli przenosisz projekt opensource z jednego języka na inny. Czy jest jasna odpowiedź, czy „zależy”? edytuj: Zdaję sobie sprawę, że wybór licencji jest powiązany z licencją, na której wydany jest oryginalny kod źródłowy, ale dokładnie zastanawiam się nad IP/prawami autorskimi. Jak w, czy mogę zmienić copyright (c) 2011 oryginalnego autora na copyright (c) 2011 moje nazwisko we wszystkich plikach źródłowych.


title: Trudność w implementacji algorytmów z abstrakcyjnego zrozumienia

text: Mam przyzwoite doświadczenie w programowaniu jak na studia licencjackie. Właśnie zacząłem studiować algorytmy. Przeczytałem opis i zobaczyłem wizualne przykłady, które mają w mojej głowie doskonały sens. Ale kiedy przychodzi czas na zapisanie ich w kodzie, nie jestem w stanie ich zaimplementować. Mówię o podstawowych algorytmach, takich jak sortowanie przez wstawianie. Zaczynam czuć, że jestem po prostu głupia. Uwielbiam programować, a badanie algorytmów naprawdę mnie fascynuje, mimo że nie zagłębiałem się zbytnio. Ale niemożność zaimplementowania prostych algorytmów naprawdę powstrzymała mnie przed przejściem do etapu początkującego. Zaczynam od książek/poradników Intro to Algorithm, więc nie widzę, jak zejdę na niższy poziom. Czy jest coś jeszcze, co można zrobić w tej sytuacji?


title: Alternatywne podejścia do tworzenia niestandardowych formularzy w aplikacji internetowej

text: Tworzymy oprogramowanie do dystrybucji, sprzedając około 150 000 jednostek SKU. Niektóre z naszych produktów mają dodatkowe wymagania dotyczące sprzedaży, które są dyktowane przez naszych dostawców. Na przykład jeden rodzaj produktu, który sprzedajemy, to stopy protetyczne. Niektórzy dostawcy wymagają, abyśmy przechwycili wagę użytkowników, poziom aktywności i inne informacje. To tylko jeden przykład, że istnieje wiele różnych rodzajów produktów, które mogą mieć tego rodzaju wymagania (niestandardowy zestaw informacji zebranych od klienta w celu sfinalizowania sprzedaży). Bezpośrednim podejściem jest po prostu tworzenie niestandardowych formularzy dla każdego wymagania i tworzenie nowych formularzy, gdy potrzebne są nowe wymagania. To działa. To proste, ale to także PIA. Chciałbym móc przekazać to naszemu zespołowi ds. produktów, który zajmuje się wprowadzaniem nowych przedmiotów, zamiast konieczności, aby zawsze do nas wracały. Projekt jest aplikacją webową opartą na Pythonie (Turbogears). Nie jestem pewien, czy było to istotne, ponieważ pytanie jest bardziej ogólne niż to, ale umieść je tutaj na wszelki wypadek. Jak podszedłbyś do tej sytuacji, aby zminimalizować lub usunąć swoje zaangażowanie w tworzenie/dodawanie tych formularzy po przeniesieniu witryny do produkcji?


title: Czy stosowanie oceny zwarcia zamiast klauzuli if jest złą praktyką?

text: Pracuję nad skryptem instalacyjnym, a zwłaszcza mam tam wiele rzeczy do sprawdzenia i czynności, które należy wykonać tylko w przypadku wystąpienia powiązanych wyników. Na przykład folder należy utworzyć tylko wtedy, gdy nie istnieje: MyDesktopFolderPath := AddBackslash(ExpandConstant('{commondesktop}')) + 'Mój folder'; jeśli nie DirExists(MyDesktopFolderPath), to rozpocznij ForceDirectories(MyDesktopFolderPath); //Utwórz koniec pełnej ścieżki; if DirExists(MyDesktopFolderPath) then begin //Wykonaj inne akcje Zamiast tego mógłbym użyć (exploit?) oceny zwarcia, aby uczynić ją bardziej zwartą: MyDesktopFolderPath := AddBackslash(ExpandConstant('{commondesktop}')) + 'Mój Teczka'; IsMyDesktopFolderExisting := DirExists(MyDesktopFolderPath) lub ForceDirectories(MyDesktopFolderPath); if IsMyDesktopFolderExisting then rozpocząć //Wykonaj inne akcje To też by zadziałało, ale zastanawiam się, czy to zła praktyka, głównie dlatego, że mniej oczywiste jest, że akcje mogą zostać wykonane. Jakieś opinie na ten temat? **Edycja:** Jak zauważył Secure, kod nie jest w pełni równoważny, ale temat dyskusji nadal dotyczy innych przypadków.


title: Ile umiejętności powinienem wymienić w swoim CV, CV?

text: Jestem programistą utrzymania ruchu i co miesiąc, jeśli nie codziennie, pracuję z dość dużą listą technologii. Na przykład jestem kompetentny (oczywiście nie ekspert) w następujących językach: * Java (w tym J2EE) * C# * VB6 * ASP Classic Kiedy idę do pracy nad moim CV, ile technologii powinienem wymienić? Wymienienie ich wszystkich wydaje się bezcelowe, a nawet problematyczne. Nie lubię czytać długich list technologii, kiedy czytam CV. Ile mam wymienić i jak wybrać?


title: Jaka jest korzyść z używania współczynnika 1024 zamiast 1000 dla jednostek rozmiaru dysku?

text: Rozważając miejsce na dysku nośnika pamięci masowej, zwykle komputer lub system operacyjny przedstawia ją w kategoriach mocy 1024 - kilobajt to 1024 bajty, megabajt to 1 048 576 bajtów, gigabajt to 1 073 741 824 bajtów i tak dalej. Ale nie widzę żadnego praktycznego powodu przyjęcia tej konwencji. Zwykle, gdy rozmiar dysku jest reprezentowany w kilo-, mega- lub gigabajtach, należy go najpierw przekonwertować na dziesiętny. W miejscach, w których liczy się potęga dwóch bajtów (np. rozmiar bloku w systemie plików), rozmiar i tak jest podawany w bajtach (np. 4096 bajtów). Czy była to tylko niewielka estetyczna nowość, którą producenci komputerów postanowili przyjąć, ale dostawcy nośników pamięci postanowili zignorować? Za każdym razem, gdy kupujesz dysk twardy, zawsze pojawia się zastrzeżenie, które mówi „Jeden gigabajt oznacza miliard bajtów”. Wydawałoby się, że użycie binarnej definicji „gigabajta” sztucznie zawyża liczbę bajtów urządzenia, sprawiając, że producenci dysków muszą spakować 1,1 terabajta do dysku, aby wyświetlał się jako „1 TB”, lub po prostu spakuj 1 terabajt i pokaż go jako „931 GB” (a większość z nich robi to drugie). Niektórzy ludzie zdecydowali się na użycie jednostek takich jak „KiB” lub „MiB” na rzecz „KB” i „MB”, aby je rozróżnić. Ale czy jest jakaś zaleta przedrostków binarnych? Prawdopodobnie jest trochę zamierzchłej historii na ten temat, o której nie wiem, a jeśli tak, to szukam kogoś, kto by to wyjaśnił. (Przepraszam, jeśli to jest w niewłaściwym miejscu. Czułem, że pytanie o najlepsze praktyki może tu pasować, ale wierzę, że zostanie przeniesione we właściwe miejsce, jeśli jest niepoprawne.)


title: Jaką strategię należy zastosować podczas dopasowywania typów danych serwera sql w podejściu C# Code First podczas korzystania z Entity Framework

text: Podczas dopasowywania typów danych SQL Server z C# Code First Approach w Entity Framework, o jakich konkretnych punktach powinniśmy pamiętać, aby nasz typ danych C# był dokładnie zgodny z naszym typem danych SQL Server? W szczególności, chociaż musimy dopasować typ danych SQL Server do typu danych C#, powiedzmy dla konkretnego typu hierarchyid, który istnieje w SQL Server, ale nie w C#, jak możemy to umożliwić?


title: Przyrost/grudzień vs +=/-=

text: Patrzę na decyzję dotyczącą projektowania języka programowania, która jest trudna do podjęcia właśnie dlatego, że wydaje się, że nie ma obiektywnych podstaw do wyboru jednej opcji nad drugą. Pytanie brzmi, biorąc pod uwagę, że język nie ma operatora `++`, czy lepszym wyborem dla operatora inkrementacji byłoby jak w C: a += 1 a += b lub jak w niektórych wersjach Pascala: inc a inc a b (I podobnie z `-=` vs `dec` oczywiście.) Rozważania, które widzę dla `inc`: * Nieco krótsze dla typowego przypadku, w którym delta wynosi 1. * Mniej znane większości programistów. * Eliminuje odpowiednie operatory `*=` etc, które są znacznie rzadziej używane. Czy jest coś, czego mi brakuje?


title: Dlaczego Ubuntu ma 6-miesięczny cykl wydawniczy?

text: Dlaczego Ubuntu zobowiązał się do 6-miesięcznego cyklu wydawniczego? Dlaczego w ogóle miałby mieć stały cykl? Czy nie jest to sprzeczne z powiedzeniem „jeśli nie jest zepsute, nie naprawiaj tego”?


title: Jaki zapach kodu najlepiej opisuje ten kod?

text: Załóżmy, że masz ten kod w klasie: private DataContext _context; public Klient[] GetCustomers() { GetContext(); return _context.Customers.ToArray(); } porządek publiczny[] GetOrders() { GetContext(); return _context.Customers.ToArray(); } // Na potrzeby tego przykładu nowy DataContext jest *wymagany* // dla każdego wywołania metody publicznej private void GetContext() { if (_context != null) { _context.Dispose(); } _context = nowy DataContext(); } Ten kod nie jest bezpieczny dla wątków — jeśli dwa wywołania `GetOrders`/`GetCustomers` są wykonywane w tym samym czasie z różnych wątków, mogą one skończyć przy użyciu tego samego kontekstu lub kontekst może zostać usunięty podczas używania. Nawet jeśli ten błąd nie istniał, nadal "śmierdzi" jak zły kod. Znacznie lepszym rozwiązaniem byłoby, gdyby `GetContext` zawsze zwracał nową instancję `DataContext` i pozbywał się pola prywatnego oraz usuwał instancję po zakończeniu. Lepszym rozwiązaniem wydaje się zmiana z niewłaściwego pola prywatnego na zmienną lokalną. Przejrzałem listy zapachów kodu i nie mogę znaleźć takiej, która to opisuje. W przeszłości myślałem o tym jako o sprzężeniu czasowym, ale opis Wikipedii sugeruje, że nie jest to termin: > _Sprzęganie czasowe_ > Gdy dwie akcje są połączone w jeden moduł tylko dlatego, że > zdarzają się w tym samym czasie. Ta strona omawia sprzężenie czasowe, ale przykładem jest publiczne API klasy, podczas gdy moje pytanie dotyczy projektu wewnętrznego. Czy ten zapach ma nazwę? Czy jest to po prostu „błędny kod”?


title: Chroń pracę freelancera

text: Opracowałem trochę kodu PHP i HTML dla projektu freelancera, chcę, aby mój wykonawca mógł komercyjnie wykorzystywać mój kod, ponieważ sprzeda mój projekt własnemu klientowi (przedsiębiorstwo), ale chcę zabronić mu recyklingu mojego kodu dla dalszych projektów, czy można to osiągnąć za pomocą jakiejś licencji GNU? Chcę też móc używać mojego kodu dla innych klientów, których mógłbym mieć (ponieważ jestem freelancerem) i sprzedawać im projekty z fragmentami mojego dzisiejszego kodu, ponieważ mógłbym użyć niektórych z tych bibliotek.


title: Język zapytań dla JSON

text: Mam serwer, który zwraca bardzo dużą wiadomość JSON, a moja aplikacja kliencka jest zależna tylko od części tej odpowiedzi. Aplikacja kliencka musi sprawdzić, czy w komunikacie JSON istnieje właściwość „xyz” i w zależności od wyniku uruchomić konkretny przypadek użycia. Dla tego wymogu przekonwertowanie całej wiadomości JSON na obiekt brzmi dla mnie trochę drogo i stąd to pytanie. Czy istnieje standardowy język zapytań JSON, taki jak ten, który mamy dla XML? Jeśli tak, to najlepiej poznaj implementację tego języka zapytań w javie. FYI: Zmiana lub dodanie nowej usługi po stronie serwera nie jest opcją.


title: Jaka jest architektura integracji używana przez Github w interfejsie internetowym?

text: Jestem zdumiony sposobem, w jaki Github integruje się z różnymi systemami, takimi jak Travis. Są to oddzielne firmy, ale kompilacje Travisa płynnie łączą się w dowolnym miejscu w interfejsie Github. Tak, pytam _głównie_ o integrację na poziomie interfejsu użytkownika, jest wystarczająco dużo atramentu elektronicznego wokół integracji usług. Zazwyczaj interfejsy sieciowe są miksowane przez osadzania, jak w przypadku Disqus. Wydaje się jednak, że na Github części interfejsu związane z Travisem są renderowane po stronie serwera. Czy wymuszają strukturę znaczników lub określone arkusze stylów, czy też wymagają opisania interfejsów za pomocą języka specyficznego dla domeny?


title: Niestandardowy odtwarzacz wideo

text: Mam niestandardowy typ pliku **.mft**, który jest w zasadzie zipem zawierającym wideo (mpg, mp4, itp.), które jest zaszyfrowane/chronione. Mój pomysła ma na celu stworzenie niestandardowego odtwarzacza wideo, który odczyta te pliki **.mft** dla prywatnej grupy użytkowników (użytkownicy podają użytkownika i hasło), a niestandardowy odtwarzacz nie pozwoli na zapisanie wideo, aby żadne można go ponownie udostępnić i można go tylko oglądać. Widziałem, że VLC ma tę bibliotekę http://vlcdotnet.codeplex.com/releases/view/121099, więc mój odtwarzacz z niej skorzysta. Moje pytanie brzmi: czy naprawdę można zablokować użytkownikom możliwość niezapisywania filmu? Nie sądzę, ponieważ istnieje kilka programów do rejestrowania aktywności na pulpicie. Co myślisz?


title: Jaki jest skuteczny sposób na zapoznanie się z nową aplikacją w nowym języku (i nadal produktywne spojrzenie na nową pracę)?

text: Rozpocząłem nową pracę, pracując nad aplikacją, którą niejasno znam i jest ona w Perlu! Pochodzę ze środowiska PHP i Java, więc chociaż rozumiem podstawy, w Perlu jest wiele niuansów, które sprawiają, że jest to kłopotliwe. _zaktualizowane_ < Podobno jestem programistą UI, ale małość biura wymaga ode mnie nauki i robienia znacznie więcej niż tylko javascript. To było trochę nieoczekiwane w niektórych aspektach i zastanawiam się tylko nad tym, jakie podejście do tego zastosować > / _zaktualizowane_ Do tej pory przeglądałem kod, aby zrozumieć, co robi każda część, wydrukowałem kopie kodu i próbowałem wyszukać Interfejsy API, których nie znam, więc nie wiem, jak skuteczny jest ten proces — wydaje mi się, że zajmie to trochę czasu — i nie chcę, aby moi nowi pracodawcy czuli, że nie jestem produktywny. Czy ktoś ma jakieś pomysły lub podejścia do takiej sytuacji? Przeczytałem kilka pytań dotyczących nauki nowych języków, ale jestem ciekaw, czy ktoś miał z tym doświadczenie w Perlu. **Dziękujemy za wszystkie wspaniałe opinie!**


title: Czy jest to naruszenie zasady pojedynczej odpowiedzialności?

text: Projektuję bibliotekę grafów OO i obecnie próbuję rozgryźć projekt klasy `GraphEdge`. Dodałem settery i gettery dla węzłów, kierunku i wagi. Wydaje się to całkiem rozsądne. Następnie rozpocząłem pracę nad klasą `Graph` i doszedłem do potrzeby dowiedzenia się, czy dana krawędź sąsiaduje z określonym węzłem. A teraz wątpię, czy powinienem dodać metodę `isAdjacentTo(Node)` do klasy `GraphEdge`, czy powinienem utworzyć klasę `GraphUtil`(*) i dodać do niej statyczną metodę `edgeIsAdjacentToNode(Edge,Node)`. Z jednej strony nie widzę żadnych dodatkowych powodów do zmiany `GraphEdge`, jeśli trzymam się pierwszej opcji. Z drugiej strony, wydaje mi się to jakby drugą odpowiedzialnością dodaną do klasy. Również jeśli będę trzymać się pierwszej opcji, prawdopodobnie naruszy to „zasadę otwierania-zamykania”. `GraphEdge` nie jest zamknięty dla zmian, ponieważ później będę musiał dodać do niego metodę `linksNodes(Node,Node)`, a później może kilka innych. Pytania są następujące: * Czy dodanie metody `isAdjacentTo(Node)` do klasy `GraphEdge` narusza SRP? * Czemu? (*) Trzymam się czystego stylu OO bez wolnych funkcji


title: Jak NodeJS może być „nieblokujący”?

text: Uczę się NodeJS i chciałem tylko coś wyjaśnić. W kilku samouczkach i książkach wprowadzających do tej pory bardzo wcześnie opisali oni „nieblokującą” architekturę Node – a raczej to, że możliwe jest (i zalecane w całości) kodowanie w sposób nieblokujący. Na przykład ten przykład został podany w książce, którą czytam o asynchronicznym sposobie pobierania danych z bazy danych. http.createServer(function (req, res) { database.getInformation(function (data) { res.writeHead(200); res.end(data); }); }); Co się dzieje (jak rozumiem), Node wykonuje wywołanie do bazy danych, a następnie kontynuuje przetwarzanie tego, co może być dalej na stosie wywołań. Gdy żądanie bazy danych zostanie zakończone, zmienna data w anonimowej funkcji wywołania zwrotnego zostanie wypełniona, a funkcja dodana do stosu wywołań (a następnie wykonana, gdy Node do niego dotrze). Moje pytanie brzmi: _Czym dokładnie jest **przetwarzanie** żądania bazy danych?_ Z pewnością Node musi blokować, gdy to robi? Co zajmuje się żądaniem bazy danych? Lub jeśli Node czeka na asynchroniczne żądanie HTTP GET do zasobu zewnętrznego, co ma zająć się tym żądaniem, które umożliwia Node kontynuowanie przetwarzania stosu wywołań i bycie „nieblokującym”?


title: Jak programista Microsoft może/powinien podejść do projektu na Androida?

text: Jestem deweloperem, który głównie korzysta ze stosu Microsoft (C#/Silverlight/WPF/ASP MVC/.net framework) Chociaż dodam HTML5/CSS3/shivs/jQuery podczas korzystania z ASP.net MVC. Mam okazję popracować nad telefonem komórkowym z Androidem, ale nie jestem pewien, czy/w jaki sposób moje obecne umiejętności będą miały zastosowanie. Ktoś tam dokonał tego przejścia? Jaki nowy zestaw umiejętności jest zaangażowany? Jakiego oprogramowania programistycznego IDE będę potrzebować? # AKTUALIZACJA: Dziękuję wszystkim za wskazanie mi dobrych kierunków! W rezultacie zajęło mi kilka godzin, aby sprawdzić Eclipse i wtyczkę Android SDK. Jak dotąd znalazłem wiele pocieszających podobieństw między androidem a stosem MS, do którego jestem przyzwyczajony. ## Oto moje odkrycia (może pomóc niektórym noobom takim jak ja!): \--Środowisko programistyczne Eclipse+AndroidSDK jest kompletne, zrozumiałe i bardzo przypomina Visual Studio. \--Java jest bardzo „podobna do c#”. \--Android oddziela kod (.java) od znaczników układu (.xml). \-- Znaczniki układu Androida są bardzo podobne do Silverlight. \--Android ma wbudowane podstawowe elementy sterujące z podstawowym stylem. \--Android ma kilka naprawdę przydatnych wbudowanych widżetów! (Domyślam się, że akceptuje również niestandardowe widżety dodatków?) \--Aktywności w systemie Android są jak klasy c#: metody/właściwości lokalne + właściwości obejmujące całą klasę. Utwórz instancję i korzystaj z nich. \--Cykle życia działań są zrozumiałe: Zastąpienia -- onCreate(), onStart(), onResume(), onStop(), onRestart(), onDestroy(). \--Android łączy zdarzenia użytkownika z programami obsługi zdarzeń za pomocą odbiorników. \--Android używa wielu odniesień do „magicznych ciągów” zarówno w .xml, jak i .java (Oh-nieeeee!) \--Znaleziono świetny „samouczek i lekcje na Androida” na YouTube autorstwa CornBoyzAndroid (ponad 30 pouczających odcinków!) \--Android próbuje/catch/finally dla wyłapywania błędów podobnie jak c# ## Nadal badam i jestem pewien, że znajdę odpowiedzi na moje dalsze pytania, takie jak: \--Jak android radzi sobie ze zdalnym i dane lokalne? (dostęp do bazy danych, pamięć lokalna, Linq). \--Jak Android działa asynchronicznie lub długotrwale? (oddzwaniania, odpytywanie, gniazdka). \--Widzę, że Android udostępnia wątki… prawdopodobnie przydatne, ale potrzebuję więcej informacji. \--Czy Android ma frameworki takie jak MVVM lub MVC i co z testowaniem jednostkowym? Jeszcze raz dziękuję wszystkim za pomoc!!! -- Ocena


title: Jak utrzymać przewodnik użytkownika w lockstep z oddziałami dla nie-dewelopera?

text: Nasz obecny podręcznik użytkownika jest zbudowany przy użyciu `asciidoc`. Dokumentacją zarządza osoba nietechniczna, ale źródłowe pliki tekstowe oraz wygenerowany HTML trzymamy pod kontrolą źródła. Problemy pojawiają się, gdy dokonują aktualizacji dokumentacji dla wersji `x.z` w gałęzi `x.y`. Zazwyczaj jeden z programistów aktualizuje swoje środowisko, ale mogą być bardzo zapominalscy. Wiem, że musi być na to lepszy sposób. Jak zarządzać przewodnikami użytkownika w sposób wersjonowany bez faktycznego polegania na użytkownikach nietechnicznych w celu nauki obsługi VCS?


title: Jak wybrać format pakietu do dystrybucji oprogramowania dla systemu Linux?

text: Mamy aplikację opartą na Javie, którą do tej pory dystrybuowaliśmy jako archiwum tar z instrukcjami wdrażania. Jest w większości samowystarczalny, więc wdrożenie jest dość proste: 1. Rozpakuj dysk, na którym chcesz go umieścić; 2. Upewnij się, że Java jest na twojej ścieżce oraz odpowiednia dystrybucja i wersja; 3. Zweryfikuj własność i grupę we wszystkich plikach 4. Uruchom procesy serwera za pomocą naszego skryptu startowego Jeśli użytkownik chce uzyskać dostęp do rzeczy związanych z uruchamianiem przy starcie za pomocą SysV, mamy dla nich kilka pisemnych instrukcji i szablon pliku init w nasz tarball. Chcielibyśmy, aby ten proces instalacji był nieco bardziej płynny; zadbaj o uprawnienia i wdrożenie skryptu startowego. Zamierzamy również rozpocząć łączenie naszego własnego środowiska JRE z aplikacją, dzięki czemu będziemy w większości wolni od zewnętrznych zależności. Pytanie, przed którym teraz stoimy, brzmi: jak wybrać format pakietu do dystrybucji? Czy RPM to standard? Czy wszystkie narzędzia do zarządzania pakietami mogą sobie z tym teraz poradzić? Nasi klienci głównie korzystają z RHEL i CentOS, ale niektórzy używają SuSE, a nawet Debiana. Jeśli możemy wybrać format agnostyczny, wolelibyśmy to. A co z samorozpakowującym się skryptem powłoki? Coś podobnego do dystrybucji Javy. Jeśli jesteśmy wolni od zależności, czy samowyodrębniający się skrypt byłby wystarczający? Jakie funkcje lub udogodnienia stracilibyśmy, korzystając ze skryptu w porównaniu z odpowiednim formatem pakietu przeznaczonym do użytku przez menedżera pakietów?


title: Tylko jedna klasa - Java

text: Napisałem program w Javie, jest on tylko dość mały i zacząłem programować, a skończyło się na zbudowaniu jednej dużej klasy ze wszystkim w środku. Program działa dobrze i dokładnie tak, jak tego chciałem, jednak pisząc dokumentację zdałem sobie sprawę, że nie jest on zgodny z żadnym wzorcem architektury, takim jak MVC lub 3-warstwowy i wydaje się najbardziej monolitycznym systemem. Czy może to być szkodliwe? Łatwość utrzymania jest dość ważna, ale kod jest dobrze skomentowany i można go dość łatwo rozszerzyć, jeśli ktoś chciałby na przykład dodać dodatkowy algorytm. Zastanawiam się tylko, czy to zła praktyka i czy będzie to lekceważone? Jest to część projektu, więc zostanie oceniona, mam czas na rozbicie tego na zajęcia, ale czuję, że to może być niepotrzebna praca i nie bardzo wiedziałbym, jak to podzielić. Kiedy mówię o dużej klasie, to wszystko jest względne, ale ma około 1750 linijek kodu. Myślę, że głównym pytaniem jest; działa tak, jak jest, więc czy istnieje potrzeba podzielenia go na klasy? Czy systemy monolityczne są szczególnie złe (nie jestem pewien, czy jest to w ogóle system monolityczny!)?


title: Wydajne kodowanie w Visual Studio (lub innym IDE) z pisaniem bezwzrokowym

text: Przesuwanie kursora do innej pozycji w kodzie jest jedną z najczęstszych czynności podczas kodowania. Nie piszę swoich programów od początku do końca, jak list. Jednak przesuwanie kursora wymaga ode mnie przesunięcia prawej ręki do klawiszy strzałek lub myszy, co jest jak przerwanie rytmu pisania, ponieważ używam pisania bezwzrokowego. Chcę, żeby moje ręce spoczywały na klawiaturze. Trudno wytłumaczyć, co mam na myśli, ale myślę, że każdy koder używający pisania bezwzrokowego wie, co mam na myśli. Próbowałem wielu rzeczy, takich jak definiowanie niektórych skrótów jako zastępczych klawiszy strzałek (Shift + Alt + J, K, L, I) lub kupowanie klawiatury z trackpointem, gładzikiem lub trackballem, ale jeszcze nie znalazłem satysfakcjonującego Rozwiązaniem problemu. Jakie jest najlepsze rozwiązanie, jakie znasz, niezależnie od używanego IDE? **Edytuj** : Dziękuję za odpowiedzi. Używam wielu skrótów, ale myślę, że używanie wtyczki Vim w Visual Studio za bardzo przeszkadzałoby w skrótach, do których jestem przyzwyczajony. Poza tym mam klawiaturę z wbudowaną myszą, ale wciąż szukam lepszego rozwiązania.


title: Tworzenie biblioteki współdzielonej, która może być używana z aplikacjami komputerowymi i projektami internetowymi

text: W ciągu ostatniego roku brałem udział w wielu projektach pulpitu MVC.NET i c# w naszej firmie, a jednocześnie udawało mi się trzymać nos wciśnięty w inne projekty (oczywiście w trybie uczenia się tylko do odczytu). Zauważyłem, że w różnych projektach i zespołach istnieje wiele funkcjonalności, które zostały dobrze zaprojektowane z uwzględnieniem dobrych interfejsów i abstrakcji. Ponieważ czasami lubimy naszą własną pracę, zauważyłem, że kilka projektów miało dokładnie tę samą klasę, skopiowaną do niej metodę, ponieważ najwyraźniej działała na jednym, a więc została łatwo przeniesiona do nowego projektu (prawdopodobnie przez tego samego programistę, który pierwotnie to napisałem) Wspomniałem o tym fakcie podczas jednego z naszych spotkań z programistami, które od czasu do czasu mamy i zasugerowałem, abyśmy wprowadzili część tej funkcjonalności do podstawowej biblioteki firmy, którą możemy rozbudowywać z biegiem czasu i wykorzystywać w wielu projektach. Wszyscy się zgodzili i zacząłem rozważać tę możliwość. Jednak dość wcześnie natrafiłem na przeszkodę. Nasz zespół skupia się obecnie przede wszystkim na MVC i mamy projekty głównie w 2.0, ale zaczynamy rozgałęziać się do 3.0. Mamy również wiele aplikacji desktopowych, które mogą skorzystać z niektórych wspólnych klas i podstawowych metod pomocniczych. Początkowo podczas tworzenia tej biblioteki DLL włączyłem kilka klas współdzielonych, które mogą być używane w dowolnym typie projektu (sieć, klient itp.), ale potem zacząłem szukać dodatkowych modułów współdzielonych, które byłyby przydatne tylko w naszych aplikacjach MVC. Jednak oznaczało to, że musiałem dołączyć odniesienie do niektórych bibliotek Microsoft Web DLL, aby wykorzystać niektóre z tworzonych przeze mnie klas (na tym etapie MVC 2.0). Teraz mój problem polega na tym, że mamy udostępnioną bibliotekę DLL, która zawiera odniesienia do bibliotek internetowych, które mogą być również używane w aplikacji klienckiej. Co więcej, nasza biblioteka DLL początkowo odwoływała się do MVC 2.0 i ostatecznie przejdziemy do MVC 3.0 dla wszystkich projektów. Ale spodziewam się, że wiele klas w tej bibliotece będzie nadal związanych z MVC 3 itd. Nasz kod w tej bibliotece DLL jest podzielony na swoje własne przestrzenie nazw, takie jak: * CompanyDLL.Primitives * CompanyDLL.Web.Mvc * CompanyDLL.Helpers itp. moje pytania to: 1. Czy można zrobić taką bibliotekę współdzieloną, czy też jeśli mamy w niej funkcje specyficzne dla sieci, czy powinniśmy utworzyć osobną bibliotekę Web DLL ukierunkowaną tylko na określoną platformę lub wersję MVC? 2. Jeśli wszystko jest w porządku, jakie problemy możemy napotkać podczas korzystania z biblioteki, która odwołuje się na przykład do MVC 2 w projekcie MVC 3. Myślę, że możemy napotkać jakiś problem ze zgodnością, a nawet problemy, w których programiści korzystający z biblioteki nie zdają sobie sprawy, że potrzebują bibliotek MVC 2.0. Mogą chcieć używać tylko niektórych klas ogólnych itp. Koncepcja wydawała się wtedy dobrym pomysłem, ale zaczynam myśleć, że może to nie jest praktyczne rozwiązanie. Ale liczba przypadków, w których widziałem kopiowanie klas i metod w różnych projektach, ponieważ są one **sprawdzone** przetestowanym kodem, jest trochę denerwujące, jeśli mam być całkowicie szczery! **AKTUALIZACJA** : W związku z odpowiedzią Bernarda, którą wziąłem pod uwagę i wydaje się dobrą radą. Jednak chcę stworzyć kilka klas współdzielonych, które prawdopodobnie będą przydatne zarówno w projektach MVC 2, jak i MVC 3. Jednak mój współdzielony zestaw będzie musiał odwoływać się do jednego z frameworków MVC, abym mógł w pierwszej kolejności stworzyć moje współdzielone klasy. Więc dalej rozwijam mój Q2 powyżej. 1. Gdybym chciał mieć rozwiązanie internetowe MVC 3, czy musiałbym mieć udostępniony projekt CompanyDLL.Web.Mvc3, który odwoływałby się konkretnie do MVC 3? Czy oznaczałoby to skopiowanie całego kodu z mojego rozwiązania CompanyDLL.Web.Mvc2 do tego nowego udostępnionego projektu Mvc3? Wygląda na to, że brakuje mi niektórych **podstawowych** umiejętności projektowania w tworzeniu współdzielonych zestawów oraz tworzeniu i odwoływaniu się do różnych wersji frameworka. Lub może to być po prostu tak proste, jak my to wciągniemy i utworzymy biblioteki _CompanyDLL.Web.Mvc2_ , _CompanyDLL.Web.Mvc3_ , _CompanyDLL.Web.Mvc4_ itp. itd...


title: Czy jest to powszechne w wielu językach?

text: W C++, w tym kodzie zmienna całkowita `bar` ma wartość 1 int foo = 0; int bar = ++foo; i 0 w tym kodzie int foo = 0; int bar = foo++; Czy to zachowanie jest powszechne w większości popularnych języków?


title: Nowa misja na zajęcia z algorytmów w mojej szkole

text: Nauczyciel na Eastern Washington University, który obecnie prowadzi kurs o algorytmach, jest nowy na wschodzie iw rezultacie kurs zmienił się drastycznie, głównie we właściwym kierunku. Biorąc to pod uwagę, uważam, że klasa mogłaby użyć bardziej szczegółowego i zorientowanego na branżę (ponieważ tam pójdzie większość uczniów, chociaż sugestie dotyczące klasy zorientowanej na środowisko akademickie są również mile widziane), ponieważ pracowałem w przemyśle tylko przez 2 lata. jak opinia społeczności (szerszej i znacznie bardziej zbiorowo doświadczonej i ostatecznie bardziej wiarygodnej) opinii na temat jakości tego oświadczenia dla celu klasy algorytmów, a jeśli jestem całkowicie nie na miejscu, twoja sugestia w celu wymaganego Klasa Jr. Algorithms, która jest samodzielna (więc nie są wymagane żadne inne klasy skupiające się konkretnie na algorytmach). Stwierdzenie jest następujące: > Celem klasy algorytmów jest zrobienie trzech rzeczy: > > * Przede wszystkim nauczenie uczenia się, przeprowadzenie podstawowej analizy i zaimplementowanie > danego algorytmu znalezionego poza klasą. > * Po drugie, nauczenie studenta, jak modelować problem w umyśle, aby > mógł znaleźć istniejący algorytm lub miał kierunek > do rozpoczęcia opracowywania nowego algorytmu. > * Po trzecie, przegląd różnych istniejących algorytmów i dogłębne > zrozumienie i przeanalizowanie jednego algorytmu w każdym z podstawowych projektów algorytmów > strategie: dziel i zwyciężaj, zmniejsz i zwyciężaj, przekształcaj i zwyciężaj, > chciwy, brutalna siła, iteracyjna Doskonalenie i programowanie dynamiczne. > Pytanie w skrócie brzmi: czy zgadzasz się z tym stwierdzeniem, że kurs algorytmów ma być przydatny w realnym świecie, jeśli nie, co byś zaproponował?


title: Programista / Deweloper Osobista Organizacja

text: Jakich narzędzi/metodologii/strategii używasz, aby zorganizować swoją pracę jako programista? Czy możesz podać szczegóły?


title: Korzyści/Pułapki włączenia

text: Czy strony internetowe ładują się szybciej, czy wolniej, gdy wszystkie nagłówki, stopki i podstawowe funkcje są umieszczone w plikach zewnętrznych i wywoływane przy użyciu poniższych instrukcji? Czy są jakieś inne korzyści z oddzielania takich treści? <?php include("zawiera/funkcje.php"); ?> <?php include("zawiera/header.php"); ?> <?php require_once("zawiera/funkcje.php"); ?>


title: Czy istnieją funkcjonalne języki programowania „przygotowane na przedsiębiorstwa”?

text: Przez „enterprise ready” mam na myśli dostępność narzędzi: zarządzanie zależnościami, zarządzanie kompilacją, serwery wiadomości, bazy danych, platformy aplikacji i serwery, które są bezpieczne i dobrze skalowalne? Na przykład, czy istnieje lisp (lub ML) alternatywa dla j2ee? Proszę wykluczyć FP przeniesione do JVM lub .NET CLR. EDYCJA: Wiem, że można użyć portu jvm FP, tj. Clojure lub F# na .NET CLR, ale jestem ciekaw, czy można opracować czysto funkcjonalną aplikację dla przedsiębiorstwa bez JVM lub CLR?


title: Licencjat z inżynierii oprogramowania na odległość (online) w Europie

text: Obecnie pragnę poszerzyć swoje umiejętności zawodowe o tytuł licencjata. Nie jestem jednak w stanie studiować w pełnym wymiarze godzin za granicą, ale szukam Uczelni, na której mogłabym studiować na odległość (online z domu), przyjeżdżając tylko kilka razy w semestrze na Uczelnię, aby zdać egzaminy, uzupełnić prace i tak dalej. **Szukam programów inżynierii oprogramowania lub informatyki**. **Całkowicie na odległość** (online) **po angielsku w Europie** , bo mieszkam w Europie Środkowej. Jakieś sugestie?