title: Jakie są typowe przykłady problemu, który można zrównoleglić?

text: Zastanawiałem się tylko, czy istnieją jakieś „standardowe” przykłady, których wszyscy używają jako podstawy do wyjaśnienia natury równoległych problemów. Jakie są dobrze znane problemy, które widzą ogromne korzyści ze skalowalności (i programowania wielowątkowego)? * **EDYTUJ: również trochę tła lub wyjaśnienia, _dlaczego_ jest zrównoleglone w naturze byłoby pomocne! Dziękuję**


title: Refaktoryzuj działający kod do ponownego użycia lub zduplikowania?

text: Zawsze unikałem powielania kodu niezależnie od okoliczności. Na przykład, jeśli mam działającą funkcję, która musi być ponownie wykorzystana przez różne jednostki, zawsze przeprowadzam refaktoryzację, aby udostępnić tę funkcję. W żadnym wypadku nie powielałbym kodu. Prawdopodobnie jestem trochę sztywny, jeśli chodzi o to, ale naprawdę nie lubię duplikować kodu. W tej chwili miałem niewielką niezgodę z naszym Team Leadem, który zasugerował, że zamiast refaktoryzacji, powinienem skopiować całą wymaganą funkcjonalność do innej klasy, a następnie możemy zdecydować, jak najlepiej przeprowadzić refaktoryzację w późniejszym terminie. Dzieje się tak nawet po potwierdzeniu, że moje poprzednie próby refaktoryzacji nie złamały żadnego z testów jednostkowych. Odbyłem tę rozmowę dzisiaj z moim poprzednim menedżerem i jego mentorem, którzy stanęli po stronie mojego kierownika zespołu. Ich argumentem jest to, że zaciągnięcie długu technicznego jest OK i prawie zawsze preferowane, zwłaszcza jeśli napotykasz ograniczenia czasowe, co rozumiem. Mój kontrargument był taki, nie chcemy pomijać terminów, ale zawsze trzeba brać pod uwagę koszt refaktoryzacji i to zwykle powinno być pierwszym odruchem, zwłaszcza jeśli po prostu przenosimy funkcjonalność do nowej lokalizacji, która sprawia, że jest ona dostępna dla wszystkich. Właściwy test jednostkowy może również zapewnić, że wysiłki związane z refaktoryzacją nie uszkodzą istniejącej funkcjonalności. Czy nie zawsze lepiej spłacić dług teraz niż później? Mogę sobie tylko wyobrazić, co będzie oznaczać to zadanie, jeśli wszyscy członkowie zespołu po prostu powielą kod. Wystarczy powiedzieć, że musieliśmy się zgodzić, żeby się nie zgodzić. W swojej książce zatytułowanej Clean Code Robert Martins kładzie nacisk na ciągłą refaktoryzację podczas opracowywania, więc byłem zaskoczony odpowiedzią mojego poprzedniego menedżera. Jakie są twoje opinie na ten temat?


title: Jak czytać RFC i podobne dokumenty?

text: RFC: > Request for Comments (RFC) to memorandum opublikowane przez Internet > Engineering Task Force (IETF) opisujące metody, zachowania, badania lub > innowacje mające zastosowanie do działania Internetu i systemów > podłączonych do Internetu. Na końcu tego wideo wprowadzającego do REST wymieniono RFC2616 i RFC3986 jako dalszą lekturę. Po obejrzeniu filmu wygooglowałem te dokumenty i jak sugeruje tytuł, nie jestem pewien, jak z nich korzystać. Czy czytam je w całości i robię notatki, czy też używam ich bardziej jako odniesienia, gdy czegoś nie rozumiem lub mam problem?


title: Dlaczego metaznak wyrażenia regularnego \w zawiera podkreślenia?

text: W większości, jeśli nie we wszystkich implementacjach wyrażeń regularnych, metaznak \w dopasowuje wszystkie znaki alfanumeryczne plus podkreślenie. Historycznie rzecz biorąc, dlaczego znak podkreślenia był zawarty w tej klasie postaci? A dlaczego nie uwzględnić też myślników?


title: Instrukcja a użycie pamięci podręcznej danych

text: Powiedzmy, że mam pamięć podręczną, w której instrukcje i dane mają różne pamięci podręczne ("Architektura Harvarda"). Która pamięć podręczna, instrukcja lub dane są używane najczęściej? Mam na myśli "najczęściej" jak w czasie, a nie ilość danych, ponieważ pamięć danych może być wykorzystywana "więcej" pod względem ilości danych, a pamięć podręczna instrukcji może być używana "częściej", szczególnie w zależności od programu. Czy istnieją różne odpowiedzi a) ogólnie ib) dla konkretnego programu?


title: Dlaczego kolory tła nie są lub rzadko są używane do podświetlania składni?

text: Zastanawiam się, dlaczego rzadko widzę IDE lub innych programistów, którzy używają kolorów tła do podświetlania składni. Jedną z pierwszych rzeczy podczas instalacji i konfiguracji nowego IDE jest dostosowanie kolorów tak, aby na przykład komentarze miały przyzwoite jasnoszare tło. To naprawdę pomaga mi zobaczyć, gdzie jest dokumentacja i gdzie jest kod podczas szybkiego przewijania w dół. Jedyny raz, kiedy widziałem coś takiego, był w edytorze Greenfoot, ale to nie wyglądało tak dobrze, przynajmniej jeśli wykonujesz bardziej złożoną pracę i jest więcej zagnieżdżonych warunków i takich rzeczy. Dlaczego więc kolory tła są rzadko używane; czy ktoś ma jakieś dobre przykłady, gdzie są używane i jak?


title: Co jest lepsze pod względem doświadczenia użytkownika - podanie adresu e-mail lub linku do konta github moich projektów?

text: Co jest lepsze pod względem doświadczenia użytkownika? Zapewnić użytkownikowi konto e-mail, na którym może zgłaszać błędy, lub link do strony z problemami na githubie projektu (co wymaga konta na githubie, ale może być łatwiejsze do zgłaszania błędów)? **EDYTUJ** Aplikacja jest skryptem Bash hostowanym na github. Standardy kodowania GNU sugerują użycie adresu e-mail, co może, ale nie musi, być odpowiednim rozwiązaniem. Grupa docelowa to zaawansowany użytkownik CLI.


title: Gdzie umieścić dokumentację kodu?

text: Obecnie używam dwóch systemów do pisania dokumentacji kodu (używam C++): * Dokumentacja o metodach i członkach klas jest dodawana obok kodu w formacie Doxygen. Na serwerze Doxygen jest uruchamiany na źródłach więc wyjście można zobaczyć w przeglądarce internetowej * Przegląd stron (opisujący zestaw klas, strukturę aplikacji, przykładowy kod, ...) jest dodany do Wiki Osobiście uważam że takie podejście jest łatwe, ponieważ dokumentacja o członkach i klasach jest bardzo zbliżona do kodu, podczas gdy strony przeglądu są naprawdę łatwe do edycji w Wiki (i łatwo jest również dodawać obrazy, tabele, ...). Przeglądarka internetowa umożliwia przeglądanie obu dokumentacji. Mój współpracownik sugeruje teraz, aby umieścić wszystko w Doxygen, ponieważ możemy wtedy stworzyć jeden duży plik pomocy ze wszystkim, co się w nim znajduje (używając albo Microsoft HTML WorkShop albo Qt Assistant). Obawiam się, że edytowanie dokumentacji w stylu Doxygen jest znacznie trudniejsze (w porównaniu z Wiki), zwłaszcza gdy chcesz dodać tabele, obrazy, ... (lub czy istnieje narzędzie „podgląd” dla Doxygen, które nie wymaga generowania kod, zanim zobaczysz wynik?) Czego używają duże projekty open-source (lub zamknięte źródła) do pisania dokumentacji kodu? Czy podzielili to również między styl Doxygen i Wiki? A może używają innego systemu? Jaki jest najwłaściwszy sposób udostępnienia dokumentacji? Za pośrednictwem serwera/przeglądarki internetowej lub dużego (kilkanaście MB) pliku pomocy? Jakie podejście przyjmujesz podczas pisania dokumentacji kodu?


Czy istnieje fraza lub słowo opisujące algorytm lub program jest kompletny w tym, że przy danej wartości jego argumentów istnieje określony wynik? tj. wszystkie konsekwencje zostały wzięte pod uwagę niezależnie od kontekstu? Prostym przykładem może być poniższa funkcja: function zwraca string get_item_type(int type_no) { if(type_no < 10) return "kij hokejowy" else if (type_no < 20) return "buldożer" else return "unknown" } (przepraszam pseudokod) Bez względu na podany numer, wszystkie możliwości są zaspokojone. Moje pytanie brzmi: czy jest słowo do wypełnienia tutaj pustego miejsca: „get_item_type() jest ______ ukończone”? (Odpowiedź nie brzmi: Turing Complete – to jest coś zupełnie innego – ale irytująco zawsze myślę o czymś jako „Turing Complete”, kiedy myślę o powyższym).


title: wartości null vs "pusty" singleton dla pól opcjonalnych

text: Przede wszystkim rozwijam parser dla opartego na XML formatu grafiki 3D o nazwie XGL. Ale to pytanie można zastosować w każdej sytuacji, gdy masz w swojej klasie pola, które są opcjonalne, tj. może brakować wartości tego pola. Kiedy brałem udział w kursie Scali na coursera, pojawił się interesujący wzorzec, kiedy tworzysz klasę abstrakcyjną ze wszystkimi potrzebnymi metodami, a następnie tworzysz normalną w pełni funkcjonalną podklasę i „pustą” podklasę singleton, która zawsze zwraca `false` dla `isEmpty ` metody i zgłasza wyjątki dla pozostałych. Więc moje pytanie brzmi: czy lepiej po prostu przypisać `null`, jeśli brakuje wartości opcjonalnego pola, czy utworzyć hierarchię opisaną powyżej i przypisać jej pustą implementację singletona?


title: Jakie założenia / zastrzeżenia należy uwzględnić w oszacowaniu oprogramowania?

text: Ostatnio piszę dużo kosztorysów i stwierdzam, że dość często klient może się spierać o zakres, rezultaty lub (najczęściej) koszt. Aby zapewnić, że zakres pokrycia (wymagań klientów i wzajemnie rozumiany zakres) oszacowania jest jasny (i biorąc pod uwagę, że większość klientów będzie postrzegać oszacowanie jako stałą wycenę samego Mosesa), jakie wspólne założenia uwzględniasz w swoim szacunki takie, że oczekiwania są jasno określone z klientami, a spory wokół tego, co jest dostarczane lub rozliczane, są minimalizowane?


title: Zwinny i inny aspekt tworzenia oprogramowania

text: Mówi się, że metodologia Kanban jest odpowiednia dla obszarów utrzymania oprogramowania i wsparcia, podczas gdy Scrum bardziej nadaje się do rozwoju nowych produktów. Żaden proces ani metody nie są kompletne. Korzystanie z właściwego pomoże Ci odnieść sukces, ale nie zagwarantuje sukcesu. Które podejście zwinne najlepiej nadaje się do projektu, który zasadniczo polega na przeniesieniu z jednej technologii na inną (powiedzmy z Javy na .NET).


title: Architektura modułowa dla potoku przetwarzania

text: Staram się zaprojektować architekturę systemu, który będę implementował w C++ i zastanawiałem się, czy ludzie mogliby wymyślić dobre podejście, lub skrytykować podejście, które do tej pory zaprojektowałem. Przede wszystkim ogólny problem to potok przetwarzania obrazu. Zawiera kilka etapów, a celem jest zaprojektowanie wysoce modułowego rozwiązania, tak aby każdy z etapów można było łatwo zamienić i zastąpić fragmentem niestandardowego kodu (tak, aby użytkownik mógł zwiększyć prędkość, jeśli wie że pewien etap jest w pewien sposób ograniczony w jego problemie). Obecne myślenie wygląda mniej więcej tak: struct output; /*Zawiera wartości wyjściowe z potoku.*/ class input_routines{ public: virtual foo stage1(...){...} virtual bar stage2(...){...} virtual qux stage3(... ){...} ... } potok wyjściowy (etapy input_routines); To pozwoliłoby ludziom na podklasowanie input_rouines i nadpisanie dowolnego etapu, który chcieli. To powiedziawszy, pracowałem już wcześniej w systemach takich jak ten i uważam, że podklasy i domyślne rzeczy stają się bałaganiarskie i mogą być trudne w użyciu, więc nie jestem oszołomiony pisaniem jednego. Myślałem również o podejściu bardziej STLish, gdzie różne etapy (jest 6 lub 7) będą domyślnymi parametrami szablonu. Czy ktoś może zaproponować krytykę powyższego wzorca, przemyślenia na temat podejścia szablonowego lub jakiejkolwiek innej architektury, która przychodzi do głowy?


title: Pytania testowe Symbian

text: Tak więc byłem odpowiedzialny za filtrowanie kandydatów do pracy w naszej firmie. Chcieliśmy stworzyć aplikację symbianową. Ale nie ma tu nikogo, kto wie, jak to rozwinąć. Dlatego tworzymy ogłoszenia o pracę. Przychodzi kilku kandydatów. Pytanie brzmi, jak przetestować tego kandydata? Zastanawiam się nad stworzeniem jakiejś aplikacji testowej. Coś trywialnego i prostego, ale wymaganego do podstawowej znajomości symbianu. To pytanie **będzie budowane w domu**. Czy są w stanie to stworzyć? Jakieś zalecane pytanie testowe/zastosowanie?


title: Zmaganie się z zasadą pojedynczej odpowiedzialności

text: Rozważmy ten przykład: mam stronę internetową. Umożliwia użytkownikom tworzenie postów (może być cokolwiek) i dodawanie tagów opisujących post. W kodzie mam dwie klasy, które reprezentują post i tagi. Nazwijmy te klasy „Post” i „Tag”. `Post` zajmuje się tworzeniem postów, usuwaniem postów, aktualizacją postów itp. `Tag` zajmuje się tworzeniem tagów, usuwaniem tagów, aktualizacją tagów itp. Brakuje jednej operacji. Łączenie tagów z postami. Walczę z tym, kto powinien wykonać tę operację. Równie dobrze pasowałby do obu klas. Z jednej strony klasa `Post` może mieć funkcję, która przyjmuje `Tag` jako parametr, a następnie przechowuje go na liście tagów. Z drugiej strony, klasa `Tag` może mieć funkcję, która przyjmuje `Post` jako parametr i łączy `Tag` z `Post`. Powyższe to tylko przykład mojego problemu. Właściwie wchodzę w to z wieloma podobnymi klasami. Równie dobrze pasowałby do obu. Poza faktycznym umieszczeniem funkcjonalności w obu klasach, jakie konwencje lub style projektowania istnieją, aby pomóc mi rozwiązać ten problem. Zakładam, że musi być coś innego niż tylko wybranie jednego? Może umieszczenie go w obu klasach jest poprawną odpowiedzią?


title: Czy Linux jest koniecznością do nauki sieci?

text: Jestem programistą internetowym zainteresowanym nauką sieci. Pracuję na platformie Windows. Wielu moich przyjaciół i kolegów uważa, że aby nauczyć się sieci, powinienem zapoznać się z platformą Linux. Czy powinienem? To znaczy, czy nie mogę dokładnie nauczyć się sieci i jej koncepcji na platformie Windows Server?


title: Jak licencjonować kod napisany dla startupu bez umowy?

text: Napisałem sporo kodu dla startupu, ale wcześniej nie podpisałem kontraktu. Jedyny dokument, który z nimi podpisałem, nie wspomina o tym, że muszę im przekazać prawa do kodeksu, a po konsultacji z prawnikiem wydaje się, że mam pełne prawa. Teraz chcę zapobiegawczo naprawić tę sytuację, dając im jakąś wyłączną licencję. Czy istnieje licencja na zamknięte źródło, wyłączne użycie, która jest używana w takich przypadkach, czy po prostu piszę gdzieś „Przyznaję wyłączną licencję na używanie i modyfikowanie tego fragmentu kodu firmie FooBar-inc na następujących warunkach: bla bla bla podpisałem mnie , ich"?


title: Kiedy aplikacja jest zbyt konfigurowalna?

text: Załóżmy, że tworzysz aplikację komputerową i chcesz, aby użytkownik miał możliwość dostosowywania menu, przycisków, mapowania klawiszy oraz innych poleceń i składników. Jak duże dostosowanie powinno być dozwolone? Podoba mi się, że moje środowiska można dostosowywać w nieskończoność. Chcę również, aby środowisko miało dobry zestaw ustawień domyślnych, dzięki czemu mogę po prostu dostosować ustawienia, których potrzebuję, zamiast konfigurować całość. Czy ktoś ma jakieś doświadczenie użytkownika, które może poprzeć lub zaprzeczyć moim preferencjom?


Niedawno w wywiadzie jedno z pytań brzmiało: „Dlaczego używamy MVC?”. Odpowiedziałem tylko, że jest to znacznie bliższe temu, jak wiele systemów w prawdziwym świecie jest! Wyjaśnił korzyści, jakie ma, jeśli chodzi o konserwowalność, skalowalność itp. Ale nie byli przekonani i w końcu powiedzieli mi, że MVC jest używany głównie dlatego, że „umożliwia łatwe testowanie jednostkowe”. Chociaż wiem, że jest to ważny punkt, nadal wątpię, czy jest to główny powód, ponieważ (i) nawet jeśli zdecyduję się nie pisać Unit Testcases, MVC jest prawdopodobnym wyborem (ii) Wiele systemów GUI, w których są Unit Testcases, nie postępuj zgodnie z MVC. Tak więc pytanie brzmi: „Czy testowanie jednostkowe jest głównym celem wzorca MVC?” **EDYTUJ:** Zakładam, że mogą wspominać o łatwości programowania opartego na testach/pisania NUnit Testcases. Dzieje się tak, ponieważ możemy pisać przypadki testowe dla Modelu (pod warunkiem, że widok dokładnie odzwierciedla zmiany stanu Modelu) - proszę mnie poprawić, jeśli się mylę.


title: Niesławna awaria z powodu braku procesu wydania?

text: Wraz z moimi kolegami inżynierami wprowadzamy proces uwalniania w zespole, który wcześniej składał się wyłącznie z biologów. Zrobię prezentację, aby wyjaśnić im proces i wyjaśnić, jakie przynosi korzyści. Szukam jednego przykładu projektu, który nie powiódł się lub wpadł w poważne kłopoty z powodu braku procesu wydania. Czy znasz jakieś ?


title: Minimalizowanie średniej pary kwadratów normy euklidesowej

text: Jestem całkiem nowy w programowaniu i informatyce, ale zastanawiałem się, czy istnieje jakiś dobry sposób na podejście do następującego problemu: Dla zestawu 2n punktów (niekoniecznie unikalnych) w R^k (załóżmy, że każdy wpis jest pozytywny), Chcę algorytmu, który podzieli zbiór na n par w taki sposób, aby zminimalizować średnią kwadratową odległości euklidesowej. EDYCJA: Edytowane dla jasności.


title: Prawidłowy wzorzec obiektu zapytania — NHibernate

text: Szukałem alternatywy dla wzorca repozytorium i czytałem o "Wzorzec obiektu zapytania" (http://lostechies.com/jimmybogard/2012/10/08/favor-query-objects-over-repositories/). Jednak implementacja podana w powyższym linku nie jest dokładnie tym, czego szukałem - szukam czegoś, co można łatwo wstrzyknąć, łatwo przetestować i łatwo rozszerzyć/zmienić (tylko ostatni punkt pozostaje w implementacji linku). Pomyślałem trochę i myślę, że "wymyśliłem" rozwiązanie. Załóżmy, że mam kontroler `BlogEntriesController` (mówię o aplikacji `mvc asp` z ORM) i wstrzykuję do klasy konstruktora: public class BlogEntriesQueries { IRetrieveQuery<BlogEntryEntity> PageBlogEntries { get; ustawić; } IRetrieveQuery<BlogEntryEntity> ProposedBlogEntries { get; ustawić; } IAddQuery<BlogEntryEntity> CreateNewBlogEntry { get; ustawić; } ... itd.. } gdzie `IRetrieveQuery<T>` to coś takiego: interfejs publiczny IRetrieveQuery<TEntity> gdzie TEntity : EntityBase IQueryable<TEntity> CurrentQuery { get; } IRetrieveQuery<TEntity> InvokeQuery(IRetrieveQuery<TEntity> podzapytanie); IEnumerable<TEntity> GetQueryResults(); } Następnie cała praca, którą musiałbym wykonać to odpowiednia konfiguracja kontenera IoC do wstrzykiwania zapytań do kontrolera i odpowiednie wywołania w kontrolerze typu: `_blogQueries.ProposedBlogEntries.GetQueryResults()` Pytanie brzmi - to dobre rozwiązanie - czy są jakieś wady, których nie widzę? Myślę, że uzyskałbym testowalność (nie muszę nawet kpić z `ISession` w przypadku `NHibernate`) i byłoby łatwo rozszerzalne, ale w żaden sposób nie jestem ekspertem (zwłaszcza w aplikacjach bazodanowych).


title: O ograniczeniu komercyjnego wykorzystania projektów Mathematica / Matlab przy jednoczesnym wymaganiu przypisania

text: Chcę udostępnić kod projektu badawczego, do celów akademickich, w Bitbucket i FileExchange Matlaba. Kod znajduje się zarówno w Matlab, jak i Mathematica i chcę ograniczyć jego użycie do celów komercyjnych. Nie wiem, czy mogę do tego użyć Affero GPL, ponieważ zarówno Matlab, jak i Mathematica są oprogramowaniem komercyjnym. To najbardziej bezpośrednia odpowiedź z warunków GPLv3, jaką znalazłem: > **Jeśli interpreter języka programowania ma licencję niezgodną > z GPL, czy mogę na nim uruchamiać programy objęte GPL?** (# InterpreterIncompat) > > Gdy tłumacz tylko tłumaczy język, odpowiedź brzmi: tak. Zinterpretowany program > dla interpretera to tylko dane; GPL nie ogranicza > narzędzi, za pomocą których przetwarzasz program. > > Jednakże, gdy interpreter jest rozszerzony, aby dostarczać „powiązania” z innymi > udogodnieniami (często, ale niekoniecznie, bibliotekami), interpretowany program > jest efektywnie połączony z używanymi przez niego udogodnieniami poprzez te powiązania. Przykładem takiego rozwiązania jest > JNI lub Java Native Interface; biblioteki > do których uzyskuje się dostęp w ten sposób są dynamicznie łączone z programami Java >, które je wywołują. >> Więc jeśli te udogodnienia są udostępniane na licencji niezgodnej z GPL, sytuacja jest podobna do łączenia się w jakikolwiek inny sposób z biblioteką niezgodną z GPL. > Co oznacza, że: > > 1. Jeśli piszesz kod i wydajesz go na licencji GPL, > możesz podać wyraźny wyjątek zezwalający na połączenie go z tymi niekompatybilnymi z GPL udogodnieniami. > > 2. Jeśli napisałeś i wydałeś program na licencji GPL i zaprojektowałeś go specjalnie do pracy z tymi udogodnieniami, ludzie mogą uznać to za niejawny wyjątek, który pozwala im połączyć go z tymi udogodnieniami. Ale jeśli > to jest to, co zamierzasz, lepiej powiedzieć to wyraźnie. > > 3. Nie możesz wziąć cudzego kodu objętego GPL i używać go w ten sposób, lub > dodać do niego takich wyjątków. Tylko właściciele praw autorskich do tego kodu mogą dodać > wyjątek... > > Jaka licencja jest zgodna z tymi wymaganiami w Matlab / Mathematica? * Zezwalanie na użycie akademickie * Wymaganie przypisania do użytku akademickiego * Ograniczenie użycia komercyjnego (produkty programu - przetworzone obrazy - nie powinny być sprzedawane)


title: Metoda wspornika turniejowego, aby ustawić odległość między członkami drużyny

text: Używam odpowiedniego drzewa binarnego do symulacji przedziału turniejowego. Preferuje się, aby zawodnicy w drabince, którzy są kolegami z drużyny, nie spotykali się do późniejszych rund. Jaka jest skuteczna metoda, dzięki której mogę zapewnić, że koledzy w drabince będą mieć jak największą odległość od siebie? Czy istnieją inne struktury danych poza drzewem, które byłyby lepsze do tego celu? EDYCJA: W nawiasie mogą być reprezentowane więcej niż 2 drużyny i nie ma wymogu, aby w nawiasie była taka sama liczba osób z każdej drużyny. Zamierzam to wykorzystać do sportów indywidualnych, w których dana osoba nadal jest powiązana z drużyną i chcemy, aby koledzy z drużyny zmierzyli się ze sobą tak późno, jak to możliwe.


title: Pobieranie wyników z postgresql za pomocą kursorów

text: Piszę aplikację w C++ używając libpq jako interfejsu do postgresql. Obecnie tworzę małą bibliotekę funkcji pomocniczych, które pomogą poradzić sobie z konwersją z C++ do C dla aplikacji, która ma być używana na komputerze PC lub urządzeniu ARM (2 GHz 2 GB pamięci RAM). Jeśli chodzi o pobieranie danych z bazy danych, zastanawiam się, czy powinienem pobrać wszystkie wyniki z bazy na raz, czy użyć kursora do odczytania jednego lub kilku na raz. Zwrócony zestaw wyników może prawdopodobnie zawierać setki i zakładam: * jeśli wyciągnę wszystkie wyniki, będzie to trafienie w pamięć dla aplikacji * jeśli wyciągnę jedną krotkę na raz za pomocą kursora, może to być duże obciążenie serwera bazy danych (obecnie localhost dla rozwoju) Nie rozumiem, w jaki sposób mógłbym uzyskać odpowiednie metryki, aby określić, która byłaby najlepsza, więc moje pytania są następujące: 1. Czy istnieje najlepsza praktyka, jeśli chodzi o pobieranie wyników z baza danych w świecie rzeczywistym (wszystkie naraz / wiersz na raz / kilka wierszy na raz) 2. Jak określiłbym jakąś formę metryk do testowania wydajności? Zgaduję, że musiałbym wziąć pod uwagę zarówno zużycie pamięci aplikacji, jak i obciążenie bazy danych wraz z czasem odpowiedzi. 3. Jeśli najlepiej jest ciągnąć kilka krotek na raz, jak określić optymalną ilość do ciągnięcia na raz?


title: Pytania dotyczące łączenia bibliotek w C

text: Uczę się C (nadal bardzo początkujący) na Linuksie używając kompilatora GCC. Zauważyłem, że niektóre biblioteki, takie jak biblioteka używana z nagłówkiem `math.h`, muszą być połączone ręcznie po dołączeniu. Łączyłem się w bibliotekach za pomocą różnych flag w postaci `-l[nazwa-biblioteki]`, takich jak `-lm` dla wspomnianej powyżej biblioteki matematycznej. Jednak po przejściu z wiersza poleceń i/lub `Geany` na `Code::Blocks` zauważyłem, że `Code::Blocks` używa `g++` do kompilacji programów zamiast `gcc`, do którego jestem przyzwyczajony (mimo że projekt jest definitywnie określony jako C). Ponadto `Code::Blocks` nie wymaga ręcznego łączenia bibliotek podczas kompilacji - biblioteki takie jak biblioteka matematyczna _po prostu działają_. Mam dwa pytania: Po pierwsze, czy kompilowanie programów w C za pomocą kompilatora `g++` jest "złe"? Jak dotąd wydaje się, że to działa, ale w końcu C++ to nie C i jestem całkiem pewien, że kompilator `g++` jest przeznaczony dla C++. Po drugie, czy to kompilator `g++` wykonuje automatyczne łączenie bibliotek w `Code::Blocks`?


title: Dlaczego dziedziczenie Square z Rectangle miałoby być problematyczne, jeśli nadpisujemy metody SetWidth i SetHeight?

text: Jeśli Kwadrat jest typem Prostokąta, to dlaczego Kwadrat nie może dziedziczyć z Prostokąta? Albo dlaczego jest to zły projekt? Słyszałem, jak ludzie mówili: > Jeśli sprawiłeś, że kwadrat wywodzi się z prostokąta, to kwadrat powinien być użyteczny > wszędzie tam, gdzie oczekujesz prostokąta Na czym polega problem? I dlaczego Square miałby być używany wszędzie tam, gdzie oczekujesz prostokąta? Przydałby się tylko wtedy, gdy utworzymy obiekt Square i jeśli nadpiszemy metody SetWidth i SetHeight dla Square, dlaczego miałby powstać jakiś problem? > Jeśli masz metody SetWidth i SetHeight w swojej klasie bazowej Rectangle i > jeśli twoja referencja Rectangle wskazywała na Square, to SetWidth i SetHeight > nie mają sensu, ponieważ ustawienie jednej zmieniłoby drugą, aby ją dopasować. W tym przypadku Square nie zda testu podstawienia Liskova z prostokątem, a abstrakcja dziedziczenia Square z prostokąta jest zła. Czy ktoś może wyjaśnić powyższe argumenty? Ponownie, jeśli nadpiszemy metody SetWidth i SetHeight w Square, czy nie rozwiąże to tego problemu? Słyszałem/przeczytałem również: > Prawdziwym problemem jest to, że nie modelujemy prostokątów, ale raczej > „prostokąty z możliwością przekształcenia”, czyli prostokąty, których szerokość lub wysokość można > modyfikować po utworzeniu (i nadal uważamy, że jest to ten sam obiekt ). Jeśli > spojrzymy na klasę prostokąta w ten sposób, jasne jest, że kwadrat nie jest > „prostokątem, który można zmieniać”, ponieważ kwadrat nie może zostać przekształcony i nadal być kwadratem (ogólnie). Matematycznie nie widzimy problemu, ponieważ > zmienność nie ma nawet sensu w kontekście matematycznym Uważam, że termin „re-sizeable” jest poprawnym terminem. Prostokąty można zmieniać, podobnie jak kwadraty. Czy brakuje mi czegoś w powyższym argumencie? Rozmiar kwadratu można zmienić jak każdy prostokąt.


title: Obsługa bazy danych i zapobieganie wstrzykiwaniu SQL

text: Napisałem klasę modelu `database` w PHP i napisałem klasę kontrolera, która specjalnie sprawdza poprawność danych przed wysłaniem ich do db. Dostaję krytykę, że powinienem obsługiwać dane w klasie modelu `database`, a nie w klasie `controller`. Chciałem napisać ogólną klasę db, która może być używana w dowolnym miejscu do operacji CRUD. Czy możecie mi teraz pomóc w rozwiązaniu tego? Czy należy sprawdzić poprawność danych w klasie modelu db, czy w klasie kontrolera db?


title: Formatowanie PHP, co działa wydajniej?

text: Właśnie zastanawiałem się, co sprawia, że PHP działa szybciej. Mam kilka metod, które zawsze stosuję, ale to tylko poprawia sposób, w jaki mogę to odczytać, ale co z interpreterem? ### Czy powinienem dołączyć nawiasy klamrowe, gdy jest tylko jedna instrukcja do uruchomienia? if(...){ echo "test"; } # Lub.. if(...) echo "test"; === Którego należy użyć? ### Znalazłem również http://beta.phpformatter.com/ i uważam, że poniższe ustawienia są dobre, ale czy są? > ### Wcięcie: > > Styl wcięcia: `{K&R (jeden prawdziwy styl nawiasu)}` > Wcięcie z: `{Tab}` > Wcięcie początkowe: `[1]` > Wcięcie: `[1]` > > ### Często: > > `[x]` Usuń wszystkie komentarze > `[x]` Usuń puste linie > `[x]` Ładnie dopasuj instrukcje przypisania > `[ ]` Umieść komentarz z warunkiem po if, while, for, foreach, > instrukcje deklaracji i catch > > ### Ulepszenie: > > `[x]` Usuń linie za pomocą średnika (;) > `[x]` Zrób normalne komentarze (//) z komentarzy perla (# ) > `[x]` Zrób długi tag otwierający (<?php) z krótkiego (<?) > > ### Nawiasy: > > `[x]` Spacja wewnątrz nawiasów`- ( )` > `[x] ` Spacja wewnątrz pustych nawiasów `- ( )` > `[x]` Spacja wewnątrz nawiasów blokowych`- [ ]` > `[x]` Spacja wewnątrz pustych nawiasów blokowych`- [ ]` ### Małe nazwy zmiennych: często ja przejrzyj mój kod i zmień `$var1` na `$a`, `$var2` na $b i tak dalej. Dołączam komentarze na początku pliku, aby pokazać mi, co oznaczają poszczególne litery. ### Ostatnia uwaga: Czy więc robię dobrze z nawiasami klamrowymi i ustawieniami? Czy są jakieś świetne wskazówki, które pomogą mu działać szybciej?


title: Łączenie, baza danych, raportowanie, aplikacje w C#

text: # Wprowadzenie ## Preambuła Wahałem się, aby to opublikować, ponieważ jest to aplikacja, której zawiłe szczegóły są zdefiniowane gdzie indziej, a odpowiedzi mogą nie być pomocne dla innych. W ciągu ostatnich kilku tygodni (po skończeniu miałem zamiar napisać o tym wpis na blogu) odkryłem, że bariera, z którą się spotykam, jest dość powszechna wśród nowszych programistów. To pytanie dotyczy nie tyle konkretnej rzeczy, ile poskładania tych rzeczy w całość. Przeszukałem internet i znalazłem wiele samouczków na temat tworzenia aplikacji, które są _coś w rodzaju_ podobne do tych, których szukam. Zastanawiałem się również nad zatrudnieniem innego, bardziej doświadczonego programisty, aby mi pomógł, ale dostałem tylko niewykwalifikowanych kandydatów, którzy nie mają niezbędnego doświadczenia i nie zajmą się klientem lub projektem tak, jak ja. Wolałbym, żeby projekt nigdy się nie urzeczywistnił, niż wypuścić rozwiązanie, które jest na wpół upieczone. Pytałem profesorów w mojej szkole, ale nie znaleźli odpowiedzi na moje pytanie. Jestem doświadczonym programistą i napisałem wiele aplikacji, które są -- bardzo abstrakcyjne -- bliskie temu, co robię, ale moje doświadczenia z tymi aplikacjami nie dają mi wystarczającej siły do rozwiązania tego konkretnego problemu. Mam tylko nadzieję, że opublikowanie tego artykułu nie jest dla mnie błędem. ## Opis projektu Mam projekt, nad którym pracuję dla klienta, który jest przepisaniem aplikacji, oryginalnie napisanej w Foxpro 2.6 przez kogoś przede mną, która przeprowadza pewną analizę (której niestety nie wolno mi ujawnić zgodnie z umową o pracę) na danych finansowych. Pewnego dnia, po długiej rozmowie między mną a klientem – gdzie szczegółowo opisał swoje frustracje związane ze wszystkimi błędami, które wycinałem z tego kodu od 6 miesięcy – kazał mi go po prostu przepisać i dał mi Miesiąc na napisanie dobrej 1/8 tej 65k LOC potworności Foxpro. ta 65k linii kodu foxpro potworność. Przepisanie tego oprogramowania zajmie mi dobre 3 - 6 miesięcy (wiem rzeczy, których oryginalny programista nie robił, na przykład dziedziczenie) w takim stanie, w jakim jestem teraz, ale szybko odkrywam, że będę musiał użyć bazy danych. Przed podpisaniem kontraktu nie wiedziałem nawet o foxpro, więc musiałem nauczyć się foxpro w locie, pisać procedury i dokonywać modyfikacji w bazie danych. Właściwie to polubiłem ten projekt, a ten projekt zostałby przepisany w Foxpro, gdyby nadal był obsługiwanym językiem, ponieważ w ciągu ostatnich kilku miesięcy polubiłem funkcje Foxpro, które ułatwiają tworzenie danych oparte na aplikacjach. Przeprowadziłem kiedyś eksperyment, porównując C# do Foxpro. To, co zajęło mi 45 minut w C#, zajęło mi dwie w Foxpro, a C# znałem przed Foxpro. Miałem nadzieję, że wykorzystam moc języka C#, ale przeraża mnie to, że w foxpro można mieć jeden wiersz kodu i korzystać z bazy danych. Wcześniej nigdy nie pisałem żadnego _poważnego_ rozwoju bazy danych _od zera_. Wszystkie aplikacje, które napisałem, należą do innej ligi. Są one albo całkowicie naiwne dla danych, albo naiwne na tyle, że mogę uniknąć korzystania z bazy danych poprzez serializację lub zaprojektowanie algorytmów, które działają z danymi w sposób bezstanowy, więc nie trzeba się martwić o bazy danych. Bardzo szybko zdałem sobie sprawę, że serializacja i moja skuteczność w posługiwaniu się strukturami danych była moją podporą przez te wszystkie lata, która powstrzymywała mnie przed zagłębianiem się w bazy danych iw konsekwencji utrudniała mi sukces w programowaniu w świecie rzeczywistym. Jasne, napisałem trochę baz danych w Perlu i Pythonie, zrobiłem formularze i pracowałem z _relacyjnymi_ bazami danych i tabelami, jestem czarodziejem w Access i Excelu (poważnie) i mogę zrobić prawie wszystko, ale to po prostu czuje się nienaturalnie pisząc kod SQL w innym języku... Nie mam nic przeciwko pisaniu SQL i nie mam nic przeciwko _To ten pomost między bazą danych a kodem programu, który doprowadza mnie do szału._ Mam nadzieję, że nie tylko ja myśleć tak, ale przeszkadza mi, że muszę tworzyć instrukcje takie jak następujący ciąg sSql = "SELECT * from tablename" Kiedy tak naprawdę nie ma powodu do tego rodzaju niesprawdzonego wiązania językowego między dwoma językami i dwoma API. Nie zrozum mnie źle, SQL jest świetny, ale nie podoba mi się pomysł, że wykonując polecenia na bazie danych SQL, trzeba mieszać bazę danych i oprogramowanie aplikacji, i nie ma niezależności od bazy danych, co oznacza, że różne wersje różne bazy danych mogą złamać kod. To nie jest miłe. Najmilszą rzeczą w Foxpro jest spójność między językiem programowania a bazą danych. To takie proste, a Foxpro to ułatwia, ponieważ narzędzie po prostu pasuje do zadania. Rozumiem, dlaczego tak wielu programistów stworzyło karierę w tym języku, ponieważ obniżyło to barierę wejścia do aplikacji opartych na danych, których tak wiele firm potrzebuje. Było cudownie. Dla moich dzisiejszych celów, ze względu na wymagania i potrzebę wsparcia społeczności, rozszerzalności i funkcji językowych, Foxpro nie jest rozwiązaniem, które moim zdaniem byłoby właściwym narzędziem do pracy. Martwię się również o zbyt ciężką pracę z bazą danych, ponieważ widziałem, jak aplikacje .NET oparte na danych mają problemy z pamięcią podręczną bazy danych, zabraknie pamięci i nie są zbierane obiekty w bazie danych. (Wycieki pamięci) _A OH zapytania._ * * * ## Który, jak i dlaczego? Istnieje mnóstwo różnych sposobów konfiguracji bazy danych, myślę, że naliczyłem 5 lub 6 różnych rodzajów aplikacji bazodanowych, z których mogę wybrać. To dla mnie świetna góra, na którą muszę się wspiąć, kiedy nawet nie wiem, od czego zacząć, jeśli chodzi o pisanie aplikacji opartych na danych. Problem nie polega na tym, że nie znam języka SQL lub nie znam C#. Znam oba i intensywnie z nimi pracowałem. To sprawia, że pracują razem, to jest problem, a to jest coś, czego nigdy wcześniej nie robiłem w C#. ## Raporty Klient lubi papier. Dane muszą być wydrukowane w formacie, który jest rozszerzalny, warstwowy i łatwy w użyciu. Nigdy wcześniej nie robiłem reportaży, więc jest to trochę problem. Ze źródła danych pochodzą raporty kryształowe, a więc istnieje zależność od bazy danych, z tego co rozumiem. ## Ponowne użycie kodu Duża część decyzji projektowej, przez którą przeszedłem do tej pory, polega na przełamaniu zadania napisania fragmentu tego oprogramowania na procedury i modułowe biblioteki DLL i tak dalej, tak aby większość kodu mogła być ponownie wykorzystana. Na przykład, kiedy konfiguruję tę bazę danych, chcę mieć możliwość wielokrotnego używania tego samego kodu bazy danych. Chcę też mieć pewność, że kiedy nadejdzie dzień, w którym pojawi się inny programista, będzie mógł kontynuować to, w czym skończyłem. Im szybciej rozwijam te aplikacje, tym lepiej dla mnie. ## Zadania i cele W moim projekcie muszę napisać procedury, które stosują algorytmy i szukają predefiniowanych wzorców w danych finansowych. Dodatkowo muszę symulować handel w oparciu o predefiniowane algorytmy i dane. Następnie muszę przygotować raporty na temat tych danych. Dodatkowo, muszę mieć sposób na szybką i skuteczną zmianę bazy kodu dla tej aplikacji, bez grzebania w opaski rozwiązania problemu, który naprawdę potrzebuje oddziału urazowego. ## Uwagi specjalne Rozwiązanie musi być szybkie, działać szybko na istniejącym sprzęcie i nie sprawiać zbyt wiele problemów w utrzymaniu i pisaniu. Rozumiem, że wszystko, co piszę, z czym jestem żonaty – odpowiadam za to, co piszę, ponieważ od tego zależy moja reputacja i moje utrzymanie. Czy naprawdę potrzebuję bazy danych? A co z wydajnością? Wydajność była tak dużym problemem, że ręcznie napisałem strukturę danych, która jest w stanie wykonać 2 miliardy operacji, używając łącznie 4 gigabajtów pamięci w mniej niż 1/4 sekundy przy użyciu standardowego dwurdzeniowego procesora. Nie mogłem znaleźć podobnej, wstępnie napisanej struktury danych w C# do wykonania tego zadania. Jakiej konfiguracji używam pod względem bazy danych? A co z raportowaniem? Wolałbym mieć wygenerowane pliki PDF, ale chciałbym móc wizualnie szkicować te raporty, a następnie mieć pewnego rodzaju ReportFactory, w którym po przekazaniu niektórych zmiennych po prostu robi te dane. ## O mnie Jestem samotnym programistą dla małej firmy w tej okolicy. Robię to po raz pierwszy i nigdy nie przetestowałem zakresu i głębi mojej wiedzy. Jestem niesamowicie sfrustrowany tym projektem, ponieważ czuję się niesamowicie przytłoczony czekającym mnie zadaniem. Szukam punktu początkowego, w którym mogę narysować linię i powiedzieć „to właśnie muszę zrobić” ## Wniosek Mogłem nie być wystarczająco jasny w moim poście. Wciąż jestem nowy w tym wszystkim i robię co w mojej mocy, aby przyczynić się do społeczności, od której wyciągnąłem tyle wiedzy. Chętnie zredaguję swój post i dodam więcej informacji, jeśli to możliwe. Szukam kompleksowego rozwiązania lub procesu projektowego, który pomoże mi ruszyć z miejsca w świecie aplikacji opartych na danych, ponieważ mam wrażenie, że przez jakiś czas będzie to koncentracja na całej mojej karierze programisty . W szczególności, jeśli nie otrzymałeś tego z reszty postu (może nie byłem wystarczająco jasny), naprawdę potrzebuję wskazówek, gdzie się udać w zakresie decyzji projektowych dla tego projektu. Niektóre rzeczy, które będą przydatne, to lista pro/con dla różnych rodzajów projektów baz danych dostępnych w VS2010. Próbowałem, ale wygenerowanie tej listy było tak trudne, jak rozwiązanie samego problemu... ** Gdybyś mógł poprowadzić programistę piszącego po raz pierwszy aplikację opartą na danych w C#, jak byś to zrobił? Gdzie byś ich wskazał?**


title: Narzędzie testowe Microsoft Platform Ready — wybierz podstawowy plik wykonywalny, gdy znajdują się na innym serwerze

text: Używam narzędzia Microsoft Platform Ready Test Tool 4.1 i próbuję przeprowadzić test platformy danych programu SQL Server 2012 Mój program SQL Server 2012 działa na serwerze Windows 2012 i wszystkie testy wymagań wstępnych przechodzą pomyślnie. Ale potem przechodzę do kroku 1: Wybierz podstawowy plik wykonywalny swojej aplikacji i otrzymam następujący komunikat o błędzie: Musisz zidentyfikować główny plik wykonywalny swojej aplikacji na poniższej liście. Jeśli poniżej nie jest wyświetlany żaden plik wykonywalny, należy przejrzeć i dodać podstawowy plik wykonywalny aplikacji, który nawiązuje połączenie z programem SQL Server. Jeśli aplikacja jest rozwiązaniem opartym na usługach IIS/PHP/COM+, należy dodać odpowiednie pliki wykonywalne platformy, które nawiązują połączenie z programem SQL Server. Tak więc moja aplikacja jest aplikacją sieci Web .Net 4.5, która działa na innej maszynie wirtualnej niż SQL Server. Więc moje pytanie brzmi: Jak mogę dodać potrzebne pliki? A jakie pliki mam w ogóle dodać?


title: Czy jest to właściwy sposób na zaimplementowanie struktury witryny .NET MVC?

text: Ostatnio widziałem rozwiązanie .NET MVC, w którym znaczniki w widokach `.aspx`, które wydają się mieć kontroler jako ich model, tj. kontroler wydaje się dostarczać dane dla widoku, a kontrolki użytkownika `.ascx` zawierają osobny model. Jestem nowy w MVC i chciałem dowiedzieć się kilku rzeczy, których nie jestem pewien. Przykład implementacji kodu: Widok `UserDetails.aspx` zawiera znacznik, który pokazuje, że jako model używa `UserDetailsController.cs`. Zawiera `RenderPartial("User_Details.ascx", UserDetailsModel)` i przekazuje mu `UserDetailsModel`. Czy to standardowy/poprawny sposób implementacji MVC? A może tylko jeden sposób na jego wdrożenie? Zauważyłem również, że klasy używane jako modele wydają się być klasami usług, które mają atrybuty `[DataMember]` i `[DataContract]` w nazwie klasy i właściwościach - jaka jest zaleta tej implementacji?


title: Nauka OO dla programisty C

text: Programuję zawodowo w C, i tylko w C, od około 10 lat na różnych stanowiskach. Jak można by się spodziewać, dość dobrze rozumiem idiomy języka, a poza tym również niektóre niuanse projektowe - które interfejsy API należy upublicznić, kto nazywa co, kto co robi, co ma być ponownie wprowadzane i tak dalej. Dorastałem czytając 'Writing Solid Code', to wczesna edycja C, a nie ta oparta na C++. Jednak nigdy nie programowałem w języku OO. Teraz chcę przejść na pisanie aplikacji na iPhone'a (może na Androida), więc chcę nauczyć się używać Objective-C i używać go z poziomem kompetencji odpowiadającym profesjonalnemu programiście. Jak owinąć głowę wokół rzeczy OO? Jaka byłaby dla mnie Twoja najmniejsza propozycja listy lektur. Czy istnieje książka, która zawiera jakiś stosunkowo rzeczywisty przykład projektu OO Objective-C? Poza tym przeczytanie, jaki kod źródłowy poleciłbyś mi przejrzeć. Jak nauczyć się paradygmatu OO za pomocą Objective-C?


title: Ratowanie pozostałości po martwym projekcie aplikacji internetowej: na co zwrócić uwagę?

text: Nie wiem, czy to pytanie jest bardziej na temat tutaj, czy w SO, więc jeśli przegapiłem stronę, przepraszam. W każdym razie rozmawiałem ostatnio z krewnym. Pracuje w firmie, która potrzebowała strony internetowej. Zatrudnili inną firmę, która zajmuje się tworzeniem aplikacji internetowych i projektowaniem graficznym, aby zrobić z nich stronę internetową, podać kod źródłowy i zająć się konserwacją. Strona ma dawać ogólną propagandę ekonomiczną na temat firmy, mieć sekcję z wiadomościami i mieć portal dla współpracowników, gdzie będą mogli uzyskać informacje statystyczne, takie jak wielkość sprzedaży ich produktów i tym podobne rzeczy. Ostatnia część miała na celu odczytanie danych z bazy danych używanej przez program All-in-One używany przez firmę mojego krewnego. Projekt miał trwać od trzech do sześciu miesięcy i wykorzystywać LAMP (lub WAMP) AJAX i Python. Niestety pół roku minęło prawie cztery razy od rozpoczęcia projektu, a jedyne rezultaty to kilka makiet. Co więcej, wydają się być w bałaganie. Unikają kontaktu i zawsze narzekają, że programiści rezygnują po kilku miesiącach pracy i że nie mogą stworzyć stabilnego zespołu projektowego (na marginesie, zrobili strony internetowe dla kilku innych firm na czas, więc byli zdolne do wytworzenia wyniku w jednym czasie). W tej chwili jest jasne, że projekt nie zostanie ukończony w najbliższym czasie, a firma mojego krewnego rozważa zwolnienie wykonawców i zabranie wszystkiego, co zrobili, i znalezienie kogoś innego do dokończenia pracy. Niestety, ich informatyk nie programował od czasów PDP-11, więc nie będzie zbyt pomocny i wygląda na to, że sprawdzenie, co zrobili wykonawcy, będzie należało do mnie. Zrobiłem trochę programowania, ale tylko trochę programowania internetowego, więc moje pytanie brzmi: Czego powinienem się spodziewać w kodzie i zasobach? Chodzi o to, że mam powody, by podejrzewać, że dzielą kod w różnych projektach i mogą próbować złagodzić jego części. Wiem, że prawdopodobnie będzie część z zasobami używanymi przez witrynę, takimi jak obrazy itp. i że prawdopodobnie będzie baza danych i jakieś skrypty. Ponadto, jeśli uważasz, że powinno to zostać przekształcone w community-wiki lub ogólne "Nieudany projekt: jak odzyskać z niego coś przydatnego?" dyskusja, proszę o komentarz. Również sąd nie jest rozwiązaniem, ponieważ są one tak skuteczne w moim kraju, że jego decyzja prawdopodobnie zapadłaby na początku lat 20-tych.


title: Jak mogę uprościć następujący projekt systemu kontroli dostępu?

text: Nie mogłem znaleźć lepszego tytułu na to... Próbuję stworzyć kontrolę dostępu dla mojej aplikacji i mam poważne problemy z budowaniem nie szalonego systemu, głównie ze względu na wydajność, ponieważ ten system będzie rezydował w bazie danych SQL i będzie nadmiernie używany w całej aplikacji (każde zapytanie będzie używało go do pobierania danych) Oto mój scenariusz i mój obecny projekt: Mój system ma 3 moduły i każdy ma ogólne akcje CRUD - lista, przeglądanie, aktualizacja, tworzenie, usuwanie ; i czasami ma bardziej szczegółowe działania, takie jak - user.view.creator, user.update.photo, user.update.metadata, storage.upload, storage.download itp. Chcę, aby mój system miał "zadania" lub "operacje" i one będzie hierarchiczny, na przykład storage.view będzie miał element podrzędny storage.download. To jest dla operacji. W tej części nie mam problemu z wdrożeniem i zaprojektowaniem. Moim największym problemem jest zaprojektowanie połączenia między użytkownikiem a zadaniami. Zarówno RBAC, jak i ACL nie pasują do moich potrzeb w tym przypadku, więc próbuję zbudować własne. Nie mogę zaimplementować RBAC, ponieważ w RBAC role są statyczne, ale w moim przypadku same role są zależne od zasobu i grupy, do której należy ten zasób. Na przykład fotograf z grupy A może tylko przesłać zdjęcie z pamięci, podczas gdy fotograf z grupy B może również usunąć zdjęcie z pamięci. Dlatego dla uproszczenia postanowiłem dodać nową GRUPĘ zasobów i wszystkie pliki, role itp. muszą należeć do jakiejś grupy. Z drugiej strony użytkownik jest po prostu przypisywany do grupy; nigdy nie NALEŻĄ do grupy, po prostu uzyskują dostęp do zasobów w grupach. To ma sens i działa bezproblemowo i nie jest zbyt skomplikowane - zapytania są prostsze, więc mam miejsce na klastrowanie baz danych itp. Jednak teraz pojawia się problem, który po prostu nie pasuje do mojego obecnego projektu. Mam inny zasób, KLIENT. Problem polega na tym, że w jednej organizacji użytkownik może mieć różny dostęp do różnych klientów. Na przykład, powiedzmy, że mam Grupę A, która ma Klientów od 1 do 25. Określony użytkownik należący do tej grupy może mieć coś takiego: Klient 1 - Menedżer Klient 2 - Asystent Klient 3 - JakaśInna Rola A kiedy pobiera listę klientów, użytkownik zobaczy tylko 3 klientów. Naprawdę nie wiem, co powinienem zrobić, aby osiągnąć to w jak najbardziej wydajny sposób. Moje pytanie brzmi, jak mam przystąpić do projektowania tej części mojego systemu? I lepsze pytanie, jak mogę uprościć ten system?


title: Co każdy programista powinien wiedzieć o programowaniu?

text: Proszę, **pozostawaj w kwestiach technicznych** , unikaj problemów związanych z zachowaniem, kulturą, karierą lub polityką.


title: Czy możliwe jest budowanie wydań w oparciu o tagi z systemem Continuous Integration (np. Travis CI / Jenkins)

text: Po przeczytaniu i zapytaniu, jak radzić sobie z git, Github, branching, wersjonowaniem i tagowaniem, wygląda na to, że najlepszym sposobem na oznaczenie nowej wersji oprogramowania jest oznaczenie ostatniego commita konkretnej wersji określonym tagiem. Można założyć taką strukturę: * Commit 1 * Commit 2: Tag 1.0.0 * Commit 3 * Commit 4 * Commit 5: Tag 1.1.0 * Commit 6: Tag 1.1.0 Gdy po wydaniu wersji 2.0.0, najprawdopodobniej gałąź 1.1.x jest tworzona w celu utrzymania wydania 1.1 dla poprawek itp. Teraz zastanawiam się, jak można to zintegrować z CI, jak na przykład Travis. Wiem tylko, że: * System Continuous Integration, taki jak Travis CI, jest wyzwalany przy każdym _commit_ do dowolnego oddziału i możliwe jest włączenie/wyłączenie tego na oddział. Nie mogę się domyślić, czy w ogóle możliwe jest rozpoczęcie budowania po _zatagowaniu_ określonego zatwierdzenia, czy ktoś może mi wyjaśnić, jak to może działać?


title: Analiza użycia pamięci: Java vs C++ Nieistotne?

text: W jaki sposób użycie pamięci obiektu całkowitoliczbowego napisanego w Javie porównuje\kontrast z wykorzystaniem pamięci obiektu całkowitoliczbowego napisanego w C++? Czy różnica jest znikoma? Bez różnicy? Duża różnica? Zgaduję, że jest tak samo, ponieważ int to int niezależnie od języka (?) Powodem, dla którego o to zapytałem, jest to, że czytałem o znaczeniu wiedzy, kiedy wymagania dotyczące pamięci programu uniemożliwią programiście rozwiązanie danego problemu . To, co mnie zafascynowało, to ilość pamięci wymagana do stworzenia pojedynczego obiektu Java. Weźmy na przykład obiekt typu integer. Popraw mnie, jeśli się mylę, ale obiekt Java integer wymaga 24 bajtów pamięci: * 4 bajty dla zmiennej instancji int * 16 bajtów narzutu (odniesienie do klasy obiektu, informacji o zbieraniu śmieci i informacji o synchronizacji) * 4 bajty wypełnienia Jako inny przykład, tablica Java (która jest zaimplementowana jako obiekt) wymaga 48+ bajtów: * 24 bajty informacji nagłówka * 16 bajtów narzutu obiektu * 4 bajty długości * 4 bajty dopełnienia * plus pamięć potrzebna do przechowywania wartości Jak wypada porównanie użycia pamięci z tym samym kodem napisanym w C++? Kiedyś nie zwracałem uwagi na wykorzystanie pamięci przez programy w językach C++ i Java, które napisałem, ale teraz, gdy zaczynam uczyć się o algorytmach, bardziej doceniam zasoby komputera.


title: Koncepcja sumy kontrolnej SHA-1

text: Jaka jest podstawa algorytmów SHA-1, SHA-2 lub innych sum kontrolnych? Czytałem o tym tutaj http://en.wikipedia.org/wiki/SHA-1#Data_Integrity Ale wciąż zastanawiam się nad odpowiedzią w języku laika. Czy mogę to rozumieć jako bardzo, bardzo skompresowany kod, który można przetłumaczyć z powrotem na oryginalne dane? Powiedzmy, że mam list zapisany w notatniku. Wtedy całe moje dane o rozmiarze strony 1 A4 można przekonwertować na coś takiego "9b90417b6a186b6f314f0b679f439c89a3b0cdf5". Więc ilekroć chcę odzyskać moje oryginalne dane, mogę je przekonwertować z powrotem na oryginalne dane? Jestem bardzo pewien, że się mylę, ponieważ dziwne jest, jak dane, które same zawierają kombinację liter i cyfr, mogą być reprezentowane przez mniejszy zestaw liter i cyfr. Nielogiczny! A co jest podstawowym?


title: Czy UX ma znaczenie dla oprogramowania korporacyjnego?

text: Zauważyłem, że wiele programów używanych przez firmy do zarządzania czasem, wydatkami, konfiguracją systemów telefonicznych itp. jest bardzo nieintuicyjnych z punktu widzenia użytkownika. Osobiście wiem, że marnuję dużo czasu, próbując dowiedzieć się, jak poruszać się po tych systemach, zwłaszcza jeśli nie mam w pobliżu współpracownika, którego mogę podsłuchiwać, aby mi pomógł. Pliki pomocy są zwykle tak samo złe, jak sam interfejs użytkownika. Czy firmy są samozadowolone, czy po prostu nie ma żadnych porównywalnych produktów korporacyjnych, które wykonują pracę przy tego rodzaju zadaniach? Wydaje się, że po stronie konsumenckiej istnieje wiele możliwości rynkowych na tworzenie lepszych doświadczeń użytkowników, ale co z oprogramowaniem dla przedsiębiorstw? Oczywiście, pewien poziom slickingu nie będzie miał znaczenia dla firmy, ale kiedy lepszy projekt UX przekłada się na zaoszczędzony czas, trudno się temu przeciwstawić. Edycja: nie mam na myśli aplikacji wewnętrznych, ale raczej gotowe systemy dużych firm programistycznych.


title: Komory w zamku Algorytm

text: **Problem Statement -** ![Problem Statement](http://i.stack.imgur.com/Weq4m.png) Biorąc pod uwagę siatkę NxM o wartości 1s i 0s (1s oznaczają ściany, a 0 oznaczają puste komory), zadaniem jest określenie liczby komór i wielkości największej. I tylko po to, żeby zaostrzyć moją ciekawość, żeby dowiedzieć się, do której komory należy cela. Wydaje się, że jest to problem ad hoc, ponieważ zwykłe algorytmy po prostu nie pasują. Po prostu nie mogę zrozumieć logiki do napisania algorytmu dla problemu. Jeśli go zdobędziesz, pseudokod będzie bardzo pomocny! Uwaga - próbowałem zwykłych algorytmów przeszukiwania siatki, ale nie spełniają one wymagań problemu. Źródło - INOI Q Paper 2003


title: Czy mogę zaimplementować algorytm czytelników i pisarzy w OpenMP, zastępując semafory zliczania inną funkcją?

text: Po przeczytaniu o OpenMP i nie znalezieniu funkcji obsługujących semafory, przeszukałem internet pod kątem OpenMP oraz problemu z czytelnikami i pisarzami, ale nie znalazłem odpowiednich dopasowań. Czy istnieje ogólna metoda zastępowania liczenia semaforów w OpenMP czymś, co obsługuje? A może jest po prostu luka w środowisku, która nie pozwala na rzeczy, które są asymetryczne, jak trzeci problem czytelników i pisarzy pokazany na następnej stronie? http://en.wikipedia.org/wiki/Readers-writers_problem#The_third_readers- writers_problem


title: Projektowanie łatwo rozszerzalnego systemu OOP opartego na XML

text: Pracowałem nad projektem, który jest bardzo oparty na danych (gra planszowa w warcaby z dostosowywanymi regułami; do przechowywania danych używam XML). Potrzebuję projektu, który można łatwo rozszerzyć, ponieważ dodajemy nowe funkcje do projektu za pomocą nowych tagów XML. Mój schemat XML wygląda tak dla warunku wygranej (warcaby): <game> <winconditions> <condition zwycięzca="Black"> <Pieces color="Red" number="0" /> </condition> <condition zwycięzca= "Czerwony"> <Pieces color="Czarny" number="0" /> </condition> </winconditions> </game> `<game>` jest elementem głównym. Istnieją inne główne sekcje, takie jak `<plansza>`, która definiuje rozmiar i kształt planszy oraz rozmieszczenie pionów, oraz `<moves>`, która określa sposób poruszania się pionów. Chodzi o to, aby mieć kilka „opcji”, które łączą się w „warunek” — jeśli wszystkie „opcje” są prawdziwe, ocena „warunku” zwraca zwycięzcę. W tej chwili najlepszą strategią, jaką wymyśliłem, jest stworzenie pakietu dla klas przetwarzających znaczniki: procesory kawałki I interfejs do opcji warunku wygranej: public interface WinConditionOption { void setParameters(HashMap<String, String> args); ocena logiczna (stan GameState); } Procesor plików, gdy widzi znacznik wewnątrz znacznika `<winconditions>`, używa odbicia do wyszukania odpowiedniej klasy i wywołuje ją za pomocą interfejsu. Zatem znacznik `Pieces` powoduje utworzenie obiektu `Pieces` i wywołanie `setAttributes()` z atrybutami znacznika. Kiedy sprawdzamy wygraną, wywoływana jest metoda `evaluate()` z aktualnym stanem gry. `Pieces` oceni, czy liczba pionów należących do tego gracza była określoną liczbą, w tym przypadku 0 (brak pionów). Czy to dobry projekt? Czy jest lepszy sposób, aby to zrobić i nadal być w stanie napisać minimalny nowy kod, aby dodać nową opcję wygranej?


title: nauczyć się języka programowania do obliczania funkcji o liczbach całkowitych

text: Wiem coś o Pascalu, Mathematica i Matlab, ale nie mam pojęcia o językach C,C++,C#. Chcę nauczyć się jednego z języków, że są szybkie i dokładne, aby obliczyć niektóre funkcje arytmetyczne dla dużych liczb (na przykład większych niż 10 ^ 3000 $). Zapytałem kogoś, a on powiedział, że używa C++ i powiedział, że obliczyłem tę sekwencję w mniej niż 10 minut. Chcę znać C, C++, C# i wizualne rodzaje programów do pracy dyplomowej i wiedzieć, co jest lepsze dla mojego celu. Niech $f$ będzie funkcją arytmetyczną, a A={k1,k2,...,kn} będą liczbami całkowitymi w porządku rosnącym. Teraz chcę zacząć od k1 i porównać f(ki) z f(k1). Jeśli f(ki)>f(k1), wstaw ki jako k1. Teraz zacznij od ki i porównaj f(kj) z f(ki), dla j>i. Jeśli f(kj)>f(ki), umieść kj jako ki i powtórz tę procedurę. Na końcu będziemy mieli podsekwencję B={L1,...,Lm} z A o tej własności: f(L(i+1))>f(L(i)), dla dowolnego 1<=i <=m-1 Napisałem kod do tego programu za pomocą Mathematica i obliczenie f od ki lub zbioru B dla dużych liczb zajmuje kilka godzin. Na przykład niech f jest funkcją dzielnika liczb całkowitych. Czy wiesz, jak napisać kod do mojego celu w Mathematica lub Matlab. Matematyka jest lepsza.


title: Czy są jakieś obawy związane z importowaniem plików dokumentów z konkurencyjnego produktu?

text: Mam nowy produkt, który służy temu samemu celowi, co długoletni produkt mojego konkurenta. Jedną z rzeczy, które rozważałem, jest umożliwienie mojemu programowi importowania plików dokumentów utworzonych przez ich produkt, aby zapewnić użytkownikom łatwy sposób migracji do mojego. Oczywiście odbywałoby się to bez zgody konkurenta, ponieważ jest to sprzeczne z ich interesami. Widziałem to już wcześniej z oprogramowaniem pakietu biurowego (np. Open Office i Apple Pages mogą importować dokumenty MS Word), ale zastanawiam się, czy są jakieś obawy, prawne lub etyczne, z tym, że to robię. W pełni spodziewam się, że wszelkie odpowiedzi najprawdopodobniej będą podlegać klauzuli „Nie jestem prawnikiem”, ale dobrze byłoby mieć punkt wyjścia do wszystkiego, o czym musiałbym wiedzieć, lub jeśli nie powinienem się martwić.


title: Czym jest niezależność platformy? Czy międzyplatformowość i „niezależność platformowa” to to samo?

text: Co tak naprawdę oznacza niezależność platformy? Jakie są kryteria uznania platformy językowej za niezależną? Czy międzyplatformowość i „niezależność platformowa” to to samo? (Może to być pytanie do samodzielnej nauki, ale chciałbym usłyszeć od ekspertów z przepełnienia stosu. Istnieje wiele definicji i poglądów na ten temat w Internecie, a niektóre z nich są mylące)


title: Terminologia/nazewnictwo pozycji drzewa

text: To jest pytanie dotyczące nazywania rzeczy. Przetwarzam drzewa (dokumenty XML), a do węzłów często stosuje się specjalne reguły oparte na strukturze. W niektórych przypadkach bardzo trudno było wymyślić zwięzłe konwencje nazewnictwa, a mianowicie dla węzłów na pierwszej pozycji wśród ich rodzeństwa, wraz z pewną rekurencyjną relacją: 1. Mając dowolny węzeł, chcę opisać jego pierwszego potomka, a następnie pierwsze dziecko i tak dalej rekurencyjnie. 2. Mając inny dowolny węzeł, chcę opisać jego rodzica, jeśli rodzic jest pierwszy wśród rodzeństwa i rodzica tego rodzica, jeśli jest pierwszy, i tak dalej rekurencyjnie. Czy istnieje terminologia opisująca te pozycje drzewa? Jak nazwałbyś zmienną lub funkcję, która przechwytuje jeden z tych przypadków, tak aby była intuicyjna dla nieznanego programisty próbującego zrozumieć algorytm?


title: Dlaczego java.util.ArrayList pozwala na dodanie wartości null?

text: Zastanawiam się, dlaczego java.util.ArrayList pozwala na dodanie wartości null. Czy jest jakiś przypadek, w którym chciałbym dodać wartość null do ArrayList? Zadaję to pytanie, ponieważ w projekcie mieliśmy błąd, w którym jakiś kod dodawał wartości null do Listy i trudno było stwierdzić, gdzie był błąd. Oczywiście został zgłoszony wyjątek NullPointerException, ale dopiero wtedy, gdy inny kod próbował uzyskać dostęp do elementu. Problem polegał na tym, jak zlokalizować kod, który dodał obiekt null. Byłoby łatwiej, gdyby ArrayList wyrzucił wyjątek w kodzie, w którym dodawane były elementy.


title: Jak mogę lepiej zarządzać daleko idącymi zmianami w moim kodzie?

text: W mojej pracy (pisanie oprogramowania naukowego w C++) często jestem proszony przez ludzi, którzy korzystają z oprogramowania, aby wykonali swoją pracę, aby dodać jakąś funkcjonalność lub zmienić sposób, w jaki rzeczy są teraz wykonywane i organizowane. W większości przypadków jest to tylko kwestia dodania nowej klasy lub funkcji i nałożenia kleju, aby wykonać zadanie, ale od czasu do czasu pozornie prosta zmiana okazuje się mieć daleko idące konsekwencje, które wymagają ode mnie przeprojektowania znaczna ilość istniejącego kodu, która zajmuje dużo czasu i wysiłku i jest trudna do oceny pod względem wymaganego czasu. Myślę, że nie tyle ma to związek ze współzależnością modułów, co ze zmieniającymi się wymaganiami (co prawda na mniejszą skalę). Aby podać przykład, myślałem o niedawno dodanej funkcjonalności wielu użytkowników w Androidzie. Nie wiem, czy planowali ją wprowadzić od samego początku, ale zakładając, że tak się nie stało, wydaje się, że trudno przewidzieć wszystkie obszary, na które zmiana będzie miała wpływ (preferencje aplikacji, motywy, trzeba jakoś przechowywać informacje o koncie itd...?), mimo że koncepcja wydaje się dość prosta, a kod jest dobrze zorganizowany. Jak radzisz sobie w takich sytuacjach? Czy po prostu wskakujesz do kodu, a później porządkujesz sprawę, tak jak ja? Czy też wcześniej dokonujesz szczegółowej analizy tego, na co będzie to miało wpływ, co i jak należy zaktualizować, a co przepisać? Jeśli tak, jakich narzędzi (jeśli w ogóle) i podejść używasz?


title: Ostateczna spójność w systemach bankowych

text: Ciągle słyszę, jak ludzie mówią, że systemy bankowe, takie jak bankomaty, używają modelu spójności ostatecznej do synchronizacji danych, ale zastanawiam się, czy to prawda. Zdecydowanie kwota, którą wypłacisz, może być opóźniona na Twoim wyciągu bankowym, ale zakładam, że nie spowoduje to, że kwota Twojego konta bankowego będzie niespójna w dowolnym momencie, prawda? Ktoś pracujący w branży może to potwierdzić?


title: Czy dopasowywanie wzorców do typów jest idiomatyczne czy kiepskie?

text: Wygląda na to, że kod F# często dopasowuje wzorce do typów. Z pewnością dopasuj opt z | Trochę val -> Coś(val) | Brak -> Different() wydaje się powszechny. Ale z perspektywy OOP wygląda to bardzo podobnie do przepływu sterowania opartego na sprawdzeniu typu środowiska uruchomieniowego, co zwykle byłoby mile widziane. Aby to przeliterować, w OOP prawdopodobnie wolisz używać przeciążania: wpisz T = abstrakcyjny element członkowski Route : jednostka -> typ jednostki Foo() = interfejs T z elementem this.Route() = printfn "Idź w lewo" wpisz Bar( ) = interfejs T z elementem this.Route() = printfn "Idź w prawo" To z pewnością jest więcej kodu. OTOH, wydaje mi się, że mój umysł OOP ma zalety strukturalne: * rozszerzenie do nowej formy „T” jest łatwe; * Nie muszę się martwić o znalezienie duplikacji przepływu sterowania wybierającego trasę; i * wybór trasy jest niezmienny w tym sensie, że kiedy mam w ręku `Foo`, nie muszę się martwić implementacją `Bar.Route()` Czy są zalety dopasowywania wzorców do typów, których nie widzę ? Czy jest to uważane za idiomatyczne, czy jest to zdolność, która nie jest powszechnie używana?


title: Narzędzia pomagające zespołowi Agile w dostarczaniu wartości

text: Mój zespół Agile stosuje praktyki XP, takie jak programowanie w parach (J2EE), 45 godzin pracy/tydzień, TDD itp. Czy masz jakieś zalecenia dotyczące narzędzi open source (integracja tworzenia, testowania i budowania) i szablonów (historia użytkownika, wykresy spalania) itp. za umożliwienie mojemu zespołowi skupienia się na dostarczaniu wartości biznesowej. Jestem kierownikiem iteracji i wypróbowaliśmy Hudson, Junit i Selenium.


title: Czy używanie kodu osobistego w pracy jest etyczne?

text: Pracuję nad pobocznym projektem w pracy, w którym korzystne jest wykorzystanie części mojego kodu, który opracowałem osobiście (poza pracą), aby przyspieszyć mój rozwój. Moim projektem pobocznym jest tworzenie aplikacji C++ GUI, która pozwala naszym zaawansowanym użytkownikom uruchamiać zapytania (zbudowane przeze mnie) w bazach danych na kilku różnych platformach (DB2, Oracle, SQL Server i MySQL). W przeszłości zwykle uruchamiałem je sam na żądanie lub budowałem dla nich aplikację Excel VBA. Teraz, gdy zbudowałem kilka aplikacji VBA dla kilku różnych osób, widzę potrzebę zbudowania jednej centralnej aplikacji, która po prostu odczytuje niestandardowe pliki .sql i działa na różnych bazach danych. Aplikacja, którą tworzę, jest w C++ i używa wieloplatformowego zestawu narzędzi GUI LGPL. Mam jednak dużo kodu we własnych bibliotekach, które przez lata budowałem na projektach związanych z rozrywką, niezwiązanych z pracą. Czy można używać tego kodu w pracy, oszczędzając w ten sposób czas mój (i firmie)? Jeśli tak, czy mogę przenieść poprawki błędów i ulepszenia z powrotem do mojej osobistej biblioteki? Wydaje się, że istnieje granica, której nie wiem, kiedy ją przekroczę. Chcę tylko dodać, że żaden osobisty kod nie ma nic wspólnego z logiką biznesową. Są to tylko podstawowe klasy użytkowe/opakowania.


title: Czy są jakieś najlepsze praktyki dotyczące przejścia z architektury do rozwoju?

text: Przyglądamy się usprawnieniu procesu przekazywania zadań z architektury do rozwoju. Na jednym końcu skali nie ma wskazówek dotyczących architektury, co grozi chaosem, a każdy programista robi wszystko po swojemu. Na drugim końcu skali, gdzie wszystko jest określone, specyfikacja trwa dłużej niż programowanie i ryzykujesz bardzo nudne zadania programistyczne. Czy ktoś znalazł optymalny środek między tymi skrajnościami? Jakie artefakty dostarczasz do rozwoju? Na przykład: moduły, struktura klas czy diagramy sekwencji?


title: Model domeny i zapytania

text: Jestem nowy w DDD, pracowałem tylko w aplikacjach Transaction-Script z modelem anemicznym lub po prostu Big Balls of Mud, więc proszę wybacz mi nadużywaną terminologię. Próbuję zrozumieć właściwą separację między modelem domeny a repozytorium. Jaki jest właściwy sposób konstruowania obiektu domeny pochodzącego z bazy danych, przy założeniu (niesamowicie uproszczonej) potrzeby wyszukiwania obiektów według statusu (zwraca `enumerable`) lub według ID. * Czy fabryka powinna budować obiekty, udostępniając metody `GetByStatus()` i `GetByID()`, używając repozytorium DIed? * Czy repozytorium powinno być wywoływane bezpośrednio, wiedząc, jak zbudować model domeny z DTO? * Czy model domeny powinien mieć konstruktora do pobrania według identyfikatora, przy użyciu repozytorium DIed do załadowania stanu początkowego, przy użyciu innej metody (?) dla listy? Nie jestem do końca pewien, jaki byłby najlepszy sposób, a to pytanie ma odpowiedź, która opowiada się za każdym z nich (są one z pewnością wzajemnie wykluczające się).


title: Lepszy framework php dla hostingu współdzielonego

text: Muszę opracować aplikację do umawiania spotkań. Będzie to **hostowane na serwerze współdzielonym**. Najważniejsza jest więc wydajność. Użyłem symfony2. Bardzo podobał mi się framework. Ale wydaje się być ciężki. Który framework byłby dla mnie odpowiedni, biorąc pod uwagę moje wymagania? Mam krótką listę trzech frameworków **yii, symfony2 i ZF2.** Nie pytam, który framework jest lepszy. **Wszystkie trzy to dobre frameworki**. Chcę wiedzieć, który będzie odpowiadał moim wymaganiom. Moim pierwszym priorytetem byłaby wydajność (będę używał AJAX tam, gdzie to możliwe), drugim będzie czas utrzymania i rozwoju, a trzeci wsparcie społeczności. A może powinienem używać własnych programów obsługi do oddzielania widoków i logiki i po prostu używać surowego php?


title: Branding stron internetowych skierowanych na urządzenia mobilne

text: Obecnie pracuję nad stroną internetową, która również ma być zoptymalizowana pod kątem urządzeń mobilnych. Mój klient dostarczył mi layout jak ma wyglądać mobilna wersja strony. Spełnienie ich życzeń projektowych to nic wielkiego, ale moim problemem jest dopasowanie projektu do ekranu. W tej chwili mam do czynienia z pewnymi problemami dotyczącymi szerokości tagu `<body>` witryny, ponieważ projekt jest mierzony do szerokości `640px`, ale to pozostawia dużą lukę po prawej stronie ekranu np. iPhone'y i telefony z Androidem. Strona jest tworzona w ASP.NET i C#. Używamy tylko 1 strony wzorcowej, więc optymalizacja może być trudna. Projekt, który otrzymałem, to plik `.psd`, który mam po prostu powiększyć i zrobić zdjęcia itp. bezpośrednio z niego. Problem polega na tym, że wszystkie obrazy nawigacyjne, obrazy dzielące zawartość itp. mają określoną szerokość i wysokość, dlatego umieściłem szerokość `640px` w tagu `<body>`. Tak więc moje pytanie brzmi: jaki jest najlepszy sposób dopasowania projektu do ekranu podręcznego? Czy powinienem zapomnieć o pikselach, em i calach i przejść do końca z % zarówno dla szerokości, rozmiaru czcionki itp.? Czy mogę po prostu „skopiować/wkleić” dostarczony projekt i w jaki sposób zmusić rozdzielczości ekranu w telefonach do dopasowania ich powiększenia do szerokości ciała o szerokości 640 pikseli bez pozostawiania luk po obu stronach ekranu?


title: Jaka jest różnica między sortowaniem a zestawem znaków?

text: Mam ogólne pytanie dotyczące baz danych. Terminu zestawienia używamy zwykle w odniesieniu do baz danych. Chciałbym wiedzieć, czym różni się od zestawu znaków. Myślę, że sortowanie jest podzbiorem zestawu znaków. Jeśli to prawda, jaki jest cel wielokrotne sortowanie pod zestawem znaków.


title: UML - Kolejność diagramów klas -> Produkty

text: Mam diagram klas, który wygląda tak: < Zamówienie > (1) CAN HAVE (M) < produkty > Ale dlatego `Zamówienie` ma następujące wartości: Order_Id Customer_Id Order_date_day Order_date_month Order_date_yeah Ale nie wiem, jak poradzi sobie z produktami? Ponieważ nie mogłem mieć `ProductID`, ponieważ oznaczałoby to, że każdy przedmiot w tej klasie musiałby mieć osobną instancję dla każdego produktu (np. ktoś zamówił 100 produktów, ale złożył tylko 1 zamówienie). Czy mogę mieć obiekt `Product` w klasie `Order`? Jeśli tak, jak mam to przedstawić w UML?


title: Najlepsza organizacja zespołu programistycznego dla 3 osób?

text: Deweloper mojej firmy awansował na nowe stanowisko, które praktycznie zarządza nami developerami i przydzielił 3 osobom w naszym zespole (w tym mnie) kilka dużych projektów wykonanych w Javie/Delphi/.NET, sens bycia zespołem był taki że każdy z nas może zarządzać swoim kodem na wypadek, gdyby ktoś wyjechał na wakacje lub z jakiegokolwiek powodu odszedł z firmy. Sugestie zaczynają się w poniedziałek, ale tak naprawdę nie znalazłem żadnych solidnych informacji na temat pracy zespołów agnostycznych językowych, ani jak nimi zarządzać, chociaż moim pomysłem było doradzanie środowisku eclipse/maven/jenkins z podejściem TDD do projektów java, ale nie wiedz, co jest dla nas najlepsze w innych językach. Czy migrowałbyś również aplikacje Delphi .Net do Javy? A może nauczyłbyś się obu języków i po prostu zostaw to tak, jak jest. Jestem trochę fanboyem Javy, ale nie miałbym nic przeciwko uczeniu się innych języków, ale myślę, że posiadanie jednego języka ma zalety, ponieważ każdy zna te same narzędzia i mniej narzędzi do opanowania. Nadal nie wiem, co zasugerować, poza tym, co powiedziałem powyżej, wszelkie porady dotyczące tego rodzaju problemów są mile widziane.


title: Jaki jest najlepszy sposób na przygotowanie projektu i kodu na te „nieznane nieznane” błędy od pierwszego dnia?

text: Zastanawiam się tylko, czy jest jakaś praktyczna metoda lub technika, a nawet sztuczki, aby uniknąć tych „nieznanych nieznanych” błędów, zwłaszcza tych paskudnych i przypadkowych, które często pojawiają się w ostatnich minutach lub przynajmniej utrzymać te rzeczy na minimalnym poziomie. Pytam o to, ponieważ kiedy po raz pierwszy pracujesz na nowej platformie lub korzystasz z określonej nowej technologii, jak uzasadniasz, że twój projekt i kod są wystarczająco solidne? A może tych rzeczy można się nauczyć tylko przez czas i błędy? (Używam C++ przez większość czasu pracy) Dzięki!


title: Ostatni semestr studiów: podczas próby zdobycia pierwszej pracy programisty webowego/mobilnego

text: Jestem na ostatnim roku studiów licencjackich na kierunku Inżynieria - Informatyka. Niektóre rzeczy, które zauważyłem podczas szukania pracy, to to, że większe starsze korporacje chcą, abyś znał java lub c# dla istniejących systemów na poziomie przedsiębiorstwa, podczas gdy większość firm zajmujących się zaawansowanymi technologiami, start-upów lub oprogramowania mobilnego chce, abyś znał najnowsze języki, technologie i mieć doświadczenie z materiałami open source. Bardziej przemawia do mnie startup/firma mobilna. Firmy zwykle wydają się zatrudniać więcej młodych ludzi i reklamują, jak fajnie się tam pracuje. Myślałem o próbie zdobycia pozycji programisty w dziedzinie tworzenia aplikacji mobilnych lub internetowych. Moim głównym problemem jest to, że nie mam doświadczenia w pracy tylko jako programista. Odbyłem staż, który zajmował się głównie pracą z administracją systemami, a także poznawał korporacyjną stronę biznesową rzeczy i pomagał zespołowi marketingowemu przy ich stronie internetowej. Teraz, w ostatnim semestrze, spieszę się skompletować portfolio. Mam szeroką gamę małych projektów w PHP, ROR, C#, wraz z aplikacjami mobilnymi typu hybrydowego html/css/javascript. Żaden z tych projektów nie jest tym, co uważam za ukończone i dopracowane. Mam szeroką gamę na wpół gotowych aplikacji internetowych. Czy nie byłoby złym pomysłem, ale niedokończone projekty w portfolio na CV? Naprawdę mam ochotę zagłębić się w rozwój iOS Object-c, ale czy w tym momencie byłoby za późno? Wiem, że ważne jest opanowanie czegoś, ale mam tylko kilka miesięcy do ukończenia szkoły, czy lepiej po prostu wrócić i dokończyć małą aplikację php lub coś podobnego? (to zasadniczo nie jest niczym innym, jak osobistym projektem). Czuję, że dobrze rozumiem podstawowe zasady, ale nie wiem, jak najlepiej przeznaczyć swój czas. Każda rada byłaby pomocna, dziękuję.


title: Czy Perl nadal jest użytecznym, opłacalnym językiem?

text: Wiem, że mogło być o to pytane wcześniej, ale nic tu nie ma... Czy Perl nadal jest czymś, co można by uznać za przydatne? Gdyby ktoś był nowym programistą (albo zupełnie nowy w programowaniu, albo miał tylko kilka miesięcy/lat doświadczenia), czy Perl byłby czymś, co można by uznać za warte zachodu nauki? Czy Perl jest nadal używany z częstotliwością? Czy nadal jest popularny? A może Perl wymiera w porównaniu z językami takimi jak Python, Ruby, PHP, ASP.NET itp.? Zasadniczo sprowadza się to do tego: * Czy nadal jest używany/czy nadal jest często używany? Jeśli tak, czy umiera? Jeśli nie, czy wróci? * Czy jest to coś, czego warto się nauczyć? * Jak wypada w porównaniu z językami takimi jak Python zarówno pod względem popularności, jak i użyteczności/realności? Czy języki takie jak Python lub Ruby można uznać za zamienniki dla Perla? Ponadto, czy nowsze wersje Perla naprawdę przyniosą znaczną poprawę społeczności Perla i być może przywrócą Perla z powrotem na scenę w porównaniu z innymi językami? EDYCJA: OK, przypuszczam, że oto lepsze, przeredagowane pytanie: Czy Perl wciąż rośnie, czy "umiera"? Czy nadal warto się uczyć i używać tego języka? W jakich projektach naprawdę „błyszczy” w porównaniu z innymi językami? Co sprawia, że Perl jest językiem do wyboru? Zasadniczo: czy Perl staje się przestarzały w porównaniu z innymi językami, a jeśli tak, czy spodziewasz się, że to się zmieni, czy też będzie kontynuowane? I dziękuję wszystkim, którzy do tej pory odpowiedzieli, dyskusja była naprawdę ciekawa!


title: Jak mogę przetestować części mojej aplikacji z danymi wyjściowymi aplikacji innej firmy?

text: Mam dość nową aplikację C#, mającą około 6 miesięcy, do której teraz próbujemy włączyć testowanie. (Powinno być zrobione od początku, ale nie mogę zmienić przeszłości) Części tej aplikacji polegają na wypchnięciu niektórych dokumentów do folderu. Następnie aplikacja innej firmy pobiera je, wykonuje na nich własną pracę i umieszcza pliki wyjściowe w innym folderze. Moja aplikacja czeka na to, aby to zrobić, pobiera dane wyjściowe, a następnie kontynuuje pracę. Stanowi to problem podczas testowania, ponieważ tak naprawdę nie mogę zainstalować innej wersji strony trzeciej tylko do testowania, ani nie mogę jej oszukać bez pełnego przepisania aplikacji innej firmy. Jak mogę przetestować te części mojej aplikacji? (Najlepiej z NUnit) W szczególności pytam o to, jak przetestować mój kod z danymi wyjściowymi narzędzia innej firmy. Jest to więc trochę inne niż inne podobne pytanie, które dotyczy wyizolowania sposobu, w jaki kod współpracuje z firmą zewnętrzną.


title: Czy istnieje jakiś problem, jeśli w metodzie super() używany jest operator trójargumentowy?

text: Używam operatora trójargumentowego w metodzie super() mojego kodu. Podczas gdy kod poszedł do przeglądu, otrzymałem odpowiedź, że > Ściśle nie używaj operatorów trójskładnikowych w wywołaniach Super(). Czy jest jakiś problem, jeśli używamy operatorów trójargumentowych w metodzie super()?


title: Czy istnieją mierniki spójności i sprzężenia?

text: Czy istnieje miara analogiczna do miary McCabe Complexity, która mierzy, jak spójna jest procedura, a także jak luźno (lub ściśle) powiązana jest procedura z innym kodem w tej samej bazie kodu?


title: Czy Rhodes faktycznie tworzy aplikację natywną czy hybrydową?

text: Rhodes twierdzi, że jest w stanie tworzyć aplikacje natywne, ale nie jestem pewien, czy oznacza to natywną powłokę + wbudowaną przeglądarkę internetową, taką jak PhoneGap, czy tworzy prawdziwą aplikację natywną, jak (jak mi się wydaje) Titanium.


title: Rozproszone ramy transakcji w usługach internetowych

text: Projektuję nowy system, który ma jeden centralny serwis internetowy i kilka serwisów internetowych, które są rozsiane po całym kraju i za granicą. Zawiera pewne dane, które muszą być identyczne we wszystkich witrynach. Więc moim planem jest utrzymanie tych danych w centralnej usłudze sieciowej, a następnie „synchronizacja” danych z witrynami. Obejmuje to wstawianie, edycję i usuwanie. Widzę problem podczas usuwania, jeśli jedna witryna używała rekordu, muszę cofnąć usunięcie, które miało miejsce na innych serwerach. To doprowadziło mnie do pomysłu, że potrzebuję jakiegoś systemu transakcyjnego, który może działać na różnych serwerach internetowych. Zanim zaprojektuję jeden od podstaw, chciałbym wiedzieć, czy ktoś spotkał się z tego rodzaju problemem i czy są jakieś prace ramowe, a nawet wzory projektowe, które mogą mi pomóc?


title: DDD / Warstwy i starsze systemy

text: Mam do refaktoryzacji złożonej aplikacji C# (wiele okien dialogowych, logika mieszana i tak dalej). Istnieje część zarządzająca komunikacją ze specjalnymi urządzeniami sprzętowymi (wysyłanie poleceń i odbieranie danych poprzez asynchroniczne wywołania zwrotne c#). Kod to „spaghetti” z mieszanym interfejsem użytkownika/logiką/komunikacją/itd., a moim zadaniem jest dzielenie warstw w sensie DDD. Więc do której warstwy należy procedura sterownika wywołań zwrotnych? Callbacki tworzą "bańki" w systemie, aż do warstwy UI i z tego powodu nie mogę wymusić podstawowej zasady, że każdy element warstwy zależy tylko od innych elementów w tej samej warstwie lub od elementów warstw "pod" to.


title: Sprzedaj mnie na kontenerach IoC, proszę

text: Widziałem kilka rekomendacji użycia kontenerów IoC w kodzie. Motywacja jest prosta. Weź następujący wstrzyknięty kod zależności: class UnitUnderTest { std::auto_ptr<Zależność> d_; public: UnitUnderTest( std::auto_ptr<Zależność> d = std::auto_ptr<Zależność>(nowa konkretna zależność) ) : d_(d) { } }; TEST(UnitUnderTest, przykład) { std::auto_ptr<Zależność> dep(new MockDependency); UnitUnderTest uut(dep); //Przetestuj tutaj } Into: class UnitUnderTest { std::auto_ptr<Zależność> d_; public: UnitUnderTest() { d_.reset(static_cast<Zależność *>(IocContainer::Get("Zależność"))); } }; TEST(UnitUnderTest, przykład) { UnitUnderTest uut; //Przetestuj tutaj } //Konfiguracja kontenera IOC normalnie <Dependency>ConcreteDependency</Dependency> //Konfiguracja kontenera IOC do testowania <Dependency>MockDependency</Dependency> (Powyżej jest oczywiście hipotetycznym przykładem C++) Zgadzam się z tym to upraszcza interfejs klasy, usuwając parametr konstruktora zależności, myślę, że lekarstwo jest gorsze niż choroba z kilku powodów. Po pierwsze, i to jest dla mnie duże, to sprawia, że twój program jest zależny od zewnętrznego pliku konfiguracyjnego. Jeśli potrzebujesz pojedynczego wdrożenia binarnego, po prostu nie możesz używać tego rodzaju kontenerów. Drugą kwestią jest to, że API jest teraz słabo i gorzej, wpisane _łańcuchowo_. Dowodem (w tym hipotetycznym przykładzie) jest argument w postaci ciągu do kontenera IoC i rzutowanie na wynik. Więc… czy są inne korzyści z używania tego rodzaju pojemników, czy po prostu nie zgadzam się z tymi, którzy je polecają?


title: Jak radzisz sobie z nauczycielami uczącymi niewłaściwych rzeczy?

text: Dzisiaj był mój pierwszy dzień na uniwersytecie, a zajęcia z inżynierii oprogramowania pozostawiły mnie z gorzkim smakiem. Profesor z pewnością zdaje sobie sprawę z projektowania i wzorców projektowych oraz MVC i tym podobnych (to będzie jego temat), ale jeśli chodzi o kompilację i przewidywanie gałęzi, wydaje się być trochę zdezorientowany. W pewnym momencie zaczął nam wyjaśniać, dlaczego programy zorientowane obiektowo są wolniejsze od programów imperatywnych, ponieważ programy zorientowane obiektowo są interpretowane, podczas gdy programy napisane w języku nie-OO, takim jak, powiedzmy, C, są kompilowane do kodu maszynowego. Następnie zaczął wyjaśniać, jak współczesne kompilatory, takie jak kompilatory C, próbują zgadnąć, która gałąź w warunku będzie wykonywana przez większość czasu, i umieszcza pierwsze instrukcje tych gałęzi przed blokiem `if`, i to jest pewien sposób implementacji równoległości na poziomie instrukcji. Następnie powiedział nam, że te kompilatory muszą zgadywać, ale kompilator JIT, podobnie jak współczesne kompilatory Java JIT, może sprofilować kod i umieścić instrukcje najczęściej używanej gałęzi przed blokiem `if`, bez konieczności zgadywania. To było w najlepszym razie niedokładne i mylące. Wyglądało to na mieszankę wielu rzeczy pomieszanych w tak dziwny sposób, że mogę być tylko wdzięczna, że nie o to chodzi w kursie. Studenci przerywali mu kilka razy, pytając retorycznie, czy mówi o Javie, czy ogólnie o OO (zgodził się, że powinien był wyraźniej powiedzieć o rozróżnieniu między tymi dwoma, ale mimo to powiedział kilka nieścisłości), ale milczeliśmy, gdy poszedł dalej z jego wyjaśnieniami na temat przewidywania gałęzi. Więc. Jak możesz powiedzieć swojemu profesorowi, że nie jest na dobrej drodze? Oczywiście robienie tego przed wszystkimi nie jest Dobrą Rzeczą™. Ale czekanie na koniec lekcji, aby mu powiedzieć, może poważnie zaszkodzić zrozumieniu innych uczniów. Podejrzewam, że nie usłyszymy już tego typu rzeczy, a reszta tego, co nam powiedział, miała sens, więc złożenie skargi z pewnością nie wchodzi w grę (zwłaszcza po zaledwie jednych zajęciach). Wydaje się, że jest w stanie uczyć wzorców projektowych, ale naprawdę poszedł w teren, opowiadając o kompilatorach i tym podobnych rzeczach.


title: Czy Dependency Injection jest tego warte poza UnitTesting?

text: Biorąc pod uwagę konstruktora, który nigdy, przenigdy nie będzie musiał używać różnych implementacji kilku obiektów, które inicjuje, czy nadal jest praktyczne używanie DI? W końcu możemy nadal chcieć przeprowadzić test jednostkowy. Klasa, o której mowa, inicjuje kilka innych klas w swoim konstruktorze, a klasy, których używa, są dość specyficzne. Nigdy nie użyje innej implementacji. Czy usprawiedliwiamy się unikaniem prób programowania w interfejsie?


title: Obsługa mojego przestarzałego współpracownika

text: Jestem dość młodym programistą i pracuję w dziale IT średniej wielkości firmy. Mam współpracownika, który jest naprawdę dobrym programistą w Visual Basic 6. I naprawdę dobrze. Szczerze mówiąc. Potrafi dostarczyć działające aplikacje, zawierające bardzo niewiele błędów, w czasie, w którym potrzebuję pierwszej filiżanki kawy i uruchamiam maszynę. Jest po prostu taki dobry. Chodzi o to, że pracujemy z zespołem, a jego styl pracy jest całkowicie przestarzały. Nie wierzy w oprogramowanie do wersjonowania (jeśli tylko upewnisz się, że twój kod jest poprawny, nie potrzebujesz tych wszystkich bzdur). Nie wierzy we wdrażanie (mogę dostarczyć działający plik wykonywalny. Jak to jest wdrożone, administratorzy muszą się zorientować). Nie wierzy w abstrakcję. („Jeśli chcesz utworzyć podprogram, śmiało, ale nie wywołuj żadnych podprogramów z tego podprogramu. W ten sposób robi się bałagan, a kod jest trudny do naśladowania. W ten sposób każdy może śledzić każdy krok na swojej drodze. ' lub 'tak, z pewnością możesz użyć tej biblioteki, aby zrobić to za siebie, ale w ten sposób nie rozumiesz, co się dzieje') iz pewnością nie wierzysz w OOP. (pracujemy w VB.net) Jest tak dobry w tym, co robi, że potrafi dostarczać aplikacje o wiele szybciej niż ja. Ale to po prostu nie działa w zespole. Nasz drugi członek zespołu milczy i nie lubi się odzywać, chociaż zazwyczaj się z tym zgadza. Nasz menedżer uważa, że robię ważne punkty, ale nie jest programistą. Naprawdę ciężko mi jest utrzymywać programy, które napisał, a to nie zapewnia dobrej atmosfery w zespole. Jak myślisz, co jest dla mnie najlepszą rzeczą do zrobienia?


title: Jak „neutralizować” tych, którzy piszą zły kod w zespole?

text: Zawsze podobał mi się ten artykuł na JoelOnSoftware zatytułowany „Getting Things Done Kiedy jesteś tylko Grunt”. Mogłem szczególnie odnosić się, gdy byłem nowicjuszem (i nadal czuję, że ZAWSZE będę nim). Około #4, neutralizując bozo. Jaką masz radę, aby faktycznie wdrożyć to w rzeczywistych sytuacjach w pracy? Nie wydaje się to być tak łatwe (przynajmniej w naszym zespole), jak zwykłe rejestrowanie błędu w czyimś złym kodzie. Co działa na was wszystkich?


title: Kiedy będzie można bezpiecznie wybrać konstrukcję wielowątkową bez martwego zamka?

text: Czasami naprawdę musimy wybrać projekt wielowątkowy, ponieważ jednowątkowość zablokuje interfejs użytkownika lub zablokuje inny wątek. Ale czasami używanie wielu wątków jest tylko jednym z wyborów, na przykład możesz zastąpić wielowątkowość zegarem. W takiej sytuacji możesz chcieć uniknąć wysiłku związanego z badaniem ryzyka wydajności związanego z użyciem czasomierza i bezpośrednio przejść do projektu wielowątkowego. Ale jak wiemy, wątki mają wiele wad: 1. Problem z synchronizacją. 2. Debugowanie jest trudne w przypadku problemu z synchronizacją. 3. Problem impasu. #1 zawsze można rozwiązać przez dodanie blokad, a #3 jest najtrudniejsze do rozwiązania, może wymagać zmian na poziomie projektu. Skupmy się więc na tym, kiedy będzie można bezpiecznie wybrać projekt wielowątkowy bez problemów z zakleszczeniem. Używam następujących reguł, aby ocenić, czy jest to bezpieczne, czy nie: * Komponent ma tylko dane wejściowe i interakcję wywołania funkcji wejścia. * Lub komponent ma tylko dane wyjściowe i interakcję wywołania funkcji wyjścia. * Lub masz dane wejściowe i wyjściowe lub wywołanie funkcji, ale możesz upewnić się, że wszystkie dane, które wchodzą, mogą być obsługiwane asynchronicznie. (Nie mogę myśleć poza przypadkiem, ponieważ prawie zawsze musisz zsynchronizować dane, aby umieścić dane w kolejce.) Czy to ma dla Ciebie sens, każda myśl jest mile widziana.


title: Czy parametry opcjonalne są pomocne, czy utrudnieniem w utrzymaniu aplikacji?

text: Jak stwierdzono w tytule, czy parametry opcjonalne, takie jak te używane w C#, są pomocne, czy też stanowią przeszkodę w utrzymaniu aplikacji i należy ich unikać, ponieważ mogą utrudnić zrozumienie kodu?


title: Wyszukiwanie na żywo/filtrowanie podczas pisania w podejściu do klienta

text: Jako ćwiczenie dla siebie, aby przećwiczyć moje "umiejętności" JavaScript, próbuję napisać filtr po stronie klienta. Powinien być w stanie filtrować "bloki treści" jako typy użytkowników. Przez „blok treści” rozumiem listę DomElements, z których każdy zawiera co najmniej jeden węzeł tekstowy - możliwe, że zawierają więcej, a nawet inną liczbę węzłów tekstowych, zagnieżdżonych w innych węzłach itp. Pomyślałem o tym 2 podejścia: 1. Podczas inicjalizacji strony przeskanuj wszystkie węzły i przechowuj cały tekst w jakiejś mapie lub drzewie. 2. Po prostu iteruj po każdym elemencie i sprawdź, czy ma ciąg do wyszukania/filtrowania. Można tutaj zwiększyć wydajność przez buforowanie, filtrując tylko bieżące pozostałe elementy, jeśli dodawany jest tekst itp. Oczywiście, jeśli liczba węzłów jest naprawdę duża, opcja 1 zajmie trochę czasu, aby zbudować „indeks”, ale będzie działać szybciej jest zbudowany. Opcja 2 będzie jednak dostępna bezpośrednio podczas ładowania strony, ponieważ nie jest wykonywana inicjalizacja. Ale oczywiście wyszukiwanie zajmie więcej czasu. Więc moje pytanie brzmi: jakie jest najlepsze podejście tutaj? A jak zaimplementować „cachowanie” i/lub „indeks”?


title: Oprogramowanie w budżecie i na czas?

text: Wszyscy (prawie wszyscy) słyszeliśmy o horrorach, a może nawet studiowaliśmy o nich. Łatwo jest znaleźć historie oprogramowania, które przekroczyło budżet i jest spóźnione. Chciałem usłyszeć od deweloperów inną historię: **Pytanie:** * Czy wiesz, czy pracowałeś nad projektem, który był w budżecie i na czas? * Jaka jest najcenniejsza lekcja, której się z niej nauczyłeś?


title: Jak zastosować weryfikację i walidację na poniższym przykładzie

text: Śledziłem tutaj pytania weryfikacyjne i walidacyjne z moimi kolegami, ale nie jesteśmy w stanie dostrzec niewielkich różnic, prawdopodobnie spowodowanych barierą językową w technicznym języku angielskim. Przykład: * **Specyfikacja wymagań** Użytkownik chce sterować oświetleniem w 4 pokojach za pomocą zdalnego polecenia wysłanego z interfejsu użytkownika osobno dla każdego pomieszczenia. * **Specyfikacja funkcjonalna** 1. Interfejs użytkownika będzie zawierał 4 pola wyboru oznaczone zgodnie z pokojami, które kontroluje. 2. Gdy pole wyboru jest zaznaczone, sygnał jest wysyłany do odpowiedniego światła. Obok pola wyboru 3 pojawia się zielona kropka. Gdy pole wyboru jest odznaczone, sygnał (wyłączanie) jest wysyłany do odpowiedniej lampki. Obok pola wyboru pojawi się czerwona kropka. Zacznę od tego, czego się tutaj dowiedziałem: **Weryfikacja**, zgodnie z wieloma świetnymi odpowiedziami tutaj, zapewnia, że produkt spełnia określone wymagania - ponieważ specyfikacja funkcjonalna jest wykonywana przez producenta na podstawie wymagań klienta, ta zostanie zweryfikowana pod kątem kompletności , poprawność). Następnie dokument projektowy zostanie sprawdzony pod kątem specyfikacji funkcjonalnej (powinien projektować 4 pola wyboru...), a kod źródłowy pod kątem projektu (czy jest kod na 4 pola wyboru, funkcje do wysyłania sygnałów itp. - czy jest to zgodne z wymaganiami). OK, produkt jest zbudowany i musimy go przetestować, **sprawdzić**. Nadchodzi nasz problem ze zrozumieniem – **walidacja** powinna zapewnić, że produkt spełnia wymagania dotyczące jego konkretnego zamierzonego zastosowania, co jest zasadniczo wymogiem biznesowym (czy to działa? czy mogę kontrolować światła z interfejsu użytkownika?), ale testerzy na pewno będą pracować z funkcjonalnością specyfikacja, upewniając się, że pola wyboru są tam, działają, są oznakowane itp. Zasadniczo sprawdzają, czy wymagania specyfikacji funkcjonalnej zostały spełnione w produkcie końcowym, czy nie jest to weryfikacja? (nie powinno być, trzymajmy się ISO 12207, że tylko walidacja jest rzeczywistym testowaniem)


title: Kto wynalazł wskaźniki?

text: Dość proste pytanie, ale coś, czego nie udało mi się znaleźć. Kto jako pierwszy opisał ideę wskaźnika? Samo pojęcie abstrakcyjne?


title: Procesory wielowątkowe .NET i czterordzeniowe

text: Mam aplikację z pojedynczym wątkiem, która działa na komputerze z czterordzeniowym procesorem. Zaplanowane zadania uruchamiające formularze VB.NET są zbyt wolne. Jestem nowy w wielowątkowości i obliczeniach równoległych. Jeśli masz aplikację z pojedynczym wątkiem, która działa na serwerze z procesorem wielordzeniowym, to czy aplikacja używa tylko jednego z procesorów? Co się stanie, jeśli masz wiele zaplanowanych zadań i wiele instancji znajduje się w pamięci w tym samym czasie? Przeczytałem to pytanie na Stackoverflow: http://stackoverflow.com/questions/607775/how-to-write-net-applications-that-use-multi-core-processors, ale nadal nie jestem jasny.


title: Co oznaczają „koncepcje programowania”?

text: Jestem świeżo upieczonym absolwentem i starałem się o pracę, ale utknąłem w odpowiedzi na jedno z pytań: > Jaką technologię programowania, tematy programowania i koncepcje programowania > obecnie śledzisz? Jestem trochę zdezorientowany tym pytaniem, ponieważ jest trochę niejasne. Wiem, czym są technologie programistyczne — C#, Java, .NET itp. — ale jakie są tematy i koncepcje programistyczne? Rozumiem, że tematyka programowania to wszystko, co dotyczy C# lub ogólnie związane z programowaniem? Nie jestem pewien, jakie są koncepcje programistyczne. Jak mogę odpowiedzieć na to pytanie?


title: Jak wersjonować/śledzić zmiany w tabelach SQL?

text: Podczas pracy w zespole programistów, w którym wszyscy wprowadzają zmiany w tabelach lokalnych i tabelach deweloperskich, jak synchronizować wszystkie zmiany? Centralny plik dziennika, w którym wszyscy przechowują zmiany w sql? Strona wiki do śledzenia instrukcji alter table, pojedynczych plików .sql, które programiści mogą uruchomić, aby przywrócić ich lokalne bazy danych do najnowszej wersji? Użyłem niektórych z tych rozwiązań i męczy mnie znalezienie dobrego, solidnego rozwiązania, które działa, więc będę wdzięczny za twoje pomysły.


title: Co robisz, gdy nie masz nic do roboty?

text: Powiedzmy, że próżnujesz. Nie ma trwającego projektu i czasami nie masz nic do zrobienia. Lub prawdopodobnie jakiś projekt jest uruchomiony, ale nie możesz kontynuować. Więc nie masz nic do roboty i jesteś znudzony. W takich sytuacjach, jakie są rzeczy, które zwykle robisz, aby zabić czas? To, co zwykle robię, to: * Przeczytaj kilka książek. Ale czasami czuję się senny i na niektórych książkach łatwo mi się nudzi. * Przeglądaj witryny SE i próbuj odpowiedzieć na kilka pytań. To prawdopodobnie zabije kilka minut. * przeglądaj wszystko, co chcesz przeczytać (takie jak fizyka, jak działa, biologia itp.) * łamigłówki programistyczne. Prawdopodobnie kończy mi się temat lub rzeczy do zrobienia. I to w biurze, więc oglądanie, facebook czy granie nie jest dobrym pomysłem.


title: Czy Agile/Scrum może być używany przez 1 lub 2 programistów?

text: Wszystko, co do tej pory czytałem i badałem, opisuje, jak Agile/Scrum działa świetnie z zespołami liczącymi od 4 do 6 członków, a może nawet więcej. W moim obecnym sklepie mamy około 8 programistów, ale biorąc pod uwagę charakter wolumenu projektów i liczbę obsługiwanych działów, nigdy nie mamy więcej niż 1 lub 2 osoby przypisane do danego projektu. Czy nadal mogę używać Agile/Scruma z zespołem 1 lub 2 programistów? Pracuję nad przedstawieniem mojemu menedżerowi propozycji rozpoczęcia pracy z tą metodologią, ale muszę być w stanie wyjaśnić, jak zmniejszyć skalę rzeczy dla małej ekipy programistów lub przekonać ich, aby upewnili się, że otrzymamy więcej członków na danym projekt.


title: Co można zrobić, aby zatrzymać utratę zasobów i ujednolicić Mercurial i Git?

text: Zarówno Mercurial, jak i Git zostały stworzone jako zamiennik tego samego programu i aby rozwiązać ten sam problem, o którym można przeczytać w odpowiedzi Martina Becketta na pytanie Jak Git i Mercurial rozwijały się tak podobnie w tym samym czasie? pytanie. Te dwa narzędzia są bardzo podobne i pożyczają od siebie nawzajem według Scotta Chacona w jego Hg i Git: Czy nie możemy się po prostu dogadać? prezentacja na PyCon 2010. Myślę, że my, ludzie, marnujemy ogromną ilość zasobów, mając te dwa narzędzia, które robią to samo, ale działają inaczej. Czy można ujednolicić Mercurial i Git i przestać marnować nasze zasoby? Jakie działania należy podjąć?


title: Czy chmura jest gotowa do zastąpienia podstawowych systemów biznesowych?

text: Takie pytania zadawano już wcześniej (tak jak tutaj), ale w ciągu roku wiele może się zmienić. Moja firma jest bardzo zainteresowana migracją podstawowych systemów do „chmury”. Wyższe kierownictwo nietechniczne nie do końca wie, co to oznacza, ale są podekscytowani tym pomysłem i już rozpoczęli wdrażanie systemów opartych na chmurze. Po przejściu przez migrację ERP i doświadczeniu z pierwszej ręki, jak uciążliwe jest radzenie sobie ze starszymi systemami, naprawdę obawiam się, że przechodząc do chmury, tracąc kontrolę nad naszymi danymi, rozpoczniemy cykl nigdy - zakończenie migracji, gdy usługi w chmurze stają się online, a następnie znikają. Nie mówiąc już o wymaganiach technicznych związanych z nauką, programowaniem i nadążaniem za wieloma niestabilnymi interfejsami API w celu uzyskania różnych systemów opartych na chmurze, aby mogły się ze sobą komunikować. Mam inne obawy, takie jak prywatność, czas pracy bez przestojów, własność danych, konserwacja itp. Czy chmura jest naprawdę gotowa na najlepszy czas? Gdybyś był właścicielem firmy, czy zdecydowałbyś się umieścić swoje kluczowe, krytyczne dla firmy systemy w chmurze? Czy jako programista ufasz, że chmura i firmy świadczące te usługi są niezawodne i mają długowieczność tradycyjnego oprogramowania? Jeśli nie jest teraz gotowy, to kiedy będzie, jeśli kiedykolwiek?


title: Czy ta klauzula licencyjna pozwala na redystrybucję tej aplikacji?

text: Jako programista często widzę potrzebę tworzenia ikon dla moich aplikacji. Nic nigdy nie działało tak dobrze jak IcoFX w tym celu. Niestety program nie jest już darmowy - ale nadal mam instalator do starszej wersji. Moje pytanie brzmi, czy mogę rozpowszechniać kopie instalatora. Umowa licencyjna zawiera następujące stosowne klauzule: 6. Wszystkie redystrybucje plików Oprogramowania muszą zachowywać wszystkie informacje o prawach autorskich i adresy witryn internetowych, które są aktualnie na miejscu, oraz muszą zawierać tę listę warunków bez modyfikacji. 7. Żaden z plików Oprogramowania nie może być redystrybuowany dla zysku lub jako część innego pakietu Oprogramowania bez wyraźnej pisemnej zgody Autora. 10. Autor zastrzega sobie prawo do zmiany niniejszej umowy w przyszłości. Pierwsze dwie klauzule wydają się sugerować, że mogę legalnie rozpowszechniać dosłowne kopie instalatora, ale ostatnia klauzula mnie zdezorientowała. Jeśli autor modyfikuje umowę i usuwa możliwość rozpowszechniania kopii, czy dotyczy to mojej kopii, którą pobrałem jakiś czas temu?


title: Co powinienem uwzględnić w 10-tygodniowym kursie technologii internetowych?

text: We wrześniu będę wykładał moduł uniwersytecki dotyczący technologii internetowych. Ta sesja będzie dostępna dla studentów pierwszego roku (pierwszego roku), którzy niekoniecznie posiadają wiedzę programistyczną lub wiedzą, jak działa sieć. W 2 semestrze będę uczyć Flasha, który jest moją specjalnością, więc dokładnie wiem czego będę uczyć, ale w 1 semestrze będę uczyć ich technologii standardów webowych - HTML, CSS, JS, jQuery, PHP i MySQL. Potrzebuję porady, jak rozłożyć nacisk na każdą część i które części każdej technologii należy uwzględnić. Innym poważnym problemem, z którym się zmagam, jest to, ile starych złych sposobów powinienem ich uczyć? Czy muszą wiedzieć o pogrubieniu, mocnym itd. AKTUALIZACJA: na podstawie Waszych opinii będę uczyć tylko najnowszej wersji wszystkiego - CSS3, HTML5 itp. Nie wiem dokładnie, jak długi będzie ten semestr, ale Zgaduję około 10-12 tygodni. Każda sesja to 2 godziny laboratorium. Oczywiście w tym czasie jest tylko tyle rzeczy, które mogę omówić i od uczniów będzie zależeć, czy dokładnie zbadają te rzeczy w szkołach W3 itp. Moje dotychczasowe pomysły to: Lekcja 0 - Wprowadzenie do kursu i przegląd obecnego krajobrazu technologicznego. Co tam jest, czego będziemy się uczyć, a czego nie. Co to jest serwer WWW, adres URL itp. Przeglądanie różnych przykładowych stron internetowych i omawianie ich działania. Lekcja 1 - Podstawy HTML (head, body, title, img, table, a, lists, h1, strong etc) Lekcja 2 - CSS do stylizacji i layoutu - fonty, webfonty, float itp Lekcja 3 - Wprowadzenie do programowania JS (zmienne, pętle, wyrażenia warunkowe, funkcje) Lekcja 4 - więcej podstaw programowania w JS, manipulacja DOM Lekcja 5 - jQuery - tworzenie rzeczy latających i fajnych Lekcja 6 - XML i Ajax Lekcja 7 - Podstawy PHP - składnia, zasady po stronie serwera Lekcja 8 - PHP i MySQL - formularze, loginy, zapisywanie informacji o użytkowniku Lekcja 9 - nie wiem Lekcja 10 - nie wiem Proszę daj mi znać, czy uważasz, że to właściwa kolejność, co przegapiłem, jak wykorzystać jakieś wolne sesje itp. Dzięki :) AKTUALIZACJA NA PODSTAWIE ODPOWIEDZI: Dzięki za wszystkie odpowiedzi - kilka świetnych rzeczy. Żeby było jasne, nie jest to kurs informatyki, to praktyczny moduł na kursie technologii kreatywnej. Nacisk zdecydowanie należy położyć na to, aby fajne rzeczy działały, a nie na zrozumienie, jak działa kręgosłup Internetu. To może nastąpić później, jeśli studenci będą zainteresowani. Chciałbym, aby pod koniec modułu studenci byli w stanie stworzyć stronę lub strony internetowe, które robią coś fajnego, używając niektórych lub wszystkich technologii, które omawiam. Wiele z tych tematów jest oczywiście daleko poza zakresem 2 godzinnej sesji, jednak nie mam możliwości skrócenia programu nauczania, wystarczy wyjaśnić, co robi technologia i zachęcić studenta do zbadania jej we własnym czasie .