title: Przegląd projektu aplikacji, w której występują problemy z pamięcią

text: Z góry przepraszam za długość tego posta, ale chcę nakreślić dokładny obraz problemów, z jakimi boryka się moja aplikacja, a następnie zadać kilka pytań poniżej; Próbuję rozwiązać problem związany z własnym projektem, który teraz prowadzi do awarii mojej aplikacji z powodu błędów braku pamięci. Skrócony opis **dziedziny problemowej** jest następujący; * Aplikacja przyjmuje „zestaw danych”, który składa się z wielu plików tekstowych zawierających powiązane dane * Pojedynczy plik tekstowy w zestawie danych zwykle zawiera około 20 „nagłówków”, które zawierają metadane dotyczące zawartych w nim danych. Zawiera również dużą sekcję rozdzielaną tabulatorami, zawierającą dane związane z danymi w jednym z innych plików tekstowych zawartych w zestawie danych. Liczba kolumn w pliku jest bardzo zmienna, od 2 do 256+ kolumn. Oryginalna aplikacja została napisana, aby umożliwić użytkownikom ładowanie zestawu danych, mapowanie określonych kolumn każdego z plików, które zasadniczo wskazują kluczowe informacje o plikach, aby pokazać, w jaki sposób są one powiązane, a także zidentyfikować kilka oczekiwanych nazw kolumn. Po wykonaniu tej czynności następuje proces walidacji w celu wymuszenia różnych reguł i zapewnienia, że wszystkie relacje między plikami są prawidłowe. Po wykonaniu tej czynności dane są importowane do bazy danych SQL Server. Projekt bazy danych to model EAV (Entity-Attribute-Value) używany do obsługi kolumn zmiennych w pliku. Wiem, że EAV ma swoich przeciwników, ale w tym przypadku uważam, że był to rozsądny wybór, biorąc pod uwagę różne dane i zmienną liczbę kolumn przesłanych w każdym zestawie danych. **Problem z pamięcią** Biorąc pod uwagę fakt, że łączny rozmiar wszystkich plików tekstowych wynosił co najwyżej około 5 megabajtów, a starając się skrócić czas transakcji bazy danych, postanowiono wczytać WSZYSTKIE dane z plików do pamięci, a następnie wykonać następujące; * wykonaj całą walidację, gdy dane znajdowały się w pamięci * powiąż je za pomocą modelu obiektowego * Rozpocznij transakcję w bazie danych i zapisz kluczowe kolumny wiersz po wierszu, zwracając uwagę na identyfikator zapisanego wiersza (wszystkie tabele w bazie danych wykorzystują kolumny tożsamości), a następnie Identyfikator nowo zapisanego wiersza jest stosowany do wszystkich powiązanych danych * Po zaktualizowaniu wszystkich powiązanych danych o kluczowe informacje, do których się odnoszą, te rekordy są zapisywane przy użyciu SqlBulkCopy. Ze względu na nasz model EAV zasadniczo mamy; x kolumn przez y wierszy do zapisania, gdzie x może o 256+, a wiersze są często liczone w dziesiątkach tysięcy. * Gdy wszystkie dane zostaną zapisane bez błędów (może to zająć kilka minut w przypadku dużych zestawów danych), zatwierdź transakcję. Problem polega teraz na tym, że otrzymujemy teraz pojedyncze pliki zawierające ponad 30 megabajtów danych. W zbiorze danych możemy otrzymać dowolną liczbę plików. Zaczęliśmy widzieć nadchodzące zestawy danych o wielkości około 100 megabajtów i spodziewam się, że od tego momentu będzie się tylko powiększać. W przypadku plików o tym rozmiarze dane nie mogą być nawet wczytane do pamięci bez przewrócenia się aplikacji, nie mówiąc już o tym być walidowane i importowane. Przewiduję, że będę musiał modyfikować duże fragmenty kodu, aby umożliwić walidację poprzez analizowanie plików wiersz po wierszu i nie jestem dokładnie zdecydowany, jak obsługiwać import i transakcje. **Potencjalne ulepszenia** * Zastanawiałem się nad wykorzystaniem identyfikatorów GUID do powiązania danych, zamiast polegać na polach tożsamości. Umożliwiłoby to powiązanie danych przed zapisaniem do bazy danych. To z pewnością zwiększyłoby jednak wymaganą pamięć masową. Zwłaszcza w projekcie EAV. Czy uważasz, że jest to rozsądne, aby spróbować, czy po prostu upieram się przy polach tożsamości (nie można ufać, że klucze naturalne są unikalne dla wszystkich przesyłających). * Wykorzystanie tabel pomostowych w celu wprowadzenia danych do bazy danych i wykonanie transakcji tylko w celu skopiowania danych z obszaru pomostowego do rzeczywistych tabel docelowych. **Pytania** * W przypadku takich systemów, które importują duże ilości danych, dowiedz się, jak utrzymać małe transakcje. Utrzymałem je tak małe, jak to możliwe w obecnym projekcie, ale nadal są aktywne przez kilka minut i zapisują setki tysięcy rekordów w jednej transakcji. Czy jest lepsze rozwiązanie? * Sekcja danych rozdzielonych tabulatorami jest wczytywana do DataTable, która ma być wyświetlana w siatce. Nie potrzebuję pełnej funkcjonalności DataTable, więc podejrzewam, że to przesada. Czy mimo to można wyłączyć różne funkcje DataTables, aby były bardziej lekkie? Czy są jakieś inne oczywiste rzeczy, które zrobiłbyś w tej sytuacji, aby zminimalizować zużycie pamięci przez aplikację opisaną powyżej? Dziękuję za twoją miłą uwagę.


title: Czym jest projektowanie na poziomie bloków w kontekście aplikacji mobilnej?

text: Zastanawiałem się, czy ktoś może mi wskazać jakiś kierunek związany z "Projektowaniem poziomu bloków" w kontekście aplikacji mobilnej? Niedawno widziałem film na mojej uczelni i profesjonalista wspomniał o projektowaniu aplikacji na poziomie bloków konstrukcyjnych, od tego czasu utknął mi w mózgu! Byłoby bardzo pomocne, gdyby ktoś mógł podzielić się swoją wiedzą.


title: Dlaczego nie powinienem zrobić stopnia magistra?

text: Opuściłem uniwersytet w lipcu 2010, gdzie studiowałem projektowanie stron internetowych (jak wszyscy wiemy, sam uczysz się więcej, ale w tej chwili nie o to chodzi). Od tego czasu nie udało mi się znaleźć pracy (poza miesięcznym stażem), z tego, jak się sprawy mają i biorąc pod uwagę fakt, że wszyscy moi znajomi ze studiów są w takiej samej sytuacji, nie sądzę że wkrótce znajdę pracę (w branży) Teraz tak jak wszyscy, mimo że nie mam pracy, nadal pracuję nad osobistymi projektami i staram się być na bieżąco (nie potrzebuję pracę lub uczelnię, aby to zrobić) – ale myślę, że ponieważ nie ma pracy, czy warto byłoby wrócić na studia na studia magisterskie? Wiem, że tego nie potrzebuję i wiem, że jest mało prawdopodobne, że nauczę się czegoś ważnego, ponieważ wierzę w samouczenie się i w większości przypadków jest to o wiele bardziej skuteczne (ale muszę powiedzieć, że nie mam nic przeciwko temu powrót do szkoły) Jedynym powodem, dla którego myślę o zrobieniu mistrza, jest (i tutaj potrzebuję twojej pomocy): Jeśli znalezienie pracy zajmie mi rok, to na rozmowie kwalifikacyjnej, czy pracodawca pomyśli „co do piekło zrobił ten facet, odkąd opuścił uniwersytet” – teraz, jeśli pójdę na uniwersytet, to rozwiąże ten problem. Albo wymyślam problem, który nie istnieje Plus wiem, że pracodawcy potrzebują przykładów stron, nad którymi pracowałem, w tej chwili mam tylko 3 (jak przy pracy nad osobistymi projektami, gdzie ich nie ma czasu limit Mam tendencję do przeciągania rzeczy, aby były idealne, a nigdy nie są idealne) – więc wracając na studia, ten problem może się rozwiązać Powiedziałem to wszystko, ponieważ dużo czytałem o tym, że nie potrzebujesz mieć tytuł magistra, aby pracować na rynku projektowania stron internetowych (a całkowicie się zgadzam), ale biorąc pod uwagę moje obawy, pytanie brzmi: czy powinienem zrobić kurs magisterski, aby uniknąć spędzania godzin w moim pokoju, pracując i ucząc się we własnym zakresie (ale to ciężko przekonać pracodawców, że naprawdę uczę się w swoim pokoju) Może dlatego, że wciąż jestem młody, 22 lata i nie aż tak stary :), ale nie mam „marzenia” o byciu bogatym, więc gdybym miał powiedzieć prawdę nie dbam o to, że nie mam pracy (w tej chwili), bo i tak pracuję nad tym, co kocham ev każdego dnia, ale wiem, że w przyszłości, kiedy będę potrzebować pracy, może być mi trudniej ją zdobyć, jeśli teraz zaniedbuję to Za każdym razem, gdy zadam pytanie, co do którego nie jestem pewien, kontynuuję i dalej, ale naprawdę mam nadzieję, że dostaniesz to, co próbuję przekazać. Swoją drogą kurs, na który patrzę na magister, mówi, że nauczyłby mnie tego: e-commerce e-administracji e-nauki e-learningu Nie znam żadnego z nich, część z e- handel Dzięki


title: Jaką stronę z ogólnymi wiadomościami technicznymi powinien przeczytać każdy programista?

text: Link i szybkie wyjaśnienie, dlaczego byłyby bardzo pomocne. Ogólne wiadomości techniczne, nie chodzi mi o InfoQ, który jest zbyt techniczny. Prawdopodobnie znacznie bardziej jak P.SE niż SO. EDIT: strona powinna pomagać programistom w zdobywaniu ogólnej wiedzy na temat branży, technologii, wynalazków itp. Podobnie jak wtedy, gdy codziennie rano słuchamy wiadomości w naszym samochodzie, aby wiedzieć, co dzieje się w naszym świecie. Ale odbiorcami docelowymi muszą być programiści, geekowie lub inne osoby zainteresowane technologią.


title: Ogólna konstrukcja obiektów — klasy dziedziczone

text: Zasadniczo piszę bibliotekę narzędziową wielowątkowych wzorców przesyłania wiadomości opartą na MSMQ. To jest jak zestaw komponentów, które wszystkie odziedziczyły (bezpośrednio lub pośrednio) jedną klasę, która nazywa się moją podstawową klasą komponentów. Każdy z tych komponentów obsługi wiadomości ma możliwość nasłuchiwania wielu kolejek za pośrednictwem wielu wątków i przetwarzania wiadomości za pośrednictwem wielu wątków. Mam więc podstawową klasę roboczą, która wykonuje się w wątku, ale w implementacji dziedziczysz tę klasę i wypełniasz luki. Więc chcę być w stanie zasadniczo skonstruować ogólny obiekt, który dziedziczy tę klasę w locie, a następnie uruchomić go. Jak dotąd mam to, co działa, ale zastanawiam się tylko, czy istnieje lepszy sposób na zrobienie tego. Mój obecny kod... public class EzQBaseComponent<TWorker> : IEzQComponent gdzie TWorker : EzQWorker { /// WIELE KODU NIE TRZEBA WIEDZIEĆ :"D private void Listener_MessageRecieved(Guid listenerID, MessageQueue kolejka, Message msg, MessageTransactionQueueTransaction ) { try { lock (m_MessageRecievedLocker) { if(myTransaction == null) { // ZWIEW } if(msg.Label == c_CustomComponentMessageCommandLabel) { // ZWIEDZANIE } else if(Workers.Count < DelegatedWorkers) { Type t = typeof( TWorker); ConstructorInfo[] conInfos = t.GetConstructors(); ConstructorInfo correctConstructor = null; foreach (ConstructorInfo cInfo w conInfos) { if (cInfo.GetParameters().Count() < 1) { poprawnyKonstruktor = cInfo; } } if (correctConstructor == null) { throw new Exception("Ogólna klasa TWorker nie zawiera konstruktora z argumentami '0'. Nie można skonstruować klasy."); } TWorker worker = (TWorker)correctConstructor.Invoke(null); // ZIEWANIE } else { // ZIEWANIE } } } catch (wyjątek Ex) { // NIEEE WYJĄTEK!! } } Zasadniczo moja klasa bazowa ma konstruktor bez parametrów. Więc szukam tego bez parametrów poprzez odbicie, a następnie używam tego konstruktora. Jakieś przemyślenia na temat budowy obiektu generycznego? Czy to najlepszy sposób?


title: Algorytm optymalnej kombinacji dwóch zmiennych

text: Szukam algorytmu, który byłby w stanie określić optymalną kombinację dwóch zmiennych, ale nie wiem od czego zacząć. Na przykład, jeśli mam 10 000 wierszy w bazie danych, a każdy wiersz zawiera cenę i stopy kwadratowe, czy istnieje jakiś algorytm, który będzie w stanie określić, jaka kombinacja ceny i stóp kwadratowych jest optymalna. Wiem, że jest to niejasne, ale zakładam, że jest to zgodne z logiką rozmytą i zbiorami rozmytymi, ale nie jestem pewien i chciałbym zacząć kopać we właściwym polu, aby zobaczyć, czy mogę wymyślić coś, co rozwiąże moje problem.


title: Czy należy używać dziedziczenia, aby zapobiec powielaniu kodu logiki dla kontrolki użytkownika?

text: Załóżmy, że mam dwie lub więcej implementacji `UserControl` z bardzo różnymi implementacjami, ale prawie identycznym kodem. Jedna strategia unikania powielania kodu jest następująca: 1. Zmień każdy element `UserControl` tak, aby dziedziczył z nowej klasy abstrakcyjnej `AwesomeUserControl` 2. Przenieś cały kod z każdego `UserControl` do `AwesomeUserControl` (`AwesomeUserControl` nie mieć plik ascx). 3. Dodaj abstrakcyjne gettery do `AwesomeUserControl` dla dowolnych kontrolek z pliku ascx oryginalnych UserControls. 4. Zaimplementuj te gettery w każdym `UserControl`. Ta strategia działa bardzo dobrze i jest łatwa w utrzymaniu. Jednak wprowadza również głupi kod rusztowania; każda nowa implementacja `AwesomeUserControl` ma kilka programów pobierających do przechwytywania `AwesomeUserControl` elementów interfejsu użytkownika wewnątrz nowej kontrolki. Za każdym razem, gdy używam strategii, która _wymaga_ skopiowania i wklejenia kodu rusztowania, martwię się, że robię coś źle. Chociaż ma fajny efekt polegający na niepowodzeniu kompilacji, jeśli brakuje elementów interfejsu użytkownika (w przeciwieństwie do pomijania kodu rusztowania na rzecz odbicia i wymaganego nazewnictwa). Czy takie wykorzystanie dziedziczenia jest uzasadnione?


title: Jaki jest algorytm „trybu losowego” w odtwarzaczach audio/muzyki?

text: Badałem, w jaki sposób zaimplementowany jest „tryb losowy” w odtwarzaczach muzycznych i jaki jest za tym algorytm. Jak zapewnia, że żadne piosenki się nie powtórzą? Jaki jest najbardziej wydajny algorytm do tego? * **Dodano 23 kwietnia 2014 r.:** Algorytm tasowania Fischera-Yatesa jest najprostszym algorytmem tasowania. Ten wpis na blogu zatytułowany „Sztuka tasowania muzyki” wyjaśnia inny algorytm z ilustracjami.


title: Jaki jest najskuteczniejszy sposób zarządzania dużą kolekcją

text: Mam dość trudny problem: okresowo otrzymuję słownik `Dictionary<decimal, int> subDict` zawierający 100 rekordów, gdzie * dziesiętny to Cena * a int to Kwota Potrzebny mi wynik to dataGrid pokazujący ceny wraz z kwotami. Ale nie mogę wyświetlić bezpośrednio podlisty, ponieważ podlista często brakuje niektórych cen: subDict: * Cena | Kwota * 100 0001 | 192 * 100.0005 | 123 * 100.0007 | 2 * 100.0008 | 123 powyżej musi być wyświetlany jako: * Cena | Kwota * 100 0001 | 192 * 100 0002 | 0 * 100 0003 | 0 * 100 0004 | 123 * 100.0005 | 0 * 100 0006 | 0 * 100.0007 | 2 * 100.0008 | 123 Muszę zapisać cenę z 4 miejscami po przecinku, jednak zakres Ceny może wynosić od 0 do 10 000. Ostatecznym warunkiem jest to, że po kliknięciu kwoty w DataGrid muszę mieć dostęp do wszystkich wartości w wierszu. Postanowiłem więc poprosić o pomoc – czy ktoś może wymyślić dobrą strategię radzenia sobie z takim problemem? Jednym z pomysłów, który przyszedł mi do głowy, było zainicjowanie `Dicionary<decimal, int> bigDictionary` zawierającego wszystkie ceny z zakresu. Jeśli jednak zainicjuję ten słownik ze wszystkimi cenami, z określoną ziarnistością (tj. krokiem 0,0001), otrzymam 10 000 * 10 000 rekordów. To dość obszerna lista, która zajmuje dużo pamięci. Oczywiście łatwo jest powiązać go z DataGrid w WPF, więc może to działać, ale moim zdaniem jest bardzo nieefektywne. Innym pomysłem, jaki mam, byłoby zapisanie przychodzących cen w `Słownik<decimal, int> smallDict`, ale wtedy musiałbym mieć jakiś mechanizm aktualizacji DataGrid w taki sposób, aby luki cenowe były wypełniane w locie . Musiałbym też jakoś zachować sortowanie dataGrid według ceny. Pierwszy pomysł, jaki jestem w stanie zrealizować. Drugi, o którym nie mam pojęcia, więc każdy kod byłby doskonały. Byłbym wdzięczny za wszelkie pomysły! Dziękuję za Twój czas


title: Czy towarzyszące narzędzia/skrypty również muszą być licencjonowane, aby umieścić mój skrypt bash na licencji GPLv3?

text: To jest kontynuacja starszego pytania. Umieściłem więc licencję GPLv3 w projekcie, który zawiera mój skrypt, a także dodałem informację o prawach autorskich i oświadczenie o zgodzie na kopiowanie na górze mojego skryptu. Teraz, oprócz skryptu, pakiet zawiera również pliki, które są pomocne przy korzystaniu ze skryptu (np. plik uzupełniania bash i testy jednostkowe), ale które nie są istotne dla faktycznego działania skryptu. Czy muszę tam również umieścić informację o prawach autorskich/pozwolenie? Przyjrzałem się niektórym projektom na github i większość nie wydaje się dodawać tych informacji do towarzyszących rzeczy. Mimo to nie jestem pewien, jakie jest najlepsze podejście.


title: Jak wykryć wpływy wywołane zmianami?

text: Często mam ten problem. Teraz pracuję w czteroosobowym zespole i zbudowaliśmy wiele rzeczy. Wciąż coś kończymy i wprowadzamy **zmiany**. Problem polega na tym, że te zmiany mogą (i najprawdopodobniej spowodują) awarię interfejsu/biznesu. Nie mamy żadnej mapy, która pokazuje nam coś w stylu "Jeśli zmienisz DataSource tej tabeli, kod X w tej tabeli będzie musiał się zmienić. A na ekranie X trzeba będzie zmienić listę". Testy jednostkowe mogą pomóc w walidacji reguł biznesowych, a co z biznesem interfejsu? Czy może również walidować kod powiązany z interfejsem? Czy powinniśmy polegać tylko na testach jednostkowych? A jak głębokie musi być to, aby zapobiec złamaniu kodu z powodu zmian? Czy powinniśmy również zastosować inne podejście?


title: Przepływ pracy / praktyki Git dla małego projektu (schemat blokowy w png)

text: Próbuję wymyślić osobisty przepływ pracy. Stworzyłem schemat blokowy hipotetycznego czasu życia wydania: jeden programista wysyłający do publicznego repozytorium na githubie + znajomy pomagający w niektórych funkcjach i naprawiający błąd. Czy to rozsądne podejście do kontroli wersji? Główną ideą jest utrzymanie porządku w publicznym repozytorium: * Każde nowe wydanie trafia na własną gałąź, dopóki nie zostanie otagowane w gałęzi master, kiedy jest gotowe. * Cała praca jest wykonywana na gałęziach "feature" lub "hotfix", nigdy na gałęziach rzeczywistego wydania, aby zapobiec anomaliom. * Scalanie z gałęziami wyższego poziomu jest zawsze zmieniane lub zmiażdżone (aby uniknąć bałaganu). Jeśli to przesada, nie mam nic przeciwko temu, ponieważ chodzi mi o to, aby nauczyć się umiejętności, których mogę potrzebować do większego projektu. Jedynym problemem byłoby to, że robię coś złego lub niepotrzebnego. **edycja 2:** naprawiono zły pomysł w oryginalnym schemacie blokowym i ułatwiono nawigację. ![v1.1](http://i.stack.imgur.com/kxOIy.jpg)


title: Czy programowanie zorientowane obiektowo jest rozwiązaniem problemu złożoności?

text: Czy uważasz, że programowanie zorientowane obiektowo jest rozwiązaniem problemu złożoności? Czemu? Ten temat może być nieco kontrowersyjny, ale moje zamiary poznania odpowiedzi na pytanie Dlaczego od ekspertów tutaj!


title: Projekt klasy dla umiędzynarodowionego obiektu

text: Poszukuję wskazówek dotyczących projektowania klas dla aplikacji globalnej. Powiedzmy, że muszę stworzyć strukturę klas do zarządzania produktami, a produkty są sprzedawane w różnych krajach. Niektóre pola dla produktu będą miały taką samą wartość we wszystkich krajach (np. kod produktu, opis ERP) Nazwę te pola „międzynarodowe”, a niektóre będą specyficzne dla jednego kraju (np. Opis lokalny), nazwijmy te pola „lokalne”. Oczywiście niektóre "lokalne" pola będą takie same dla grup krajów (np. waga: 1 kilogram / 2 funty). Spodziewam się również, że nie wszystkie kraje będą miały wartości dla wszystkich pól. Które pola są „międzynarodowe”, a które „lokalne” mogą się zmieniać w zależności od instalacji i niechętnie wpajam to w projekt, ponieważ jestem pewien, że później mnie to ugryzie. Więc próbuję wymyślić, jak ustrukturyzować obiekty, aby móc używać produktu na poziomie międzynarodowym i zawsze odnosić się do tego samego „produktu”, ale także utrzymywać i wykorzystywać informacje lokalne, gdy jest to konieczne? Żeby było jasne, nie mówię o ustawieniach użytkownika, formatowaniu liczby lub daty itp. Dane źródłowe pochodzą z różnych schematów baz danych (po jednym dla każdego kraju). Produkt końcowy zostanie napisany w C#. Zastanawiam się, czy ktoś ma doświadczenie lub może wskazać mi wzór, który zapewniłby dobre rozwiązanie, zanim pójdę i wymyślę koło na nowo?


title: Czytelność wyrażeń S

text: W skrócie i dla tych, którzy o tym nie wiedzieli, funkcje/operatory/konstrukcje Lispa są jednolicie nazywane w ten sposób: (function arg0 arg1 ... argN) Więc co w języku podobnym do C wyraziłbyś tak, jakby (a > b && foo(param)) jest przekształcane na sexp Lisp jak (if (i (> a b) (foo param))) . W miarę jak sprawy stają się bardziej realne/skomplikowane, podobnie jak dla mnie odpowiadające im wyrażenia „s”. Zdaję sobie sprawę, że jest to najprawdopodobniej subiektywne pytanie, ale - czy dla wielu hakerów Lisp jest to mała irytacja, z którą zawsze będą musieli sobie radzić? A może prędzej czy później przyzwyczaisz się do tej (braku) składni? W każdym razie, czy dodanie linii nieciągłości (których najczęściej nie dodajesz do swojego odpowiednika w C) w celu zwiększenia czytelności, jest dobrym pomysłem, zwłaszcza na dłuższą metę? Wszelkie inne sugestie byłyby mile widziane.


title: Najlepsza licencja zezwalająca na bibliotekę narzędziową?

text: Mam małą bibliotekę użytkową zawierającą przydatne rzeczy napisane w Javie, które planuję wydać na zasadach open source. Wahałem się, jakiej licencji użyć. Bardzo podoba mi się licencja BSD, która jest krótka i łatwa do zrozumienia, ale nie chcę/potrzebuję klauzuli o dołączaniu zastrzeżenia do dokumentacji produktu. Rozważając po prostu porzucenie tego kawałka. Czy licencja MIT byłaby dla mnie bardziej odpowiednia? Nie zawiera klauzuli zakazu popierania, jak ma to miejsce w BSD, co jest czymś, co lubię w BSD. Poza tym, czy klauzula MIT dotycząca zachowania informacji o prawach autorskich na znacznej części oprogramowania odnosi się tylko do kodu źródłowego, a nie do postaci binarnej lub jakiejkolwiek dokumentacji, którą tworzą? Z ankiety na inne pytania SO na ten temat widziałem, jak kilka osób poleca licencję Apache. Szybkie skanowanie może w rzeczywistości zrobić większość tego, co chcę naprawdę dobrze, chociaż nawet taka ilość legalizmu sprawia, że boli mnie głowa (szczególnie o 2:30 rano, kiedy powinnam być w łóżku zamiast tak). Myśli? Zasadniczo chcę czegoś, co jest: * łatwe do zrozumienia, * mówi, że możesz używać kodu, jak chcesz, ale zachowaj moje informacje o prawach autorskich i pozwoleniach na kodzie źródłowym, * nie musisz umieszczać imienia i nazwiska mnie ani mojego produktu lub informacje o prawach autorskich itp. w jakiejkolwiek dokumentacji, instrukcjach itp., którą produkujesz, * nie próbuj wykorzystywać mnie lub mojego produktu jako punktu sprzedaży dla swojego produktu (nie żeby moje poparcie i tak miało duże znaczenie!) * i okładki mój tyłek w rozsądny sposób. :-) EDIT: Wow, 30 minut i już kilka dobrych odpowiedzi! W odpowiedzi: Wolałbym nie „mieszać i dopasowywać”, jeśli mogę w tym pomóc i stworzyć kolejną licencję open source. Korzystanie ze standardowej licencji ułatwia nam wszystkim. Komentarz zakrywający tyłek jest trochę przymrużony. Zrzeczenie się gwarancji, które zawierają wszystkie wymienione licencje, jest naprawdę wszystkim, o czym mówię. EDIT: Czytając stronę Wikipedii na temat licencji MIT, odkryłem, że ncurses używa zmodyfikowanej wersji, która została zatwierdzona przez FSF, która dodaje akapit bez poparcia. Uważam, że jeśli to jest dla nich wystarczająco dobre, to dla mnie jest wystarczająco dobre. Rozważałem licencję Apache, jednak problemy z kompatybilnością z GPLv2 byłyby problemem, którego nie chciałem przedstawiać.


title: Czy książka „Struktura i interpretacja programów komputerowych” jest dobrą lekturą dla programistów Java?

text: To może być subiektywne i prawdopodobnie zostanie zamknięte, ale nadal chciałem wiedzieć, czy czytanie Struktury i interpretacji programów komputerowych jest naprawdę pomocne. Struktura i interpretacja programów komputerowych Książka nie używa języka Java. Nie żebym chciał uczyć się Javy. Jestem tylko ciekaw, czy przyda się lektura, aby być lepszym programistą i jakie rzeczy mogę zyskać z tej książki, czy też ich inne alternatywy dla tej książki są bardziej odpowiednie dla programistów Java?


title: Czy dobrym stylem jest przechowywanie danych widoku w modelu?

text: Używam wariantu wzorca MVC. W moim kodzie GUI często pojawia się potrzeba synchronizacji „danych widoku” (np. wybranego elementu) pomiędzy różnymi widokami. Na przykład wyobraźmy sobie program do rysowania wektorów. Mamy dwa widoki: obraz i widok listy wszystkich obiektów (prostokąty, kwadraty, ...). Aktualnie wybrany element powinien pozostać zsynchronizowany - jeśli klikniesz „Prostokąt A” w widoku listy, ten sam prostokąt powinien zostać podświetlony w widoku obrazu. Sposób, w jaki zwykle to robię, to posiadanie klasy ViewState zawartej w moim modelu. Czy to dobry pomysł? Jeśli nie, co byłoby lepszym rozwiązaniem? class VectorDrawing { List<Object> Items; Stan widoku rysunku Stan widoku; } class DrawingViewstate { Obiekt SelectedItem; zdarzenie SelectedItemChanged; } class ListviewController { ListviewController(VectorDrawing model) { model.Viewstate.SelectedItemChanged += ... // Zapisz się do zdarzenia ... } } class ImageViewController { ... // podobny do ListviewController }


title: zaimplementuj funkcję wad w Javie - wpisz pytanie bezpieczeństwa

text: Pracuję nad małą biblioteką funkcjonalną napisaną w Javie, która naśladuje funkcjonalny styl programowania. Utknąłem z niepożądanym rzutem typu w jednej z moich definicji metody i chciałbym, żeby ktoś mi pomógł. Ok, więc nie mamy funkcji pierwszej klasy w Javie, więc definiuję je jako obiekty, jedną metodą 'apply()' tak: public abstract class Function2<R,T1,T2> { public abstract R apply(final T1 paramOne, końcowy parametr T2 paramTwo); } Następnie definiuję moją metodę cons jako obiekt Function2, który mogę przekazać, tak jak funkcję w innym języku, który ją obsługuje: public static <T> Function2<List<T>, T, List<T>> cons( ){ return new Function2<List<T>, T, List<T>>(){ @Override public List<T> apply(T x, List<T> xs) { return new NonEmptyList<T>(x, xs ); } }; } Pominąłem moją strukturę listy dla zwięzłości; załóżmy, że jest to funkcjonalna struktura danych w stylu listy ze wszystkimi zwykłymi nagłówkami/ogonami/itd. operacje. Następnie chcę zaimplementować funkcję taką jak „reverse”, która zwraca listę elementów w odwrotnej kolejności. Aby to osiągnąć, używam foldl1 (złóż niepustą listę od lewej) i przekazuję funkcję cons jako parametr do foldl1 w następujący sposób: public static <T> List<T> foldl( Function2<List<T>, T, List<T>> f, List<T> acc, List<T> xs ){ if(xs.isEmpty()){ return acc; } return foldl(f, (f.apply(xs.head(), acc)), xs.tail()); } public static <T> List<T> reverse(List<T> xs){ // jak uniknąć tego rzutowania? return foldl((Funkcja2) cons(), new EmptyList(), xs); } Ale kiedy przekazuję mój obiekt 'cons()' w 'reverse', muszę go rzutować jako Function2 i nie mam pojęcia, jak tego uniknąć. Próbowałem na wszelkie sposoby bawić się typami... Czuję, że jest to po prostu brak doświadczenia z mojej strony z systemem typów Java... ktoś? PS. Jestem świadomy innych funkcjonalnych bibliotek w Javie, chciałem po prostu zrobić własną małą jako doświadczenie edukacyjne. EDYCJA - OK, więc teraz używam zwykłego „foldl”, aby odzyskać listę, ale nadal muszę wykonać rzutowanie? Zwracany typ „cons” jest wyrównany z „foldl”...


title: Wyjaśnianie Drupala programiście

text: (Z góry przepraszam za niejasne i miazmiczne pytanie) Czy jest tam książka lub inne źródło, które może wyjaśnić **korzystanie** Drupala, The System, programiście zorientowanym na aplikacje internetowe? Przeczytałem książkę Apress Pro Drupal Development i był to fantastyczny przegląd architektury systemu. Nie tego tutaj szukam. Zamiast tego chcę coś, co powie/pokaże mi „Oto jak ludzie używają Drupala do zarządzania swoimi witrynami i tworzenia aplikacji”. Buduję strony i aplikacje webowe od samego początku i za każdym razem, gdy siadam, aby spędzić trochę czasu z Drupalem, stwierdzam, że nie mogę porzucić moich koncepcji 1. URL równa się jednej stronie HTML, a wszystko z niej płynie 2 URL to akcja kontrolera i wszystko stamtąd płynie, a Drupal wydaje się być zbudowany na zupełnie innym modelu. Tak więc wszelkie książki, tutoriale lub wyjaśnienia, które zaczynają się od powyższych dwóch punktów i wyjaśniają czym różni się Drupal i czym zajmują się deweloperzy Drupala, byłyby fantastyczne.


title: Jak duża jest różnica między tworzeniem aplikacji WPF a aplikacją Silverlight 5?

text: Mam spore doświadczenie z WPF (C#) i XAML. Wkrótce może zostać poproszony o stworzenie aplikacji Silverlight 5. Nie mam doświadczenia z żadną wersją SL. Jakiego rodzaju krzywej uczenia się mogę się spodziewać podczas tworzenia aplikacji SL 5, biorąc pod uwagę, że mam pewne doświadczenie z WPF?


title: Czy moja warstwa mediatora jest rozsądnym sposobem zarządzania tym scenariuszem przy użyciu zasady pojedynczej odpowiedzialności?

text: Nie wiem, jak mam zacząć wyjaśniać moje pytanie, ale zaczynam. Właśnie ukończyliśmy aplikację MVC, która działa w 2 usługach WCF. Ale było trochę nieporozumień między tymi, którzy pracowali nad projektem, a tymi, którzy nie przejmowali się użytym projektem. Mamy dwie usługi WCF, jedną w każdej witrynie (dane specyficzne dla witryny), a drugą w centrali (dane udostępniane/wspólne między wszystkimi witrynami). Normalnie mielibyśmy dwie aplikacje, jedną na stronę, a drugą na centralę. W tym przypadku zdecydowałem z punktu widzenia UX, że lepiej, aby wyglądała jak jedna aplikacja z punktu widzenia użytkowników, aby nie musieli znać dwóch adresów URL. Zasadniczo użytkownik nie wie, czy trafia na stronę, czy do centrali. Teraz nadchodzi decyzja projektowa, która spowodowała nieporozumienia. Aplikacja MVC ma kontrolery, które muszą trafić na usługę wcf witryny lub usługę WCF w siedzibie głównej. Aby zapobiec potrzebie kontrolerów, które muszą być świadome dwóch warstw komunikacyjnych WCF i konwertować wyniki WCF na model, z którego mogą korzystać kontrolery, utworzyłem warstwę między kontrolerami a serwerami proxy WCF. Który akceptuje żądanie od kontrolera, a następnie wywołuje odpowiednią lokację lub centralne wywołanie serwera proxy WCF, a następnie w razie potrzeby konwertuje wynik WCF na model, którego może używać kontroler. Tę warstwę nazwałem Mediatorem, ale po długich dyskusjach uważam, że nie jest to właściwy opis. W każdym razie powodem tej warstwy jest próba trzymania się zasad obiektowych SOILD, w szczególności zasady Single Responsibility Principal. Odpowiedzialność kontrolerów polega na obsłudze żądań klientów i zwracaniu widoku/wyniku. Nie powinien znać ani utrzymywać serwera proxy WCF i konwertować jego wynik. (Może przejść bezpośrednio do bazy danych zamiast wywołania WCF, ale kontroler nie powinien być odpowiedzialny ani nawet świadomy tego, ponieważ jest odpowiedzialny za widok) To samo dotyczy serwera proxy WCF, nie powinien wiedzieć, co zużywa jego wyniku i że kontrakt danych WCF powinien zostać przekonwertowany na model specyficzny dla każdego kontrolera. Warstwa mediatora pomiędzy nimi decyduje, która usługa i metoda WCF ma zostać wywołana, a następnie za pomocą metody rozszerzającej lub określonej procedury obsługi konwertuje wynik na model, którego może używać kontroler. (czasami utworzenie modelu może zająć kilka wywołań wcf). Controller1 -> Mediator -> HeadOfficeWCFProxy Controller2 -> Mediator -> SiteWCFProxy * Więc kontroler prosi o dane (nie wiedząc skąd pochodzą) * Mediator konwertuje i przekazuje żądanie do odpowiednich proxy WCF * Proxy WCF ( s) wykonywać połączenia przez sieć i zwracać wyniki. * Mediator następnie konwertuje wynik(i) na model (w razie potrzeby) za pomocą metody rozszerzającej i zwraca go do kontrolera. * Kontroler renderuje widok za pomocą wspomnianego modelu. To, co tutaj opisałem, dotyczyło tylko strony MVC. Mam podobną konfigurację po stronie usługi WCF, ale korzyści mediatorów są wyraźniejsze. W centrali usługa WCF WCFListener -> Mediator -> DataLayer (LinqToSQL) -> SiteSyncHandler (wysyła zmianę do wszystkich witryn asynchronicznie) -> ThirdPartyContentManagementHandler (przez web service) Teraz deweloperzy, którzy pracowali nad projektem, jak separacja obaw dużo, ponieważ jest bardzo jasne, gdzie wszystko należy i ogranicza kod do minimum w każdej warstwie. Ale wadą aplikacji MVC jest to, że w przypadku wielu wywołań mediator wykonuje tylko jedno wywołanie WCF i nie musi nawet konwertować wyniku (w większości przypadków umowa danych jest odpowiednia do użycia jako model). w sporej ilości jednego kodu płyty kotłowej metodą wkładkową. Mediator tak naprawdę nie dodaje wiele w tym scenariuszu, z wyjątkiem zachowania spójności między kontrolerami. Niektórzy deweloperzy, którzy nie pracowali nad projektem, twierdzą, że w ogóle nie ma potrzeby korzystania z warstwy Mediatora i że wszystko może być obsługiwane przez samych kontrolerów. Oznacza to utrzymywanie odpowiedniego serwera proxy WCF w każdym kontrolerze. Moim zdaniem narusza to zasadę pojedynczej odpowiedzialności. Do czego twierdzą, że SOLID jest bardziej jak zestaw wytycznych i nie należy go ślepo przestrzegać. Którego, choć trochę zgadzam się z tym stwierdzeniem, nie należy go ślepo ignorować. Przyznałem, że termin mediator nie jest tak naprawdę odpowiedni (być może dyrektor lub przekaźnik), ale nadal uważam, że podstawowy projekt jest słuszny i użyłbym go ponownie. To samo można powiedzieć o tych, którzy pracowali nad projektem. Chciałbym wiedzieć, co myślą inni ludzie. Czy jest lepsze rozwiązanie, czy też „przekomplikowałem to”. (Nadal nie zgadzam się, że jest to skomplikowane, to bardzo prosta koncepcja i łatwa w utrzymaniu)


title: UML do przedstawiania obiektów SQL

text: Zagłębiam się w naukę UML. Narzędzie, którego używam, to **ArgoUML**. Czuję się bardzo pewnie, przedstawiając projekty OO za pomocą tego narzędzia. Ale to, co wciąż mnie drażni, to włączenie bazy danych. Co zrobić w UML, aby pokazać strukturę tabeli? Procedury składowane? Itd. itp.


title: Czy można mieć zmienny typ, który nie będzie zbierał śmieci?

text: Zastanawiam się, czy coś takiego może istnieć. Czy może istnieć obiekt, który jest zmienny, ale nie jest oznaczony jako zebrane śmieci (w szczególności tp_flags & Py_TPFLAGS_HAVE_GC ) Mam obiekt podobny do struktury C++, który piszę i chciałbym wiedzieć, czy wszystkie jego elementy członkowskie są niezmienne. Zastanawiam się nad sprawdzeniem flagi Py_TPFLAGS_HAVE_GC, aby to ustalić. Jeśli wszyscy członkowie są niezmienieni, chcę przyspieszyć głębokie kopiowanie, wykonując szybszą, płytszą kopię, ponieważ wiem, że członkowie są niezmienieni, nie powinno to wymagać drogiej głębokiej kopii. Czy to logicznie uzasadnione, czy jest jakiś mityczny typ, który wysadzi mnie tutaj z wody.


title: Czym jest decoupling i do jakich obszarów rozwoju może mieć zastosowanie?

text: Niedawno zauważyłem oddzielenie jako temat w pytaniu i chcę wiedzieć, co to jest i gdzie można go zastosować. Mówiąc „gdzie to może mieć zastosowanie”, mam na myśli: czy ma to znaczenie tylko tam, gdzie zaangażowane są języki kompilowane, takie jak C i Java? Czy powinienem się o tym dowiedzieć/przestudiować jako programista?


title: Licencja Modern.IE VM

text: Firma Microsoft udostępnia niektóre maszyny wirtualne do celów testowych (reklamowane na StackOverflow) i próbuję zrozumieć postanowienia licencyjne. Ten, którego tak naprawdę nie rozumiem, to > 1.b. Możesz używać oprogramowania wyłącznie do celów testowych. Nie możesz używać > oprogramowania do celów komercyjnych. Moje przemyślenia: a) Testowanie strony w kilku przeglądarkach na kilku różnych maszynach wirtualnych wydaje się dość profesjonalnym podejściem. Nie wierzę, że zrobiłoby to wielu prywatnych deweloperów. Oczywiście, że powinni, ale który prywatny deweloper ma na to czas? b) Jeśli tak naprawdę jest to dostępne tylko dla prywatnych deweloperów, jaka jest oferta dla firm robiących to samo? Brakuje mi ogłoszenia usługi płatnej. Moje pytanie jako osoby niebędącej rodzimym użytkownikiem języka angielskiego: Czy testowanie przez firmę jest uważane za cel komercyjny? Czy mogę używać maszyn wirtualnych w firmie do testowania, czy nie?


title: Czy należy tłumaczyć kod źródłowy w podręcznikach itp.?

text: Kilka tygodni temu moja klasa miała przetłumaczyć na język portugalski książkę Real World Haskell. Kiedy robiłem tłumaczenie tekstu i komentarzy, zacząłem się zastanawiać, czy powinienem przetłumaczyć również kod, tak jak sugerował instruktor. Na przykład: dane BookInfo = Book Int String [String] deriving Show stanie się danymi InfoLivro = Livro Int String [String] deriving Show Ponieważ nie czytałem żadnych książek związanych z oprogramowaniem w języku portugalskim, nie wiem, czy jest to powszechne praktyka, ani jeśli należy to robić w ten sposób. Ostatecznie kod jest mieszanką języków (być może przykład w Haskell nie jest dobry, ponieważ możesz szybko utworzyć synonimy, takie jak `type CadeiaDeCaracteres = String`, ale rozumiesz). Więc tak naprawdę nie ma znaczenia, jak bardzo się starasz, będziesz musiał polegać na wcześniejszych doświadczeniach czytelnika z pewnymi podstawowymi angielskimi słowami. Wiedząc o tym, naprawdę nie widzę sensu w tłumaczeniu kodu, ponieważ uczymy się na początku naszego kodowania, że powinien być napisany w uniwersalnym języku. Niemniej jednak, jeśli otaczający tekst (na przykład komentarze i sam tekst w książce) wymaga tłumaczenia, co jest możliwe i wykonalne w tej materii? Czy możesz udzielić mi wskazówek, co robić?


title: Czy powinienem powiedzieć zmarłemu współpracownikowi o jego wadzie „sev 1”?

text: Niedawno odszedł z naszej firmy współpracownik. Przed wyjazdem zakodował komponent, który miał poważny wyciek pamięci, który spowodował awarię produkcji (`OutOfMemoryError` w Javie). Zasadniczo problemem był `HashMap`, który rósł i nigdy nie usuwał wpisów, a rozwiązaniem było zastąpienie `HashMap` implementacją pamięci podręcznej. Z zawodowego punktu widzenia czuję, że powinienem powiadomić go o usterce, aby mógł wyciągnąć naukę z błędu. Z drugiej strony, kiedy ludzie opuszczają firmę, często nie chcą słyszeć o starszych projektach, które zostawili za sobą dla większych i lepszych rzeczy. Jaki jest ogólny protokół w takiej sytuacji?


title: Emacs przestaje pobierać dane wejściowe, gdy plik zostanie zmieniony na dysku

text: Używam Emacs v24.3.1 w systemie Windows 8. Miałem zmianę pliku na dysku, podczas gdy miałem otwarty bufor Emacs z tym plikiem. Gdy tylko spróbuję dokonać zmiany w buforze, w minibuforze pojawia się komunikat. Fileblah.txt zmieniony na dysku; naprawdę edytować bufor? (y, n, r lub C-h) Spodziewam się, że będę w stanie nacisnąć `r`, aby ponownie załadować dyskową wersję pliku, ale nic się nie dzieje. Emacs całkowicie przestaje odpowiadać na dane wejściowe. Żaden z wymienionych kluczy nie działa, ani żadne inne klucze, o ile wiem. Nie mogę "C-g" wyjąć z minibufora. „Alt-F4” nie działa, nie działa „Zamknij okno” z paska zadań. Muszę zabić proces z menedżera zadań. Czy ktoś ma pojęcie, co tu robię źle? W przypadku, gdy różne tryby nie grają ze sobą dobrze, dla odniesienia mój init.el jest tutaj. Nic skomplikowanego. Oto podział: * better-defaults (ido-mode, usuń pasek menu, ujednolicony bufor `forward, saveplace) * tryb lastf * niestandardowy tytuł ramki * tryb linii wizualnej * wymagaj ostatniego znaku nowej linii i usuwania końcowych białych znaków przy zapisie * Tryb przecen z listą automatycznych trybów * Flyspell z zapleczem Aspell * Tryb Powershell z listą automatycznych trybów * Auto-lista trybów Ruby * Tryb marionetek z listą automatycznych trybów * Tryb funkcji (korniszon) z listą automatycznych trybów Konkretny plik był plikiem przecen z włączonym trybem przecen w stylu Github i trybem Flyspell.


title: Kiedy program zorientowany obiektowo jest naprawdę zorientowany obiektowo?

text: Spróbuję wyjaśnić, o co mi chodzi: Powiedzmy, że przedstawiam listę obiektów i potrzebuję odzyskać wybrany obiekt przez użytkownika. Oto klasy, o których mogę teraz pomyśleć: ListViewer Item App [Calling class] W przypadku aplikacji GUI, zwykle kliknięcie na konkretny element jest zaznaczeniem elementu, a w przypadku wiersza poleceń, niektóre dane wejściowe, powiedzmy liczba całkowita reprezentująca ten element. Przejdźmy tutaj do aplikacji wiersza poleceń. Funkcja wyświetla listę wszystkich elementów i czeka na wybór obiektu, czyli liczby całkowitej. Więc tutaj mam wybór, czy wybór będzie pojmowany jako przedmiot? I na podstawie wyboru zwróć obiekt z listy. Czy napisanie tego programu w sposób opisany powyżej sprawia, że jest on naprawdę zorientowany obiektowo? Jeśli tak, to jak? Jeśli nie, dlaczego? A może samo pytanie jest błędne i nie powinienem myśleć w ten sposób?


title: wielodostępność z pewnym udostępnianiem danych

text: Jestem na etapie planowania nowej aplikacji internetowej i mocno skłaniam się ku modelowi wielodostępności. Aplikacja posiada funkcję przechowywania plików, gdzie użytkownik może przesyłać (i operować) plikami. Chciałbym jednak, aby użytkownik mógł udostępniać te pliki. W jaki sposób jest to zazwyczaj realizowane w modelu z wieloma dzierżawcami? Przykładem może być coś w rodzaju google docs. Każdy użytkownik ma swoje własne pliki; mogą edytować, oznaczać i budować kolekcje za pomocą tych plików. Następnie mogą udostępnić dokument lub kolekcję komuś innemu w celu współpracy. Jeśli każdy użytkownik ma własną bazę danych i tabele, jaką strategię zastosować, aby umożliwić tego rodzaju udostępnianie przy jednoczesnej minimalizacji duplikacji plików i powiązanych metadanych?


title: Czy powinienem używać Ruby w wersji 1.8.7 czy 1.9.2 do rozpoczęcia tworzenia aplikacji Railsowych?

text: Zagłębiam się w RoR i widzę, że obecna wersja Railsów (3.0.5) działa zarówno z 1.8.7, jak i 1.9.2. Obecnie mam obie wersje Rubiego zainstalowane przy użyciu RVM, ale zastanawiam się, której wersji powinienem użyć, gdy zagłębiam się w Railsy i zaczynam tworzyć aplikacje. Przypuszczam, że wolałbym korzystać z najnowszej wersji (1.9.2), ale nie znam wystarczająco dobrze technologii, aby poznać wady i zalety używania. Dzięki wielkie!


title: Jak używać BPMN i przypadków użycia oraz innych diagramów razem

text: Zadałem to pytanie na stackoverflow, ale wygląda na to, że to pytanie nie jest tam odpowiednie, więc zamieszczam tutaj do dyskusji. BPMN (ang. Business Process Modeling Notations) służy do modelowania procesów biznesowych za pomocą wizualizacji, dzięki czemu niematerialne pomysły stają się fizycznie konkretne poprzez wyrażanie diagramów BPMN. Pytanie brzmi: **jak zorganizować BPMN za pomocą UML**. Początkowo myślałem o dwóch sposobach organizowania przypadków użycia i diagramu procesów biznesowych: * **1 do jednego/wielu:** Przez mapowanie każdego kroku ("krok" oznacza tu każdy węzeł w diagramie BPMN) na diagramie procesu biznesowego z jeden lub kilka przypadków użycia. Każdy przypadek użycia jest mapowany za pomocą odpowiednich kilku diagramów klas/diagramów komponentów (wolę ten, ponieważ możesz zawrzeć zestaw klas w jeden komponent, który ma wejście i wyjście), kilka diagramów sekwencji (opcjonalnie). Po utworzeniu diagramów klas/sekwencji kod jest pisany/generowany na podstawie modelu. * **Wiele do jednego:** mapując kilka kroków do jednego przypadku użycia. Kolejne kroki są takie same. * **Wiele do wielu:** Na przykład jeden etap procesu biznesowego można zmapować z co najmniej dwoma przypadkami użycia, a te same dwa lub więcej przypadków użycia można zmapować z innymi krokami. Powyższe metody można wykonać za pomocą narzędzia do modelowania, a w moim przypadku korzystam z Enterprise Architect firmy Sparx System. Odkryłem go niedawno i korzystam z jego wersji próbnej, ale kupię go w przyszłości. Mogę zorganizować wiele diagramów przypadków użycia za pomocą jednego kroku diagramu BPMN i kliknąć, aby wyświetlić niezbędne przypadki użycia. Jednak nie robię tego, jeśli obsługuje wiele do wielu przypadków. Po wymyśleniu własnej metody organizowania BPMN i przypadków użycia, przeszukałem Internet i znalazłem dwa inne artykuły, z których każdy sugerował następującą metodę: * **Zamień każdy przypadek użycia w każdy krok diagramów BPMN:** Aby zobrazować, jak udoskonalone jest użycie sprawy pasują do procesu biznesowego. Podoba mi się to podejście, ponieważ proces biznesowy z krokami można modelować, a później każdy krok zamienia się w przypadek użycia. Jeden krok to jeden przypadek użycia. To samo dotyczy mojego mapowania jeden do jednego powyżej. Oryginalna prezentacja jest tutaj: Wizualizacja zestawów przypadków użycia jako procesów BPMN ![Przypadek użycia - mapowanie BPMN](http://i.stack.imgur.com/uxPpf.png) * **Każdy przypadek użycia to dokładnie proces biznesowy:* * Każdy krok w przypadku użycia to każdy krok procesu biznesowego. Oryginalny artykuł jest tutaj: Opisywanie procesów biznesowych za pomocą przypadków użycia ![Przypadek użycia to proces](http://i.stack.imgur.com/jpYVW.png) Wydaje mi się, że nie ma standardowego sposobu sklejania tych artefaktów ( BPMN i przypadki użycia oraz inne schematy) razem. Może to problem związany z zarządzaniem i polegaj bardziej na kreatywnym wykorzystaniu niż na formalnych krokach. **Jakie są razem te diagramy?**


title: Jaka jest geneza terminu „Złoty Mistrz”?

text: Nazwa „Złoty Mistrz” kojarzy się z poziomem zaawansowania w sztukach walki, a może nawet z finalną wersją filmu. Myślę, że wskazówki kontekstowe dostarczają adekwatnego wyjaśnienia wydania Golden Master. Zdefiniowałbym to jako wersję oprogramowania [produktu], która została zatwierdzona jako wersja wydana po wcześniej określonej fazie zakończenia rozwoju i testowania. Jeśli moja definicja jest prawie dokładna, jaka jest geneza terminu Złoty Mistrz? Apple słynie ze swoich kandydatów na iOS, OSX GM i jeszcze nie słyszałem, żeby ktokolwiek używał tego samego terminu.


title: Dlaczego powinienem zadeklarować klasę jako klasę abstrakcyjną?

text: Znam składnię, reguły stosowane do klasy abstrakcyjnej i chcę wiedzieć, jak używać klasy abstrakcyjnej > Klasy abstrakcyjnej nie można utworzyć bezpośrednio, ale można ją rozszerzyć o inną > klasę Jaka jest korzyść z tego? Czym różni się od interfejsu? Wiem, że jedna klasa może implementować wiele interfejsów, ale może rozszerzyć tylko jedną klasę abstrakcyjną. Czy to jedyna różnica między interfejsem a klasą abstrakcyjną? Jestem świadomy korzystania z interfejsu. Nauczyłem się tego z modelu delegowania zdarzeń AWT w Javie. **W jakich sytuacjach powinienem zadeklarować klasę jako klasę abstrakcyjną? Jakie są z tego korzyści?**


title: Czy zwinny sklep może naprawdę zdobyć 12 punktów w teście Joela?

text: Bardzo podoba mi się test Joela, sam go używam i zachęcam moich pracowników i rozmówców do uważnego rozważenia go. Jednak nie sądzę, abym kiedykolwiek zdobył więcej niż 9 punktów, ponieważ kilka punktów wydaje się zaprzeczać Manifestowi Agile, XP i TDD, które są podstawą mojego świata. W szczególności: pytania dotyczące harmonogramu, specyfikacji, testerów i cichych warunków pracy są sprzeczne z tym, co staramy się stworzyć i z wartościami, które przyjęliśmy, aby być naprawdę zwinnym. Więc moje pytanie brzmi, czy prawdziwy sklep Agile może zdobyć 12 punktów? **Edytuj:** Na polecenie osoby udzielającej odpowiedzi poniżej dodaję link do mojego bloga, na którym pierwotnie o tym pisałem i który skłonił mnie do zamieszczenia tutaj pytania. http://simonpalmer.com/2011/03/16/why-i-will-never-score-more-than-9-on-the-joel-test/ Wstawiam to, ponieważ zgadzam się z wieloma co zostało powiedziane poniżej i chciałem zadeklarować moje pełne stanowisko.


title: Czy opiekun github powinien przepisać autora w pull requestach?

text: Z zawodu nie jestem programistą, ale trochę koduję i korzystam z github. Natknąłem się na coś, co wydaje mi się zaskakującą sytuacją. Bardzo dobrze znam git. Jest projekt, w którym znalazłem (mały) błąd, który miał na mnie wpływ. Spędziłem popołudnie, szukając i naprawiając go. Rozdzieliłem repozytorium, zatwierdziłem zmianę i wysłałem żądanie ściągnięcia. Po tym, jak zobaczyłem, że został zamknięty jako „Połączony z gałęzią programistyczną”, stwierdziłem, że wszystko jest w porządku. Przeglądałem dziś repozytorium, przygotowując się do usunięcia mojej gałęzi i nie mogę w ogóle znaleźć miejsca, w którym zatwierdzenie zostało scalone z repozytorium opiekuna. Po pewnym czasie zdaję sobie sprawę, że został dodany jako commit, ale autorem nie jestem już ja. O ile wiem, jedynym sposobem na to byłoby użycie zmiany bazy, zmiany lub innego przepisania historii w celu usunięcia oryginalnego autora. Wydaje mi się to bardzo złe. W najlepszym razie jest to zagmatwane, w najgorszym autor tego repozytorium bierze kredyt za wszystkie zmiany, a wtedy historia pierwotnego kontrybutora zostaje utracona. Znowu jest to mały błąd, nie używam tego do mojego zawodowego CV, wydaje się to po prostu nieuczciwe. Czy to normalne? Czy powinienem coś o tym powiedzieć? Edycja: Wydaje mi się, że generalnie powinienem iść zapytać, więc zrobię to dziś rano. Zgodnie z poniższym żądaniem. Sprawdziłem i mój kod istnieje i został zastosowany dokładnie tak, jak go napisałem (łącznie z komentarzem). Sprawdziłem, że zmieniono zarówno autora, jak i autora. W tym samym czasie, co moje zmiany, została również dodana jedna dodatkowa zmiana. Jest to pojedyncza linijka, która wpłynęłaby na poprawkę, a także na inny kod przed nią. IE dodanie jednej linii nie jest związane z błędem, który naprawiłem. **Aktualizacja** Wygląda na to, że autor utrzymuje gałąź rozwojową i nie chce się z nią scalać ze swojej gałęzi głównej. Przeredagował moje zobowiązanie, aby uniknąć scalenia. Nie martwiłem się o to, że oryginalny branch b/c git jest wystarczająco potężny, aby w razie potrzeby wybrać, przebazować i scalić zatwierdzenia. Czy to typowe na githubie? Czy powinienem skontaktować się z opiekunem projektu, aby zapytać, do której gałęzi zastosować poprawki?


title: Chcę zacząć używać TDD. Jakieś wskazówki dla początkującego?

text: Nigdy nie korzystałem z automatycznego mechanizmu testowania w żadnym z moich projektów i czuję, że wiele mi brakuje. Chcę się poprawić, więc muszę zacząć rozwiązywać problemy, które zaniedbałem w ten sposób i wypróbować Git zamiast utknąć na SVN. Jaki jest dobry sposób na naukę TDD? Prawdopodobnie będę używał Eclipse do programowania w Javie. Słyszałem o JUnit, ale nie wiem, czy jest jeszcze coś, co powinienem rozważyć.


title: Boję się mojej technicznej rozmowy telefonicznej na staż!

text: [EDIT 2.0] Witam wszystkich. To moja druga rozmowa telefoniczna na staż programistyczny. Mój pierwszy był w porządku, ale nie dostałem wymarzonego stażu. Teraz mam obawy związane z nadchodzącym wywiadem. Moje obawy są następujące: 1. Mam 19 lat. Myśl o przeprowadzaniu ze mną wywiadu przez dwóch głównych programistów sprawia, że myślę, że tak mało wiem o tym, co oni chcieliby, abym wiedział. Jakby tyle się spodziewali. 2. Jestem juniorem i mam te ataki paniki, których nie dostałem na innym stażu. Mówię cichutkim głosem: „Tego nie dostałeś. Co sprawia, że myślisz, że dostaniesz ten?”. 3. Boję się, że zamarznę, zapomnę o wszystkim, co wiem i jąkam się jak idiota. Wciąż przeżywam traumę po tym ostatnim, ponieważ bardzo chciałem tego stażu, a nawet bardzo się na niego uczyłem. Kiedy brałem udział w wywiadzie, byłem tak zdenerwowany, że nie mogłem jasno myśleć. W rezultacie nie radziłem sobie tak dobrze, jak wiem, że mogłem. W chwili, w której się rozłączyłem, pomyślałem nawet o lepszym rozwiązaniu pytania podczas rozmowy kwalifikacyjnej! Jakieś wskazówki dla przyszłego stażysty (miejmy nadzieję!)? Dziękuję Ci! PS Przygotowuję się korzystając z tego poradnika do wywiadów telefonicznych.


title: Visual Studio c++ formularze systemu Windows?

text: Odpoczywam w nauce programowania, ponieważ jestem na skraju rozumu, próbując wymyślić następny krok. Chcę móc tworzyć aplikacje formularzy tylko po to, aby testować losowe rzeczy i dać sobie swobodę, jaką czuję dzięki javascript, dlatego nauczyłem się go i czuję się z nim tak dobrze, jak ja. Nie mam jednak pojęcia, co robić w Visual C++. Patrzę teraz na brzydki, szary, pusty formularz i nie mam pojęcia, co kliknąć, a co napisać. Nie wiem też, jak znaleźć jakieś tutoriale, ponieważ jest to dość specyficzna prośba (c++, visual basic, formularze windows). Czy ktoś ma dla mnie jakieś rady? Dziękuję


title: Co jest etyczne/nieetyczne podczas szukania pomocy w sieci przy zadaniach programistycznych?

text: W ciągu ostatniego miesiąca intensywnie korzystałem z sieci Web i Stack Overflow podczas tworzenia mojego końcowego projektu dla mojej klasy C#. Użyłem tak dużo kodu, że sam nie napisałem, że czuję się nieetyczny, nie doceniając ludzi, którzy mi pomogli; lub strony internetowe, które dostarczyły doskonałych przykładów. Czy nieetyczne jest publikowanie pracy, którą stworzyłem, mimo że jej najtrudniejsze problemy rozwiązali inni ludzie? Czy powinienem podziękować tym osobom za pomoc w moim zadaniu? Lub strony internetowe, które podały przykłady?


title: Wywiad z programowaniem: Jak debugować program?

text: Ostatnio zadano mi w wywiadzie następujące pytanie: > Jak debugować program w C++? Zacząłem od wyjaśnienia, że programy mogą zawierać błędy składniowe i semantyczne. Kompilator zgłasza błędy składniowe, które można poprawić. W przypadku błędów semantycznych dostępne są różne debugery. Mówiłem konkretnie o gdb, który jest wierszem poleceń, i debuggerze Visual Studio IDE, który ma GUI i typowe polecenia. Mówiłem również o debugowaniu i wydaniu kodu, o tym, jak asercje powinny być używane do budowania debugowania, jak wyjątki pomagają w automatycznym czyszczeniu i wprowadzaniu programu w poprawny stan oraz jak przydatne może być logowanie (np. za pomocą std::clog). Chcę wiedzieć, czy ta odpowiedź jest kompletna, czy nie. Poza tym chcę usłyszeć, jak inne osoby będą odpowiadać na to pytanie w uporządkowany sposób ? Dziękuję.


title: Automatyczna analiza statyczna a testowanie w białej skrzynce

text: Wiele źródeł zauważa, że automatyczna analiza kodu statycznego obejmuje przepływ danych i przepływ sterowania. Ale te dwa są również uwzględnione w testach białych skrzynek. Czy jest jakaś różnica w automatyzacji? Że w automatycznej analizie statycznej wszystko jest wykonywane przez narzędzia, podczas gdy w testach białej skrzynki osoba tworzy dane, aby przećwiczyć możliwe ścieżki?


title: Jak przestać projektować i rozpocząć architekturę tego projektu zgodnie z sugestią mojego prowadzącego?

text: Jestem młodszym programistą (~3 lata doświadczenia) iw mojej pracy jesteśmy w trakcie projektowania nowego systemu. Mój główny programista będzie głównym architektem, jednak rzucił mi wyzwanie, abym sam spróbował zaprojektować system (równolegle). W trakcie kilku iteracji burzy mózgów i proponowania czegoś, co uważałem za sugestie dotyczące architektury, mój lider przekazał mi informację zwrotną, że większość tego, co robię, to „projektowanie”, a nie „architektowanie”. Opisał różnicę jako architekturę niezależną od implementacji, podczas gdy projekt jest opisem implementacji. Powiedział, że muszę zdjąć kapelusz projektanta i założyć kapelusz architekta. Udzielił mi kilku porad, jak to zrobić, ale chciałbym zapytać również Ciebie: **Jak wyjść z trybu projektanta oprogramowania i zacząć myśleć bardziej jak architekt?** * * * Oto kilka **przykładów** „projektów”, które wymyśliłem, które nie były postrzegane przez mojego kierownika jako związane z architekturą: 1. Wymyśliłem algorytm do ładowania i rozładowywania zasobów z naszego systemu, a mój kierownik powiedział, że algorytmy kategorycznie nie są architekturą. 2. Wymyśliłem zestaw zdarzeń, które system powinien wywoływać iw jakiej kolejności powinien je wywoływać, ale to też nie wydaje się redukować tego jako architektury. Wydaje mi się, że zagłębiam się w szczegóły i nie cofam się wystarczająco daleko. Uważam, że nawet jeśli wymyślę coś, co jest na poziomie architektury, często dochodzę do tego, próbując różnych implementacji i grzebać w szczegółach, a następnie uogólniając i abstrahując. Kiedy opisałem to mojemu liderowi, powiedział, że podchodzę źle: muszę myśleć „z góry na dół”, a nie „z dołu do góry”. * * * Oto kilka **szczegółowych informacji o projekcie** : * Projekt, który tworzymy jest aplikacją webową. * Szacuję około 10-100 tysięcy linii kodu. * Jesteśmy start-upem. Nasz zespół inżynierów to około 3-5 osób. * Najbliższą rzeczą, do której mógłbym porównać naszą aplikację, jest lekki CMS. Ma podobną złożoność i zajmuje się głównie ładowaniem i rozładowywaniem komponentów, zarządzaniem układem i modułami w stylu wtyczek. * Aplikacja jest ajax-y. Użytkownik pobiera klienta raz, a następnie żąda od serwera danych w miarę potrzeb. * Będziemy używać wzorca MVC. * Aplikacja będzie miała uwierzytelnianie. * Nie przejmujemy się zbytnio obsługą starych przeglądarek (uff!), więc chcemy wykorzystać najnowsze i najlepsze, które są i będą się pojawiać. (HTML5, CSS3, WebGL?, Media Source Extensions i wiele więcej!) * * * Oto niektóre **cele projektu** : * Aplikacja musi się skalować. W najbliższym czasie nasi użytkownicy będą od setek do tysięcy, ale planujemy od dziesiątek tysięcy do milionów i więcej. * Mamy nadzieję, że aplikacja będzie dostępna na zawsze. To nie jest rozwiązanie tymczasowe. (Właściwie mamy już rozwiązanie tymczasowe, a to, co projektujemy, jest długoterminowym zamiennikiem tego, co mamy). * Aplikacja powinna być bezpieczna, ponieważ może mieć kontakt z wrażliwymi danymi osobowymi. * Aplikacja musi być stabilna. (Idealnie byłby stabilny na poziomie Gmaila, ale nie musi znajdować się na ekstremie łazika marsjańskiego).


title: Radzenie sobie z menedżerem „Jestem fajny i jesteś głupi”

text: Współpracuję z firmą programistyczną od około 6 miesięcy. Lubię projekty, nad którymi tam pracuję i naprawdę lubię wszystkich ludzi, z wyjątkiem jednego faceta. Ten facet jest sprytny technicznie i jest współzałożycielem firmy. On jest w porządku osobiście (takim, o który nie chciałbyś się zbytnio przejmować), ale sprawy stają się trudne, gdy jest twoim menedżerem. Ogólnie wszystko jest w porządku, ale są chwile, kiedy czuję, że nie jestem traktowany sprawiedliwie: * Nie zastanawia się zbytnio, kiedy popełnia błędy, a kiedy robię coś podobnego, jest bardzo krytyczny. Ostatnio posunął się nawet do stwierdzenia: „Nie jestem pewien, czy mogę ci zaufać w tej funkcji”. Szczegóły tego konkretnego przypadku są następujące: pracowałem nad tą funkcją i już o kilka godzin przekroczyłem moje normalne godziny pracy, a potem postanowiłem przerwać i kontynuować jutro. Używamy git i lubię zatwierdzać zmiany lokalnie i naciskać tylko wtedy, gdy czuję, że są gotowe. Ten menedżer nalega, abym przesłał wszystkie zmiany do centralnego repozytorium (na wypadek awarii dysku twardego). Więc wciskam resztę, a bilet jest oznaczony jako „do przetestowania”. Następnego dnia wchodzę, siada obok mnie i zaczyna narzekać i mówi, że napisałem powyżej. Naprawdę nie wiedziałem, co powiedzieć, próbowałem mu wytłumaczyć, że nadal trwają prace nad biletem, ale wydawał się nie słuchać. * Przerywa mi w międzyczasie, kiedy koduję, co mi nie przeszkadza, ale kiedy robię to samo, jego twarz kręci się tak :| i reaguje tak, jakby jego praca była bardzo ważna, a ja po prostu marnuję jego czas. Prosi mnie, abym zebrał wszystkie pytania, a następnie zadał mu wszystkie pytania, co nie zawsze jest możliwe, ponieważ potrzebujesz wyjaśnienia, zanim będziesz mógł kontynuować implementację funkcji. A kiedy koduję, rozmawia przez telefon ze swoimi klientami obok mnie (kiedy może iść do sali konferencyjnej z laptopem) i nie przejmuje się tym. * Zmusił mnie do przejścia na zupełnie nowe IDE (z Netbeans do komercyjnego IDE, które kosztuje dużo pieniędzy) ze względu na naprawdę małą funkcję (która później odkryłem, że jest również w Netbeans!). Nie zrobiłem z tego wielkiej sprawy, ponieważ równie dobrze czuję się w pracy z tym nowym IDE, ale nie mogłem zdobyć wiedzy naukowej stojącej za jego obsesją. Powiedział, że ta funkcja zapewnia, że jeśli jakakolwiek metoda zostanie zaktualizowana przez programistę, IDE zmieni nazwę metody na czerwoną w miejscach, w których jest używana. Powiedziałem mu, że nie mam problemu, ponieważ zawsze wyszukuję użycie metody w projekcie i upewniam się, że jest ona zaktualizowana. IDE mają nawet funkcje refaktoryzacji dokładnie do tego, ale... * Niedawno zaimplementowałem funkcję do projektu i byłem z tego zadowolony i uważając go za starszego, zapytałem go o komentarze na temat jakości implementacji.. długo się zastanawiał i ciężko, zrobił kilka śmiesznych min, a kiedy nie mógł nic znaleźć, powiedział "mmm, twój program się zawiesi, jeśli JS jest wyłączony" - mylił się, ponieważ upewniłem się, że będzie działał dobrze z wartościami domyślnymi, nawet jeśli JS został wyłączony. Powiedziałem mu to, a potem powiedział „och dobrze”. ALE zabawne jest to, że kilka dni temu zaimplementował coś, a ja sprzeciwiłem się: „Ale to nie zadziała, jeśli JS jest wyłączony”, a jego odpowiedź brzmiała: „Nie musimy się przejmować ludźmi, którzy wyłączają JS” :- / * Kiedy poprosił mnie o zbadanie, czy istnieje sposób na programową modyfikację menu generowanego przez CMS poprzez rozszerzenie CMS, przeprowadziłem badania i powiedziałem mu, że jedynym jest wstrzyknięcie elementu menu za pomocą JavaScript / jQuery, a jego reakcja była taka „ach, to brzydkie i zwariowane, nie do zaakceptowania” i dwa dni później widzę tę funkcję zaimplementowaną w taki sam sposób, jak sugerowałem. Chodzi o to, że jego reakcja w ogóle nie była pełna szacunku, nawet jeśli to, co zaproponowałem, było hacki, to powinien być pełen szacunku, że wiem, co jest hacky i jeśli proponuję coś hacky, musi być ku temu powód. Istnieje wiele innych powodów/przykładów, w których czuję, że nie jestem traktowany sprawiedliwie. Potrzebuję twojej rady, co to jest, że robię źle i jak sobie poradzić z taką sytuacją. Pozostali ludzie w zespole to właściwie bardzo dobrzy ludzie, a ja też nie chcę odchodzić z pracy (chociaż mógłbym, gdybym chciał). Wszystko, czego pragnę, to szacunek i równe traktowanie. Myślałem o rozmowie z tym facetem na spotkaniu twarzą w twarz, ale martwi mnie to, że jego nastawienie może się pogorszyć i utrudnić mi sprawy (ponieważ nie wydaje się być facetem, który myśli, że może się też mylić ). Rozważam również rozmowę z drugim współzałożycielem, ale nie jestem pewien, jak to przyjmie (ponieważ obaj założyciele są przyjaciółmi od zawsze). Dziękuję za przeczytanie długiej wiadomości, naprawdę doceniam twoją pomoc.


title: Jaki interfejs powinien oferować podwójny kontener?

text: Chcę napisać klasę, która oferuje swoim użytkownikom dwie sekwencje elementów. Pierwsza z nich (nazwijmy ją „podstawową”) jest główną klasą i będzie używana przez 80% czasu. Drugi (nazwijmy go "drugorzędnym") jest mniej ważny, ale nadal musi być w tej samej klasie. Pytanie brzmi: jaki interfejs klasa powinna oferować swoim użytkownikom? Patrząc na styl STL, klasa z pojedynczą sekwencją elementów powinna oferować funkcje begin() i end() do przechodzenia oraz funkcje takie jak insert() i erase() do modyfikacji. Ale jak moja klasa powinna zaproponować drugą sekwencję? Na razie mam dwa pomysły: * Udostępnić dwa kontenery użytkownikowi (a co z prawem Demeter?) * Dostarczyć główny kontener z interfejsem STL i wyeksponować tylko drugi. Oto przykład. #include <wektor> klasa A { public: std::vector<int>& primary(); std::wektor<znak>& drugorzędny(); private: std::vector<int> m_primary; std::wektor<znak> m_dodatkowy; }; klasa B { public: std::vector<int>::iterator begin(); std::vector<int>::iterator end(); std::wektor<znak>& drugorzędny(); private: std::vector<int> m_primary; std::wektor<znak> m_dodatkowy; }; // Implementacja klas // ... int main() { // ---------------------------------- ----------------         // Przypadek 1         // ---------------------------- ----------------------- A a; for(auto it = a.primary().begin(); it != a.primary().end();++it) { // ... } for(auto it = a.secondary(). begin(); it != a.secondary().end();++it) { // ... } // -------------------- ------------------------------ // Przypadek 2 // ------------------ ------------------------------------ B b; for(auto it = b.begin(); it != b.end(); ++it) { // ... } for(auto it = b.secondary().begin(); it != b .secondary().end();++it) { // ... } } Jaki jest na to bardziej C++ sposób? Czy jedno jest lepsze od drugiego, czy jest inne rozwiązanie? ## Kontekst Ten problem pojawił się w kontekście ćwiczenia, w którym piszę prosty framework dostępu do bazy danych. Oto klasy biorące udział w pytaniu: * tabela * kolumna * wiersz * pole Klasa tabeli składa się z sekwencji kolumn i innej sekwencji wierszy. Głównym zastosowaniem tabeli jest manipulowanie (dostęp, dodawanie i usuwanie) wierszy. Głębiej w hierarchii wiersz składa się z kolumny i pola, dzięki czemu użytkownik może zapytać o wartość (pole) odpowiadającą danej kolumnie lub nazwie kolumny. Za każdym razem, gdy kolumna jest dodawana/modyfikowana/usuwana z tabeli, każdy wiersz będzie musiał zostać zmodyfikowany, aby odzwierciedlić modyfikację. Chcę, aby interfejs był prosty, rozszerzalny i dobrze komponował się z istniejącym kodem (jak STL czy Boost).


title: Dlaczego więcej języków nie ma możliwości porównania wartości z więcej niż jedną inną wartością?

text: Rozważ następujące kwestie: if(a == b lub c) W większości języków powinno to być zapisane jako: if(a == b lub a == c), co jest nieco kłopotliwe i powtarza informacje. Wiem, że powyższa przykładowa składnia jest nieco niezgrabna, ale jestem pewien, że istnieją lepsze sposoby na przekazanie pomysłu. Dlaczego nie oferuje tego więcej języków? Czy występują problemy z wydajnością lub składnią?


title: Jaki jest najlepszy sposób na nauczenie się przetwarzania obrazu?

text: Jestem studentem ostatniego roku studiów, który nie zajmował się wcześniej zbyt dużym przetwarzaniem obrazu (z wyjątkiem podstawowej kompresji obrazu na smartfonach). W przyszłym semestrze rozpoczynam projekt badawczy dotyczący uczenia maszynowego, który będzie wymagał przetwarzania obrazu biomedycznego. Jaki jest najlepszy sposób na szybkie zapoznanie się z podstawami przetwarzania obrazu w ciągu około dwóch miesięcy? Czy jest to niepraktyczne? Mam wrażenie, że gdybym był dobry w podstawach, łatwiej byłoby mi uczyć się więcej z innych zasobów.


title: Diagram UML dla lokalizacji komponentów

text: Mam zamiar wdrożyć nowy projekt, który będzie zawierał różne komponenty na różnych serwerach iw różnych witrynach/technologiach/itd. Zastanawiałem się tylko, jaki byłby najlepszy sposób na przekazanie tego firmie? Chcę pokazać, że usługa X będzie istnieć na serwerze Y jako usługa systemu Windows, a usługa Z będzie istnieć na serwerze Q jako usługa sieciowa .NET itp.


title: Egzekwowanie standardów kodowania: jakie kompromisy wiążą się z różnymi metodami?

text: Nasz zespół niedawno zgodził się na pewne bardzo lekkie standardy kodowania i potrzebujemy środków do ich egzekwowania. Mamy już dojrzałą praktykę ciągłej integracji, w tym częste, małe ewidencjonowania i wstępnie przetestowane zatwierdzenia. Rozważamy dwie metody implementacji mechanizmu wymuszania: przechwycenie pre-commit SVN lub dedykowana konfiguracja kompilacji na serwerze CI. Oto kompromisy, które do tej pory rozważaliśmy: * Podpięcie SVN ... * (-) wymaga uprawnień administratora serwera SVN do konfiguracji, których nie mamy. Możemy pracować z IT, ale unikanie kosztów ogólnych jest miłe. * (-) wskazuje na skrypt, który chcielibyśmy mieć pod kontrolą wraz z resztą produktu. Nie od razu wiem, jak wskazać poprawny skrypt przechwytujący, biorąc pod uwagę gałęzie, tagi i działanie trunka. * (-) wymaga więcej pracy przy raportowaniu. Skrypt musiałby obsługiwać zarówno generowanie, jak i publikowanie raportu. * (+) daje szybką informację zwrotną. * (+/-) zapewnia twarde wymuszenie: kod się zaewidencjonuje lub nie . Zwykle jest to dobra rzecz (nie bez powodu nazywa się to „egzekwowaniem”), ale może dawać fałszywe alarmy. * Konfiguracja kompilacji CI ... * (-) zużywa czas zarówno na serwerze CI, jak i na agencie. Może być trywialne, ale się sumuje. * (-) wprowadza dodatkowe opóźnienie, dzięki czemu informacje zwrotne są mniej natychmiastowe. * (+) z łatwością obsługuje standardy, które ewoluują w czasie, wskazując wersję skryptu, która istnieje w dowolnej gałęzi, nad którą pracujemy. * (+) zapewnia łatwiejsze raportowanie. Korzystamy już z systemu CI do innych raportów. Dodanie nowego byłoby proste. * (+) konfigurowalne egzekwowanie: w razie potrzeby łatwiej złagodzić wymagania. Możemy zebrać listę naruszeń w celu naprawienia braku pasma lub przekazywać ostrzeżenia o standardach, które przyjmujemy na próbę. Jakie są kompromisy między tymi różnymi metodami w egzekwowaniu tutaj standardów kodowania? **Powiązane** : Czy standardy kodowania powinny być egzekwowane przez serwer CI? \- Podnosi kilka dobrych punktów, ale nie bierze pod uwagę hooków SVN.


title: Czy można pracować z nieufnymi klientami?

text: Jeden z naszych młodszych programistów otrzymał nowego klienta (nie mamy jeszcze klienta, nadal pracujemy z nim, aby sprawdzić, czy możemy spełnić jego potrzeby), a młodszy programista powiedział, że klient nas zatrudni, jeśli będziemy mogli wykonywać pracę nad swoim projektem bez uzyskiwania dostępu do swojego serwera. Odbyłem bezpośrednią rozmowę z klientem, który, jak się okazało, wcześniej ukradł kod jakiejś firmie offshore, którą zlecił na zewnątrz. To sprawiło, że stałam się bardziej współczująca, ale nadal mam mieszane uczucia. Z jednej strony chcę udowodnić klientowi, że nie wszyscy jesteśmy złymi jabłkami. Również jeśli wykonamy z nim dobrą robotę, zyskujemy lojalnego klienta, który zatrudni nas do wszystkich swoich projektów. Nie słyszałem o tym wcześniej, ale wydaje mi się, że zdarza się to częściej, niż wszyscy chcielibyśmy przyznać. Z drugiej strony niechętnie zgadzam się na współpracę z nim, ponieważ czas oddelegowania będzie koszmarem i nigdzie w mojej karierze lub edukacji nikt mnie nie nauczył, jak pracować z klientami takimi jak on. Ja (lub młodszy programista) musiałbym napisać szczegółowy opis tego, co dokładnie zrobić ze źródłem, aby je wdrożyć, a to jest irytujące, gdy sam mógłbym wdrożyć i przetestować całość w godzinę. Jak powiedziałem, nigdy wcześniej nie miałem z tym do czynienia (podpisujemy klauzulę o nieujawnianiu informacji, ale najwyraźniej tak samo zrobiła firma offshore przed nami). Nie jesteśmy w pełni zarezerwowani, więc nie mam natychmiastowego zastępstwa, ale też nie błagamy o pracę i zastanawiam się, czy praca w tak ograniczonym środowisku jest warta zachodu. Inną stroną jest to, że samo doświadczenie może być dla nas satysfakcjonujące, ale czy warto je mieć, skoro jest nawet prawdopodobne, że w najbliższym czasie zdobędziemy podobnego klienta. Czy w ogóle oczekuje się od nas przestrzegania takich klientów? Więc skoro nie mam z tym żadnego doświadczenia z pierwszej ręki i zdecydowanie nie było to omawiane w szkole, jak ci z dłuższym doświadczeniem w pracy z klientami poradziliby sobie z takim nieufnym klientem? Czy w ogóle przyjąłbyś tę pracę?


title: Duże wstawki wsadowe MySQL z PHP: Uruchom wstawkę ze skryptu lub zapisz jako plik SQL?

text: Mamy duży zbiór danych, który obecnie znajduje się w wielu arkuszach kalkulacyjnych. Otrzymałem zadanie umieszczenia części tych danych w naszej bazie danych MySQL. Kiedy wszystko zostanie powiedziane i zrobione, prawdopodobnie wstawię około 3 milionów wierszy. Zamierzam zebrać wstawki w partiach około ćwierć miliona (przetwarzając je za pomocą PHP). Początkowo planowałem po prostu uruchomić/wysłać te wsadowe WSTAWKI bezpośrednio z mojego skryptu. Jednak ostatnio pomyślałem o tym, by faktycznie wypisać WSTAWKI do plików _.sql_ w celu późniejszego importowania. Próbowałem to trochę pogooglować ... nie znalazłem wiele. Czy są jakieś prawdziwe plusy/przeciwy w jedną lub drugą stronę? Jeśli nie, to jestem skłonny trzymać się mojego pierwotnego planu. W przeciwnym razie jestem całkowicie otwarty na sugestie.


title: Jak budować całkowicie modułowe aplikacje internetowe

text: W nadchodzących miesiącach zamierzamy rozpocząć projekt, w którym weźmiemy system, który zbudowaliśmy dla klienta (v1) i przebudujemy go od podstaw. Naszym celem w v2 jest uczynienie go modułowym, tak aby ten konkretny klient miał swój własny zestaw modułów, których używa, a następnie inny klient może używać zupełnie innego zestawu modułów. Sztuczka polega na tym, że firma A może mieć szereg modułów kasowych i użytkowników, które zmieniają sposób działania tego systemu. Firma B może trzymać się standardowej procedury kasy, ale dostosować sposób przeglądania produktów. Jakie są dobre podejścia do architektury aplikacji, gdy budujesz aplikację od podstaw, która ma mieć „rdzeń”, który jest dzielony między wszystkich klientów, jednocześnie zachowując elastyczność w zakresie modyfikowania czegokolwiek specjalnie dla klienta? Widziałem haki CodeIgnitera i nie sądzę, żeby to było dobre rozwiązanie, ponieważ moglibyśmy skończyć z 250 haczykami, a wciąż nie jest wystarczająco elastyczny. Jakie są inne rozwiązania? Najlepiej byłoby, gdyby nie trzeba było rysować linii na piasku.


title: Czy są dostępne frameworki do rysowania za pomocą CSS?

text: Zdaję sobie sprawę, że to brzmi głupio. Pozwólcie, że wyjaśnię: właśnie natknąłem się na tę stronę o używaniu elementów CSS do tworzenia kształtów - kwadratu, koła, trójkąta, gwiazdy, yin-yang (yin-yang!) itp. przy użyciu pseudo elementów. Mając w przeszłości problemy z rysowaniem HTML5 Canvas, od razu pomyślałem, że jakaś kombinacja pseudoelementów JavaScript i CSS powinna być w stanie narysować prawie wszystko. Więc najpierw wygooglowałem "Fraktale CSS". Nie ma kości. Potem "Fraktale JS". Trochę kości, ale nie to, czego szukałem. Czy jestem szalony, czy jest tu potencjał? jQuery może dodawać i usuwać tysiące elementów z DOM przez cały dzień. Wydaje mi się, że — biorąc pod uwagę istnienie trójkątów za pomocą czystego CSS — istnieje potencjał ładnego mechanizmu rysowania (2D i 3D) bez Canvas. Wszelkie przemyślenia, schematy, samouczki, białe księgi itp. będą mile widziane!


title: Samoczynna funkcja anonimowa a prototyp

text: W JavaScript istnieje kilka wyraźnie widocznych technik tworzenia i zarządzania klasami/przestrzeniami nazw w javascript. Jestem ciekaw, jakie sytuacje uzasadniają użycie jednej techniki kontra drugiej. Chcę wybrać jedną i iść do przodu. Piszę kod korporacyjny, który jest utrzymywany i udostępniany w wielu zespołach, i chcę wiedzieć, jaka jest najlepsza praktyka podczas pisania możliwego do utrzymania kodu javascript ? Zwykle preferuję samowykonalne funkcje anonimowe, jednak jestem ciekaw, jakie głosowanie społeczności dotyczy tych technik. **Prototype :** function obj() { } obj.prototype.test = function() { alert('Hello?'); }; var obj2 = nowy obj(); obj2.test(); **Samozamykająca się anonimowa funkcja :** //Samozamykająca się anonimowa funkcja (function( skillet, $, undefined ) { //Właściwość prywatna var isHot = true; //Właściwość publiczna skillet.ingredient = "Bekonowe paski"; / /Metoda publiczna skillet.fry = function() { var oliveOil; addItem( "\t\n Masło \n\t" ); addItem( oliveOil ); console.log( "Frying" + skillet.ingredient ); }; / /Metoda prywatna function addItem( item ) { if ( item !== undefined ) { console.log( "Dodawanie " + $.trim(item) ); } } }( window.skilet = window.skilet || {}, jQuery)); //Właściwości publiczne console.log( skillet.ingredient ); //Bekonowe paski //Metody publiczne skillet.fry(); //Dodawanie masła i strzępiących się pasków boczku //Dodawanie własności publicznej skillet.quantity = "12"; console.log( skillet.ilość ); //12 //Dodanie nowej funkcji do Skillet (function( skillet, $, undefined ) { //Właściwość prywatna var kwotaOfGrease = "1 kubek"; //Metoda publiczna skillet.toString = function() { console.log( skillet .quantity + " " + skillet.ingredient + " & " + numberOfGrease + " of Grease" ); console.log( isHot ? "Hot" : "Cold" ); }; }( window.skilet = window.skillet || {}, jQuery)); //koniec definicji patelni try { //12 paski bekonu i 1 filiżanka smaru patelnia.toString(); //Zgłasza wyjątek } catch(e) { console.log(e.message); //isHot nie jest zdefiniowany } Wydaje mi się, że powinienem wspomnieć, iż Self-Executing Anonymous Function jest wzorcem używanym przez zespół jQuery. **Aktualizuj** Kiedy zadałem to pytanie, nie do końca zdawałem sobie sprawę z wagi tego, co starałem się zrozumieć. Prawdziwym problemem jest to, czy używać new do tworzenia instancji swoich obiektów, czy używać wzorców, które nie wymagają konstruktorów/użycia słowa kluczowego `new`. Dodałem własną odpowiedź, ponieważ moim zdaniem powinniśmy skorzystać ze wzorców, które nie używają słowa kluczowego `new`. Aby uzyskać więcej informacji, zobacz moją odpowiedź.


title: Dlaczego wyłącznie UNIX jest nauczany na kursach dotyczących systemów operacyjnych uniwersytetów?

text: Nie jestem pewien, czy można tu zadać to pytanie, ale mimo to. Prawie każdy kurs dotyczący systemów operacyjnych lub programowania systemów jest prowadzony wyłącznie przy użyciu systemu UNIX. Zastanawiam się, jakie są tego powody? Dlaczego Windows nie bierze co najmniej połowy tych kursów?


title: Push vs Poll, gdy dopuszczalne jest duże opóźnienie (godziny)

text: W dzisiejszych czasach wydaje się zdroworozsądkowe, że odpytywanie jest złą praktyką, a pchanie jest drogą do zrobienia podczas tworzenia aplikacji mobilnych, które wymagają ciągłego odbierania danych ze zdalnego serwera. Wszystkie większe sklepy mobilne udostępniają swoje wersje usługi powiadomień push: * Usługa powiadomień push Apple * Usługa przesyłania wiadomości w chmurze Google dla Androida * Usługa powiadomień push firmy Microsoft Zastanawiam się jednak, w jakim stopniu to założenie jest prawdziwe. Mam na myśli to, że jeśli mam aplikację, która odpytuje zdalny serwer tylko kilka razy dziennie i do której „powiadomień” nie trzeba dostarczać od razu (dopuszczalne jest duże opóźnienie), to czy byłaby to dobra decyzja odpytywać o dane zamiast je przepychać? Z góry dziękuję!


title: Tagi lub określić wersję?

text: W mojej firmie mamy twoją typową strukturę svn. Każdy projekt posiada odgałęzienia, tagi i pień. repozytorium -Projekt A * linia * gałęzie * tagi -Projekt B * linia główna * gałęzie * tagi -Projekt C * linia główna * gałęzie * tagi -Projekt D * linia główna * gałęzie * tagi -Aplikacja 1 * linia główna * gałęzie * tagi podstawowa funkcjonalność, z której korzystają prawie wszystkie nasze inne projekty. D może również zależeć od C i B, a aplikacja 1 używa ich wszystkich. Zauważ, że mamy o wiele więcej bibliotek i aplikacji niż ilustrowałem powyżej, ale wszystko robi się w ten sam sposób. Zespoły wygenerowane przez budowanie projektu A są zawarte w potrzebnych projektach biblioteki lub aplikacji jako zewnętrzne. Takich bibliotek mamy sporo. To, co robiliśmy po wydaniu, to oznaczanie gałęzi RC, które utworzyliśmy dla każdego projektu używanego przez aplikację, a następnie stają się one tagami. Oczywiście jest to sporo pracy, ponieważ upewniamy się, że tagi wskazują tylko na inne tagi, a Ty zaczynasz od utworzenia tagu dla Projektu A, sprawiając, że inne rzeczy na to wskazują itd., Pomysł polega na tym, że chcemy odgałęziać się od tagi powinny być wymagane przed wydaniem kolejnej funkcji. Biorąc pod uwagę ilość wysiłku, jaki można włożyć w zebranie tego wszystkiego razem, jedną z propozycji jest oznaczenie tylko RC aplikacji i dla wszystkich zewnętrznych wskazań do określonej wersji. Jeśli potrzebujemy utworzyć gałąź, aby naprawić jedną z bibliotek, odgałęźnij się od tej wersji i wykonaj pracę. Nie jestem temu przeciwny, ponieważ nie chciałbym tracić czasu na zdobywanie wszystkich tagów dla wszystkich ustawień projektów, ale chciałem zapytać, czy ktoś może wymyślić jakieś pułapki tego podejścia? Czy jest jakiś powód, aby tworzyć te tagi zamiast przypinania ich do określonej wersji?


title: Czy możemy ergonomicznie porównywać języki programowania?

text: Na przykład, czy Python byłby bardziej ergonomicznym językiem programowania, ponieważ nie zmusza cię do tworzenia nawiasów klamrowych, które wymagają klawisza AltGr. Również Python zwykle wymaga mniej kodu, aby osiągnąć to samo, czy też jestem skłonny do Pythona, a PHP jest w rzeczywistości językiem ergonomicznym i wygodnym, mimo że zmusza programistę do używania klawisza AltGr? Czy zmuszanie programisty do używania klawisza AltGr nie jest zbyt ergonomiczne?


title: Znaczenie makefile w c++ i między platformami

text: Jestem nowy w c++ i chciałem poznać kilka pytań dotyczących makefile. 1) Czy pisanie pliku makefile jest naprawdę ważne? Mam na myśli, że istnieje wiele IDE, które robią to automatycznie. Poza tym, czy ludzie zajmujący się programowaniem piszą pliki makefile, czy używają automatyzacji? 2) Czy powinienem nauczyć się GNU make czy czegoś innego jak cmake lub inne? Czy ktoś może wskazać ich plusy i minusy?


title: Czy sprawiedliwe jest patentowanie obejścia?

text: Opracowując sterownik FAT32 dla mojego bootloadera, pomyślałem, że uzupełnię go, dodając obsługę długich nazw plików. Podczas rozglądania się za jakąś specyfikacją znalazłem również artykuły o Microsoft pozywającym o naruszenie swoich patentów na coś, co w zasadzie jest obejściem problemu. Wiedza o tych wydarzeniach sprawiła, że pomyślałem: czy uczciwe jest patentowanie rzeczy _które są_ obejściami?


title: Czy legalne jest rozpowszechnianie plików EXE w folderze system32 z moim produktem?

text: Zajmuję się tworzeniem produktu związanego z poligrafią. Aby działał poprawnie we wszystkich wersjach systemu Windows muszę dołączyć kilka plików exe (lpr.exe) z folderu system32. Więc muszę wiedzieć, że dystrybucja tych plików exe z moim produktem jest legalna.


title: Wybór narzędzia do przeglądu kodu

text: Jesteśmy startupem, który chce przejść z Fogbugz/Kiln na nowy system śledzenia problemów/weryfikacji kodu. Jesteśmy bardzo zadowoleni z Jira, zwłaszcza z konfigurowalności, ale jesteśmy niezdecydowani co do narzędzia do przeglądu kodu. Testowaliśmy Bitbucket, ale nie pasuje on dobrze do naszego przepływu pracy. Oto problemy, które zidentyfikowaliśmy w BB: 1. Komentarze mogą być trudne do znalezienia: * gdy komentujesz kod niewidoczny w diff * gdy skomentowany kod zostanie później zmieniony * przeglądanie pełnego pliku nie zawiera komentarzy ( również nie pokazuje zmian) * Przeglądanie komentarzy do poszczególnych zatwierdzeń może być uciążliwe 2. Mamy realizatora scalającego różnicę i zamykającego problem, podczas gdy pull requesty są bardziej dopasowane do modelu open source, w którym ktoś z uprawnieniami do zatwierdzeń łączy 3. Chcielibyśmy zautomatyzować tworzenie przeglądu kodu (zarówno z Jira, jak i z wiersza poleceń) 4. Brak podświetlania składni 5. Gdy pull request przekroczy określony rozmiar, BB nie pokaże całości i musisz zobaczyć poszczególne commits 6. Łączenie pull requestów BB z problemami Jira jest trochę kiepskie: mamy pole URL pull requesta w Jira, ale to nie działa, gdy są zmiany w wielu repozytoriach. Czy ktoś ma jakieś dobre sugestie biorąc pod uwagę powyższe? Mamy napięty budżet, a integracja z Jira to duży plus. Mamy również wiele zatwierdzeń na wydanie i chcielibyśmy mieć możliwość przeglądania poszczególnych zatwierdzeń w przeglądzie. Warto również zauważyć, że dla każdego wydania mamy osobnego recenzenta i testera.


title: Najlepsze praktyki dotyczące dokumentowania kodu ASP.NET

text: Jakieś preferencje dla programistów Asp.Net dotyczące sposobu dokumentowania ich kodu? Czytam XML z Sandcastle to dobry sposób. Czego używasz?


title: Czym jest ta dziedzina nauki?

text: Załóżmy, że mam sytuację, w której projektuję stronę internetową dla sprzedawcy obuwia. Mają różne marki i rodzaje butów i oczywiście chcą mieć naprawdę dobrą funkcję wyszukiwania. Są więc różne właściwości, jakie mogą mieć buty. Mogą mieć wyłączne właściwości, takie jak rozmiar, szerokość, płeć i dzieci/dorośli. Lub mogą mieć niewyłączne właściwości, takie jak kolor (mogą być dwa lub więcej kolorów na bucie). Niektóre kategorie mogą kolidować z innymi, takimi jak „sukienka” i „codzienny” (but nie może być jednocześnie obuwiem eleganckim i tenisówką (pomijając w tym przykładzie buty „komfortowe”)), podczas gdy jeszcze nie kolidują z nimi. inne, takie jak „sukienka” i „but” (but może być butem do sukienki). Wyjątkowe właściwości są łatwe do modelowania, ale co z potencjalnie sprzecznymi właściwościami? Czy byłby to problem dla teorii mnogości? Jak ogólnie nazwałby się ten rodzaj informatyki stosowanej? Modelowanie danych, czy coś bardziej konkretnego? Chcę przejść do bardziej abstrakcyjnych zasad filozoficznych, takich jak wyłączne i niewyłączne właściwości, i zobaczyć, jak te zasady są implementowane w kodzie, strukturach danych i schematach baz danych. Dobrym przykładem tego, o czym mówię, jest zmodyfikowany algorytm przechodzenia przez drzewo zamówień przedpremierowych. To świetny sposób na stworzenie zagnieżdżonego hierarchicznego systemu kategoryzacji. Masz więc prawdziwy problem organizacyjny: kategorie, a potem masz strukturę danych, która modeluje ten problem. Gdzie mogę dowiedzieć się więcej o tego typu rzeczach?


title: Operatory logiczne

text: Typowy język programowania nawiasów klamrowych ma dwa typy AND i OR: logiczne i bitowe. `&&` i `||` dla operacji logicznych oraz `&` i `|` dla operacji bitowych. Operacje logiczne są częściej używane niż operacje bitowe, dlaczego operacje logiczne trwają dłużej? Czy uważasz, że należy je zamienić?


title: Jakieś inne przewodniki, takie jak Dlaczego jest przewodnik po Ruby i Naucz się, co Haskell?

text: Szukałem przewodników, z którymi mógłbym zacząć programować, jestem studentem college'u i uczę się Ruby jako mojego pierwszego języka (pytanie poboczne, czy to dobry początek?). Znalazłem przewodnik _Dlaczego po Ruby i znalazłem też Learn You Haskell (który oczywiście nie jest Ruby) i byłem ciekaw, czy jest jeszcze więcej takich przewodników/książek, darmowych i przyjemnych do czytania? Tylko do przyszłych lektur i do poznania. Czy czytanie książki lub przewodnika nauczy mnie programowania, czy muszę po prostu przeskakiwać od jednej książki do drugiej, aż zrozumiem koncepcje, ponieważ czuję, że większość książek skupia się na rzeczach teoretycznych, a ja właściwie nie uczę się z nich zbyt wiele programowania. Czy istnieją sposoby na naukę programowania „po prostu zrób to”? Na przykład, czy po prostu siedzę tutaj i zaczynam pisać zły kod, dopóki nie wyzdrowieję, czy też wyjdę i znajdę jakiś kod i go zmienię? Bo ostatecznie chcę napisać własny kod, ale chcę zobaczyć kilka dobrych przykładów.


title: Podstawy matematyczne testowania oprogramowania?

text: Na moim kursie inżynierii oprogramowania ostatnio (krótko) omawialiśmy testowanie. W trakcie dyskusji pojawiły się pewne tematy, które sprawiły, że zacząłem się zastanawiać nad matematyką leżącą u podstaw testowania oprogramowania (takie jak dokładniejsze i bardziej zgrubne zestawy testowe, używanie klas równoważności do podziału nieskończonych przestrzeni wejściowych na zestawy „testowalne” itp.). Czy są dostępne zasoby eksplorujące matematykę stojącą za testowaniem oprogramowania?


title: dokeryzować klasyczną aplikację webową opartą na bazie danych - jeden czy wiele kontenerów?

text: Mam klasyczną aplikację internetową Java. Składa się z bazy danych (PostgreSQL), kontenera serwletów (Tomcat) i mojego kodu (wdrożonego na Tomcat jako plik *.war). Chcę go spakować/wdrożyć za pomocą Dockera (na razie głównie do testowania), ale nie jestem pewien, jaki byłby najlepszy sposób na jego „mapowanie”. Moim początkowym pomysłem było stworzenie aplikacji w pudełku - zdefiniowanie kontenera z Javą, Postgresem i Tomcatem, odsłaniając tylko port http. Dalsza lektura dokumentacji Dockera pokazuje, że chociaż jest to możliwe (zainstaluj i uruchom nadzorowany jako pojedynczy proces na pierwszym planie, uruchom zarówno Postgresa, jak i Tomcata), prawdopodobnie nie jest to zamierzone użycie. Idąc zgodnie z duchem samouczków, powinienem prawdopodobnie stworzyć kontener dla Postgresa, drugi dla Tomcata i kontener na dane do przechowywania kodu aplikacji (moje *.war) i plików bazy danych. Oznaczałoby to więcej niż 3 kontenery (czy pliki db i *.war współdzielą ten sam kontener danych?) Jaka jest tutaj powszechna praktyka? Ponieważ nie mam wcześniejszego doświadczenia z Dockerem, jakich pułapek mogę się spodziewać po każdym podejściu? Czy jest jakieś inne podejście, którego mi brakuje?


title: Czy w PHP powinienem usuwać obiekty natychmiast po użyciu?

text: Czytałem w _PHP Advanced and Object Oriented Programming_ Larry'ego Ullmana, że dobrą praktyką programistyczną jest usuwanie obiektu natychmiast po użyciu, ale powód nie jest podany nigdzie. Jestem studentem web developera i obiekty w aplikacjach webowych są usuwane automatycznie zaraz po zakończeniu skryptu. Tak więc wydaje się, że nie ma dobrego powodu, aby usuwać je ręcznie. Moje pytanie brzmi więc, jakie są dobre powody, aby usuwać niepotrzebne obiekty po użyciu innych, które ślepo przestrzegają konwencji?


title: Dlaczego weryfikacja nie obejmuje rzeczywistych testów?

text: Po przeczytaniu dużo na ten temat -- na przykład na tej stronie Podstawy testowania oprogramowania na temat weryfikacji i walidacji oraz Testowanie oprogramowania i zapewnianie jakości: Teoria i praktyka autorstwa Naika i Tripathy \--- Nadal tego nie rozumiem. Weryfikacja powinna udowodnić, że budujesz właściwy produkt, podczas gdy walidacja dowodzi, że zbudowałeś właściwy produkt. Jednak tylko techniki statyczne (przeglądy kodu, sprawdzanie wymagań...) są wymieniane jako metody weryfikacji. Jak możesz stwierdzić, czy jest poprawnie zaimplementowany, jeśli go nie testujesz? Mówi się, że weryfikacja zapewnia, że produkt spełnia określone wymagania. Ponownie, jeśli funkcja jest określona, aby jakoś działała, tylko testując, mogę powiedzieć, że działa. Czy ktoś mógłby mi to wyjaśnić?


title: Czy w branży jest zapotrzebowanie na programistów, którzy nie mają doświadczenia w GUI?

text: Czy w branży nadal istnieje zapotrzebowanie na programistów tworzących oprogramowanie bez GUI? Czy nadal istnieje zapotrzebowanie na pracę? Pytam tylko dlatego, że dużo oprogramowania dla siebie piszę w C. Używam głównie FreeBSD bez GUI. Moje oprogramowanie przez większość czasu służy do eksploracji danych, automatyzacji i marketingu, ponieważ jest to dziedzina, w której pracuję. Uważam, że GUI nie jest potrzebny i czuję się komfortowo pracując na konsoli. Nigdy nie pracowałem w firmie jako programista, ale czy w branży masz oddanych programistów, którzy pracują wyłącznie na GUI i innych, którzy piszą logikę?


title: Czy tabele przeglądowe wyliczające ciągi mają klucz podstawowy będący liczbą całkowitą?

text: Kiedy poznałem relacyjne bazy danych, prof. powiedział, że „prawie zawsze” chciałoby się sztuczny int jako klucz podstawowy w tabeli, ale nie sprecyzował, jakie są wyjątki. W pewnym momencie przestałem używać ich do tabel połączeń i nigdy nie miałem problemu. Teraz tworzę bazę danych z wieloma tabelami odnośników i zastanawiam się, czy jest to przypadek, w którym pominięcie sztucznych kluczy nie zapewniłoby czystszego projektu i prostego programowania. Zabawkowy przykład: załóżmy, że jest to makieta interfejsu użytkownika, który chcę osiągnąć. ![przykład widoku interfejsu użytkownika](http://i.stack.imgur.com/wkZCW.png) Opcja projektowania ze sztucznymi identyfikatorami to (Typ jest kluczem obcym): LiteraryWork Title Type Kubuś Puchatek 1 Słowik i Rose 2 Snowwhite 2 LiteraryWorkType ID TypeName 1 Novel 2 Fairy Tale A opcja bez nich używa samej nazwy Type jako klucza (ponownie kolumna Type jest poprawnie zadeklarowana jako klucz obcy): LiteraryWork Title Type Kubuś Puchatek Powieść Nightingale and the Rose Fairy Tale Snowwhite Fairy Tale LiteraryWorkType TypeName Novel Fairy Tale Zwykle korzystam z drugiej opcji, ponieważ potrzebowałbym jednego sprzężenia mniej podczas wyświetlania danych na ekranie. (Nie chcę całkowicie pozbywać się tabeli przeglądowej, ponieważ chcę mieć możliwość ograniczenia wartości wprowadzanych przez użytkowników, na przykład poprzez udostępnienie im listy rozwijanej powiązanej z tabelą przeglądową). Jedyną wadą, o której mogę pomyśleć, jest to, że gdy interesariusz mówi „ale chcę, aby mój interfejs mówił „historia”, a nie „bajka”, musiałbym zaktualizować wszystkie wiersze danych w tabeli „Praca Literacka”. Mogę z tym żyć, ponieważ nie spodziewam się, że w moim przypadku będzie się to często zdarzać. Czy pierwszy projekt ma jakieś inne zalety, których mi brakuje? Która z tych dwóch opcji jest uważana za najlepszą praktykę i dlaczego? **Edit2** Jak rozumiem, istniejące odpowiedzi boją się, że próbuję przełamać normalizację, jak w LiteraryWork Title Type LiteraryWorkTypeIsFiction Powieść Kubuś Puchatek Tak Słowik i Bajka o Róży Tak Bajka Śnieżnobiała Tak Aby było jasne : powyższe **nie** jest tym, co próbuję zrobić. Zamiast tego, gdyby naprawdę było więcej informacji dotyczących LiteraryWorkType i używałem identyfikatorów ciągów, zapisywałbym to w ten sposób: LiteraryWork Title Type Kubuś Puchatek Powieść Słowik i Różana Bajka Śnieżnobiała Bajka LiteraryWorkType TypeName IsFiction Novel Yes Fairy Tale Tak Dokument konferencyjny Nie Jedyna różnica w stosunku do „typowego” projektu bazy danych polega na tym, że identyfikatorem jest nvarchar, a nie liczba całkowita. Co z pewnością ma swoje wady w zakresie potrzebnego przechowywania, jak wskazano, ale nie widzę, która reguła normalizacji ma to boleć. Ale pomijając ten przykład, nie próbuję używać identyfikatorów ciągów, gdy w rzeczywistości jest więcej informacji do zarejestrowania o LiteraryWorkType (tak, że LiteraryWorkType należy uznać za jednostkę samą w sobie). Mówię o przypadkach tak prostych, jak przykład zabawki, który podałem na początku: cała druga tabela istnieje tylko dlatego, że SQL nie ma typu „enum”, a każdy rekord danych w nim zawiera tylko jedno słowo, unikatowe między rekordami.


title: Jak serwery internetowe identyfikują klienta

text: Widziałem na niektórych stronach, które mówią, że na przykład wiele głosów/wyświetleń z tego samego komputera zostanie zaniedbanych/ukaranych itp. Na przykład polubienie strony na Facebooku lub wideo z YouTube z tego samego komputera (różne konta) nie zwiększy jej wartości (zgodnie z moją wiedzą). Jak te strony identyfikują fałszywe głosy? Potrzebuję tylko kierunku.


title: Czy jest jakaś przewaga wydajności w kopiowaniu sesji do zmiennej?

text: Mam sporą liczbę elementów w sesji i zastanawiam się, czy są jakieś korzyści z kopiowania zmiennej sesji do normalnej zmiennej php (w celu jak najszybszego zamknięcia pliku sesji), a następnie wykonywania stamtąd jakichkolwiek wywołań . Coś takiego: session_start(); $skopiowana sesja = $_SESJA; session_write_close(); if (isset($copiedSessionData['foo'])){... } ... 1. Szukam sposobów testowania wydajności na tym. 2. Czy ma to sens? 3. Czy istnieje próg rentowności, w którym pomaga / nie pomaga?


title: Czy istnieją standardowe przewodniki po stylu dla PHP?

text: Pracowałem w bardzo małym zespole zajmującym się rozwojem PHP i używaliśmy przewodnika stylu ad-hoc „Invented Here”. Teraz, gdy nasz zespół i baza kodu się rozrasta, chcielibyśmy skorzystać z szerzej używanego przewodnika po stylu, który byłby, jeśli nie oficjalnym, standardem de facto używanym w wielu społecznościach PHP. Czy istnieje coś takiego, jak istnieje w C/C++/Java/Javascript/etc. kręgi ?


title: Dlaczego kod open source?

text: Jakie powody mają firmy dla bibliotek i aplikacji typu open source? Może to umożliwić programiście lepsze zrozumienie kodu, ale czy pozwoliłoby to ludziom znaleźć i wykorzystać luki w bibliotece lub aplikacji?


Nie znajduję w sieci żadnego głębokiego wyjaśnienia na temat porównania ElasticSearch i baz danych wykresów. Oba są zoptymalizowane pod kątem przechodzenia danych. ElasticSearch wydaje się być zoptymalizowany pod kątem analityki. Jednak Neo4j jest również oparty na Lucene do zarządzania indeksami i niektórymi funkcjami pełnotekstowymi. Dlaczego miałbym używać ElasticSearch, jeśli już używam grafowej bazy danych? W moim przypadku używam Neo4j do budowy sieci społecznościowej. Jakie realne korzyści może przynieść ElasticSearch? **AKTUALIZACJA ----------** Właśnie znalazłem ten akapit: > Istnieje mnóstwo przypadków, w których elasticsearch jest użyteczny. Niektóre przypadki użycia bardziej > wyraźnie tego wymagają niż inne. Poniżej wymieniono niektóre zadania, do których > elasticsearch jest szczególnie przydatny. > > Wyszukiwanie dużej liczby opisów produktów w celu uzyskania najlepszego dopasowania > do konkretnej frazy (powiedzmy „nóż szefa kuchni”) i zwracanie najlepszych wyników Biorąc pod uwagę > poprzedni przykład, z podziałem na różne działy, w których pojawia się „nóż > szefa kuchni” (patrz W dalszej części tej książki) Wyszukiwanie w tekście słów > które brzmią jak „sezon” Automatyczne uzupełnianie pola wyszukiwania na podstawie częściowo > wpisanych słów na podstawie wcześniej wprowadzonych wyszukiwań z uwzględnieniem błędnych > pisowni Przechowywanie dużej ilości częściowo ustrukturyzowanych ( JSON) dane w > sposób rozproszony, z określonym poziomem redundancji w klastrze > maszyn Należy jednak zauważyć, że chociaż elasticsearch jest > świetny w rozwiązywaniu wyżej wymienionych problemów, nie jest najlepszym wyborem dla innych. > Szczególnie źle sprawdza się w rozwiązywaniu problemów, dla których relacyjne bazy danych > są zoptymalizowane. Problemy takie jak te wymienione poniżej. > > Obliczanie, ile pozycji pozostało w inwentarzu Obliczanie sumy > wszystkich pozycji na wszystkich fakturach wysłanych w danym miesiącu Wykonywanie dwóch > operacji transakcyjnych z obsługą wycofywania > Tworzenie rekordów, które są > gwarantowane jako unikalne w wielu podane terminy, na przykład telefon > numer i rozszerzenie Elasticsearch jest generalnie fantastyczne w udzielaniu > przybliżonych odpowiedzi na podstawie danych, takich jak ocenianie wyników według jakości. Chociaż > elasticsearch może wykonywać dokładne dopasowanie i obliczenia statystyczne, > jego głównym zadaniem wyszukiwania jest zadanie z natury przybliżone. Znajdowanie > przybliżonych odpowiedzi to właściwość oddzielająca elasticsearch od bardziej > tradycyjnych baz danych. To powiedziawszy, tradycyjne relacyjne bazy danych > wyróżniają się precyzją i integralnością danych, dla których elasticsearch i Lucene > mają niewiele przepisów. Czy mogę stwierdzić, że jeśli nie potrzebuję przybliżonych odpowiedzi, ElasticSearch byłby bezużyteczny w porównaniu z już używaną grafową bazą danych?


title: Jak i gdzie opublikować mój otwarty standard?

text: Piszę otwarty standard dla protokołu, który rozwijam. Jeśli chodzi o pisanie obaw mam to pod kontrolą. Ale głównym pytaniem jest, gdzie mogę opublikować taki dokument. Szukałem w Internecie i nie znalazłem takiej strony, na której mógłbym wgrać plik TXT lub PDF. Nie mam zamiaru zachowywać tajemnic i chciałbym, żeby ludzie to przeczytali i jeśli to możliwe poprawili protokół.


title: Czy jest coś specjalnego w numerze 65535?

text: 2¹⁶-1 & 2⁵ = 2⁵ (lub? oczywiście ?) Deweloper zapytał mnie dzisiaj, co to jest bitowe 65535 & 32, czyli 2¹⁶-1 & 2⁵ = ? Początkowo myślałem spontanicznie 32, ale wydawało mi się to łatwe, po czym pomyślałem przez kilka minut, a potem odpowiedziałem 32. 32 wydaje się być poprawną odpowiedzią, ale jak? 65535=2¹⁶-1=1111111111111111 (ale to nie wydaje się właściwe, skoro ta liczba binarna powinna być równa -1(?)), 32 = 100000, ale nie mogłem tego przeliczyć w głowie, po czym i tak odpowiedziałem 32, ponieważ mam odpowiedzieć na coś. Czy odpowiedź 32 jest rzeczywiście trywialna? Czy w ten sam sposób 2¹⁶-1 & 2⁵-1 =31? Dlaczego programista zapytał mnie o dokładnie 65535? Binarny, który zostałem poproszony o ocenę, to 1111111111111111 i 100000, ale nie rozumiem, dlaczego 1111111111111111 to nie -1. Czy nie powinno być -1? Czy 65535 to liczba, która daje przepełnienie i skąd mam to wiedzieć?