title: Jak poprawić wydajność dzięki programowaniu funkcjonalnemu?

text: Niedawno przeglądałem przewodnik Naucz się Haskella dla wielkiego dobra i jako praktykę chciałem za jego pomocą rozwiązać Problem 5 Projektu Eulera, który określa: > Jaka jest najmniejsza liczba dodatnia, która jest równo podzielna przez wszystkie > od 1 do 20? Postanowiłem najpierw napisać funkcję określającą, czy dana liczba jest podzielna przez te liczby: divisable x = all (\y -> x `mod` y == 0)[1..20] Następnie obliczyłem najmniejszą za pomocą ` głowa`: sm = głowa [x | x <- [1..], podzielne x] I na koniec napisałem linię wyświetlającą wynik: main = putStrLn $ show $ sm Niestety zajęło to około 30 sekund. Robienie tego samego z liczbami od 1 do 10 daje wynik prawie natychmiast, ale z drugiej strony wynik jest znacznie mniejszy niż rozwiązanie dla 1 do 20. Rozwiązałem to wcześniej w C i tam wynik dla 1 do 20 również został prawie obliczony natychmiast. To prowadzi mnie do przekonania, że nie rozumiem, jak interpretować ten problem dla Haskella. Przejrzałem rozwiązania innych ludzi i znalazłem to: main = putStrLn $ show $ foldl1 lcm [1..20] W porządku, to używa wbudowanej funkcji, ale dlaczego efekt końcowy jest o wiele wolniejszy, gdy robisz to samodzielnie? Samouczki tam mówią, jak używać Haskella, ale nie widzę zbyt wiele pomocy w przekształcaniu algorytmów w szybki kod.


title: Jak usunąć zduplikowany kod bloku wyjątków?

text: Mam dużą liczbę klas Service i DAO, które mają ten sam zestaw 30-wierszowego bloku kodu wyjątków, który jest powtarzany i pojawia się w raporcie duplikacji kodu. Podejście, które przychodzi mi do głowy, to * Wyodrębnienie wspólnego bloku kodu wyjątku do wspólnej metody i wywołanie metody za jednym zamachem Reorganizacja metod, aby zapewnić, że zawsze istnieje jeden punkt wejścia i wyjścia do usług lub obiektów DAO, które będą miały tylko jeden zestaw kodów wyjątków. Czy istnieją lepsze sposoby podejścia do tego scenariusza?


title: ogólna technika tworzenia łańcuchów dla metody przeciążonej

text: Powszechną operacją w JavaScript jest zastąpienie metody obiektowej nową przy jednoczesnym wywołaniu metody oryginalnej. Często robi się to w następujący sposób: var originalMethod = obj.method; obj.method = function(arg) { // wywołaj oryginalną metodę originalMethod.call(this, arg); // zrób moje rzeczy nowe rzeczy } Chciałbym stworzyć funkcję narzędziową dla określonej metody obiektu, która obsługuje część łańcucha, tak aby użytkownik nie musiał się tym martwić. Jedną z opcji jest użycie powyższego projektu, w którym każda dodana funkcja jest opakowana w nową funkcję, która wywołuje poprzednią. Inną opcją jest utworzenie tablicy funkcji i sprawienie, aby metoda obiektu po prostu iterowała po tablicy, wywołując kolejno każdą funkcję. function addXyzMethod1(fn) { if (obj.metoda) { var poprzedniaMetoda = obj.metoda; obj.metoda = function(wartość) { wartość = poprzedniaMetoda.call(to, wartość); return fn.call(to, wartość); }; } else { obj.metoda = fn; } } function addXyzMethod2(fn) { if (obj._methodList) { obj._methodList.push(fn); } else if (obj.method) { obj._methodList = [obj.method, fn]; obj.method = function(value) { for (var i = 0, n = obj._methodList.length; i < n; i++) { value = obj._methodList[i].call(this, value); } zwracana wartość; }; } else { obj.metoda = fn; } } W tym momencie nie mogę zdecydować, której metody użyć, ponieważ uważam, że kompromisy w każdej z nich są równe. Więc moje pytanie brzmi: która z tych metod jest lepsza (bardziej naturalna, akceptowana lub szybsza), czy też istnieje inna metoda, która poprawia obie te metody?


title: Rozgałęzienie przerywa ciągłą integrację?

text: Myślę, że ten artykuł, A Successful Git Branching Model, jest bardzo dobrze znany doświadczonym użytkownikom DVCS. Używam głównie `hg`, ale uważam, że ta dyskusja jest dobra dla każdego DVCS. Nasz obecny przepływ pracy to, że każdy programista klonuje główne repozytorium. Piszemy kod na własnym lokalnym repozytorium, uruchamiamy testy i jeśli wszystko pójdzie dobrze, wysyłamy do mastera. Dlatego chcemy skonfigurować serwery CI, takie jak Jenkins, i poprawić przepływ pracy dzięki przyszłemu systemowi udostępniania (szef, marionetka, ansible itp.). **Prawdziwa część** Cóż, model prezentuje się ładnie, ale gałęzie mogą złamać CI. Gałąź funkcji powinna zsynchronizować się ze źródłem (zgodnie z artykułem byłaby to gałąź `development`), aby CI i scalanie przebiegały płynnie, prawda? Powiedzmy, że Alicja i Bob pracują nad dwiema funkcjami. Ale Alice jest skończona następnego dnia. Funkcja Boba zajmuje tydzień. Zanim Bob skończy, jego zmiany są nieaktualne (być może Alice przerobiła/zmieniła nazwy niektórych klas). Jednym z rozwiązań jest to, że każdego ranka programiści muszą ściągnąć `master/origin`, aby sprawdzić, czy są jakieś zmiany. Jeśli Alicja zatwierdziła, Bob powinien pobrać i scalić ze swoim obszarem roboczym, aby jego gałąź funkcji była aktualna. 1. Czy to dobry sposób? 2. Czy te gałęzie powinny istnieć w repozytorium głównym (a nie lokalnym klonie?) Czy każdy programista powinien mieć uprawnienia do commita w repozytorium głównym na GitHub/Bitbucket, aby mógł utworzyć nową gałąź? Czy odbywa się to lokalnie? 3. Wreszcie model przedstawiony w artykule powinien złamać CI, jeśli gałęzie nie są zsynchronizowane z `origin/master`. Skoro chcemy tworzyć conocne kompilacje, czy programiści powinni ściągać i scalać przed opuszczeniem pracy, a także uruchamiać CI w każdej gałęzi funkcji? Dziękuję.


title: Przepisywanie dużej aplikacji internetowej - alternatywy dla LAMP

text: Mamy bardzo dużą, 10 letnią aplikację webową LAMP (Linux, Apache, MySQL, PHP), która jest poza kontrolą i słabo napisana z powodu dużej liczby poprawek i możliwych setek programistów. Gdybyśmy mieli zrobić przepisanie, jakie są alternatywy dla stosu LAMP? Jednym z powodów, dla których LAMP jest to, że jest łatwy do opracowania i tani. Teraz firma może sobie pozwolić na poświęcenie większej ilości czasu/wysiłku/pieniędzy na nowy system. Myślałem o Javie lub C++ z Oracle? Czy istnieje wspólny stos „Enterprise”, z którego korzystają firmy? Wielkie dzięki.


title: Gdybym miał zbudować taką stronę internetową do praktyki programowania, jakiej konkretnej bazy wiedzy bym potrzebował?

text: Nauczyłem się C++ na studiach (teraz przechodzimy na Javę). Na boku nauczyłem się podstawowego schematu, php i javascript. Jednak moja wiedza jest na tyle podstawowa, że nawet nie wiedziałbym, jak zacząć budować taką stronę internetową. Powodem, dla którego pytam, jest to, że chcę dalej rozwijać swoje umiejętności/wiedzę w zakresie tworzenia stron internetowych poprzez wykonanie projektu i NAPRAWDĘ uwielbiam projekt tej witryny, więc pomyślałem, że mogę zbudować jej wariant. Czy ktoś może wskazać mi przewodniki lub czego muszę się nauczyć, aby zacząć iść w tym kierunku? Dziękuję!


title: Jakie są dobre sposoby na przedstawienie relacji między trzema liczbami?

text: Próbuję znaleźć czysty, intuicyjny sposób na zaimplementowanie tego problemu. Zasadniczo mam trzy liczby i na podstawie relacji (mniejsze niż, większe niż i równe) między tymi liczbami zmieniłbym sposób wykonywania następnego zestawu kodu. Na przykład, jeśli istnieją liczby A, B i C. Oto kilka przykładów relacji między nimi: * A < B < C * A = B > C * A = B = C * B < A = C Konsument mojego Framework zbudowałby tego rodzaju relacje między trzema liczbami i przeszedłby do klasy, która przetwarzałaby te relacje. Do tej pory mogłem wymyślić jeden sposób implementacji, który jest stosunkowo prosty, ale nie czysty. Reprezentowałbym relacje między trzema liczbami we flagach. Tak więc byłyby trzy różne flagi (A do B, B do C i A do C). Każda flaga miałaby opcje LessThan, EqualTo i GreaterThan. Musiałbym przeprowadzić wiele sprawdzeń, aby upewnić się, że 3 podane flagi są prawidłowe. Jeśli A < B i B < C, to A nie może być większe niż C. Jeśli A = B i A < C, to B nie może być większe niż C. Lista jest długa. Czy istnieje lepszy sposób na zaprojektowanie tego?


title: Jakie są dobre praktyki dotyczące uwzględniania przestrzeni nazw w C++, które pozwalają uniknąć pisania więcej?

text: Zaczynam od C++ i prawie wszędzie widzę te 2 zdania na górze. #include <iostream> używając przestrzeni nazw std; Jak rozumiem, przestrzenie nazw są czymś, co pozwala zachować oddzielne nazwy i mieć te same identyfikatory w różnych przestrzeniach nazw. Czy więc włączenie `std` na początku nie zniweczy całej ciężkiej pracy związanej z tworzeniem przestrzeni nazw? Czy nie lepiej mieć coś takiego jak `std::cout`, gdy potrzebuję określonej funkcji z określonej przestrzeni nazw? Czy włączenie przestrzeni nazw do konkretnej funkcji, która jej używa, byłoby dobrym kompromisem między mniejszą ilością pisania (`std::cout` vs. `cout` wszędzie) i unikaniem konfliktów nazw (abc in foo i abc in bar unika się używania `foo:: abc` i `bar::abc`)? Coś takiego jak int function_using_abc_namespace(int a) { using namespace abc; //Reszta funkcji } Chciałem wiedzieć, ponieważ unikanie konfliktów nazw jest konieczne, ale unikanie częstszego pisania jest również ważne. Jeśli nie jest to dobry sposób na osiągnięcie kompromisu, jakie są alternatywy?


title: Rozpoznawanie twarzy (OpenCV) za pomocą MySQL i PHP

text: Przede wszystkim zadałem to pytanie na stackoverflow i otrzymałem głos na pytanie, które nie należy do strony. Próbuję teraz szczęścia (chyba bardziej pasuje do tego) i mam nadzieję, że stąd też nie oddam głosu. Chcę opracować aplikację do rozpoznawania twarzy, która przeszukuje bazę danych w poszukiwaniu obrazu. Spojrzałem trochę na opencv. Bardzo mi się to podobało i chcę go używać, ale problem polega na tym, że planuję użyć PHP do zaplecza serwera, a OpenCV jest w C++. Moja aplikacja będzie wymagała dużo komunikacji między PHP i C++, a także będę musiał połączyć się z bazą danych i pobrać z nich obrazy. Zasadniczo planuję: * PHP otrzyma żądanie zawierające żądany plik obrazu * PHP przekaże ten obraz do mojego kodu C++ * C++ przeszuka bazę danych w celu znalezienia osoby * C++ przekaże wynik do PHP * PHP zwróci wynik klientowi Jednak takie podejście naprawdę mnie przeraża, ponieważ jest wiele szarych obszarów, jak to zrobić. Czy powinienem używać gniazd do komunikacji lub IPC (komunikaty POSIX itp., jeśli to możliwe), czy powinienem używać całkowicie C++ do mojego projektu (serwer C++ może być bardzo trudny) czy powinienem używać rozszerzeń PHP (prawie nic o tym nie wiem). Jak mogę używać OpenCV z bazą danych i jak przeprowadzić szybkie wyszukiwanie (może wartości skrótu dla przyciętych obrazów w skali szarości?). Muszę również wykrywać twarze, aby wytrenować niektóre obrazy dla użytkownika, co również wymaga wykonania powyższych kroków. Jakie sugestie możesz przedstawić? W jaki sposób najłatwiej byłoby mi zaimplementować tę aplikację? Przepraszam za pytanie dotyczące języka i niezorganizowanej struktury, ale naprawdę martwię się prawie o wszystko, co dotyczy projektu i naprawdę chcę to zrobić. Wszelkie wskazówki będą mile widziane


title: Kiedy istnieje wiele zespołów scrumowych, jak często powinien się spotykać „scrum of scrum” i kto powinien w nim uczestniczyć?

text: Gdy jeden zespół scrumowy ma zbyt dużo pracy do zarządzania, tworzonych jest wiele zespołów. Zespół scrumowy ma codziennie spotkanie na stojąco. Jak często powinno odbywać się spotkanie zespołu wewnątrz scrumowego i kto powinien w nim uczestniczyć? O czym powinni rozmawiać?


title: Algorytm do kopiowania danych szybciej niż domyślny dostawca kopii systemu Windows

text: Potrzebuję algorytmu, który może kopiować dane (pliki/foldery) z jednego miejsca do drugiego, szybciej niż domyślna opcja kopiowania/wklejania systemu Windows. Pracuję w vc++. Czy jest jakiś algorytm, dzięki któremu mogę szybciej kopiować/wklejać. Lub _Czy jest jakaś inna sugestia, aby wykonać to zadanie?_ Dzięki


title: Workflow Foundation do oddzielania danych od logiki biznesowej w średniej wielkości aplikacji?

text: Obecnie opracowujemy aplikację .net w WPF, która będzie aplikacją komputerową z dobrym dostępem do danych na lokalnych (i niektórych zdalnych) serwerach. Logika biznesowa jest tutaj bardzo złożona i obecnie jest wbudowana w kod wraz z dostępem do danych i innymi elementami (będąc WPF, interfejs użytkownika jest całkiem ładnie oddzielony). Teraz mam za zadanie zreorganizować ten system, aby był łatwiejszy w utrzymaniu na dłuższą metę, w miarę zmian logiki. Wiem, że przepływy pracy mają całkiem ładnie oddzielić logikę i pozwolić ci ją trochę zwizualizować. Czy przepływ pracy to dobry wybór dla aplikacji, która nie musi być uruchamiana przez długi czas? (ponieważ przepływy pracy MOGĄ czekać miesiącami bezczynności) Jakie jest Twoje doświadczenie z platformą? Czy jest to powolne w kontaktach ze średniej wielkości firmą; około 150 jednoczesnych użytkowników? Jeśli Ci się spodobało, czy znasz jakieś dobre samouczki online (najlepiej nie MSDN), które mogą dać mi smak platformy i przeprowadzić kilka testów, zanim zdecyduję się wdrożyć ją w ogromnej aplikacji?


title: Jaka jest różnica między Callback<T> a dostawcą<T> Java 8?

text: Przełączałem się na Javę z C# po kilku rekomendacjach z CodeReview. Tak więc, kiedy zaglądałem do LWJGL, przypomniałem sobie, że każde wywołanie `Display` musi być wykonane w tym samym wątku, w którym została wywołana metoda `Display.create()`. Pamiętając o tym, stworzyłem klasę, która wygląda trochę tak. public class LwjglDisplayWindow implementuje DisplayWindow { private final static int TargetFramesPerSecond = 60; prywatny końcowy Scheduler _scheduler; public LwjglDisplayWindow(Scheduler displayScheduler, DisplayMode displayMode) wyrzuca LWJGLException { _scheduler = displayScheduler; Display.setDisplayMode(displayMode); Wyświetl.tworzenie(); } public void dispose() { Display.destroy(); } @Override public int getTargetFramesPerSecond() { return TargetFramesPerSecond; } @Override public Future<Boolean> isClosed() { return _scheduler.schedule(() -> Display.isCloseRequested()); } } Podczas pisania tej klasy zauważysz, że stworzyłem metodę o nazwie `isClosed()`, która zwraca `Future<Boolean>`. To wysyła funkcję do mojego interfejsu `Scheduler` (który jest niczym innym jak opakowaniem wokół `ScheduledExecutorService`. Podczas pisania metody `schedule` na `Scheduler` zauważyłem, że mogę użyć `Supplier<T>` argument _lub_ argument `Callable<T>` reprezentujący funkcję, która jest przekazywana. `ScheduledExecutorService` nie zawierał zastąpienia dla `Supplier<T>`, ale zauważyłem, że wyrażenie lambda `() -> Display.isCloseRequested ()` jest w rzeczywistości typem zgodnym z `Callable<bool>` **i** `Supplier<bool>`. Moje pytanie brzmi, czy istnieje różnica między tymi dwoma, semantycznie lub inaczej - a jeśli tak, to co to jest , więc mogę się do tego przykleić?


title: Rozwiązywanie problemu probabilistycznego

text: Tak więc interesuje mnie inwestowanie obliczeniowe i natknąłem się na ten problem na stronie wiki: > Napisz program, który odkryje odpowiedź na tę zagadkę: „Powiedzmy, że mężczyźni i > kobiety otrzymują równe wynagrodzenie (z tego samego jednolitego rozkładu). Jeśli kobiety umawiają się na randki > losowo i poślubić pierwszego mężczyznę z wyższą pensją, jaka część populacji > wyjdzie za mąż?" Nie mam dużej wiedzy z teorii prawdopodobieństwa, więc nie jestem pewien, jak zaimplementować to w kodzie. Moje myślenie: 1. Wypełnij dwie tablice (kobieta, mężczyzna) losowymi wartościami wynagrodzeń z rozkładu równomiernego. 2. Losowo sparuj jeden żeński i jeden męski element tablicy i sprawdź, czy spełniony jest warunek wyższej pensji. 3. Jeśli tak, zwiększ licznik. 4. Podziel licznik przez populację i uzyskaj procent. Czy to właściwa logika? Czy kobiety ciągle umawiają się na randki, aż nie ma już mężczyzn z wyższymi zarobkami niż kobiety?


title: Strategie indeksowania pól niestandardowych w RavenDB

text: W świecie relacyjnych baz danych, gdybym rozwijał system CRM i chciał, aby użytkownik dodał własne niestandardowe pola, które można przeszukiwać, mógłbym mieć tabele przechowujące nazwę nowej kolumny, typ danych i wartość itp. (co byłoby mniej nieefektywne przy indeksowaniu) lub mógłbym użyć mniej eleganckiego (ale bardziej przeszukiwalnego) rozwiązania, którego używa oprogramowanie takie jak Dynamics i SharePoint, podczas gdy tworzę ładunek kolumn w moim zagregowanym katalogu głównym o nazwie CustomInt1, CustomInt2 itd. (co wygląda brudno i ma limit liczby pól niestandardowych, które może mieć użytkownik, ale ma zalety indeksowania). Ale moje pytanie brzmi: w bazach danych NoSQL, jaki byłby najlepszy sposób osiągnięcia tego samego? Moim priorytetem byłaby możliwość wyszukiwania. Jaki byłby najlepszy sposób przechowywania tych danych? Jeśli użyłem predefiniowanego zestawu właściwości (tj. CustomData1, CustomData2 itp.), ponieważ wszystkie są przechowywane w bazie danych jako JSON (tj. Stringi), czy to uprości to, ponieważ nie muszę się martwić o typy danych?


title: Czy przeciążanie metod, które robią logicznie różne rzeczy, łamie jakiekolwiek główne zasady?

text: To jest coś, co mnie teraz denerwuje. W niektórych przypadkach widzisz kod, który jest serią przeciążeń, ale kiedy patrzysz na rzeczywistą implementację, zdajesz sobie sprawę, że robią one logicznie różne rzeczy. Jednak zapisanie ich jako przeciążeń pozwala wywołującemu zignorować to i uzyskać ten sam wynik końcowy. Ale czy rozsądniej byłoby nazwać metody wyraźniej niż pisać je jako przeciążenia? public void LoadWords(string filePath) { var lines = File.ReadAllLines(filePath).ToList(); LoadWords(linie); } public void LoadWords(IEnumerable<string> words) { // ładuje słowa do List<string> w oparciu o niektóre filtry } Czy te metody lepiej służyłyby przyszłym programistom jako `LoadWordsFromFile()` i `LoadWordsFromEnumerable()`? Wydaje mi się to niepotrzebne, ale jeśli tak jest lepiej, jaka zasada programowania miałaby tutaj zastosowanie? Z drugiej strony sprawiłoby to, że nie trzeba było czytać podpisów, aby dokładnie zobaczyć, jak można załadować słowa, co, jak mówi wujek Bob, byłoby podwójne. Ale czy generalnie należy unikać tego typu przeciążeń?


title: Wielokrotne wystąpienie 1 klasy wpływa na pamięć?

text: Obecnie zmagam się z obsługą pamięci. Mam instrukcję if i każdy `case` tworzy instancję nowego obiektu z klasy. Czy ma to wpływ na alokację pamięci w javie? switch() { przypadek 1: test t1 = nowy test(); przypadek 2: test t2 = nowy test(); przypadek 3: test t3 = nowy test(); przypadek 4: test t4 = nowy test(); przypadek 5: test t5 = nowy test(); przypadek 6: test t6 = nowy test(); }


title: Kto kontroluje rejestr npm?

text: Dokumentacja NPM mówi, że każdy może wywołać `npm-publish` i dodać swój własny pakiet NPM do "oficjalnego" rejestru. Kto kontroluje ten rejestr? Jak niezawodny jest w scenariuszach wdrażania produkcyjnego? Co powstrzymuje ludzi przed spamowaniem tego rejestru? Czy istnieje proces moderacji/kontroli jakości?


title: Jaki jest rozsądny sposób ustrukturyzowania relacji w MongoDB

text: Używam również Node - z którym nie jestem najbardziej zaznajomiony - jeśli artykuły/książki/poradniki również się do tego odnoszą - to pomogłoby jeszcze bardziej. Pochodzę głównie ze środowiska MySQL - ale w tym api wszystkie dane będą podawane w formacie JSON - więc na pierwszy rzut oka używanie Mongo miało sens (mogę się mylić). Jedyną rzeczą, której nie udało mi się pojąć, są modele relacyjne. np. „Obiekt ma wiele zasobów”. Aby użyć kilku przykładów, które większość ludzi zna, załóżmy, że próbuję zrobić coś takiego: * Wybierz post na blogu i wszystkie jego komentarze. **lub** * Wybierz galerię zdjęć i wszystkie jej zdjęcia Czy to tak proste, jak zapisanie oddzwonienia w moich zasobach w ten sposób?: Zdjęcie { __id: 5, content: '...', gallery_id: 9 } I wykonywanie `.find({ gallery_id: 9 })`? Wiem, że to by _działało_ , ale czy to najlepsza praktyka? Jestem **bardzo** nowy w bazach danych dokumentów i nie widziałem zbyt wiele na ten konkretny temat.


title: Czy JavaScript rozwinął się poza to, do czego został pierwotnie zaprojektowany?

text: Rozmawiałem z przyjacielem o celu JavaScript, kiedy i jak powinien być używany itp. Cytował, że: > JavaScript został zaprojektowany, aby dodać interaktywność do stron HTML > > [...] > > JavaScript daje HTML projektanci narzędzie programistyczne > > * Autorzy HTML zwykle nie są programistami, ale JavaScript to język skryptowy > o bardzo prostej składni! Prawie każdy może umieścić małe „fragmenty” > kodu na swoich stronach HTML JavaScript może reagować na zdarzenia > * JavaScript można ustawić tak, aby wykonywał się, gdy coś się stanie, na przykład po zakończeniu ładowania strony lub po kliknięciu elementu HTML przez użytkownika > JavaScript może odczytywać i zapisywać elementy HTML > * JavaScript może odczytywać i zmieniać zawartość elementu HTML > JavaScript może być używany do sprawdzania poprawności danych > * JavaScript może być używany do sprawdzania poprawności danych formularza przed > przesłaniem ich na serwer. Oszczędza to serwerowi przed dodatkowym przetwarzaniem > * JavaScript może być użyty do wykrycia przeglądarki odwiedzającego - JavaScript > może być użyty do wykrycia przeglądarki odwiedzającego i - w zależności od przeglądarki > - załaduj inną stronę specjalnie zaprojektowaną dla tej przeglądarki. > * JavaScript może być używany do tworzenia plików cookie - JavaScript może być używany do > przechowywania i pobierania informacji na komputerze odwiedzającego. > Wygląda jednak na to, że JavaScript przyzwyczaja się do znacznie więcej niż obecnie. Mój przyjaciel również opowiada się przeciwko używaniu funkcji OOP JavaScript, twierdząc, że „nie powinieneś przetwarzać danych, a jedynie weryfikować”. Czy JavaScript naprawdę ogranicza się do walidacji danych i tworzenia krzykliwych grafik na stronie internetowej? Dalej twierdzi, że „nie powinieneś próbować uzyskiwać dostępu do baz danych za pomocą javascriptu”, a także mówi „ogólnie nie chcesz robić ciężkiego podnoszenia w javascript”. Nie mogę powiedzieć, że zgadzam się z jego opinią, ale chciałbym uzyskać więcej informacji na ten temat. Tak więc moje pytanie: czy JavaScript ewoluował od powyższej definicji do czegoś potężniejszego, czy zmienił się sposób, w jaki go używamy, czy po prostu się mylę? Choć zdaję sobie sprawę, że to subiektywne pytanie, nie mogę znaleźć więcej informacji na ten temat, więc kilka linków byłoby dobrych, jeśli nic więcej. Nie szukam debaty, tylko odpowiedzi.


title: Wyższe standardy kodowania dla języków dynamicznych?

text: Ze względu na nieodłączne ryzyko związane z nieostrożnym używaniem języków dynamicznych (np. Python, Ruby), jakie (jeśli w ogóle) standardy należy nałożyć na kod produkcyjny napisany w tych językach?


title: Jak wdrażany jest backdoor programowy?

text: Artykuł w Wikipedii na temat Limewire mówi, że „LimeWire 5.5.11 i nowsze zostały wyłączone przy użyciu backdoora zainstalowanego przez firmę”. Jak wdrażane są takie backdoory? Czy to tak proste, jak uruchomienie programu, sprawdzenie usługi sieciowej i samo wyłączenie? Jeśli w rzeczywistości jest to takie proste, musi być przechowywane gdzieś na dysku użytkownika (w plist lub na przykład w rejestrze). Trudno sobie wyobrazić, że nikt tak naprawdę nie wymyślił sposobu na wyłączenie tej flagi i korzystanie z programu.


title: O czym powinienem „zapomnieć” przechodząc do JavaScript?

text: Przeszedłem od C=64 Basic i asemblera do FORTRAN i C do C++ i Javy. Zawodowo zaczynałem w Visual Basic dla aplikacji, potem w Visual Basic 4, 5, 6. Potem VB.NET I C# z odrobiną Javy tu i tam. Bawiłem się Ruby i Pythonem i oba są zabawne. Na każdym kroku nigdy nie czułem, że muszę zapomnieć to, czego się wcześniej nauczyłem. Zawsze czułem, że po prostu uczę się lepiej i/lub trochę innych sposobów robienia rzeczy, ale różnica nie była duża. Różnica była jak różnica między angielskim amerykańskim, australijskim i brytyjskim. (Może asembler był po łacinie, a FORTRAN po hiszpańsku.) Ale teraz używam JavaScript do wykonywania prawdziwej, rzeczywistej pracy. (Wcześniej używałem go jako prostego języka "skryptowego".) I po prostu czuję, że muszę zapomnieć o kilku rzeczach, aby nabrać w nim biegłości. Czuje się jak w jakimś starym języku egipskim. O czym powinienem zapomnieć? Czy to po prostu, że organizacja kodu jest inna (brak prawdziwych klas, więc nie ma jednego pliku klasy jednej)? A może jest to coś bardziej podstawowego? *Edytować. Mimo że zamknięte, myślę, że kilka udzielonych odpowiedzi było bardzo pomocnych. Myślałem o tym dzisiaj, przejrzałem i napisałem trochę kodu. Mogę się mylić, ale myślę, że główne rzeczy to: 1. Zakres nie ma być tak ściśle kontrolowany, a może nie może być tak ściśle kontrolowany? W każdym razie nie mogę myśleć o zakresie w JavaScript tak, jak to robię w systemie opartym na klasach. Muszę zapomnieć o tych pomysłach. 2. Klasy/interfejsy nie są podstawową jednostką funkcjonalności. Nie jestem pewien, czym właściwie jest podstawowa jednostka (funkcja? prototyp? do ustalenia), ale przynajmniej wiem, żeby nie próbować myśleć o klasach. (To jest prawdopodobnie podstawowa.)


title: Czy zaciemnienie kodu aplikacji C++ jest ważne?

text: W świecie Javy czasami wydaje się to być problemem, ale co z C++? Czy istnieją różne rozwiązania? Myślałem o tym, że ktoś może zastąpić bibliotekę C++ konkretnego systemu operacyjnego inną wersją tej samej biblioteki, ale pełną symboli debugowania, aby zrozumieć, co robi mój kod. CZY dobrze jest korzystać ze standardowych lub popularnych bibliotek? Może się to również zdarzyć, gdy niektóre biblioteki dll w systemie Windows zostaną zastąpione „wersją debugowania” tej biblioteki. Czy lepiej preferować kompilację statyczną? W aplikacjach komercyjnych widzę, że dla rdzenia ich aplikacji kompilują wszystko statycznie i w większości dll (ogólnie biblioteki dynamiczne) są używane do oferowania niektórych technologii innych firm, takich jak rozwiązania antypirackie (widzę to w wielu grach ), biblioteka GUI (np. Qt), biblioteki systemu operacyjnego itp. Czy kompilacja statyczna jest odpowiednikiem zaciemniania w świecie Javy? Czy w lepszym ujęciu jest to najlepsze i najtańsze rozwiązanie do ochrony kodu?


title: Jak zarządzać programistami Agile pracującymi z tradycyjnymi (seryjnymi) osobami biznesowymi?

text: Dzień dobry, Moje środowisko pracy ma pewne problemy. Nasz zespół IT stara się być bardziej zwinny, ale tak naprawdę nie otrzymujemy poparcia od biznesu. Uczestniczą w naszych codziennych stand-upach i przeglądach sprintów i pomagają w planowaniu sprintów, ale potem odwracają się i robią 4 miesiące zbierania wymagań dla projektu, zanim przejdą do (głównie) stylu rozwoju seryjnego. Cele sprintu to takie rzeczy jak „zbliżyć się o XX% do wydania”. Dla zespołu IT zamienili Sprinty w rodzaj marszu śmierci. Kończymy Sprint jednego dnia i rozpoczynamy nowy Sprint następnego dnia. Pomiędzy sprintami nie ma refleksji ani zmian, tylko w trakcie. Ponieważ nigdy wcześniej nie stosowałem żadnej z metodologii Agile, nie miałem do nich zbyt przyjemnego wprowadzenia. Więc moje pytania brzmią: 1) Czy powinno być trochę czasu (może około tygodnia) pomiędzy sprintami na refleksję/introspekcję/zmiany/itd.? A może sprinty jeden po drugim są normą? 2) Czy jest jakaś szansa na przetrwanie dla zwinnego zespołu bez zwinnych partnerów biznesowych? Jeśli nie, czy istnieją jakieś przejściowe metodologie, a nawet wskazówki, jak przenieść firmę w kierunku iteracyjnego, choć niekoniecznie zwinnego sposobu myślenia? 3) Czy cały Twój zespół powinien być na każdym sprincie? Mamy prawie 20 programistów na jednym sprincie, ale pracujemy nad zupełnie innymi projektami (zazwyczaj zespoły 3-5, czasem większe). Czy to normalne, że mamy jeden sprint, czy powinniśmy próbować zarządzać wieloma niezależnymi sprintami? Czy powinniśmy starać się utrzymać wiele sprintów w równoczesnym lockstepie, czy też ich harmonogramy powinny się nakładać i być elastyczne? Wszelkie przemyślenia lub rady są mile widziane. To jest mój pierwszy raz, kiedy zadaję pytanie z SO, więc proszę daj mi znać, czy istnieją lepsze sposoby na sformułowanie tego rodzaju pytań (często zadawane pytania były raczej pomocne, ale nadal nie jestem pewien, czy doskonale je śledzę). Dziękuję!


title: W zasadzie niezdefiniowane zachowanie

text: Czy to w C czy C++, myślę, że ten nielegalny program, którego zachowanie zgodnie ze standardem C lub C++ jest niezdefiniowane, jest interesujący: #include <stdio.h> int foo() { int a; const int b = a; a = 555; powrót b; } void bar() { int x = 123; int y = 456; } int main() { bar(); const int n1 = foo(); const int n2 = foo(); const int n3 = foo(); printf("%d %d %d\n", n1, n2, n3); zwróć 0; } Dane wyjściowe na moim komputerze (po kompilacji bez optymalizacji): 123 555 555 Myślę, że ten nielegalny program jest interesujący, ponieważ ilustruje mechanikę stosu, ponieważ sam powód, dla którego używa się C lub C++ (zamiast powiedzmy Javy) to program close do sprzętu, blisko mechaniki stosu i tym podobnych. Jednak na StackOverflow, gdy kod pytającego _nieumyślnie_ odczytuje z niezainicjowanej pamięci, odpowiedzi, które mają najwięcej głosów, niezmiennie cytują standard C lub C++ (zwłaszcza C++), co oznacza, że zachowanie jest niezdefiniowane. Jest to oczywiście prawdą, jeśli chodzi o standard — zachowanie jest rzeczywiście niezdefiniowane — ale ciekawe jest to, że alternatywne odpowiedzi próbują, z perspektywy sprzętu lub mechaniki stosu, zbadać, dlaczego _konkretne_ niezdefiniowane zachowanie (takie jak powyższe dane wyjściowe) mogły wystąpić, są rzadkie i zwykle są ignorowane. Pamiętam nawet jedną odpowiedź, która sugerowała, że _niezdefiniowane zachowanie_ może obejmować sformatowanie mojego dysku twardego. Nie przejmowałem się tym zbytnio przed uruchomieniem powyższego programu. Moje pytanie brzmi: _Dlaczego ważniejsze jest nauczenie czytelników jedynie tego, że zachowanie jest niezdefiniowane w C lub C++, niż zrozumienie niezdefiniowanego zachowania?_ Mam na myśli, że jeśli czytelnik rozumiał niezdefiniowane zachowanie, to czy nie byłby bardziej prawdopodobne, że tego unikniesz? Moje wykształcenie to elektrotechnika, pracuję jako inżynier budowlano-konstrukcyjny, a ostatni raz jako programista pracowałem _per se_ w 1994 roku, więc jestem ciekawy, jak zrozumieć perspektywę użytkowników bardziej konwencjonalnych, bardziej najnowsze środowiska programistyczne.


title: Czy nauka języka funkcjonalnego czyni lepszym programistę OOP?

text: Jako programista Java/C#/C++ dużo słyszę o językach funkcjonalnych, ale nigdy nie znalazłem potrzeby uczenia się jednego z nich. Słyszałem również, że wyższy poziom myślenia wprowadzony w językach funkcjonalnych czyni z ciebie lepszego programistę OOP/proceduralnego języka. Czy ktoś może to potwierdzić? W jaki sposób poprawia Twoje umiejętności programistyczne? Jaki jest dobry wybór języka do nauki w celu poprawy umiejętności posługiwania się mniej wyrafinowanym językiem?


title: Prawidłowo zaprojektuj bazę danych programu, aby odzwierciedlić strukturę organizacji

text: Mam problem ze skonfigurowaniem bazy danych mojego programu we „właściwy” sposób. Miałem nadzieję, że dacie mi sugestie, jak zrobić to właściwie. Tworzę bazę danych + klienta dla organizacji non-profit, która działa w całej Kanadzie. Opiszę poniżej, jak to działa, aby lepiej zrozumieć, co próbuję zrobić. ## Po pierwsze, czego używasz? - - - - - > ** _Laravel_** Zacząłem go już tworzyć z frontendem opartym na WWW (PHP z **_Laravel_** , HTML, CSS [bootstrap]) oraz backendem opartym na MySQL. ## Jak działa organizacja? Obecnie organizacja, dla której tworzę tę bazę danych, ma 3 główne poziomy; Główne kierownictwo ({MM}) > Podzarządzanie ({SM}) > i Lokalne ({L}). {MM} ma wiele {SM}, {SM} ma wiele {L}. ![Schemat org. Struktura](http://i.imgur.com/kqurrsW.png) Obecnie skupiam się na _ostatnich 2 poziomach_ , {SM} i {L}. {SM} upewnia się, że {L} działa prawidłowo i {L} regularnie przesyła różne dokumenty i raporty do {SM}. ## Jakie dane musisz śledzić? Chcę przechowywać niektóre dane osobowe; adres, telefon e-mail itp. oraz wyniki zajęć/nauków (wraz z ocenami). Trochę zarządzania zapasami (kto ma co, bardzo proste). Trochę informacji o pozycji (kto ma jaką pracę). I trochę informacji o frekwencji (kto co robił, gdzie, jak długo). ## Więc jakie jest twoje prawdziwe pytanie? Obecnie przypisuję każdy {L} identyfikator i używam go jako klucza obcego we wszystkich tabelach zapasów/personelu/pozycji, ale robienie wywołania „gdzie” wszędzie w moich zapytaniach staje się śmieszne; trudne do śledzenia podczas wykonywania bardziej złożonych zapytań. Zastanawiałem się, czy nie byłoby lepiej _oddzielić_ każdy {L} do własnej bazy danych i uzyskać dostęp do każdego w zależności od tego, który użytkownik jest zalogowany? Nie jestem pewien, co byłoby najlepsze lub co jest akceptowane jako najlepsza praktyka. **Naprawdę** przydałaby mi się Twoja pomoc! Do tej pory bawiłem się **dużo** ucząc się laravela i byłem zdumiony jego funkcjami. **Dziękuję bardzo za wszelkie sugestie, Chris** **Jeśli potrzebujesz lepszego wyjaśnienia lub masz jakieś pytania, zapytaj!** **Edytuj:** Przepraszam, pomyślałem o tym po... ja również ( prawdopodobnie) chcą umożliwić różnym członkom różnych {L}s komunikowanie się lub przekazywanie członka/informacji między {L}s. Czy byłoby to trudniejsze, gdyby zostali rozdzieleni? Może powinienem trzymać wszystko razem w jednej bazie danych? Tak. Jestem po prostu zagubiony i zdezorientowany... :)


title: Problemy z kodowaniem z bazy danych MySQL na stronę PHP

text: Tak więc pracowałem nad małym, małym projektem pobocznym, aby dowiedzieć się nieco więcej o interakcjach z bazą danych PHP. Kupiłem małą, tanią bazę danych „Inspiracyjne Stories” i zabrałem się do pracy nad przekształceniem jej w stronę internetową, której nikt nigdy nie będzie pamiętał. :P Rozpracowałem do tej pory wiele kwestii i sporo się nauczyłem, jednak jeden problem, którego nie mogę wskazać, to problemy z bytami. Nie jestem do końca pewien, czy ten problem wynika z początkowego kodowania bazy danych, czy może pobieram nieprawidłowe dane z bazy danych, czy coś... Nie jestem do końca pewien, co jest nie tak, a na dodatek , tak naprawdę nie wiem, jak to określić. Aby zobaczyć przykład tego, co mam na myśli, zobacz tutaj. Wszelkie wskazówki lub wskazówki na ten temat będą mile widziane. Nie jestem nawet pewien, czy używam tutaj poprawnej terminologii.


title: Co ma wspólnego parsowanie bez skanera z „Dangling Else Problem”?

text: Nie rozumiem tego zdania z artykułu w Wikipedii na temat problemu Dangling Else: > [Problem Dangling Else] jest problemem, który często pojawia się w > konstrukcji kompilatora, zwłaszcza w parsowaniu bez skanera. Czy ktoś może mi wyjaśnić, w jaki sposób techniki analizowania bez skanera mogą pogorszyć ten problem? Wydaje mi się, że problem tkwi w gramatyce – ponieważ jest niejednoznaczna – a nie w wyborze techniki parsowania. czego mi brakuje?


title: Czy to naprawdę konieczne do rozwiązania tego problemu?

text: Natknąłem się na następujący artykuł, który przedstawia problem: > Grupa ludzi wchodzi do restauracji i chce wydać dokładnie 15,05 USD na > przekąski. Chcą też jak najszybciej. To pozostawia kelnerowi > NP-trudny problem do rozwiązania, odmianę problemu plecakowego. W artykule przedstawiono opracowanie pewnego rodzaju „algorytmu genetycznego”, który rozwiąże ten problem. Moje pytanie brzmi, czy to naprawdę konieczne? Po pierwsze, żadne rozwiązanie programistyczne nie byłoby możliwe, gdyby żadna kombinacja istniejących przystawek nie mogła równać się 15,05 USD. Prawidłowy? Ponadto, gdybym spotkał się z tym problemem, zrobiłbym coś takiego: // pętla przekąsek // odejmij cenę od sumy (15,05 USD) aż do różnicy <= zero // dodaj do nowej tablicy przekąsek // posortuj tablica nowych przystawek według "czasu na przystawkę" // zwróć tablicę nowych przystawek Czy to nie takie proste? Dzięki za recenzję.


title: Sposoby rozwoju dla małego systemu. Co jest celowe?

text: Rozwijam mały system do automatyzacji wewnętrznej. Korzystam z formularzy internetowych asp.net i mam do wyboru: 1. opracować architekturę systemu w stylu obiektowym (tworzenie staje się trudniejsze i bardziej czasochłonne) lub 2. po prostu umieścić kontrolki na formularzach i pisać zapytania sql w obsłudze kontrolek ( szybki rozwój, złożoność testowania) Obecnie używam pierwszej metody, ale zaczynam mieć wątpliwości, czy mój wybór jest słuszny. Jaki sposób jest celowy?


title: Znaczenie wartości priorytetu

text: Biblioteka, nad którą pracuję posiada parametr określający priorytet danego procesu. Chcę, aby interfejs był jak najbardziej przejrzysty, ale wydaje się, że różni ludzie mają odmienne interpretacje wartości priorytetów. 1. Najniższa liczba ma najwyższy priorytet (1 - najwyższy priorytet, 10 - najniższy priorytet) 2. Najwyższa liczba ma najwyższy priorytet (1 - najniższy priorytet, 10 - najwyższy priorytet) Jak myślisz, który sposób jest bardziej naturalny/logiczny?


title: Co jest przeciwieństwem Initialize (lub init)?

text: Termin będzie używany jako nazwa metody. Metoda jest wywoływana, gdy część interfejsu użytkownika jest ukryta (lub usunięta) i służy do resetowania wartości do wartości domyślnych i usuwania obiektów, które nie będą już używane. Możliwe nazwy to: zwolnij, usuń, wyrzuć, wyczyść itp. Która Twoim zdaniem jest najbardziej odpowiednia?


title: Jaka jest najbardziej odpowiednia domena najwyższego poziomu dla osobistej strony głównej programisty?

text: Powiedzmy, że jesteś programistą i masz swoją osobistą stronę domową (blog, o mnie, kontakty, cv i tak dalej). W tej sytuacji może mieć zastosowanie kilka nazw domen z najwyższej półki. **.com** : To jest otwarta domena TLD; każda osoba lub podmiot może się zarejestrować. Chociaż pierwotnie przeznaczony dla podmiotów gospodarczych nastawionych na zysk, z wielu powodów stał się „główną” domeną TLD dla nazw domen i jest obecnie używany przez wszelkiego rodzaju podmioty, w tym organizacje non-profit, szkoły i osoby prywatne. Rejestracja nazwy domeny może zostać zakwestionowana, jeśli właściciel nie może udowodnić powiązania zewnętrznego uzasadniającego rezerwację nazwy, aby zapobiec „squattingowi”. **.pro** : Obecnie domena .pro jest zarezerwowana dla licencjonowanych lub certyfikowanych prawników, księgowych, lekarzy i inżynierów we Francji, Kanadzie, Holandii, Wielkiej Brytanii i Stanach Zjednoczonych. Specjalista chcący zarejestrować domenę .pro musi dostarczyć swojemu rejestratorowi odpowiednie poświadczenia. **.info** : To jest otwarta domena TLD; każda osoba lub podmiot może się zarejestrować. **.name** : To jest otwarta domena TLD; każda osoba lub podmiot może się zarejestrować; jednak rejestracje mogą zostać zakwestionowane później, jeśli nie są dokonywane przez osoby fizyczne (lub właścicieli fikcyjnych postaci) zgodnie z statutem domeny. Wtedy oczywiście masz domeny lokalne geograficznie ( **.it, .co.uk** , itd.). Inne domeny są również często niewłaściwie używane (na przykład **.me** , czyli Czarnogóra), tylko dlatego, że brzmią one odpowiednio dla osobistej strony głównej i są zwykle tańsze niż inne. Jaki byłby najwłaściwszy wybór w tej sytuacji?


title: Czy ważne jest ostrzeżenie o obcinaniu rzeczywistych stałych do 32 bitów?

text: Bawię się z LLVM i patrzę na to, czego potrzeba, aby stworzyć kolejny silnie typowany język, a teraz, gdy jestem wokół składni, zauważyłem, że wydaje się to być pieszczotą silnie typowanego języka do ostrzegaj ludzi, że ich rzeczywiste stałe nie zmieszczą się w `float`: // zarówno w Javie jak iw C# float foo = 3.2; // błąd: niejawne obcinanie double do liczby zmiennoprzecinkowej // lub coś w tym stylu Dlaczego to nie działa w Javie i C#? Wiem, że łatwo jest dodać `f` po `3.2`, ale czy to naprawdę robi coś użytecznego? Czy naprawdę muszę mieć świadomość, że używam liczb rzeczywistych pojedynczej precyzji zamiast liczb rzeczywistych podwójnej precyzji? Może po prostu czegoś mi brakuje (o co w zasadzie pytam). Zauważ, że `float foo = [const]` to nie to samo, co `float foo = [podwójna zmienna]`, gdzie wymaganie rzutowania wydaje mi się normalne.


title: Czym jest czysta prezentacja sprintu Agile (Scrum)?

text: Załóżmy, że ktoś z Twojego zespołu programistów przedstawia sprint klientowi, ale ma problemy z połączeniem internetowym, przez co nie można przedstawić pełnej historii. W trosce o czystość prezentacji pomagasz koledze podpowiadając możliwe rozwiązania i starasz się to naprawić w tej chwili? A może to trochę bałagan? Może klient (który jest „częścią” zespołu) zrozumie? Czemu?


title: Elastyczny projekt autoryzacji na stronach ASP.NET?

text: Zajmuję się tworzeniem aplikacji ASP.NET webforms ze stronami, które wyświetlają informacje na podstawie poziomu autoryzacji uwierzytelnionego użytkownika (bardzo typowe). Napiszę prosty przykład problemu, z którym się borykam: Załóżmy, że chcę mieć stronę z 4 przyciskami: 1- Przycisk "OnlyForAdmins". 2- Przycisk „OnlyForManagersAndAdmins” 3- Przycisk „Gość” 4- Przycisk „Uwierzytelniony” W zależności od poziomu uprawnień odwiedzającego, musi być wyświetlony jeden lub kilka przycisków. Obecnie w kodzie za przyciskami są obsługiwane w następujący sposób: public void Page_Load(object sender, EventArgs e) { if (HttpContext.Current.User.Identity.IsAuthenticated) Athenticated.Visible = true; if (HttpContext.Current.User.IsInRole("Admins")) OnlyForAdmins.Visible = true; if (HttpContext.Current.User.IsInRole("Menedżer") || HttpContext.Current.User.IsInRole("Administratorzy")) OnlyForManagersAndAdmin.Visible = true; } Chociaż to działa, szczerze uważam, że takie podejście jest raczej nieelastyczne, ponieważ trzeba dodawać więcej „jeśli” do każdej nowej roli, którą wprowadzam. Zastanawiam się, czy istnieją sposoby radzenia sobie z tego rodzaju problemami. Byłbym wdzięczny, gdyby ktoś mógł mnie oświecić. Dziękuję Ci.


title: Metatag HTTP do odświeżania/przekierowywania

text: Zwykle nie zajmuję się programowaniem internetowym, ale patrząc na wygenerowane źródło strony internetowej dowiedziałem się, że standardowym sposobem odświeżenia strony internetowej jest użycie `<meta http-equiv="refresh" content="_sec">`. Uważam to za nadużycie „metadanych”, które w moim rozumieniu mają być tylko „danymi o danych”, a nie czymś wpływającym na wrażenia użytkownika (w tym przypadku nie wyobrażam sobie, jak często strona jest odświeżana kwalifikując się jako „dane o danych” ). Moje pytania są następujące: 1) Czy ten sposób przekierowania stanowił obejście, ponieważ wczesne dni html/przeglądarek nie zapewniały innego standardowego sposobu przekierowania/odświeżania? 2) Czy mój pomysł/definicja „metadanych” jako ścisłego opisu tego, o co chodzi w danych (takich jak zestaw znaków, typ, słowa kluczowe itp.) jest zbyt wąska?


title: Czy wybór UTF-32 ma sens ze względu na obawę, że jakaś podstawowa zasada zostanie złamana dla UTF-8?

text: Pracuję nad projektem wieloplatformowym C++, który nie uwzględnia Unicode i wymaga zmian w celu obsługi Unicode. Są dwie możliwości i muszę zdecydować, którą wybrać. * Używanie UTF-8 (std::string), co ułatwi obsługę systemu posix. * Używanie UTF-32 (std::wstring), co ułatwi wywoływanie Windows API. Tak więc w przypadku pozycji nr 1 UTF8 korzyścią jest to, że zmiana kodu nie będzie zbyt duża. Ale problemem jest to, że niektóre podstawowe zasady zostaną złamane dla UTF8, na przykład * string.size() nie będzie równa długości znaku. * wyszukiwanie '/' w ścieżce będzie trudne do zaimplementowania (nie jestem pewien w 100%). Więc masz więcej doświadczenia? A który wybrać?


title: Pierwsze kroki z ClojureScript i Google Closure

text: Chciałbym zbadać, czy ClojureScript, wraz z powiązaną biblioteką Google Closure, jest rozsądnym narzędziem do budowania nowoczesnych aplikacji JavaScript w przeglądarce. Mój obecny stos JavaScript składa się z jQuery, Backbone i RequireJS z możliwymi dodatkami niektórych bibliotek widżetów, takich jak jQueryUI lub KendoUI. Będzie to więc spory skok (już wiem, jak pracować w Clojure, chociaż mam niewielkie doświadczenie). Jaki jest dobry plan działania, aby to zrobić? Czy powinienem najpierw nauczyć się biblioteki Google Closure, czy mogę ją uchwycić razem z ClojureScript? Martwi mnie tylko ogólna struktura aplikacji. Backbone jest raczej przekonany, jak zorganizować swoją aplikację. Nie jestem pewien, czy Google Closure zawiera również jakieś komponenty pomagające w projektowaniu aplikacji. A jeśli tak jest, nie wiem, jak stwierdzić, czy ta struktura zostanie przeniesiona do ClojureScript, czy też aplikacja ClojureScript i tak będzie wymagała innej organizacji i używaj tylko - powiedzmy - widżetów i funkcji manipulacji DOM w Closure.


title: Jakie standardy zastosować w modelowaniu procesów biznesowych?

text: Istnieje kilka podejść do modelowania procesu biznesowego w aplikacjach (oprogramowanie BPM). Na przykład procesy mogą być opisane w BPMN, EPC, IDEF0, SOMF itp. Dodatkowo dostępne są różne języki wykonywania procesów, takie jak BPEL, RPC, Wf-XML. Jeśli miałbym tworzyć oprogramowanie na rynek BPM, jakie standardy powinienem wdrożyć lub na których powinienem się skupić? Jakie standardy są najbardziej odpowiednie, jeśli moje oprogramowanie BPM ma zostać wdrożone w systemie informatycznym mojego klienta?


title: Czy MySQL jest odpowiedni dla małych i średnich aplikacji biznesowych?

text: Po pracy ze stosem Microsoft - VB.Net, ASP.Net, SQL Server - przez ostatnie 10 lat, teraz stoimy przed koniecznością stworzenia aplikacji dla środowisk Windows i Mac. Sugerowano, że MySQL jako baza danych jest dostępny na obu platformach. Mam wrażenie, że MySQL jest projektem open source, ale niedawno został kupiony? / przejęte? przez Oracle. Strona internetowa MySQL wydaje się wskazywać, że jeśli nie jest on używany w innym projekcie open source, należy uiszczać opłaty licencyjne, a opłaty są w kolejności innych kosztów bazy danych - np. SQL Server, Filemaker. Ktoś zasugerował, że MySQL można używać w środowisku LAMP (ale co z Windows Server?). Czy ktoś z wdrożonym doświadczeniem MySQL może to potwierdzić lub wyjaśnić, wraz z innymi problemami, które mogą być istotne?


title: Przepisywanie proceduralnej aplikacji PHP — czy powinniśmy używać frameworka?

text: Mamy aplikację, która obecnie ma tylko około 120 użytkowników. Baza użytkowników prawdopodobnie wzrośnie o 50% w ciągu najbliższych 12 miesięcy – ale będziemy musieli oddzielić pamięć masową itp., ponieważ mamy do czynienia z kilkoma TB danych. Jeszcze w tym roku przejdziemy na hosting oparty na klastrach. Aplikacja będzie również dostępna w wielu językach. Jestem na etapie projektu, w którym czasami musimy dość szybko dodać dodatkowe funkcje, a budowanie aplikacji w taki sposób było decyzją biznesową (czasu i pieniędzy było wtedy mało i musieliśmy mieć coś działającego szybko ), teraz potrzebujemy wielu programistów pracujących nad aplikacją i jest to trochę trudne, mimo że wszystko mamy dobrze szablonowane i dobrze udokumentowane. Mam możliwość napisania aplikacji od nowa - możemy zbudować jeden zespół do jednoczesnego przerabiania kodu, podczas gdy jeden zespół zarządza istniejącą aplikacją. Gdy nowa wersja zostanie dopracowana, przełączymy się na nią. Pytanie brzmi – czy powinniśmy używać frameworka dla tej aplikacji. Przyjrzałem się Symfony i CodeIgnitor i oczywiście ten drugi jest łatwiejszy dzięki mniejszej krzywej uczenia się dla naszego zespołu. Z drugiej strony, jeśli po prostu przebudujemy aplikację i zbudujemy własne „frameworki” i klasy (wiem, nie trzeba wymyślać koła na nowo, ale mamy już napisane setki funkcji, które bezproblemowo komunikują się z naszą bazą danych). Teraz widziałem komentarze typu „jeśli chcesz mieć aplikację, z której chcesz zarabiać, użyj Symfony”, ale po prostu nie wiem, jak to działa. Wcześniej też zarabiałem na życie z witrynami WordPress, więc to stwierdzenie nie jest pomocne! Wszelkie rady proszę. Zasoby deweloperskie nie stanowią dla nas problemu, ale nie przepadam za ograniczeniami narzucanymi przez Symfony w zakresie nazw katalogów itp. (ale myślę, że to tylko kwestia przyzwyczajenia się do rzeczy). Chodzi o to, że ostatecznie muszę podjąć decyzję biznesową i chciałbym móc uzasadnić to przed moim zespołem. W tym momencie, z mojego punktu widzenia, jedyną istotną korzyścią jest to, że gdy zatrudniamy nowych programistów, jeśli są zaznajomieni z frameworkiem, ich krzywa uczenia się będzie mniejsza. Ta logika wspiera Symfony, ale dla mnie to za mało. Pomogą w tym opinie kwalifikowane. Dziękuję!


title: Odpowiednia ilość bezpieczeństwa na maszynie

text: Zasadniczo zadaję to pytanie, aby sprawdzić, czy nie jestem nierozsądna. Mój obecny pracodawca zablokował komputery wszystkich programistów, abyśmy nie mieli dostępu do katalogu głównego lub dysku c:. Na przykład nie mogę napisać katalogu w C:. Nie mogę też zainstalować żadnego oprogramowania, które dotyka rejestru. Czy to ekstremalne działanie, czy też przesadnie reaguję na powszechnie stosowane środki bezpieczeństwa? Jaki jest stopień bezpieczeństwa na maszynie dostarczonej przez Twoją firmę? Aby dodać nieco zakresu do tego pytania, jestem programistą aplikacji internetowych i mówię o laptopie należącym do firmy.


title: Jaka jest Twoja sugestia, aby napisać czysty i dobrze zorganizowany kod php?

text: Jestem początkującym koderem php. Zawsze znajduję się w bałaganie, gdy próbuję coś zmienić lub dodać do moich scenariuszy. Ponieważ nie są dobrze zorganizowani. Dlatego chcę nauczyć się organizować mój kod, aby później łatwo go zmienić. Ponadto we wszystkich moich skryptach często używam wielu fragmentów kodu. Podobnie jak kody bazy danych. Czy istnieje sposób na uporządkowanie tych fragmentów?


title: Licencja na dostępną za darmo, ale zamkniętą aplikację internetową

text: Czy ktoś wie o wolnej licencji, która daje użytkownikowi prawo do swobodnego korzystania z oprogramowania, ale nie może go modyfikować ani udostępniać? Innymi słowy, jest to zamknięte źródło, ale jest bezpłatne. A ponieważ będzie to strona internetowa, można jej używać tylko na tej jednej stronie. Jaka byłaby na to dobra zwykła licencja? Jeśli to możliwe, że nie jest zbyt długi, prosty, na przykład licencja MIT.


title: Czy dobrą praktyką jest używanie oddziałów do utrzymywania różnych edycji tego samego oprogramowania?

text: Posiadamy produkt, który ma kilka różnych edycji. Różnice są niewielkie: różne łańcuchy tu i tam, bardzo mało dodatkowej logiki w jednym, bardzo mała różnica logiki w drugim. Podczas opracowywania oprogramowania większość zmian należy dodać do każdej edycji; jednak jest kilka, które tego nie robią, a kilka musi się różnić. Czy jest to prawidłowe użycie gałęzi, jeśli mam gałęzie release-editionA i release-editionB (..etc)? Czy są jakieś problemy? Dobre praktyki? Aktualizacja: Dziękuję wszystkim za wgląd, wiele dobrych odpowiedzi tutaj. Wydaje się, że panuje ogólna zgoda, że wykorzystywanie oddziałów do tego celu jest złym pomysłem. Dla każdego, kto się zastanawia, moim ostatecznym rozwiązaniem problemu jest uzewnętrznienie ciągów jako konfiguracji i uzewnętrznienie różniącej się logiki jako wtyczek lub skryptów.


title: Czy do przechowywania reguł biznesowych powinienem używać pliku konfiguracyjnego lub bazy danych?

text: Niedawno czytałem The Pragmatic Programmer, który stwierdza, że: > Szczegóły psują nasz nieskazitelny kod — zwłaszcza jeśli często się zmieniają. > Za każdym razem, gdy musimy wejść i zmienić kod, aby uwzględnić jakąś zmianę > w logice biznesowej, w prawie lub w osobistych gustach kierownictwa w danym dniu, > ryzykujemy złamanie systemu — wprowadzenie nowego błędu . >> Poluj, Andrzeju; Tomasz, Dawid (1999-10-20). Pragmatyczny programista: Od > Czeladnik do Mistrza (Lokalizacje Kindle 2651-2653). Edukacja Pearsona (USA). > Wydanie Kindle. Obecnie programuję aplikację internetową, która ma kilka modeli, które mają właściwości, które mogą pochodzić tylko z zestawu wartości, np. (nie jest to rzeczywisty przykład, ponieważ dane aplikacji internetowej są poufne): light->type = sfera / cube / cylinder Typ światła może być tylko powyższymi trzema wartościami, ale zgodnie z TPP powinienem zawsze kodować tak, jakby mogły zmienić i umieścić swoje wartości w plik konfiguracyjny. Ponieważ istnieje kilka takich incydentów w całej aplikacji, moje pytanie brzmi: Czy powinienem przechowywać takie wartości w: * pliku konfiguracyjnym: 'light-types' => array (sfera, sześcian, cylinder), 'inny typ' => value, 'etc => etc-value * pojedyncza tabela w bazie danych z jedną linią dla każdego elementu konfiguracyjnego * baza danych z tabelą dla każdego elementu konfiguracyjnego (np. table: light_types; kolumny: id, name) * inne droga? Wielkie dzięki za wszelką zaoferowaną pomoc / ekspertyzę.


title: Czy zyskałbym wystarczająco, czytając te książki, czy poleciłbyś inne?

text: Wykonuję tę pracę zaledwie 5 lat. Czuję, że w tym czasie wiele się nauczyłem i nadal stawiam sobie wyzwania, kiedy tylko mogę, mimo że moja praca nie pozwala na to zbyt często. Mimo to czuję, że dopiero zaczynam swoją karierę zawodową jako programista i wciąż jest wiele do nauczenia się. To oczywiście prawda, że bycie programistą polega na uczeniu się. Postanowiłem więc zamówić książkę lub dwie z tej listy: http://www.codinghorror.com/blog/2004/02/recommended-reading-for-developers.html Ci goście (Jeff i in.) muszą być robię coś dobrze, więc domyślam się, że zalecenia Jeffa mają jakąś wagę. Rozważam zakup Code Complete i The Mythical Man Month, ponieważ znajdują się one na szczycie listy, ale nie jestem pewien, czy te dwa są właściwym wyborem. Czy poleciłbyś te dwie książki jako dobre książki do nauki/samodoskonalenia? Niezależnie od odpowiedzi proszę podać powody. Jestem po prostu ciekawa, czy ci dwaj mają dobry zwrot z inwestycji, czy powinienem po prostu zatrzymać pieniądze i kupić tony lodów. Niektóre z pytań brzmią: czy nadal są aktualne? Czy _naprawdę_ uczynią mnie lepszym programistą? Zapraszam do polecania innych książek lub spierania się o inne książki z listy Jeffa, ale miej na uwadze moje pytanie w szczególności o te dwie :)


title: Jaki jest najlepszy sposób na uznanie wielu źródeł FOSS w jednym projekcie?

text: Mam projekt, który korzysta z dużej liczby bibliotek LGPL, artystycznych i innych licencjonowanych bibliotek typu open source. Jaki jest kanoniczny (tj. „standardowy”) sposób potwierdzania wielu źródeł w jednym pobraniu projektu? Ponadto niektóre źródła, z których korzystałem, pochodzą z witryn, w których użycie kodu jest w porządku, ale publikowanie źródła nie. Jaki jest zwyczajowy sposób atrybucji w takim przypadku i zwyczajowy sposób udostępniania źródła w projekcie open source?


title: Czy uczelnia ma znaczenie?

text: Czy ma to aż takie znaczenie w tym, do jakiego college'u chodzisz, aby uzyskać dyplom z programowania/informatyki? Nie radziłem sobie zbyt dobrze w liceum, właściwie ledwo ukończyłem maturę z ogólnym dyplomem liceum. Więc dostanie się do porządnego college'u może być trudne. Firmy nie odmówią ci tylko dlatego, że zdobyłeś dyplom w college'u, o którym nigdy nie słyszeli, lub w college'u społecznościowym, prawda?


title: Bazy danych i zasada pojedynczej odpowiedzialności

text: Czy zasadę pojedynczej odpowiedzialności można zastosować do baz danych? mam na myśli relacyjne bazy danych. Pytam o to, ponieważ typowa baza danych będzie miała kilka tabel i możemy znaleźć między nimi coś takiego: * Tabele obsługują ACL i uprawnienia. * Tabele obsługują uwierzytelnianie użytkowników. * Tabele dotyczące zadań cron i zaplanowanych zadań. * Tabele dotyczące samej domeny. * Tabele dotyczące e-maili, zaproszeń i tak dalej. * Spójrz w górę. Ponadto tabele dotyczące domeny mogą być podzielone ze względu na moduły aplikacji, które tworzą kopie zapasowe. W kodzie zwykle dzielimy naszą bazę kodu na moduły/pakiety/przestrzenie nazw, ale z tego, co wiem, ta koncepcja jest nieobecna w relacyjnych bazach danych. więc o co pytam czy baza danych powinna być jakoś podzielona na mniejsze bazy? a może baza danych (moduły?!) A może po prostu zwalić wszystko razem i mieć nadzieję na dobrą konwencję nazewnictwa, jeśli w ogóle?!


title: Jak dokumentować i uczyć innych "zoptymalizowanego nie do poznania" kodu wymagającego dużej mocy obliczeniowej?

text: Czasami istnieje 1% kodu, który jest wystarczająco intensywny obliczeniowo i wymaga najcięższego rodzaju optymalizacji niskopoziomowej. Przykładami są przetwarzanie wideo, przetwarzanie obrazu i ogólnie wszelkiego rodzaju przetwarzanie sygnału. **Celem jest udokumentowanie i nauczenie technik optymalizacji**, tak aby kod nie stał się niekonsekwentny i podatny na usunięcie przez nowszych programistów. (*) _(*) Pomimo możliwości, że dana optymalizacja jest całkowicie bezużyteczna w niektórych nieprzewidywalnych przyszłych procesorach, tak że kod i tak zostanie usunięty._ Biorąc pod uwagę, że oferty oprogramowania (komercyjne lub open-source) zachowują swoją przewagę konkurencyjną dzięki posiadaniu Najszybszy kod i wykorzystujący najnowszą architekturę procesora, twórcy oprogramowania często muszą dostosować swój kod, aby działał szybciej, jednocześnie uzyskując te same dane wyjściowe dla określonego zadania, przy czym tolerują niewielką liczbę błędów zaokrąglania. Zazwyczaj twórca oprogramowania może przechowywać wiele wersji funkcji jako dokumentację każdego przepisywania optymalizacji/algorytmu, które ma miejsce. W jaki sposób udostępnić te wersje innym, aby mogli zapoznać się z ich technikami optymalizacji? Powiązane: * Czysty czytelny kod vs szybki, trudny do odczytania kod. Kiedy przekroczyć linię?


title: Jaka wiedza C/C++ jest potrzebna do rozwoju Objective-C/iPhone?

text: Najpierw trochę tła. Jestem programistą .Net (C#) i mam ponad 5-letnie doświadczenie zarówno w tworzeniu stron internetowych, jak i aplikacji desktopowych. Od jakiegoś czasu chciałem przyjrzeć się rozwojowi iPhone'a, ale z tego czy innego powodu zawsze był śledzony. W końcu mam na horyzoncie potencjalny projekt i teraz idę pełną parą, ucząc się tych rzeczy. Moje pytanie brzmi: nie programowałem w C/C++ od czasów szkolnych, od tamtego czasu żyję w zarządzanym terenie. Ile wiedzy jest potrzebne, aby odnieść sukces jako programista iOS? Oczywiście zarządzanie pamięcią to coś, o czym będę musiał być świadomy (chociaż w iOS 5 wydaje się, że jest coś, co nazywa się ARC, co powinno ułatwić mi życie), ale co jeszcze? Nie mówię tylko o C API (na przykład, aby uzyskać grzech liczby, wywołuję funkcję sin()), po to jest Google. Mówię o podstawowych idiomach C/C++, których przeciętny programista C# nie jest świadomy.


title: Po co umieszczać logikę biznesową w modelu? Co się stanie, jeśli mam kilka rodzajów pamięci?

text: Zawsze myślałem, że logika biznesowa musi znajdować się w kontrolerze i że kontroler, ponieważ jest to „środkowa” część, pozostaje statyczny, a model/widok musi być kapsułowany za pośrednictwem interfejsów. W ten sposób możesz zmienić logikę biznesową bez wpływu na cokolwiek innego, zaprogramować wiele modeli (po jednym dla każdej bazy danych/typu pamięci) i dziesiątki widoków (na przykład dla różnych platform). Teraz czytam w tym pytaniu, że zawsze należy umieszczać logikę biznesową w modelu i że kontroler jest głęboko związany z widokiem. Dla mnie to naprawdę nie ma sensu i oznacza, że za każdym razem, gdy chcę mieć możliwość obsługi innej bazy danych/typu pamięci, muszę przepisać cały mój model, w tym logikę biznesową. A jeśli chcę inny widok, muszę przepisać zarówno widok, jak i kontroler. Czy ktoś może wyjaśnić, dlaczego tak jest lub jeśli gdzieś się pomyliłem?


title: Jak zapobiec rozdęciu moich zajęć w MVC?

text: Nie jestem pewien, jak powinienem sformułować pytanie. Jeśli mam bazę danych uczniów i klas, a zapytania dotyczą obu. Gdzie mam umieścić moje pytania? W jednym przypadku ktoś chce uzyskać informacje o uczniach i wysyłam zapytania do uczniów i klas w mojej klasie uczniów, jeśli umieszczę je w klasach, przechodzę do uczniów, [edytuj] naruszając pojedynczą odpowiedzialność. Pomyślałem, że powinienem mieć tylko zapytania dla Studentów i zapytania dla klas w każdej klasie tej części warstwy modelu, z których każda jest używana przez usługi. Co mam zrobić, gdy potrzebuję nowych zapytań? Mam taki zestaw zapytań, potem ktoś przychodzi i chce jakiegoś specjalnego zapytania. Następnie kopiuję i wklejam i zmieniam jedną rzecz lub dodaję if then lub switch, to jest mnożone w klasie w moim modelu _layer_ w wielu obiektach, instrukcjach giant switch itp. Nie wydaje się, aby warstwy modelu były skomponowane gigantycznych modeli z kodem wszędzie, naruszających DRY. Mam usługę w jednym obiekcie w Studentach, `findAllClassesByStudent($student_id)` Wywołuję być może w moim widoku, a drugą w klasach, `findAllStudentsInAParticularClass($class_id)`. To są całkiem blisko. Zdaję sobie sprawę, że mogę wyabstrahować jeszcze więcej warstw i wyizolować logikę w jakiejś innej warstwie, ale nie mogę abstrahować na zawsze, prędzej czy później mam coś, co wydaje się być naruszeniem enkapsulacji OOP. ViewModel View, Abstracted Data Access Layer, usługi itp. i tak dalej. Jeśli robię za mało, moje obiekty są anemiczne. Dużo czytałem i chociaż jest wiele interpretacji, zakładam, że zostawiam całą logikę biznesową w warstwie modelu, a nie na kontrolerze lub widoku. * * * Pseudo przykłady: class Student extends Model { private $student public function __construct() { } public function getStudentByID($student_id){ ...SQL } public function getStudentClasses($student_id){ //pierwszy raz } } class Klasy extends Model { public function __construct(){ } public function findAllStudentsInAParticularClass($class_id){ //czuje się jak wzdęcie ...SQL } } Wydaje mi się, że to powielanie. Być może nie przemyślałem tego wystarczająco. Po prostu wiem z doświadczenia, że zawsze jest ktoś, kto chce trochę innych zapytań, a ja kopiuję i wklejam.


title: Dlaczego Akka jest reklamowana jako reaktywna? Czy model aktorski jest reaktywny?

text: O ile rozumiem, Model Aktora i Programowanie Reaktywne to odrębne pojęcia. Aktor Model nie wydaje mi się z natury reaktywny. Jednak framework Akka, który jest implementacją modelu aktora, jest opisywany jako reaktywny: > „Logika programu Java i Scala żyje w lekkich obiektach aktora, które > wysyłają i odbierają komunikaty w sposób reaktywny”. > > „We Are Reactive” Czy to przypadek nadużycia terminu, czy są one całkowicie poprawne? Czy implementacja modelu aktora (np. Erlang) jest już reaktywna? Czy po prostu generowanie wiadomości w odpowiedzi na inne wiadomości również jest uważane za reaktywne? Niektóre powiązane artykuły, w których podejścia są skontrastowane: http://stackoverflow.com/questions/20740114/rx-vs-messaging-queues-like- rabbitmq-or-zeromq http://cs.stackexchange.com/questions/9038/ jak-zrobić-funkcjonalny-reaktywny-programowanie-i-model-aktora-odnosza sie-do-innych http://lambda-the-ultimate.org/node/2203


title: Czy istnieje wzorzec projektowy do dzielenia plików na mniejsze pliki?

text: Rozwijam projekt, w którym muszę wczytywać bardzo duże pliki (do 50 MB). Obecnie ładuję te pliki całkowicie do (kolejnej) pamięci. Ma to tę zaletę, że mogę bardzo łatwo zmieniać bajty w określonych lokalizacjach, ponieważ nie znam struktury wszystkich bajtów. Moją intencją jest jednak także zmiana struktury, m.in. usuwanie/dodawanie „kawałków”. Teraz mam pomysł, aby usunąć z niego „znane” części, przechowywać je w klasach z fragmentem danych zawierającym tylko te części i zrobić coś w rodzaju listy referencyjnej do tych fragmentów. Np.: Oryginalny plik: * Nagłówek * ChunkA 1 * ChunkA 2 * Pośredni * ChunkB 1 * Stopka Wynikiem będzie: instancja ChunkA 1 i ChunkA 2. Instancja ChunkB 1 Instancja „Plik” i odwołanie z przesunięciami bazowymi + odniesienie do wszystkich kawałków. Na koniec muszę "odtworzyć" lub napisać oryginalny plik (ze zmianami) z powrotem. Czy to ogólnie dobry pomysł, czy może mi w tym pomaga jakiś wzorzec projektowy?


title: Obliczanie złożoności NPath

text: Próbuję obliczyć złożoność NPath w ramach funkcji, ale nie jestem pewien, jakie części liczę. Rozumiem, że będzie to suma: * Jeśli * Inaczej * Inaczej jeśli * Przełącz * Przypadek * Domyślnie * Czy * Chociaż Czy to prawda? A może czegoś mi brakuje?


title: jakikolwiek dokument, który dokładnie mówi, dla jakiego zakresu liczb są przeznaczone .NET BigIntegers?

text: Bawię się z .NET BigInteger i zasadniczo zastanawiam się, jaka liczba _\--szacowana odpowiedź byłaby w porządku--_ jest punktem odchylenia krzywej (wykresu (wzrost czasu wymaganego do operacje) vs (wartość BigInteger))? czy też są zaprojektowane bez takiego odchylenia, że jeśli wykreślimy wzrost czasu potrzebnego na operacje w funkcji wartości BigInteger od 1 do nieskończoności, będziemy mieli gładką krzywą przez całą drogę? na przykład zakładając, że tablice zostały zaprojektowane z możliwością obsługi 50 elementów . oznacza to, że jeśli mam 1 przedmiot, operacje to czas f(1). a kiedy mam 2 przedmioty, operacje to czas f(2). jeśli mam 50 pozycji, operacje to czas f (50). ale ponieważ jest zaprojektowany do obsługi tylko 50 pozycji, operacje wykonane, gdy mamy 51 pozycji, będą g(51), gdzie g(51) > f(51). > Jeśli zostanie poprawnie zaimplementowana, złożoność arytmetyki BigInteger powinna być > krzywą gładką. Na przykład złożoność czasowa mnożenia powinna wynosić > O(NM), gdzie N jest liczbą cyfr w pierwszej wielokrotności, a M jest > liczbą cyfr w drugiej wielokrotności. Oczywiście istnieją > praktyczne ograniczenia w tym, że możesz wybrać N i M tak duże, że liczby > nie zmieściłyby się w twojej maszynie. Czy są jakieś / czy ktoś zna jakieś dokumenty twierdzące, że jest wdrożony jako taki?


title: Bezpieczeństwo danych generowanych przez usługę sieciową ASP.NET

text: Zajmuję się tworzeniem usługi sieci web ASP.NET 2.0, która obsługuje dane XML z bazy danych. Prawie cały ruch danych jest jednokierunkowy, od serwera do klienta, i nie ma danych specyficznych dla użytkownika. Wszyscy klienci otrzymają te same dane. Ale chcę, aby tylko zatwierdzeni klienci mogli korzystać z danych. Jakie są w tej sytuacji najlepsze opcje szyfrowania danych generowanych przez usługę sieciową? * Przyjrzałem się SSL, ale zarząd polecił mi znaleźć inny sposób, abyśmy mogli albo uniknąć kłopotów z konfiguracją certyfikatu SSL na stronie, albo wdrożyć zarówno SSL _i_ moje rozwiązanie. * Zasugerowano szyfrowanie SOAP, ale chcę mieć dobrą obsługę klientów iOS i nie wydaje się, aby obsługa SOAP była wbudowana w SDK iOS lub dostępnego oprogramowania typu open source. * Ponieważ żadne dane nie są modyfikowane po stronie serwera i nie mamy danych ani kont użytkowników, nie sądzę, aby OAuth było konieczne. Stanie się to konieczne w przyszłości, ale przekroczymy ten most, kiedy do niego dojdziemy. Czy się mylę tutaj? * Sugerowałem zaszyfrowanie zawartości danych XML, aby `<Prop1>StringData</Prop1` stało się `<Prop1>EncryptedGarbageHere</Prop1>`, ale powiedziano mi, że nie jest to tak bezpieczne podejście jak szyfrowanie SOAP . EDYCJA: W obu przypadkach planuję również dodanie pewnego rodzaju parametru „hasło”, który jest wymagany przez wszystkie metody WebMethod w usłudze sieci Web i będzie wymagany dla każdej unikalnej aplikacji klienckiej.


title: Jak radzić sobie z chłopakami niskiego poziomu?

text: Ostatnio zacząłem pracować dla firmy, która zajmuje się głównie tworzeniem rzeczy niskopoziomowych (takich jak sterowniki urządzeń, aplikacje systemowe itp.). Zostałem zatrudniony jako programista wysokiego poziomu do opracowania systemu uczenia maszynowego (szczegóły tego systemu nie są tak ważne). Mój problem polega na tym, że moi współpracownicy, którzy są programistami niskiego poziomu, nie szanują mojej pracy, ponieważ używam technik wysokiego poziomu. Uważają, że programowanie na wysokim poziomie jest łatwe i tylko niski poziom wymaga umiejętności i wiedzy. Jest to dla mnie dość niesprawiedliwe, ponieważ samodzielne napisanie skalowalnego systemu uczenia maszynowego nie jest trywialnym zadaniem. Jak mam im przekazać, że moja praca też jest wartościowa? A może się mylę i programowanie niskopoziomowe jest tak trudne, że tylko bogowie sobie z tym poradzą? ;) Jakie są Twoje opinie na ten temat?


title: Jaki jest właściwy sposób organizowania ViewControllers i XIB?

text: Tworzę bardzo prostą grę na iPhone'a z następującą hierarchią widoków: Menu główne Widok └> Widok nowej gry | └> Widok gracza kontra komputer | | └> Wstrzymaj widok | | └> Widok końca zakrętu | | └> Widok końca gry | | | └> Widok gry gracz kontra gracz (offline) | └> Wstrzymaj widok | └> Widok końca zakrętu | └> Widok końca gry | └> Widok informacji Moja obecna implementacja ma pojedynczy **`ViewController`**, który kontroluje każdy aspekt interfejsu użytkownika oraz pojedynczy plik **`XIB`**, który zawiera każdy **`Widok`** gry. Czy to jest poprawne? Wygląda to trochę zagmatwane... Czy powinienem mieć więcej plików **`ViewControllers`** i więcej plików **`XIB`**? A jaki jest właściwy sposób, aby zmusić ich do współpracy?


title: Uwierzytelnianie użytkowników na stronie internetowej

text: Pracuję nad stroną internetową i chcę potwierdzić, że dana osoba jest pracownikiem jednej z wielu firm (prawdopodobnie przy użyciu firmowego adresu e-mail, którego wcześniej nie znam). Pomysł, że niektórzy użytkownicy to ogół społeczeństwa, a inni pochodzą z tych firm. I potrzebuję sposobu, aby potwierdzić, że użytkownicy podający się za pracowników są uczciwi, a jednocześnie mają wystarczająco przyjazny interfejs użytkownika. Przeprowadziłem nieformalną ankietę wśród osób, które znam, a domeny i adresy e-mail będą pasować w większości przypadków, ale mogą nie zawsze pasować dokładnie, więc możesz mieć firmę ze stroną internetową foo.com i adresem e-mail billy@foobar.com (chociaż foobar.com przekierował z powrotem do foo.com). I chociaż mogę łatwo sprawdzić, czy nie jestem pewien, jakie inne odmiany mogą tam być (może fooLA.com i e-mail billy@foolosangeles.com itp.)


title: Czy w prototypach należy stosować testy jednostkowe?

text: Czy przy konstruowaniu prototypów powinniśmy również tworzyć odpowiednie testy jednostkowe, tak jakbyśmy pisali kod produkcyjny? Czy miałoby znaczenie, gdybyśmy z góry wiedzieli, że kod **był** lub **nie będzie** ponownie użyty do ostatecznego rozwiązania?


title: Standardy kodowania i styl kodowania, czy to aż tak ważne?

text: Istnieje wiele sposobów pisania kodu, ale nie mogę zrozumieć, jaki jest dobry powód, aby przyjąć określony standard lub styl, jeśli nie zmienia to sposobu, w jaki kod może być odczytywany i rozumiany. Każdy może pisać kod w sposób, który uważa za lepszy, ale czy jest naprawdę dobry powód, aby zmusić wszystkich programistów do określonego stylu? Czy to naprawdę robi różnicę? Czy to dla przyjemności ludzi zarządzających, czy maniaków kontroli? Poza tym postem o tych bardzo głupich standardach kodowania, czy są firmy, które zachęcają pracowników do wyboru tego, co im odpowiada? EDIT: Wow, dzięki za odpowiedzi, rzecz, która skłoniła mnie do opublikowania tego, to styl klamry BSD vs K&R: to duży problem i to naprawdę sprawiło, że narzekałem.


title: Jaka jest różnica między funkcją a komponentem?

text: Właśnie słuchałem podcastu Software Engineering Radio na temat komponentów. Ich opis komponentów był bardzo niejasny, sprawiał, że brzmiały jak niższe wersje funkcji. Próbuję dowiedzieć się, co oznaczają komponenty w kontekście wzorca złożonego. 1. Jaka jest różnica w celu między funkcją a komponentem? 2. Co ma wspólnego komponent z szykiem złożonym? 3. Czy możesz opisać, czym jest składnik, używając zabawnej metafory? Na przykład wyjaśnij, jak utworzyć komponent, taki jak pieczenie szarlotki.


title: Dlaczego nie przechowujemy drzewa składni zamiast kodu źródłowego?

text: Mamy wiele języków programowania. Każdy język jest analizowany i sprawdzany składni przed przetłumaczeniem na kod, więc budowane jest abstrakcyjne drzewo składni (AST). Mamy to abstrakcyjne drzewo składni, dlaczego nie przechowujemy tego drzewa składni zamiast kodu źródłowego (lub obok kodu źródłowego)? Używając AST zamiast kodu źródłowego. Każdy programista w zespole może zserializować to drzewo do dowolnego języka, jaki chce (z odpowiednią gramatykią bezkontekstową) i przeanalizować z powrotem do AST po zakończeniu. To wyeliminowałoby debatę na temat stylu kodowania (gdzie umieścić { i }, gdzie umieścić spację, wcięcie itp.) Jakie są zalety i wady tego podejścia?


title: Czy źle jest uczyć się wielu języków programowania?

text: Zacząłem uczyć się PHP i mogłem się z nim zapoznać. Teraz chcę poznać inne języki programowania, takie jak PERL, abym mógł sam porównać go z PHP. Czy będę zdezorientowany, aby nauczyć się dwóch języków? Czy są jakieś wady?


title: Uczę się pisać narzędzia DSL do testów jednostkowych i martwię się o rozszerzalność

text: Staram się uprościć nasze testy jednostkowe za pomocą odręcznych DSL. Do tej pory mam DSL, który przeprowadza programistów przez przetwarzanie usługi po skonfigurowaniu wszystkich warunków wstępnych i zbudowaniu obiektu potwora, który ma ogromnego konstruktora i ustawiających, które powodują konflikt. Potwór jest jednym z wielu warunków wstępnych przetwarzania usługi i są one konstruowane od czasu do czasu, gdy programiści piszą testy jednostkowe dla nowych usług w naszym systemie. Warto więc włożyć sporo wysiłku w ułatwienie ich budowy. Próbuję obserwować ludzi kopiujących i wklejających „system podtrzymywania życia” z testu jednostkowego do testu jednostkowego. Tworzę oddzielne nowe klasy, jedną, której zadaniem jest zbudowanie klasy potwora, i taką, która prowadzi ich przez kolejne etapy przetwarzania usługi. Będą one używane przez wielu programistów. Oznacza to, że po jego szerokim zastosowaniu zmiany będą trudne. Dlatego martwię się możliwością przedłużenia. Zamiast prostego, płynnego konstruktora interfejsów (gdzie każda metoda zwraca `this` i jest zawsze dostępna) zdecydowałem się użyć wewnętrznego DSL, który zwraca inną zagnieżdżoną klasę. To bardzo potężny wybór. Pozwala mi to ograniczyć metody dostępne na każdym etapie tylko do poprawnych. Pozwala mi również zmienić typ zwracany metody na podstawie "stanu" poprzednich wyborów, w które wprowadzono DSL. Krótko mówiąc, sposób działania polega na tym, że pierwsza metoda zwraca pierwszą zagnieżdżoną klasę, która ma następną prawidłową metodę, która nie mogła zostać wcześniej wywołana. Ogranicza to możliwości, jakie oferuje intelisense, ułatwiając pisanie kodu wywołującego DSL. //Ostateczna metoda build() nie istnieje w PersonBuilderze. Jest w klasie zagnieżdżonej. public class PersonBuilder { public GotRequired doRequired() { return new GotRequired(); } //Jedna z wielu klas zagnieżdżonych public class GotRequired { public GotFirstName addFirstName(String firstName) { mFirstName = firstName; zwróć nowe GotFirstName(); } } public class GotFirstName { public GotMiddleName addMiddleName(String middleName) { mMiddleName = middleName; zwróć nową GotMiddleName(); } } ... } Można to wykorzystać, aby upewnić się, że metody są wywoływane w określonej kolejności i że spełnione są warunki wstępne. Klasy wewnętrzne można traktować jako stany, w których znajduje się DSL. Obsługiwana jest więcej niż jedna ścieżka zmiany stanu. Po prostu bycie w stanie może powiedzieć, jakie stany pojawiły się wcześniej, o ile żaden stan nie łączy dwóch ścieżek stanów w jedną. To wszystko oznacza po prostu, że jeśli jesteś ostrożny, możesz wiedzieć, że każda potrzebna metoda została wywołana przed zbudowaniem lub zwróceniem wyniku. Uczciwe ostrzeżenie, co następuje, to płyta kotła java verbose w najlepszym wydaniu. Pełna lista znajduje się tutaj: Kod konstruktora potworów. Kod DSL potworów wygląda mniej więcej tak: public class PersonBuilder { // -- Wymagane -- // private String mFirstName; private String mMiddleName; ... // -- Wymagane alternatywy -- // //Nie obie; nie ani prywatny int mBeersToday; //Jeden lub prywatny String mHowDrunk; //druga // -- O co to całe zamieszanie -- // private Person mPerson; /** Wywołaj każdą wymaganą metodę w podanej kolejności.*/ public GotRequired doRequired() { return new GotRequired(); } public class GotRequired { public GotFirstName addFirstName(String name) { mFirstName = firstName; zwróć nowe GotFirstName(); } } public class GotFirstName { public GotMiddleName addMiddleName(String middleName) { mMiddleName = middleName; zwróć nową GotMiddleName(); } } ... /* Przykładowy kod klienta .doRequiredAlternatives() //X lub y. a, b lub c. itp. .addBeersToday(3) //Teraz nie można wywołać addHowDrunk("Młotkiem"); .addFavoriteBeer("Duff")//Teraz nie można wywołać addJobTitle("Inspektor bezpieczeństwa"); .addBuild(); //Wywołuje różne konstruktory na podstawie alternatyw */ /** Teraz interesujący bit rozwidlający */ public class GotRequiredAlternatives { public GotPerson addBeersToday(int beersToday){ mBeersToday = beersToday; //Mam wystarczająco dużo dla konstruktora mPerson = new Person( mImię, mMiddleName, mLastName, mNickName, mMaidenName, mEyeColor, mHairColor, mDateOfBirth, mBeersToday, //Maliases GotBeersToday); zwróć nowe GotPerson(); } public GotPerson addHowDrunk(String howDrunk){ mHowDrunk = howDrunk; //Mam wystarczająco dużo dla konstruktora mPerson = new Person( mImię, mDrugieImię, mLNazwisko, mNickName, mMaidenName, mEyeColor, mHairColor, mDateOfBirth, mHowDrunk, //GotHowDrunk mAliases); zwróć nowe GotPerson(); } } //Można utworzyć GotHowDrunk i GotBeersToday //ale nie mamy już wyboru konstruktora, więc //możemy zapomnieć ścieżkę, która nas tu przywiodła. public class GotPerson { /** Zbuduj obiekt Person pozostawiając opcjonalne pola ustawione na wartości domyślne */ public Person doBuild() { return mPerson; } /** Wywołaj dowolne lub żadne z tych opcjonalnych pól */ public GotOptional doOptional() { return new GotOptional(); } } //Ponieważ osoba nie jest niezmienna, jedyne co zyskaliśmy to pewność, że zostały one ustawione zgodnie z pokręconymi zasadami osób class GotOptional { /** Build Person object */ public Person doBuild() { return mPerson; } public GotOptionalAlternatives doOptionalAlternatives() { return new GotOptionalAlternatives(); } public GotOptional addClothing(String clothes) { mPerson.setClothing(clothing); zwróć to; } public GotOptional addTatoo(Tatuaż na sznurku) { mPerson.setTattoo(tattoo); zwróć to; } //Dodaj dowolną liczbę seterów, które mają dobre wartości domyślne i nie są ze sobą w konflikcie } //Idealnie osoba i tak by na to nie zezwoliła, ale osoba jest ustawiona w kamieniu, więc przynajmniej zapewnia to bezpieczniejszy interfejs public class GotOptionalAlternatives { / ** Budowa obiektu Person */ public Person doBuild() { return mPerson; } //Opcjonalne, ale sprzeczne setery. Może nigdy nie zostanie wezwany. Nigdy nie mogą być zwoływane razem. public GotFavoriteBeer addFavoriteBeer(String ulubionePiwo){ //mFavoriteBeer = ulubionePiwo; //TODO usuń mPerson.setFavoriteBeer(favoriteBeer); //GotFavoriteBeer zwróć nowe GotFavoriteBeer(); } public GotJobTitle addJobTitle(String JobTitle){ //mJobTitle = jobTitle; //TODO usuń mPerson.setJobTitle(jobTitle); //GotJobTitle zwróć nowe GotJobTitle(); } } //Nie są one bezwzględnie potrzebne. Są jak jednowyrazowe {} po 'jeżeli'. Po prostu tam, jeśli doda się więcej. public class GotFavoriteBeer { /** Zbuduj obiekt Person */ public Person doBuild() { return mPerson; } } public class GotJobTitle { /** Zbuduj obiekt Person */ public Person doBuild() { return mPerson; } } } Oszczędzę ci kodu usługi, który wykorzystuje tę samą technikę klas zagnieżdżonych do łączenia metod opcjonalnych i wymaganych. Jest również w stanie zwrócić różne typy wyników w oparciu o poprzednie alternatywne metody, ponieważ chociaż metoda result() ma tę samą nazwę i parametry, pochodzi z innej klasy wewnętrznej. Pomimo nierzeczywistej ilości pisania wymaganej do stworzenia tych DSL, wyniki okazały się bardzo mocne. Spodziewam się jednak, że ludzie będą chcieli dodać nowe funkcje, nowe warunki wstępne przetwarzania usługi. Jeśli użyję tego stylu, czy jest jakaś nadzieja na ponowne użycie, czy lepiej po prostu napisać zupełnie nowe DSL za każdym razem, gdy coś musi się zmienić? Ponieważ kiedy już działa i jest używany, NIE chcę wracać do istniejących klas DSL i zadzierać z nimi. Jeśli widzisz inne problemy, daj mi znać. Liczę na wzajemną recenzję, ale doceniam wszelkie opinie.


title: Czy mój „obszar przechowywania zmiennych” jest w zasadzie „stertą”?

text: Planuję zaimplementować coś w rodzaju prostej maszyny wirtualnej/interpretera dla prostego języka, który tworzę. Kompilator języka emituje głównie instrukcje zorientowane na stos, które mają być wykonywane przez maszynę wirtualną. Struktura programu będzie wyglądać mniej więcej tak: * Część wykonawcza (z braku lepszego określenia): interpretuje kody operacji i wykonuje je. * Stos wywołań: do śledzenia wywoływania funkcji oraz przekazywania parametrów i wartości zwracanych. * Stos danych: bez obliczeń związanych z wywoływaniem funkcji, takich jak arytmetyka. * Obszar przechowywania zmiennych, w którym nazwy zmiennych są dopasowywane do wartości. „Obszar przechowywania zmiennych” zostanie zaimplementowany w zasadzie za pomocą HashTable/słownika. Kiedy programista tworzy zmienną (zakładając na razie tylko zmienne liczbowe), do tabeli dodawany jest nowy wpis. Kiedy przypisuje wartość do zmiennej, wpis o pasującej nazwie w tabeli otrzymuje tę wartość. Gdy programista uzyskuje dostęp do zmiennej, ponownie pobieramy wartość z tabeli. Jestem prawie pewien, że jest to jedyna część przechowywania danych, której potrzebuję w aplikacji, oprócz stosu danych i stosu wywołań. Nie rozumiem, dlaczego miałbym potrzebować czegokolwiek innego. Teraz przyjrzałem się, czym jest „kupa” w Wikipedii i innych źródłach internetowych. Znalazłem głównie terminy techniczne, których nie rozumiem. Ale w prostszych, nie bardzo technicznych terminach, jeśli dobrze rozumiem, sterta jest tam, gdzie zapisywane są „stałe” dane, rzeczy, które nie są obliczeniami lokalnymi, takimi jak arytmetyka. Więc jeśli moje rozumienie jest poprawne, czy mój „obszar przechowywania zmiennych” jest w zasadzie „stertą”? Dlaczego lub dlaczego nie? Jeśli moje rozumienie tego, czym jest kupa, jest błędne, wyjaśnij to.


title: Wykonywanie uwierzytelnienia użytkownika w konstruktorze kontrolera CodeIgniter?

text: W „The Clean Code Talks – Unit Testing” (http://youtu.be/wEhu57pih5w) Miško Hevery wspomina, że „w konstruktorach należy wykonać jak najmniej pracy [aby uczynić klasy łatwiej testowalnymi]”. Zastanawiam się nad sposobem, w jaki zaimplementowałem mój mechanizm uwierzytelniania użytkowników.Po zagłębieniu się w rozwój MVC poprzez CodeIgniter, zaprojektowałem swoją pierwszą aplikację webową do przeprowadzania uwierzytelniania użytkowników dla chronionych zasobów _w konstruktorach kontrolerów_ w przypadkach, gdy _każda_ funkcja publiczna w tym kontrolerze wymaga użytkownika do uwierzytelnienia.Dla kontrolerów z publicznymi metodami mającymi mieszane wymagania uwierzytelniania, naturalnie przeniosłbym uwierzytelnianie z konstruktora do każdej metody wymagającej uwierzytelniania (choć obecnie nie mam takiej potrzeby).Dokonałem tego wyboru przede wszystkim 1. do utrzymuj kontroler szczelnie, oraz 2. aby zapewnić, że wszystkie zasoby w kontrolerze są zawsze objęte.Jeśli chodzi o trwałość kodu i łatwość konserwacji: biorąc pod uwagę strukturę aplikacji cture, nie mogę przewidzieć sytuacji, w której jeden z zaatakowanych kontrolerów potrzebowałby metody publicznej, która nie wymagałaby uwierzytelniania użytkownika, ale widzę to jako potencjalną wadę _ogólnie_ tej implementacji (tzn. wymagająca przyszłej refaktoryzacji) . Czy to dobry pomysł?


title: Microsoft .Net licencja

text: Mam zamiar zacząć kodować przy użyciu technologii Microsoft .Net, martwię się tylko o licencję, więc jeśli skompiluję swój kod za pomocą kompilatora .Net " **nie visual studio** ", czy mogę swobodnie dystrybuować, sprzedawać lub używać mój produkt lub powinien mieć jakąś "licencję Microsoft", to samo dla serwera sql express zainstalowanego (depolye) z moją aplikacją


title: Nauka podstawowych algorytmów - lepiej C czy C++?

text: Studiuję podstawowe algorytmy (quicksort, mergesort, drzewa binarne itp.) i zamierzam przekodować każdy algorytm od podstaw, aby dowiedzieć się, jak działają. Czy mam je kodować w C czy C++? Myślę, że w C++ powinienem używać STL, w C wszystko powinno być prawdopodobnie dłuższe Czy istnieje powód, dla którego powinienem wybierać jeden nad drugim?


title: Konfiguracja nowego systemu deweloperskiego – jak przyspieszyć proces?

text: Kiedy dostaję nowy laptop, zwykle zajmuje mi to około dwóch tygodni, aby ponownie zainstalować wszystkie moje programy dla programistów, narzędzia i dostosować ustawienia systemu operacyjnego do swoich upodobań. Wiem, że istnieją narzędzia do tworzenia kopii zapasowych/przywracania systemów, ale zwykle dzieje się tak, jeśli są one na tym samym sprzęcie. Co byś polecił?


title: Zaimplementuj typeklasę Haskell z interfejsem C#

text: Próbuję porównać klasy typu Haskella i interfejsy C#. Załóżmy, że istnieje „funktor”. Haskell: class Functor f gdzie fmap :: (a -> b) -> f a -> f b Jak zaimplementować klasę tego typu jako interfejs w C#? Co próbowałem: interface Functor<A, B> { F<B> fmap(Func<A, B> f, F<A> x); } To jest nieprawidłowa implementacja i faktycznie utknąłem z ogólnym typem `F`, który powinien zostać zwrócony przez `fmap`. Jak to powinno być zdefiniowane i gdzie? Czy nie da się zaimplementować funkcji `Functor` w C# i dlaczego? A może istnieje inne podejście?


title: Jak potencjalny klient może znaleźć „najlepszą” ofertę w zwinnym tworzeniu oprogramowania?

text: Jeśli masz projekty oprogramowania o stałej cenie, potencjalny klient może wybrać firmę programistyczną według ceny, aby uzyskać najlepszy stosunek jakości do ceny. Firma programistyczna z najniższą ceną wygrywa kontrakt. W zwinnych projektach oprogramowania nie ma stałych zestawów funkcji oprogramowania ze stałymi cenami. Zestawy funkcji mogą się zmieniać po każdym sprincie. Jak więc klient może wybrać, która firma tworząca oprogramowanie jest dla niego najlepsza? (w cenie, jakości lub czymś innym) [aktualizacja] Najniższa cena to tylko przykład jak klient _może_ wybrać kontrahenta. Tło: W zeszłym tygodniu byłem na seminarium na temat zwinnego rozwoju. Dowiedzieliśmy się, że nowi klienci często chcą projektów o stałej cenie, ponieważ ułatwia im to porównanie możliwych wykonawców. Klient i Wykonawca potrzebują pewnego poziomu zaufania, aby zgodzić się na zwinny rozwój. Jeżeli Klient i potencjalny Wykonawca nie znają się nawzajem, co może zrobić Klient, aby wybrać wykonawcę?


title: Algorytm formatowania kodu SQL

text: Potrzebuję narzędzia (do użytku domowego), które sformatuje kod SQL (SQL Server/MySQL). Istnieją różne narzędzia innych firm i strony internetowe, które to robią, ale nie ma dokładnie tego, jak tego potrzebuję. Dlatego chcę napisać własne narzędzie, które będzie pasować do moich potrzeb. Pierwsze pytanie, czy istnieje jakiś standard lub konwencja dotycząca formatowania kodu SQL? (narzędzia, które próbowałem sformatować inaczej) Drugie pytanie, jak mam podejść do tego zadania? Czy należy najpierw przekonwertować zapytanie sql na jakąś strukturę danych, taką jak drzewo?


title: Czy powinienem używać relacyjnego modelu danych czy Cassandry z indeksami opartymi na rodzinie kolumn?

text: Obecnie pracujemy nad pewnymi problemami z przechowywaniem danych dzienników z różnych serwerów i dzienników komunikatów komunikacyjnych (HTTP(S), XMPP). Będzie wiele operacji zapisu, a do operacji odczytu użyjemy zapytań wyszukiwania z filtrami. Czy powinniśmy pozostać przy klasycznym rozwiązaniu schematu relacyjnej bazy danych, czy skoncentrować się na Cassandrze z indeksami opartymi na ColumnFamily?


title: DI: Czy stabilna zależność może mieć ulotną zależność?

text: Niedawno czytałem _Wstrzykiwanie zależności Marka Seemanna w .NET_ i próbowałem zastosować część tego, czego się nauczyłem w nowym projekcie, nad którym pracuję, i utknąłem w konkretnym scenariuszu, próbując ustalić, co zależności, które powinienem i nie powinienem wstrzykiwać. Przeczytałem kilka innych pytań na temat SO i gdzie indziej, które omawiają podobne scenariusze, ale w sposób okrężny, i myślę, że zawęziłem podstawowe pytanie koncepcyjne do tego, które znajduje się w tytule: Czy stabilna zależność może mieć niestabilną zależność? Innymi słowy: jeśli stabilna zależność ma ulotną zależność, to czy stabilna zależność jest naprawdę stabilna? Szybki przykład: public class MyClass { private IVolatileDependency1 _one; private StableDependency _stable; public MyClass (IVolatileDependency1 jeden, IVolatileDependency2 dwa) { _jeden = jeden; _stable = new StableDependency(two) } } public class StableDependency { private IVolatileDependency2 _two; public StableDependency(IVolatileDependency2 dwa) { _two = dwa; } } W tej sytuacji `MyClass` ma stabilną zależność, której nie wstrzykiwałem, ale zamiast tego tworzyłem instancję wewnętrznie i trzymałem ją przez kompozycję. Jednak ta stabilna zależność ma ulotną zależność, którą wstrzykuję do `MyClass` i przekazuję do konstruktora `StableDependency`. Z jakiegoś powodu trochę mi to pachnie. Jest to dość proste w tak prostym, wymyślonym przykładzie, ale widzę, że rzeczy szybko wymykają się spod kontroli w bardziej skomplikowanej sytuacji w świecie rzeczywistym. Czy `StableDependency` jest naprawdę stabilny, czy powinienem komponować/rozwiązywać go przed skonstruowaniem `MyClass` i wstrzyknięciem go stamtąd? Naprawdę nie przewiduję zmiany lub zastąpienia `StableDependency` inną implementacją, ale z drugiej strony praktyka przekazywania zależności poprzez klasy nadrzędne ich dzieciom (rodzic/dziecko w sensie kompozycji) wydaje się ujawniać szczegóły dzieci poprzez rodzica, co byłoby pogwałceniem Prawa Demeter. **EDYTUJ:** Zmieniono VolatileDependency1 i VolatileDependency2 na interfejsy, aby wyjaśnić, że są one przeznaczone do spełnienia przez wiele możliwych implementacji (zgodnych z LSP). **EDYTUJ 2:** Zastanawiając się nad tym trochę więcej i czytając odpowiedź KeithS i komentarz default.kramer poniżej, uświadamiam sobie, że może nie powinienem nazywać `StableDependency` tak jak to zrobiłem, ponieważ nie sądzę, że jest to zależność w pierwszej kolejności. Nie jest to coś, czego kiedykolwiek spodziewałem się mieć wiele implementacji; to tylko szczegół implementacji, że `MyClass` używa kompozycji do przechowywania `StableDependency`, więc wiedza `MyClass` o tym, jak skonstruować `StableDependency` nie jest problemem, którego nie sądzę. Wielkie pytanie brzmi: `StableDependency` _ma_ ma zależność od `IVolatileDependency2`, więc jak wstrzyknąć tę zależność? Czy rozumiem, że dla wszystkich celów i celów `MyClass` ma zależność od `IVolatileDependency2`, a fakt, że po prostu przekazuje tę zależność do `StableDependency`, jest szczegółem implementacji niezwiązanym z DI?


title: Jak przedstawić kod koledze

text: Jak zamierzasz przedstawić nowemu członkowi swojego zespołu bazę kodu, która może być dość złożona i powikłana wieloma „błędami”? Myślę, że najłatwiej byłoby mieć ogólną architekturę ułożoną za pomocą diagramów i poświęcić kilka tygodni (lub miesięcy) na przekazanie nowej osobie dobrze zdefiniowanych (i dobrze zaplanowanych) zadań, gdy przyzwyczai się ona do kodu. Jednak jako konsultant (i do tego młodszy pracownik) nie zawsze mogę to mieć ze względu na ograniczenia czasowe lub wyznaczenie ról w zespole. (Byłem w tym konkretnym projekcie dwa razy dłużej niż ktokolwiek inny, więc „junior” w żaden sposób nie „wie mniej o kodzie/projektu”). projekt i kod, i niestety za każdym razem, gdy stwierdzam, że nie jestem w tym dużo lepszy niż poprzedni. Uwielbiam diagramy i obrazy, ale często czuję, że nie odzwierciedlają one w odpowiedni sposób złożoności systemu. (A co z tymi wszystkimi małymi „gotchas”?) Projekt zbliża się do punktu, w którym przekażemy go klientowi, a aby uczynić rzeczy trudniejszymi, osoba, z którą będę przekazywać wiedzę, jest zasadniczo po prostu z college'u. (Nie żebym był o wiele lepszy, gdy robię transfery wiedzy ze starszymi programistami.) Uczestniczę w grupie użytkowników raz w miesiącu i korzystam z innych okazji, gdy się pojawiają, więc nie jestem przyzwyczajony do poznawania nowych tematów, ale czuję swoje umiejętności powielać skuteczne dzielenie się wiedzą, żałośnie niewystarczające. Każda rada byłaby bardzo mile widziana. Szukam głównie wskazówek, których mogę przestrzegać. Na przykład: Od czego zaczynasz? Jak postępujesz? Jak ukryć nieznane technologie lub wzorce ze strony słuchacza bez poświęcania całego dnia? Gdzie łączysz logikę biznesową ze strukturą kodu? Dziękuję Ci! (Jak zawsze, edytuj pytanie według własnego uznania.)


title: Programowanie sterowane testami za pomocą zwykłego języka C: zarządzaj wieloma modułami

text: Jestem nowy w programowaniu opartym na testach, ale uwielbiam to. Jest jednak główny problem, który nie pozwala mi skutecznie z niego korzystać. Pracuję dla wbudowanych aplikacji medycznych, zwykłego C, z kwestiami bezpieczeństwa. Załóżmy, że masz moduł `A`, który ma funkcję `A_function()`, którą chcę przetestować. Ta funkcja wywołuje funkcję `B_function`, zaimplementowaną w module `B`. Chcę rozdzielić ten moduł, więc, jak uczy James Grenning, tworzę Mock moduł `B`, który implementuje mock wersję `B_function`. Nadchodzi jednak dzień, kiedy muszę zaimplementować moduł `B` z prawdziwą wersją `B_function`. Oczywiście te dwie funkcje `B_function` nie mogą żyć w tym samym pliku wykonywalnym, więc nie wiem jak stworzyć unikalny "launcher" do testowania obu modułów. Wyjściem Jamesa Grenninga jest zastąpienie w module `A` wywołania `B_function` wskaźnikiem do funkcji, który może mieć wartość pozorowanej lub rzeczywistej funkcji w zależności od potrzeb. Pracuję jednak w zespole i nie mogę uzasadnić tej decyzji, która nie miałaby sensu, gdyby nie test, a nikt wprost nie prosił mnie o zastosowanie podejścia opartego na testach. Może jedynym wyjściem jest wygenerowanie innego pliku wykonywalnego dla każdego modułu. Jakieś mądrzejsze rozwiązanie? Dziękuję Ci


title: kontrole zdrowia psychicznego: kiedy stają się testami paranoidalnymi?

text: Zwykle dodaję do mojego kodu wiele klauzul dotyczących sprawdzania poprawności. Innymi słowy, wiele asercji, w których kod jest instruowany, aby „panikować” (zwykle wypisuje jak najwięcej informacji, gdy określony warunek nie jest spełniony, a następnie kończy działanie). Chodzi o to, że wiele z tych kontroli jest oczywiście zbędnych w taki czy inny sposób. Z drugiej strony często byłem ugryziony przez sytuacje, w których nie dodałem testu zdrowia psychicznego, oceniając go jako dość oczywisty, że nie może zawieść i okazał się błędny. Pytanie więc brzmi: czy istnieją jakieś wytyczne/najlepsze praktyki, które pozwalają zdecydować, w jakim stopniu sprawdzanie poprawności jest uzasadnione? Zbyt częste sprawdzanie poprawności oczywiście zaśmieca kod i jest uciążliwe w utrzymaniu, gdy założenia ulegają zmianie.


title: Licencja na oprogramowanie dająca pełne wykorzystanie non-profit

text: Czy istnieją jakieś licencje na oprogramowanie, które wyraźnie zezwalają komuś (deweloperowi lub innym) na pełny dostęp do źródeł i/lub zasobów projektu, o ile jest to całkowicie niekomercyjne i/lub do użytku osobistego i w inny sposób musi zapłacić komercyjny opłata licencyjna?


title: hierarchia klas ze strukturalnie różnymi podklasami

text: Chcę zaimplementować warstwę protokołu, która znajduje się na szczycie stosu TCP/IP. Istnieje ograniczony zestaw PDU, które można wysłać, a dla każdej PDU istnieje klasa, która reprezentuje je w ustrukturyzowanej formie. Każda klasa ma funkcję do serializacji danych strukturalnych do postaci gotowej do wysłania i deserializacji do postaci strukturalnej. Te PDU są strukturalnie bardzo różne, na przykład: struct a_associate_ac : property { a_associate_ac() = default; void from_pdu(std::vector<unsigned char> pdu) zastąpienie; std::vector<znak bez znaku> make_pdu() const override; pdu::TYPE type() nadpisanie const; std::ciąg o nazwie_ae; std::ciąg wywołanie_ae; std::string application_context; struct present_context { enum class RESULT { ACCEPTANCE = 0x00, USER_REJEC = 0x01, PROV_REJEC_NO_REASON = 0x02, ABSTR_CONT_NOT_SUPP = 0x03, TRANFS_SYNT_NOT_SUPP = 0x04 }; kontekst_prezentacji() = domyślny; niepodpisany identyfikator postaci; WYNIK wynik_; std::string transfer_syntax; }; std::vector<presentation_context> pres_contexts; std::size_t max_message_length; }; w porównaniu do: struct a_associate_rj: property { a_associate_rj() = default; void from_pdu(std::vector<unsigned char> pdu) zastąpienie; std::vector<znak bez znaku> make_pdu() const override ; pdu::TYPE type() nadpisanie const; enum class SOURCE : unsigned char { UL_SERVICE_USER = 0x01, UL_SERVICE_PROV_ACSE = 0x02, UL_SERVICE_PROV_PRESREL = 0x03 }; enum class REASON : unsigned char { NOT_SPECIFIED = 0x01, APPL_CONT_NOT_SUPP = 0x02, CALLING_AE_NOT_RECOG = 0x03, CALLED_AE_NOT_RECOG = 0x07 }; POWÓD powód_; ŹRÓDŁO źródło_; }; Wszystkie te klasy dziedziczą z abstrakcyjnej właściwości nadklasy. właściwość jest używana przez klasę warstwy, która implementuje protokół, w dwóch funkcjach składowych: void send(const property* p); std::unique_ptr<const właściwość> odbierz(); Oznacza to, że jeśli użytkownik klasy warstwy otrzymuje właściwość i chce uzyskać dostęp do jej składowych, musi sprawdzić, jaki rodzaj właściwości został odebrany za pomocą `property::type()` i przerzucić ją na ten typ, co jest dla mnie dość irytujące . Co można zrobić, aby rozwiązać ten problem?