title: Jak kodować algebraiczne typy danych w języku podobnym do C# lub Java?

text: Istnieje kilka problemów, które można łatwo rozwiązać za pomocą algebraicznych typów danych, na przykład typ List można bardzo zwięźle wyrazić jako: data ConsList a = Empty | ConsCell a (ConsList a) consmap f Empty = Empty consmap f (ConsCell a b) = ConsCell (f a) (consmap f b) l = ConsCell 1 (ConsCell 2 (ConsCell 3 Empty)) consmap (+1) l Ten konkretny przykład znajduje się w Haskell, ale byłoby podobnie w innych językach z natywną obsługą algebraicznych typów danych. Okazuje się, że istnieje oczywiste mapowanie do podtypów w stylu OO: typ danych staje się abstrakcyjną klasą bazową, a każdy konstruktor danych staje się konkretną podklasą. Oto przykład w Scali: seal abstract class ConsList[+T] { def map[U](f: T => U): ConsList[U] } object Empty extends ConsList[Nothing] { override def map[U](f : Nothing => U) = this } final class ConsCell[T](first: T, rest: ConsList[T]) extends ConsList[T] { override def map[U](f: T => U) = new ConsCell (f(first), rest.map(f)) } val l = (new ConsCell(1, new ConsCell(2, new ConsCell(3, Empty))) l.map(1+) Jedyna rzecz potrzebna poza naiwnością podklasy to sposób na _zapieczętowanie_ klas, tj. sposób na uniemożliwienie dodawania podklas do hierarchii.Jak podszedłbyś do tego problemu w języku takim jak C# lub Java?Dwie przeszkody, które znalazłem, próbując użyć algebraicznych typów danych w C# były: * Nie mogłem rozgryźć, jak nazywa się dolny typ w C# (tzn. nie mogłem rozgryźć, co umieścić w `class Empty : ConsList< ??? >`) * Nie mogłem rozgryźć sposób na _zapieczętowanie_ `ConsList`, aby nie było żadnych podklas można dodać do hierarchii Jaki byłby najbardziej idiomatyczny sposób implementacji algebraicznych typów danych w C# i/lub Javie? Lub, jeśli nie jest to możliwe, jaki byłby idiomatyczny zamiennik?


title: Jak zrozumieć eksplozję frameworków javascript? Czy powinienem się ich wszystkich nauczyć?

text: Dla początkującego programisty stron internetowych, który nadal zajmuje się tworzeniem stron internetowych w konwencjonalny sposób (PHP/J2EE/Struts po stronie serwera, HTML/CSS/Javascript po stronie klienta), zostałem zaskoczony ostatnim wpisem na blogu dotyczącym stosu technologii Trello. Nie mogę przestać czuć się przytłoczony listą nowych technologii i frameworków wspomnianych w tym poście, a konkretnie wszechobecnością frameworków Javascript. Moje pytanie brzmi, czy to przyszłość tworzenia stron internetowych? Czy są jakieś artykuły, strony internetowe lub zasoby, które mogą pomóc mi zrozumieć, gdzie każdy z tych nowych frameworków pasuje do nowoczesnej aplikacji internetowej?


title: Dlaczego identyfikatory nie powinny zaczynać się od cyfry?

text: Większość języków programowania wydaje się być zaprojektowana tak, aby nie pozwalać na deklarowanie identyfikatora zaczynającego się od liczby. Byłem po prostu ciekawy, dlaczego. Przeszukałem już internet, ale nie znalazłem satysfakcjonującego wyjaśnienia.


title: Kiedy zaktualizować jQuery?

text: Kiedy zaleca się aktualizację jQuery/jQuery UI? Innymi słowy: **jakie są najlepsze praktyki aktualizacji jQuery/jQuery UI?** Pracuję nad długim projektem, który potrwa co najmniej rok. Jestem pewien, że w tym czasie jQuery/jQuery UI będzie wielokrotnie aktualizowany. Czy zaleca się aktualizowanie moich plików interfejsu użytkownika jQuery/jQuery za każdym razem, gdy zostanie wydana aktualizacja? A może lepiej trzymać się konkretnej wersji do końca projektu? Boję się „łamania” zmian w kodzie i za każdym razem, gdy wypuszczana jest aktualizacja, muszę wszystko przetestować. To zajmuje zbyt dużo czasu. Ale z drugiej strony, jeśli nie aktualizowałem, boję się błędów, które później ugryzą mnie w tył. Projekt jest ASP.MVC i często używam jQuery. jakieś pomysły?


Ostatnio opracowywałem zestaw standardów kodowania dla naszej firmy. (Jesteśmy nowym zespołem rozgałęziającym się na nowy język dla firmy.) W pierwszym szkicu postawiłem sobie za cel naszych standardów kodowania poprawę czytelności, łatwości konserwacji, niezawodności i wydajności. (Zignorowałem zapisywność, przenośność, koszt, zgodność z poprzednimi standardami itp.) Jednym z moich celów podczas pisania tego dokumentu było przeforsowanie idei prostoty kodu. Pomysł polegał na tym, że w jednym wierszu powinno być tylko jedno wywołanie funkcji lub operacja. Miałem nadzieję, że poprawi to czytelność. To pomysł, który przeniosłem z naszego poprzedniego języka. Zakwestionowałem jednak założenie stojące za tym naciskiem: **Czy prostota zawsze poprawia czytelność?** Czy jest przypadek, w którym pisanie prostszego kodu zmniejsza czytelność? Powinno to być oczywiste, ale przez „prostsze” nie mam na myśli „łatwiejszego pisania”, ale mniej rzeczy w jednej linii.


title: Czy do tworzenia desktopów można używać technologii internetowych, takich jak PHP, HTML i CSS?

text: Muszę opracować aplikację dla agencji gazowniczej, w której baza danych będzie zawierała numery konsumentów, nazwiska, adresy i datę dostawy dla prawie 20-tysięcznego miasta. Znam tylko PHP, MySQL, CSS, jQuery i inne technologie internetowe. Czy możliwe jest dostarczenie klientowi pakietu przy użyciu tych technologii, które można zainstalować na komputerze i używać lokalnie? Ta aplikacja będzie działać na jednym komputerze dla jednego użytkownika. Jestem zaznajomiony z narzędziami takimi jak XAMPP, ale nie chcę uruchamiać lokalnego serwera WWW. Zarówno aplikacja, jak i baza danych będą bezpiecznie działać na określonym komputerze. W przyszłości, jeśli ta aplikacja będzie musiała znajdować się na wielu komputerach, chcę, aby baza danych i aplikacja były przenośne. Szukałem podobnych pytań na Stack Overflow i znalazłem kilka rekomendacji, takich jak Jetty, Adobe Air i ostatnia baza danych Web SQL. Czy PHP GTK jest również opłacalnym narzędziem do budowania profesjonalnych aplikacji? Chciałbym otrzymać rekomendację specyficzną dla tego rodzaju aplikacji.


title: Klasa Scala z konstruktorem wymagającym parametru tego samego typu Class

text: Nie pamiętam, ale ostatnio w jednym z API widziałem coś w stylu `class A (member:A){}`. Scala ją wspiera i nie ma problemu z utworzeniem takiej klasy, ale jak ją zainicjować i jakiemu celowi miałaby służyć taka klasa?


title: Czy należy być odpornym na nadgodziny / chrupanie / stresory?

text: Pytam o to, bo po dwóch tygodniach intensywnej pracy bez czasu wolnego (jeść, spać, program) dzisiaj pękłam i wpadłam w szał. Potem na kilka godzin popadłem w łagodną depresję, zanim w końcu mogłem się uspokoić i dokończyć swoje cele projektowe na dany dzień. To mój pierwszy projekt i bardzo zadbałem o zaprojektowanie dobrego rozwiązania spełniającego wszystkie wymagania. Termin został wyznaczony bardzo, bardzo napięty (niecały tydzień na stworzenie całej aplikacji frontendowej) i kodowałem do późna w nocy. To było dla mnie w porządku, nie miałem nic przeciwko temu, gdybym wiedział, że 1) system jest wystarczająco elastyczny, aby dostosować się do nowej zmiany i 2) jest to pierwszy projekt, który rozwijam sam i chciałem wykonać dobre wrażenie. Tym, co naprawdę mnie zaskoczyło, był brak komunikacji, który zmuszał mnie do wyrzucania dużych fragmentów kodu. Ta niepotrzebna przeróbka pozostawiła mnie bez snu, co jest dopuszczalne, jeśli nie powtórzy się. ZDARZYŁO SIĘ, że w dniu, w którym użytkownicy backendu chcieli zobaczyć jakieś wyniki na interfejsie, ZMIENILI SPECYFIKACJE BEZ POINFORMOWANIA MNIE. A potem zirytowałam się, kiedy zirytowała mnie zmiana! Więc nie tylko musiałem przerobić mój kod z powodu nieporozumień, ale musiałem przerobić mój kod, ponieważ zaszły zmiany, o których nawet nie jestem informowany! Ludzie zachowujący się tak, jakby to moja wina, że coś takiego przeoczyłem, po prostu przewrócili mnie na skraj przepaści. Wyleciałam w powietrze, postanowiłam to zakończyć i pójść na spacer. Rozmawiałem o tym z moim szefem i chociaż jest współczujący, mówi, że od czasu do czasu zdarzają się takie rzeczy jak zmiany wymagań, nadgodziny, zbliżające się terminy i nieporozumienia i że powinienem to przyjąć z nieco większą łatwością. (Uważa, że traktuję swoją pracę zbyt poważnie i powinienem się trochę zrelaksować.) Jestem tylko studentem i to jest moja pierwsza praca, więc chciałbym zadać to pytanie tak szeroko, jak to tylko możliwe. To, co tutaj opisałem, jest historią odpowiedzi na ogólne, miejmy nadzieję, pytanie: Jak odporny powinienem być na tego rodzaju stresory? Czy dwa tygodnie to za mało? Czy to powszechne i naprawdę robię z tego wielką sprawę? Czy powinienem oczekiwać, że moje życie zawodowe będzie wypełnione tego rodzaju wpadkami i czymś, z czym będę musiał się zmierzyć, jeśli chcę zarabiać na życie jako programista? PS: Chociaż wyobrażam sobie, że niektórzy ludzie (jak mój profesor) doradzają mi znalezienie nowej pracy, nie jest to zgodne z duchem pytania. Nie proszę o poradę zawodową – mogę powiedzieć, jak bardzo to wpływa na moje zdrowie i wymaga zmian.


title: Z jakiego powodu projektanci języków programowania decydują, jaki znak przyjmie wynik działania modulo?

text: Przechodząc przez operację Modulo (droga, którą wszedłem badając różnicę między `rem` i `mod`) natknąłem się na: > W matematyce wynik działania modulo jest pozostałością > dzielenia euklidesowego. Możliwe są jednak inne konwencje. Komputery i > kalkulatory mają różne sposoby przechowywania i przedstawiania liczb; w ten sposób > ich definicja działania modulo zależy od języka programowania > i/lub bazowego sprzętu. Pytania: * Przechodząc przez podział euklidesowy stwierdziłem, że pozostała część tej operacji jest zawsze dodatnia (lub 0). Jakie ograniczenie podstawowego sprzętu komputerowego zmusza projektantów języków programowania do odróżnienia od matematyki? * Każdy język programowania ma predefiniowaną lub niezdefiniowaną regułę, zgodnie z którą wynik operacji modulo otrzymuje swój znak. Jakie uzasadnienie przyjmuje się przy tworzeniu tych zasad? A jeśli chodzi o sprzęt, to czy zasady nie powinny zmieniać się zgodnie z tym, niezależnie od języka programowania?


title: Jak zagłębić się w kod, który nie ma jednego punktu wejścia?

text: Pracuję nad korporacyjnymi projektami Java, które nie mają jednego punktu wejścia, z którego mogę śledzić przebieg wykonania. Niektóre projekty mają setki klas, a kiedy jestem proszony o dodanie funkcji do projektu, często nie wiem, od czego zacząć patrzeć na kod. Jaki jest najlepszy sposób na zagłębienie się w takie projekty, abym mógł szybko wdrożyć funkcję bez marnowania czasu.


title: Czy jest możliwe (lub pożądane, jeśli nie), aby silnik bazy danych organizował kolejność instrukcji sql, aby zachować integralność referencyjną?

text: Dzisiaj w pracy znalazłem następującą sytuację: Mieliśmy dwie tabele, `A` i `B`, gdzie B miał klucz obcy powiązany z kluczem podstawowym A. W naszej aplikacji otrzymaliśmy dwie główne sytuacje, które stworzyły _problem_ : Jeden, w którym musieliśmy dodać kilka rekordów w A, a następnie utworzyć kilka rekordów w B, odnoszących się do tych w A. To było w porządku, ponieważ stworzyliśmy naszą BLL, aby najpierw obsłużyć zmiany w A, a następnie w B. _"problem"_ polega na tym, że czasami będziemy musieli usunąć rekordy z B, a oni usuną przywoływany rekord w A, co powoduje błąd, ponieważ próbujemy usunąć A przed usunięciem B, co może naruszyć referencyjną integralność tych tabele. Oczywiście wszystko jest wewnątrz transakcji i moglibyśmy sobie z tym poradzić w naszym kodzie BLL, po prostu zmieniając kolejność zmian (w A lub B) na podstawie działań, które należy wykonać, **ale** moje pytanie jest bardziej konceptualne niż „proszę, pomóż mi rozwiązać mój problem”_, ponieważ „problem” jest już rozwiązany (ale oczywiście przyjmuję sugestie, jeśli się pojawią! =D). Na czacie w biurze ustaliliśmy, że w ramach transakcji wszystko jest robione i jeśli pojawi się jakiś problem, to, co zostało zrobione, jest cofane. **Mój pomysł** : Dlaczego transakcja nie może ocenić wszystkiego, a oni uporządkować oświadczenia i wykonać tego w sposób nie naruszający integralności referencyjnej, skoro po transakcji wszystko zostanie zrobione i kolejność może nie mieć znaczenia wszystko? Po zastanowieniu nawet nie jestem pewien, czy ta rzecz byłaby fajna, czy też stworzyła jakiegoś króla piekielnego piekła, ponieważ przychodzą mi do głowy sytuacje, w których kolejność wypowiedzi miałaby znaczenie, więc zamieszczam to tutaj, więc możemy o tym dyskutować. Mam nadzieję, że mój tekst nie jest zagmatwany. I tylko wspomnieć, używam `Microsoft SQL Server`. Nie wiem, czy jest to możliwe w innych bazach danych.


title: Umowy z klientami jako jednoosobowa działalność gospodarcza - Co powinno znaleźć się w umowie?

text: Jeśli już o to poproszono, przekieruj mnie, a zamknę to. Kilka miesięcy temu powiadomiłem mojego obecnego pracodawcę o rezygnacji z pracy, a oni nie byli w stanie znaleźć nikogo, kto mógłby mnie zastąpić. Za miesiąc mogę odejść z pracy, a firma zaczęła pytać mnie, czy chciałbym kontynuować pracę na kontrakcie. Rozważałem zarejestrowanie się jako jednoosobowa firma i wykonanie dla nich dodatkowej pracy, jeśli są gotowi płacić mi głupie sumy pieniędzy. Gdybym miał to zrobić, zrobiłbym to profesjonalnie, z umową i prawnikiem do spisania umowy. Ale to rodzi problem; Nie wiem dokładnie, co powinno znaleźć się w umowie. Czy jest ktoś, kto ma z tym doświadczenie i mógłby zasugerować, co ma objąć umowa, albo rzeczy, które mógłbym przeoczyć, dopóki nie ugryzą mnie w dupę? Dodatkowo, ale bardziej konkretnie w mojej sytuacji, obecnie pracuję dla tej firmy w obcym kraju. Jeśli zdecyduję się wykonać dla nich dodatkową pracę, będzie to z mojego kraju. Czy jest coś, na co powinienem uważać, skoro firma nie znajduje się w moim kraju? Zastanawiam się, jak realistyczne lub opłacalne byłoby podpisanie kontraktu z firmą zlokalizowaną w obcym kraju. Jeśli nie jest to realistyczne lub nie ma sensu finansowego, lepiej nie przyjmę tej pracy. Ewentualnie pominięcie prawnika i umowy i po prostu kontynuowanie zaufania może być w porządku, ale nadal jestem tym zmęczony, mimo że pracuję w firmie od kilku lat.


title: Dobre IDE dla NodeJS - debugowanie szczególnie ważne

text: Posiadanie znacznej ilości aplikacji hurtowni danych napisanych w języku JavaScript. Aplikacja jest skonfigurowana tak, aby kod JavaScript działał w przeglądarce internetowej (Chrome). Oczywiście uruchamianie aplikacji hurtowni danych w przeglądarce internetowej jest dość głupie (aplikacja ma znaczną skalę, że reszta działa w klastrze serwerów w chmurze). Chciałby zainstalować NodeJS w klastrze serwerów. Głównym problemem jest utrata łatwości debugowania JavaScript w przeglądarce Chrome. Narzędzia programistyczne dla Chrome są niesamowite. Niezwykle łatwo jest ustawić punkty przerwania i wyświetlić wartości zmiennych oraz stan aplikacji za pomocą przeglądarki internetowej Chrome. Kiedy przenosimy kod JavaScript na serwer, jakie jest dobre IDE do użycia z NodeJS? W tej chwili na serwerze działa Python. W tym celu używamy PyCharm i mamy skonfigurowane zdalne debugowanie tak, że możemy debugować wiersz po wierszu, przeglądać wartości zmiennych i stan aplikacji w PyCharm na naszych lokalnych maszynach, nawet jeśli kod jest wykonywany na serwerze. Czy można to zrobić za pomocą Javascript i NodeJS? Dzięki wielkie!


title: Jak stworzyć nieanglojęzycznego klona CoffeeScript?

text: Chcę stworzyć nieangielski język programowania, który jest identyczny z tym, czym CoffeeScript jest dla JavaScript. Chodzi mi o to, że nie chcę budować własnego projektu lub składni. Po prostu chcesz mieć język programowania inny niż angielski, który kompiluje się do JavaScript. Chcę śledzić wszystko, co robią koledzy z CoffeeScript, więc nie chcę podejmować żadnych decyzji projektowych. Na przykład: To jest coffeescript: liczba = 42 przeciwieństwo = prawda liczba = -42 jeśli przeciwnie Chcę, aby mój język wyglądał następująco: رقم = 42 عكس = صحيح رقم = -42 إذا عكس skompilowane do: var numer, przeciwny; liczba = 42; przeciwieństwo = prawda; jeśli (naprzeciwko) { liczba = -42; }


title: Czy doświadczeni programiści Ruby on Rails używają rusztowania?

text: W samouczku Ruby on Rails przeczytałem coś, co sugerowało, że doświadczeni programiści nie używają rusztowania, ponieważ lubią po prostu napisać kod, aby samodzielnie połączyć MVC. W innym miejscu przeczytałem, że dobrym pomysłem jest użycie rusztowania, ponieważ pomaga ono trzymać się konwencji, dzięki czemu inni, którzy patrzą na Twój kod i wchodzą z nim w interakcję, zrozumieją, co robisz. Jestem całkiem nowy w Ruby on Rails, ale nie MVC lub aplikacja internetowa - czy generalnie powinienem starać się trzymać konwencji rusztowań i pozwolić, by mnie poprowadziła?


title: Tworzenie ogromnego drzewa decyzyjnego

text: Mam napisać korelator zdarzeń. Podstawową częścią systemu będzie drzewo decyzyjne rozpoznające pochodzenie usterki na podstawie zarejestrowanych stanów i plików logów. Często wiele wypadków będzie różniło się drobnymi szczegółami i wiele decyzji będzie podejmowanych na podstawie rozmytych, niepełnych lub niewiarygodnych danych, ale większość z tych decyzji można zapisać jako binarne funkcje logiczne. Rzecz w tym, że będzie ich dużo. Spodziewam się co najmniej 100 węzłów w drzewie decyzyjnym i mogę nie doszacować wartości o rząd wielkości. Co więcej, w miarę pojawiania się nowych, nieoczekiwanych wzorców, nieprzewidzianych awarii, które pozostawiają nowe ślady, lub wraz z rozszerzeniem systemu nowe tryby awarii stają się wykonalne, drzewo decyzyjne będzie musiało zostać utrzymane. (i nie zawsze będzie to czysta struktura drzewiasta - niektóre usterki o tym samym skutku mają dwa lub więcej trybów występowania, niektóre rozgałęziają się na różne tryby, np. zdarzenie A oznacza awarię X, zdarzenie B oznacza: sprawdź zdarzenie C .Jeżeli C jest prawdziwe, to również jest niepowodzenie X, ale jeśli nie, to jest to błąd Y. Chociaż zawsze mogę znormalizować je do X1 i X2, które są technicznie identyczne, ale różne z punktu widzenia drzewa). często dość głęboko zagnieżdżone, więc obawiam się, że prosta seria zagnieżdżonych funkcji if() szybko wymknie się spod kontroli. Teraz moje pytanie brzmi, jak przechowywać / napisać / zbudować to drzewo, aby można je było skompilować w coś, co maszyna może strawić, ale nadal można je utrzymywać dla programistów? Zauważ, że dotyczy to systemu wbudowanego, więc ciężkie rozwiązania, takie jak JBoss, nie pasują, chyba że pojawiają się tylko po stronie kompilatora, a ostateczny system uruchamia skompilowany zestaw reguł w czymś znacznie bardziej przyjaznym dla komputera. (system jest napisany w C++, w dużym stopniu wykorzystuje JSON i będzie działał na procesorze ARM9, jeśli to pomoże.) ![Próbka drzewa](http://i.stack.imgur.com /hw9Ur.png)


title: Czy przeciążenie jest przykładem zasady otwarte/zamknięte?

text: Wikipedia mówi, że > _"encje programowe (klasy, moduły, funkcje itp.) powinny być otwarte na > rozszerzenie, ale zamknięte na modyfikację"_ Słowo **funkcje** wpadło mi w oko i teraz zastanawiam się, czy możemy to założyć tworzenie przeciążenia dla metody można traktować jako przykład zasady Open/closed czy nie? Pozwólcie, że wyjaśnię przykład. Weź pod uwagę, że masz metodę w swojej warstwie usług, która jest używana w prawie 1000 miejscach. Metoda pobiera identyfikator użytkownika i określa, czy użytkownik jest adminem, czy nie: bool IsAdmin(userId) Teraz rozważ, że gdzieś trzeba określić, czy użytkownik jest adminem, czy nie, na podstawie nazwy użytkownika, a nie identyfikatora użytkownika. Jeśli zmienimy sygnaturę w/w metody, to złamaliśmy kod w 1000 miejscach (funkcje powinny być zamknięte na modyfikację). W ten sposób możemy utworzyć przeciążenie, aby uzyskać nazwę użytkownika, znaleźć identyfikator użytkownika na podstawie nazwy użytkownika i oryginalnej metody: public bool IsAdmin(string username) { int userId = UserManager.GetUser(username).Id; zwróć IsAdmin(identyfikator użytkownika); } W ten sposób rozszerzyliśmy naszą funkcję poprzez stworzenie dla niej przeciążenia (funkcje powinny być otwarte na rozszerzenie). Czy jest to przykład zasady otwartej/zamkniętej?


title: Przestałem kodować dla zabawy, czy to zły znak?

text: W pewnym momencie po prostu przestałem kodować dla zabawy. Kiedyś chodziłem do pracy, kończyłem swoje zadania, a po powrocie do domu szedłem i pisałem różne rzeczy dla zabawy. Jednak teraz po prostu idę do domu i staram się unikać komputera. Wolałbym czytać gazetę, oglądać telewizję, chodzić do baru itp. Czy to zły znak? Mam na myśli to, że nadal staram się być na bieżąco z najnowszymi trendami, wpadam na fora programistyczne/blogi/etc, ale nie powiedziałem: „Chcę się uczyć języka X – zastanawiam się, czy mógłbym w nim napisać aplikację Y”. stało się komuś innemu?


title: Czym jest słuchacz ładowania początkowego w kontekście frameworka Spring?

text: Studiuję framework Spring, w web.xml dodałem następujący, który jest słuchaczem ładowania początkowego. Czy ktoś może dać mi właściwe wyobrażenie o tym, czym jest słuchacz bootstrapowy? <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> Dokument można zobaczyć tutaj: ContextLoadListener > Odbiornik Bootstrap do uruchamiania i zamykania głównego katalogu Springa > WebApplicationContext. Po prostu deleguj do `ContextLoader`, a także do > `ContextCleanupListener`. >> Ten detektor powinien być zarejestrowany po `Log4jConfigListener` w web.xml, > jeśli ten ostatni jest używany. > > Od Spring 3.1, `ContextLoaderListener` obsługuje wstrzykiwanie kontekstu aplikacji > web root poprzez konstruktor `ContextLoaderListener(WebApplicationContext)` >, co pozwala na programową konfigurację w środowiskach Servlet 3.0+ >. Zobacz WebApplicationInitializer, aby zapoznać się z przykładami użycia...


title: Wybierasz między wydajnością a czytelnym/czystszym kodem?

text: Jeśli musisz zapłacić cenę za wydajność, aby kod był bardziej czytelny, wolisz to, czy zawsze wolisz wydajność?


title: Zakres sesji lub żądania danych konta

text: Mam aplikację internetową (opartą na przeglądarce). Na każdej stronie chcę mieć małą etykietę i link w rogu, który wyświetla nazwę użytkownika i inne informacje o koncie wraz z przyciskiem wylogowania. Informacje, które zostaną wyświetlone, są niezmienne. Czy powinienem przechowywać informacje o koncie w atrybutach sesji, gdy użytkownik się loguje i zapomina o tym, czy powinienem użyć filtra/interceptora i załadować go przy każdym żądaniu w atrybutach żądania?


title: Zgłaszanie wyjątku, jeśli zapytanie nie używa indeksu

text: Pracuję nad obszerną aplikacją webową, która została napisana przez kilku innych programistów i ciągle napotykam problemy z wydajnością spowodowane przez źle napisane zapytania SQL i zapytania, które nie używają indeksu. Pracuję nad rozwiązywaniem problemów, rejestrując, ile czasu zajmuje ukończenie każdego zapytania i czy używa indeksu. Zastanawiałem się, czy inni ludzie mieli wcześniej ten problem i co zrobili, aby zapobiec powtórzeniu się tego problemu. Moim początkowym pomysłem jest rzucenie wyjątku, jeśli jakiekolwiek zapytanie nie używa indeksu, więc należy się tym zająć w devel, ale nadal rejestrować duże/wolne zapytania, abyśmy mogli zobaczyć, gdzie jest spowolnienie w dłuższej perspektywie. **Aktualizacja 05.03.2012 11:56 EDT** Używamy MySQL, a mój plan BYŁ, aby uruchomić wyjaśnianie każdego zapytania po jego uruchomieniu w celu sprawdzenia indeksów.


title: Gdzie zdefiniować obiekty danych specyficzne dla widoku w Rails?

text: Tło: w naszej aplikacji jest kilka miejsc, w których chcemy wyświetlać w kalendarzu informacje dotyczące daty. Klejnot event_calendar wygląda ładnie i ma wiele recenzji, więc to jest to, czego zamierzam użyć. Jest jednak przeznaczony do pracy z modelem. Nie zamierzam aktualizować naszych istniejących modeli, aby spełniały jego potrzeby, więc stworzę klasę DTO i funkcję pomocniczą do konstruowania tablicy instancji z naszych istniejących modeli. Moje pytanie brzmi: gdzie powinna mieszkać ta klasa DTO? Wygląda na to, że powinien być zdefiniowany w `ViewHelper`, ale to naruszy DRY, gdy tylko użyję kalendarza dla dwóch modeli (uwaga: funkcje pomocnicze będą się różnić, to tylko klasa DTO pozostanie taka sama). Czy istnieje więc standardowe miejsce w drzewie katalogów Rails, w którym znajdują się klasy niezwiązane z modelami? A może jest na to lepszy/bardziej idiomatyczny sposób? Jedną z myśli, którą miałem, było sprawienie, aby moja funkcja pomocnicza udekorowała istniejące instancje modelu za pomocą metod, które event_calendar chce zobaczyć.


title: Jaka jest dokładna składnia inline?

text: ### PRZYPADEK 1 (Definicja i deklaracja w tym samym pliku źródłowym) Załóżmy, że zarówno mój prototyp, jak i definicja funkcji globalnej znajdują się w pliku .cpp. Gdzie mam napisać słowo kluczowe inline, aby kompilator wiedział? 1. W prototypie 2. W definicji 3. Oba ### PRZYPADEK 2 (Definicja i deklaracja w tym samym pliku nagłówkowym) Jeśli zadeklarowałem prototypy w pliku .h chcę, aby ta funkcja była inline w więcej niż jednym pliku .cpp używając go, to czy powinienem zdefiniować funkcję (która ma być wbudowana) w tym pliku .h i dołączyć ją do poszczególnych plików .cpp? Jeśli tak, to w takim przypadku gdzie należy użyć słowa kluczowego inline? ### PRZYPADEK 3 (Definicja w pliku nagłówkowym i deklaracja w pliku źródłowym) Jeśli prototyp znajduje się w pliku nagłówkowym, definicja w pliku źródłowym (w którym inne funkcje używają funkcji inline), gdzie należy użyć słowa kluczowego inline? 1. W deklaracji w pliku nagłówkowym 2. W definicji w pliku źródłowym 3. W obu


title: Przechowuj drzewo u najbliższych sąsiadów

text: Chciałbym znaleźć wydajną strukturę (szybkość i objętość) do przechowywania węzłów i ich sąsiedztwa. Moje dane wejściowe są zbudowane z żądeł w następującym formacie ./X/Y.log gdzie _X_ ∈ [0,359] i _Y_ ∈ [0,169] i każda para ( _X, Y_ ) definiuje współrzędne komórki na siatce rozmiar [170x360]. Chciałbym dowiedzieć się, które komórki sąsiadują (na górze, na dole, z prawej i lewej strony), maksymalnie 4 możliwości i zapisać te informacje (współrzędne i kierunek). Struktura, w której będą przechowywane informacje, nie powinna zawierać zduplikowanych informacji (np. komórka (50,50) sąsiaduje z komórką (51,50) od lewej strony, ale komórka (51,50) jest równie dobrze sąsiadująca z komórką (50,50) z prawej strony. Tylko jeden z tych polubień powinien być przechowywany). Dodatkowa informacja, ilość ciągów wejściowych (format _./X/Y.log_ ) to nie więcej niż 5% całkowitej ilości możliwych komórek (360*170 = 61200 możliwych komórek). Którą strukturę przechowywania powinienem zastosować do mojego problemu? (Kod zostałby napisany w C++)


title: Jak najlepiej zorganizować stronę Jekyll + Bootstrap + Git?

text: Tak więc po wielu, wielu latach budowania witryn od zera (i samodzielnego podnoszenia ciężarów) zanurzyłem palce w dwóch projektach, które istnieją od kilku lat, których unikałem: Bootstrap i Jekyll. Projekt był bardzo dostosowaną pracą, która wymagała ode mnie zagłębienia się w LESS, więc mam pliki źródłowe Bootstrap, zasoby źródłowe i katalog kompilacji w tym katalogu. Jest też strona Jekyll. Ma on swoją własną strukturę, dowiązuję symboliczne dowiązanie w katalogu kompilacji ładowania początkowego, a ostateczną zawartość (to, co faktycznie chcę obsłużyć) zakopuję w katalogu `_site`. Oto jak to wygląda: /.git/* /.gitignore /bootstrap/ /bootstrap/... ładowanie plików źródłowych ... /bootstrap/bootstrap/ # wynik kompilacji /jek/ /jek/... wszystkie pliki jekyll ... /jek/bootstrap/ # link symboliczny na ../bootstrap/bootstrap/ /jek/_site # rzeczy, które faktycznie chcę przesłać - ale tak naprawdę nie chcę w git W _my_ historii byłem albo radzenie sobie z układem projektu Django (co ma sens) lub układem statycznym. To, co mam tutaj, to dwa oddzielne systemy budowania i to doprowadza mnie do szału. Czy istnieje lepszy sposób na uporządkowanie wszystkich tych śmieci, czy w przypadku jego niepowodzenia, czy istnieje sposób, abym mógł umieścić dane wyjściowe ładowania początkowego bezpośrednio w katalogu jek? Jak radzisz sobie z takimi współzależnymi, statycznymi witrynami?


title: Czy istnieje standard kodów błędów?

text: Utworzyłem bramę, która odbiera POST z cUrl w jednym systemie, który jest dobrze sformatowanym ciągiem XML. Po przetworzeniu brama odsyła zwrotny XML odpowiedzi. Wszystkie pola w XML są wymagane i podczas gdy system wysyłający dane konstruuje sam XML, uruchamiam pewną walidację, aby upewnić się, że każda wartość przechowywana w klasie Request jest rzeczywiście. Jedną z rzeczy, które robi moja brama, jest to, że odpowiedź może również wskazywać na błąd i wysyła wiadomość i kod odpowiedzi, które są następnie umieszczane w systemie jako następująca wiadomość: > Podczas przetwarzania wystąpił nieznany błąd. Kod: # Wiadomość: ERROR_MESSAGE Oryginalny kod po prostu wysyła kod jako 0, jeśli nie było błędu lub 1, jeśli był. Zastanawiam się nad nadaniem Code innej wartości w zależności od błędu, ponieważ wyświetlanie kodu w komunikacie o błędzie jest trochę bezużyteczne, jeśli zawsze będzie to 1 (ponieważ nigdy nie zobaczysz 0). Zastanawiam się więc, czy istnieje standard tworzenia kodów błędów, szczególnie z PHP i XML.


title: Wdrożenie systemu opłat cyklicznych

text: Tworzę aplikację, która będzie zawierała listę członków, którzy nie wpłacili składki z poprzedniego miesiąca oraz osobną listę dla tych, którzy wnieśli składkę. Załóżmy więc, że członek, który będzie płacił składkę przez cały rok, co miesiąc i jeśli nie wpłacił składki za marzec 2013 r., to aplikacja powinna go wyróżnić jako niezapłaconego członka. Jaka byłaby najlepsza praktyka, aby to osiągnąć. Dodanie faktur opłat za cały rok już w bazie danych, gdy dodawany jest członek, a następnie przeglądaj jego płatności, aby sprawdzić, czy opłata jest uiszczona, czy nie, lub dodaj datę zatwierdzenia członka do każdej jego płatności, na przykład płatność dokonana w lutym 2013, wtedy członek jest ważny do 28.02.2013. Sprawdź czy dzisiejsza data jest >28.02.2013 to nie zapłacił..


title: anonimowa kasa

text: Pracuję nad rozwiązaniem e-commerce, w którym muszę obsłużyć kasę w oparciu o anonimowego klienta i na chwilę obecną nie jestem w stanie dobrze przemyśleć, jak najlepiej to zaimplementować. Nasz Koszyk jest zapisywany w bazie danych, a każda aktualizacja/edycja w Koszyku jest aktualizowana w bazie danych. Teraz muszę zadbać o utworzenie anonimowego klienta, a następnie przypisać ten koszyk do tego klienta, aby dodać do koszyka i dobrze kasę można było powiązać z tym klientem. Czy ktoś może mi zasugerować, jaka może być właściwa droga do tego? 1. Czy powinienem utworzyć jednego anonimowego użytkownika w bazie danych i używać go za każdym razem, gdy tworzona jest prośba o nowego klienta (anonimowego ). 2. Umieść tego użytkownika w bieżącej sesji użytkownika. 3. Wykonaj dowolną operację na koszyku w odniesieniu do bieżącej sesji


title: Jak zaktualizować formularz interfejsu użytkownika poprzez aktualizację bazy danych?

text: Mam aplikację klient-serwer. Załóżmy, że pracuję jako kierownik działu pomocy technicznej, rozwiązując zgłoszenia klientów. My (nasz zespół wsparcia) mamy dwa zgłoszenia do pracy. Bilet 1: Klient "Wątroba" podniósł bilet, aby zaktualizować swój numer telefonu. Zgłoszenie 2: Ten sam klient "Wątroba" podniósł drugi bilet, aby zaktualizować swój identyfikator e-mail. Pracuję nad zgłoszeniem nr 1: Otwarta aplikacja, klikam przycisk edytuj dane klienta, wpisuję nowy numer telefonu. Nie zapisałem formularza (formularz edycji). W międzyczasie wyjechałem do CUPPA. Mój kolega patrzy na bilet 2: Zmodyfikował informacje o kliencie i zaktualizował o nowy identyfikator e-mail: jest utrwalony w bazie danych. Kiedy wrócę i zapiszę swój bilet z aktualizacją numeru telefonu, nadpisze to jego zmiany, tj. Zmiana jego identyfikatora e-mail zostanie utracona lub nie zostanie zaktualizowana dla tego klienta „Wątroba”. Czy jest sposób, aby po powrocie do pracy/strony po przerwie CUPPA zobaczyć identyfikator e-mail ze zaktualizowaną wartością? Jak temu zapobiec? Jakie jest podejście? Możliwe pomysły projektowe? Jak zapewnić, że nie nastąpi utrata danych?


title: Wersjonowanie semantyczne podczas naprawiania ważnego błędu

text: Obecnie zarządzam biblioteką, która ma wiele zastosowań publicznych i miałem pytanie dotyczące wersjonowania semantycznego. Chcę dokonać refaktoryzacji jednej dość ważnej części biblioteki, która jest zaimplementowana niepoprawnie - i zawsze była zaimplementowana niepoprawnie. Ale zrobienie tego oznaczałoby zmiany w publicznym API, co jest poważną decyzją. Zmiana, którą chcę wprowadzić, obraca się wokół sposobu używania iteratorów. Obecnie użytkownicy muszą to zrobić: while ($element = $iterator->next()) { // ... } Co jest niepoprawne, przynajmniej w natywnym interfejsie iteratora PHP. Chcę zastąpić tym: while ($iterator->valid()) { $element = $iterator->current(); // ... $iterator->next(); } co jest analogiczne do: foreach ($iterator jako $element) { // ... } Jeśli spojrzysz na przewodnik Toma dotyczący wersjonowania semantycznego, wyraźnie stwierdza on, że wszelkie zmiany w publicznym API (tj. te, które _nie_ są kompatybilne wstecz) , powinno uzasadniać wydanie główne. Zatem biblioteka przeskoczyłaby z 1.7.3 do 2.0.0, co dla mnie jest o krok za daleko. Mówimy tylko o naprawieniu jednej funkcji. Mam plany, aby ostatecznie wydać 2.0.0, ale pomyślałem, że to było, gdy całkowicie przepisałeś bibliotekę i zaimplementowałeś _liczne_ zmiany publicznego API. Czy wprowadzenie tej refaktoryzacji gwarantuje wydanie głównej wersji? Naprawdę nie widzę, jak to działa - czuję się bardziej komfortowo, wypuszczając go jako 1.8.0 lub 1.7.4. Czy ktoś ma jakieś rady?


title: Generowanie każdej kombinacji 32-znakowego ciągu alfanumerycznego?

text: Czy można wygenerować każdą możliwą kombinację 32-znakowego ciągu alfanumerycznego? Jeśli tak, jak długo zajęłoby to dzisiejszym szybkim komputerom? Mój wykładowca na uniwersytecie powiedział, że to niemożliwe, a ja pomyślałem, że „nie ma rzeczy niemożliwych”. Jakieś pomysły, jak długo to potrwa i jak to zrobić? W tej chwili używamy Javy. Chciałbym myśleć, że mogę mu udowodnić, że się myli.


title: Czy SQLite to rozsądna opcja do rejestrowania danych?

text: Próbuję skonfigurować małą aplikację do rejestrowania danych pod Linuksem. Dane docierają przez port szeregowy, a stamtąd powinny być przepompowane do rejestracji i wyświetlania graficznego. Funkcja rejestrowania jest dostępna do celów inicjalizacji funkcji tworzenia wykresów po ponownym uruchomieniu. Dane docierają co sekundę i składają się z 1 liczby z dokładnością do 5 cyfr dziesiętnych i powinny być rejestrowane przez 2 lata. Moje obecne wolne miejsce to około 15 GB. Językami projektu do tej pory są bash i python. Moim celem jest stworzenie prostego, ale solidnego (może kilka kopii zapasowych na żywo na dysku flash?) Systemu rejestrowania, który jest również szybki i łatwy do odczytu z Pythona i zapisu z basha. Czy SQLite jest do tego odpowiedni (nigdy go nie używałem)? Czy plik tekstowy w moim katalogu _home_ jest do tego odpowiedni?


title: „<” kontra „!=” jako warunek w pętli „for”?

text: Załóżmy, że masz następującą pętlę for: for (int i = 0; i < 10; ++i) { // ... }, którą można zwykle zapisać jako: for (int i = 0; i != 10; ++i) { // ... } Końcowe wyniki są takie same, więc czy istnieją jakieś rzeczywiste argumenty za używaniem jednego z drugim? Osobiście używam tego pierwszego w przypadku, gdy `i` z jakiegoś powodu zwariuje i pominie wartość 10. * Przepraszam za używanie liczb magicznych, ale to tylko przykład.


title: Jak ocenić, czy orkiestracja jest odpowiednim wzorcem projektowym dla danego problemu?

text: Powiedzmy, że robisz przegląd kodu i napotykasz wzorzec orkiestracji: class OrchestrationClass { private Konfiguracja _configuration; prywatny DataStore1 _dataStore1; private EfficientComputationService _service; prywatny ResultPrettifier _formater; public DoSomething () { with (data = _dataStore1.LoadForConfiguration(_configuration)) { return _formatter.PrettyPrint(_service.Process(data)); } } } W jakich okolicznościach jest to uważane za prawidłowy wzorzec/antywzorzec (i jak należy oczyścić/refaktoryzację antywzorca)? * * * **Dla kontekstu:** Ostatnio pojawiło się to w przeglądzie kodu i kilka osób wspomniało o wzorcu/anty-wzorcu. Przeszukiwanie literatury o standardowych wzorcach, pokrewna wyszukiwarka Google i przeglądanie postów na blogach / wiki doprowadziły do pośrednich wzmianek. Co prowadzi mnie do wniosku, że ten wzór/antywzorzec nie został jeszcze formalnie potraktowany (lub, jeśli tak, to nie jest jeszcze dostępny online). Stąd - pytanie jest tutaj, gdzie ktoś bardziej doświadczony lub bardziej oczytany może być w stanie odpowiedzieć (lub podać referencje)


title: Jaki obraz powinien być użyty na stronie internetowej?

text: Mam witrynę, która będzie zawierała wiele obrazów o dużym rozmiarze. Jaki jest najlepszy format, który powinienem wybrać do wyświetlania tych obrazów? Potrzebuję strony do szybkiego ładowania. Jestem pomieszany z różnymi formatami obrazów, takimi jak jpeg, png, gif, bmp itp. Którego użyć w tym przypadku i dlaczego?


title: Jakiej konwencji nazewnictwa użyć dla parametrów funkcji języka C#

text: Zdarzają się sytuacje, gdy nazwa przekazana w Parametrze będzie Cast do nowego typu, ale nazwa obiektu Passed powinna pozostać podobna. W przypadku Class Attributes możemy użyć tego operatora, ale co ze zmienną lokalną w funkcjach. Jaka konwencja kodowania jest szeroko stosowana. przykład, void MyFunc(BaseClass myPara) { DerivedClass _mypara = (BaseClass)myPara; } lub przeciwnie void MyFunc(BaseClass _myPara) { DerivedClass mypara = (BaseClass)_myPara; } lub jakakolwiek inna konwencja


title: Użyj else po wyjątku (lub nie)

text: Rozważ ten fragment kodu: if (x == 1) { throw "no dobrze; przerywanie" ; } [... więcej kodu...] Rozważmy teraz następujący kod: if (x == 1) { throw "no good; aborting" ; } else { [... more code ...] } Te dwa przypadki działają dokładnie w ten sam sposób. Pierwszy przypadek ma tę zaletę, że nie musisz „ukrywać” reszty kodu w `innym`. Druga ma tę zaletę, że podąża za praktyką wyraźnego posiadania „innego” dla każdego „jeśli”. Czy ktoś może przedstawić jakieś solidne argumenty na korzyść jednego z drugim?


title: Dlaczego polecenia Windows dopuszczają przełączniki `-` i `/`?

text: > wyłączenie /? > Użycie: zamknij [/i | /l | /s | /r | /g | /a | /p | /h | /e | /o] [/hybryd] [/f] Polecenie `cmd.exe` `shutdown` w systemie Windows dokumentuje tylko przełączniki ukośnika `/`, ale akceptuje również przełączniki `-` w postaci myślnika. Na przykład oba działają: shutdown /s /t 0 shutdown -s -t 0 Kiedy to zostało dodane i dlaczego?


title: Jak zaimplementować klasy, które powinny być ładowane raz?

text: Buduję trochę frameworka, obecnie to tylko dla zabawy. Zastanawiam się, jak zaimplementować klasy, które powinny być tworzone przez framework i przekazywane do kontrolera do użycia? Na przykład: mam klasę "input", która zawiera funkcje, które pobierają dane POST i GET i filtrują je. Klasa jest również używana przez framework do routingu i podobnych rzeczy. Czy powinienem uczynić te metody statycznymi? Czy powinienem używać wzoru singletona? A może powinienem zrobić coś takiego jak Codeigniter - loader, który przechowuje instancje wszystkich instancji klas?


title: Dlaczego aplikacja Mailbox potrzebuje własnego zaplecza?

text: Koduję tylko w Objective-C i nie mam doświadczenia z kodowaniem backendowym, tylko rozumiem na wysokim poziomie. Rozumiem, dlaczego wiele projektów programistycznych wymaga serwerów zaplecza, ale nie jestem do końca jasny z perspektywy wysokiego poziomu, dlaczego Mailbox potrzebuje własnych. Otrzymują swoje dane z interfejsu API Gmaila. Rozumiem, że większość aplikacji klienckich na iOS otrzymuje dane z zaplecza z publicznego interfejsu API (takiego jak Gmail), pobiera je w aplikacji na iOS i wyświetla je w swojej aplikacji. Dlatego nie potrzebują własnych serwerów, aby otrzymywać odpowiednie dane, aby pokazać je swoim użytkownikom. Moim jedynym wyjaśnieniem jest to, że Mailbox działa zgodnie z tą logiką: dane Gmaila --> aplikacja Mailbox ORAZ serwery --> użytkownicy wchodzą w interakcję z aplikacją --> zapisz zmiany na własnych serwerach i Google za pośrednictwem interfejsu API. Ostatnia część dla mnie oznaczałaby, że zasadniczo przechowuj dane wszystkich zarchiwizowanych, opóźnionych, usuniętych i wymienionych wiadomości e-mail na własnych serwerach, a nie na serwerach Google. Czy moje rozumienie jest prawidłowe? Dziękuję Ci


title: szybsza metoda testowania uwsgi + nginx

text: Obecnie szukam sposobu na przetestowanie wielu żądań w jak najkrótszym czasie w mojej aplikacji internetowej. Moim obecnym obejściem jest po prostu zaimportowanie modułów, które chcę przetestować, do innego pliku Pythona i wrzucenie żądań bezpośrednio do tych funkcji, ale wolałbym, aby przechodził przez framework serwera WWW, jak to zwykle robi na żywo. Mój problem z tym, że przechodzenie przez wszystkie te żądania za pomocą protokołu HTTP trwa zbyt długo, jak na mój gust. Używam uwsgi za nginx, czy jest jakiś sposób, aby po prostu wysłać żądanie bezpośrednio przez gniazdo dla nginx? A może są jakieś inne metody, które mogłyby działać i nadal być stosunkowo szybkie podczas przetwarzania wielu żądań testowych?


title: Dlaczego nagłówki http nie zawierają rozdzielczości urządzenia, gęstości pikseli itp.?

text: Obecnie pracuję nad responsywną stroną internetową z zapytaniami o media CSS. Byłoby znacznie łatwiej, gdyby serwer zwracał inny html/css dla każdego widoku. Zastanawiałem się, dlaczego klient nie mógł dołączyć informacji o swoim oknie roboczym podczas żądania pliku html. To zachowanie jest już powszechne w przypadku zwracania witryn w poprawnym języku przy użyciu nagłówka „Accept-Language”.


Opracowujemy produkt o zamkniętym kodzie źródłowym, a klienci chcą dodać dwie części: * Kalendarz * Kontakty Tine 2.0 to zapewni, ale chcemy używać go jako biblioteki. Ponieważ Tine 2.0 korzysta z licencji AGPL, musimy otworzyć nasz kod, jeśli użyjemy jakiegoś rodzaju linkowania. Jak możemy używać Tine 2.0 w naszym oprogramowaniu o zamkniętym kodzie źródłowym bez naruszania AGPL? Rozwiązanie, które mam na myśli, jest takie: nasz produkt i Tine 2.0 mogą komunikować się przez bazę danych. Wszystkie widoki HTML są wykonywane przez nasz kod, a synchronizacja mobilna jest obsługiwana przez tine20. (Chciałbym otworzyć nasz produkt, ale mój szef nie).


title: Usługi sieciowe i usługi komputerowe umożliwiające dostęp do funkcji systemowych niskiego poziomu

text: Myślę więc, że jestem we właściwym miejscu, aby zadać to pytanie. Jest dość koncepcyjny. Kocham tworzenie stron internetowych, pracuję w ASP.NET MVC 3/4/5 C# i tworzyłem standardowe aplikacje branżowe, takie jak CRM i Test Case Documenting. Jestem bardzo świadomy ograniczonych możliwości aplikacji internetowych nad aplikacjami komputerowymi. Aplikacje desktopowe mogą oczywiście wywoływać operacje na poziomie systemu, takie jak odczytywanie skanerów kodów kreskowych (lewe pole, które znam). Czuję, że jest to możliwe dzięki aplikacjom webowym dzięki wykorzystaniu HTML 5 WebSockets i Web Services. Czy można wyodrębnić całą architekturę na poziomie domeny z aplikacji ASP.NET MVC do usługi sieci Web i efektywnie obsługiwać bazę danych przez usługę sieci Web. Czy jest więc możliwe, poprzez użycie usługi pulpitu, połączenie się z tą usługą sieciową, aby skorzystać z możliwości usługi pulpitu do wywoływania operacji na poziomie systemu? Teraz, początkowo, Desktop Service będzie uruchamiany na serwerze sieciowym i właśnie tego na razie chcę. Na dłuższą metę ta technologia będzie działać tylko w środowisku intranetowym. Naprawdę nie jestem zainteresowany zakresem Internetu i nic z tego, co zostało powiedziane, nie odnosi się do zakresu Internetu.


title: Czy to prawda, że kiedy nauczysz się jednego języka, reszta przychodzi łatwo?

text: Ktoś mi powiedział, że powinienem zacząć od Pythona, a potem, gdy już będę biegle w Pythonie, reszta języków zostanie szybko nauczona. Czy jest w tym jakaś prawda?


title: Ekonomia kariery w bioinformatyce

text: Jestem programistą szukającym nowych wyzwań. Dlatego poważnie rozważam podjęcie studiów w kierunku magistra bioinformatyki (mam tytuł licencjata z Comp Sci). Zrobiłem obszerną lekturę w terenie i uważam to za fascynujące. W idealnym świecie byłby to jedyny czynnik. Jednak jestem trochę zaniepokojony ekonomią takiego posunięcia. Z rozmów z ludźmi związanymi z dyplomem wygląda na to, że pensje w Bioinformatyce są o połowę niższe niż zarobki doświadczonego programisty w branży. Oznaczałoby to zmniejszenie o połowę mojej pensji i wszystkie zmiany stylu życia, które się z tym wiążą. Z mojej lektury wynika, że większość bioinformatyki jest wykonywana w akademii lub w laboratoriach badawczych wspieranych przez rząd / granty. Czy bioinformatycy mają duże możliwości pracy w przemyśle (farmacja, biotechnologia)? Czy płace w przemyśle są wyższe? Czy te możliwości rosną? Ludzie, z którymi rozmawiałem, zacytowali 50 000 $ - 60 000 $ za stanowiska na poziomie podstawowym (magisterskim) (w Australii). Pójście znacznie wyżej wydaje się wymagać doktoratu lub doktora habilitowanego. Czy to brzmi trafnie? Jaki jest trend płacowy w tej dziedzinie? Wygląda na to, że prawie całe oprogramowanie wykorzystywane w bioinformatyce jest oprogramowaniem typu open source. Zgadzam się, że jest to doskonałe do badań, ale czy jest to wykluczenie oprogramowania komercyjnego? Czy istnieje możliwość zbudowania komercyjnego oprogramowania dla bioinformatyki? Wreszcie, jakie są możliwości dla bioinformatyków, aby zarobić porównywalne dochody z programistami pracującymi w przemyśle? Dziękuję.


Jak projekty open source zachowują jakość? Co sprawia, że projekty od osób o stosunkowo niewielkim doświadczeniu programistycznym sprawdzają kody słabej jakości?


title: Nauka Haskella i C# jednocześnie

text: Jestem programistą, który jest jeszcze nastolatkiem. Od kilku lat zajmuję się programowaniem, zacząłem od Rubiego, a później przeszedłem na Pythona ze względu na ogromną ilość zasobów edukacyjnych. Nigdy tak naprawdę nie zbudowałem niczego wartościowego w Pythonie, ale czuję, że nauczyłem się sporej ilości podstaw programowania dzięki **Naucz się Pythona w trudny sposób** Zeda Shawa.** Przez ostatnie kilka miesięcy szukałem języków do nauki, ponieważ Brakuje mi zainteresowania Pythonem. W końcu zdecydowałem, że chcę się uczyć zarówno C#, jak i Haskella jako moich następnych języków. Mój brat, inżynier oprogramowania, zaleca, żebym jeszcze nie uczyła się Haskella, ponieważ uważa, że wpadnę na niektóre związane z nim pomysły, takie jak bycie czystym. Pierwotnie po prostu utknąłbym z nauką C#, ponieważ mam kilka książek na ten temat i jego frameworki, takie jak XNA, ale Haskell ciągle mnie do tego przyciąga. Mam też kopię **Naucz się Haskella dla wielkiego dobra!**, która wydaje się być świetnym początkiem w Haskell. Czuję, że mógłbym uczyć się C# razem z Haskellem w tym samym czasie, chociaż może mi to zająć więcej czasu. Jednym z moich zmartwień, że nie nauczę się szybko C#, jest to, że przy szybkim tempie rozwoju C#/.NET/XNA książki, które posiadam, staną się nieaktualne do czasu, gdy będę naprawdę gotowy do ich używania. (Nie mam żadnych bezpośrednich informacji o rozpoczęciu C#, tylko C# w Depth, kilka ASP.NET i książkę XNA 4.0.) Zauważ też, że mam dostęp do Visual Studio Ultimate, który wydaje się, że może być przydatny w nauce jak programować, jednocześnie uzyskując dostęp do Intellisense i innych funkcji VS. Z drugiej strony Haskell wydaje się niezwykle kuszący, ponieważ naprawdę interesują mnie niektóre rzeczy, w których jest najlepszy, takie jak algorytmy/problemy w witrynach takich jak Project Euler. Korzyści płynące z nauki dwóch bardzo różnych języków paradygmatycznych na początku mojej kariery programistycznej wydają się bardzo korzystne. Moje pytanie brzmi, czy nie byłoby lepiej (biorąc pod uwagę moją sytuację) nauczyć się C# i napisać w nim kilka nietrywialnych programów, coś, czego jeszcze naprawdę nie zrobiłem, a następnie spróbować nauczyć się Haskella i napisać w nim kilka programów? A może mógłbym nauczyć się obu w tym samym czasie i nadal być w nich płynnie i móc pisać projekty w obu z nich? **Edytuj:** Wybrałem odpowiedź tdamers jako odpowiedź na pytania, ponieważ rozpoznał obie opcje i podał powody, dla których każda z nich może działać. Pod pewnymi względami zgadzam się z Sayemem, że generalnie najlepiej jest nauczyć się tylko jednego języka i go opanować. Jednak mam wiele lat, zanim wejdę na rynek pracy jako programista, a ponieważ jest to jedna z rzeczy, które kocham najbardziej, czuję, że poświęcenie czasu na naukę obu i opanowanie ich nie będzie dużym ciężarem jednocześnie. To powiedziawszy, nadal mogę zdecydować się na skupienie się głównie na jednym języku i uczenie się drugiego z boku. **Edytuj 2:** Postanowiłem uczyć się jednocześnie C# i Haskella. Będę korzystał z zasobów internetowych wraz z kilkoma posiadanymi książkami. Poniżej znajduje się lista zasobów, z których będę korzystać dla każdego języka. **C# -** * _**Programming C# 4.0_** \- Ian Griffiths, Matthew Adams i Jesse Liberty * _**C# in Depth_** \- Jon Skeet * **Framework Specific Books** * _ **XNA Game Studio 4.0 Programming_** \- Tom Miller & Dean Johnson **Haskell -** * _**Naucz się Haskella dla wielkiego dobra_** \- Miran Lipovaca (dostępny również bezpłatnie online.) * _** Yet Another Haskell Tutorial_** \- Hal Daume (wersja Wiki można znaleźć tutaj.) * _**Real World Haskell_** \- Bryan O'Sullivan, John Goerzen i Don Stewart (dostępne online tutaj.)


title: Dystrybucja Linuksa do wsparcia rozwoju oprogramowania?

text: Spędziłem zbyt dużo czasu na konfiguracji i utrzymaniu serwera deweloperskiego, który zawiera następujące narzędzia: * Wspólne usługi, takie jak SSH, BIND, rsync, itp. * Subversion, Git. * Serwer Apache, na którym działają CGit, Trac, Webmin, phpmyadmin, phppgadmin, itp. * Jetty, na którym działają Archiva i Hudson. * Bugzilla. * Serwer PostgresSQL, serwer MySQL. Stworzyłem wiele pakietów Debiana, takich jak `my-trac-utils`, `my-bugzilla-utils`, `my-bind9-utils`, `my-mysql-utils` itd. wygodny. Jednak nadal czuję, że potrzebuję o wiele więcej narzędzi. Dużo czasu poświęciłem też na opiekę nad tymi pakietami. Myślę, że może wielu programistów robi to samo. Ponieważ narzędzia takie jak subversion, git, trac są dziś tak powszechne. Nie jest trudno zainstalować i skonfigurować każdy z nich, ale zainstalowanie ich wszystkich zajęło dużo czasu. A ich utrzymanie jest czasochłonne. Podobnie jak tworzenie kopii zapasowych danych, sporządzanie wykresów użycia i generowanie raportów internetowych. (na przykład gitstat) Więc chciałbym usłyszeć, czy istnieje jakaś wstępnie skonfigurowana dystrybucja na potrzeby serwera deweloperskiego, np. coś takiego jak „BackTrack” dla hakerów?


title: Jak pojawiły się „nienormalne” opcje w poleceniach powłoki?

text: Te opcje, które mnie zaciemniają, to `ps aux`, `route -ee`, `gcc -fPIC xxx`, `find . -nazwa xxx` i tak dalej. Powyższe przykłady nie są wyczerpujące. To znaczy nie sądzę, że funkcja obsługi argumentów, taka jak getopt lub getopt_long, mogłaby obsłużyć wszystkie „dziwne” opcje. Z drugiej strony te sposoby obsługi nie są intuicyjne. Dlaczego programiści GNU lub programiści Unix/BSD kodują w ten sposób?


title: Jak należy migrować schemat bazy danych?

text: Używam kilku niezależnych programistów do tworzenia aplikacji internetowej. Jesteśmy na wczesnym etapie rozwoju, co oznacza, że wprowadzamy wiele zmian w naszym schemacie bazy danych. Mamy jedną bazę testową i jedną produkcyjną, mamy też replikę bazy danych live, która co noc dostaje klon bazy danych live (głównie w celu ułatwienia odtworzenia błędów znalezionych w aplikacji webowej live). wielu freelancerów, których nie znam, często nie ufam ich umiejętnościom bazodanowym i nie rozumieją najważniejszego znaczenia danych w naszej żywej bazie danych.Moje pytanie, jaki proces poleciłbyś po ustaleniu przez freelancera konieczność dokonania zmiany w bazie danych. Obecnie zatwierdzą zmianę w naszym schemacie bazy danych wraz ze swoim żądaniem ściągnięcia (na GitHubie), więc mogę przejrzeć proponowane przez nich zmiany w bazie danych. Mogą również zastosować zmiany w naszej aktywnej bazie danych .Moje pytanie w takim razie jak powinienem przenieść dane live do nowego schematu.Myślałem o poproszeniu dewelopera łatki o stworzenie również instrukcji alter table, którą uruchomiłbym na żywej bazie danych, ale nie ufam, że będzie wystarczająco ostrożny. Wolę, aby taka migracja była automatyczna (przynajmniej w większości przypadków), aby móc wdrażać ją na co dzień, ale nie wiem, czy to w ogóle realistyczne. Potrzebuję również procesu, któremu tak bardzo ufam, że nie muszę wykonywać żadnych testów w systemie na żywo, jeśli przetestowałem pull request w naszym systemie testowym (pracującym z naszą testową bazą danych). Jak to zrobić?


title: Licencja na oprogramowanie komercyjne z klauzulą bezpłatnej aktualizacji

text: Jeśli sprzedaję oprogramowanie komercyjnie i oferuję użytkownikom bezpłatne uaktualnienie przez 12 miesięcy od zakupu, czy mogę zmusić ich do wyrażenia zgody na nową licencję po pobraniu uaktualnienia? Co powinna zawierać pierwotna licencja, aby to określać? A jeśli mogę to zrobić, to czy nie byłoby możliwe dodanie nowej licencji, że nie są już uprawnieni do bezpłatnych aktualizacji _(będąc tutaj adwokatem diabła)_?


title: Konstruktorzy, ignoruj argumenty

text: Czy możliwe jest posiadanie w klasie konstruktora, w którym można ignorować pewne argumenty/parametry? Na przykład mam tego konstruktora Car(kolor, marka, model, koła, typ, drzwi) Czy mogę wywołać ten konstruktor i nie dołączyć parametru typu?


title: Rozwój iPhone'a a Windows Phone

text: Jestem studentką informatyki pracującą nad niektórymi grami mobilnymi. Jednak jestem całkowicie rozdarty i wciąż zastanawiam się, czy uczyć się programowania Windows Phone, czy iPhone'a. Uwielbiam programować na Windows Phone, ponieważ C# i XNA to świetne narzędzia. Jest jednak niesprawdzony na rynku i ma wielokrotnie mniejszy udział w rynku niż iPhone. Jeśli masz doświadczenie w jednym lub obu, chciałbym usłyszeć, co masz do powiedzenia. Przydałoby się również usłyszeć, co myślisz o perspektywach nauki C#/celu C w kontekście perspektyw zawodowych, ponieważ jestem studentem i to jest ważne. Kilka rzeczy, o których należy pamiętać: Posiadam i kocham iPhone'a Rozumiem zarządzanie pamięcią Chcę rozwijać najlepsze możliwe praktyki programistyczne (słyszałem, że ponieważ C# tak wiele kryje, można rozwinąć złe nawyki) EDIT: Ponieważ niektórzy pytali . To wyłącznie dla mojej korzyści, a nie dla klasy. Mam czas na spędzenie tego lata na rozwijaniu swoich umiejętności i chcę to jak najlepiej wykorzystać. Mam kilka pomysłów na gry, którymi się bawiłem, ale przede wszystkim chcę rozwijać dobre praktyki.


title: Czy Silverlight UserControl jest uważany za widok?

text: Do tej pory całkiem dobrze wdrażałem MVVM w mojej aplikacji Silverlight, miałem tylko jedno pytanie. Mam kilka utworzonych przeze mnie kontrolek użytkownika i zastanawiałem się, czy należy je umieścić w folderze Widoki, czy w osobnym folderze o nazwie UserControls. Czy kontrolka użytkownika jest uważana za widok?


title: Programowanie czatbota - rozumienie języka

text: Mam nadzieję, że na to pytanie można odpowiedzieć. Pozwolę sobie podać kontekst: jestem studentem psychologii i programistą. Zajmę się stworzeniem sztucznej inteligencji w postaci czatbota. Rozglądałem się po sieci i czytałem o projektach takich jak Eliza, który był pierwszym prostym programem do psychoterapii, który teraz został napisany w javascript (abyś mógł zobaczyć, jakie to było proste). **Chcę stworzyć chatterbota, który będzie potrafił rozmawiać** i który zrozumie semantycznie i gramatycznie zdanie, w celu wzajemnej komunikacji, a nie tylko uzyskania odpowiedzi. Interesują mnie sposoby nauki programowania z "językiem". Wiem, że to złożone pytanie, więc odpowiedź też będzie prawdopodobnie złożona. Jakimi językami programowania/frameworkami powinienem się zająć, chcąc przeanalizować semantykę. Znam znakomity projekt Wolfram Alpha, który ma API. Ale nie chcę tworzyć sztucznej inteligencji, która może odpowiedzieć na każde przypadkowe pytanie. Parafrazując: jakie frameworki/języki programowania są odpowiednie do pracy z dekonstrukcją jednostek językowych i rozumieniem języka w celu konwersacji? Czy znasz również jakieś projekty, które je wdrażają?


title: Stare programowanie BASIC

text: Próbuję zrozumieć przedstawiony kod „spaghetti” w BASIC (starej szkole), ale brakuje mi wiedzy. Wynik powinien ujawnić zestaw współrzędnych do wykorzystania w moim następnym zadaniu. Czy jest ktoś z odpowiednimi umiejętnościami, który może mi pomóc? A może skieruj mnie na stronę testową online, gdzie sam mogę wprowadzić dane. 01 GOTO 50 02 B$="program " 03 C$=A$+B$ 04 DRUKUJ C$ 05 ZEGAR Z RANDOMIZACJĄ 06 R%=1 08 R%=R%+INT(RND*10) 10 REM 12 GOTO 860 14 A$="losowy " 16 B$="liczba" 18 C$=A$+B$ 20 PRINT C$ 22 GOTO 27 24 REM 26 REM 27 PRINT R% 28 GOTO 212 30 REM 50 A$="To " 60 GOTO 02 210 REM 212 A$="i kończy " 214 B$=":-) !" 216 C$=A$+B$ 218 DRUKUJ 220 C$ KONIEC 850 REM 860 A$="tylko " 870 B$="drukuje" 880 C$=A$+B890 DRUKUJ 900 C$ GOTO 14


title: Jakiego wzorca użyć z typowym formularzem internetowym?

text: Piszę prostą aplikację ASP.NET Web Forms. Chcę ulepszyć kod poprzez zaimplementowanie dowolnego wzorca projektowego, dzięki któremu uzyskuje się abstrakcję i zwiększa łatwość zarządzania i zrozumiałość. Jaki wzór jest zalecany? Podaj również linki do przykładowych aplikacji.


title: c++ web z nginx - Czy muszę się martwić o bezpieczeństwo wątków?

text: Obecnie rozwijam swoją stronę internetową w c++. Wiem, że nginx obsługuje połączenia wielowątkowe, aby zapewnić wysoką wydajność. I nie każdy kod C++ jest bezpieczny dla wątków. * Jaki jest związek między wielowątkowością nginx a wielowątkowością aplikacji c++? * Czy muszę się tym martwić? * Co powinienem zrobić, aby uniknąć ewentualnych problemów?


title: Czy moglibyśmy ustalać priorytety tylko względem siebie zamiast stałych liczb?

text: AFAIK najniższy priorytet ma najwyższy numer w harmonogramie iw moim systemie wszystkie priorytety muszą być różne. Ale czy inne polityki nie są do pomyślenia? Na przykład, co powiesz na politykę, w której priorytety nie są liczbami, ale mówią, że priorytet zadania byłby zdefiniowany tylko w kategoriach priorytetu innego zadania, a to inne zadanie będzie miało najbliższy priorytet zadaniu, którego priorytet ustalamy. Wtedy nigdy nie używalibyśmy rzeczywistych liczb jako priorytetów, ale zachowalibyśmy strukturę danych sortującą zadania według priorytetów, a gdy zadanie pojawia się jako nowe lub ma przypisany inny priorytet, ta struktura jest ponownie równoważona. Czy ten mechanizm priorytetów byłby wykonalny, czy nie zgadzasz się, że to działający pomysł?


title: Zrozumienie struktur blokujących i nieblokujących

text: Czy ktoś mógłby mi pomóc zrozumieć, jaka jest różnica między tymi dwoma, o ile rozumiem, gdy żądanie dociera do frameworka blokującego, tworzy nowy wątek dla tego żądania i przetwarza je, jeśli drugie żądanie dotrze do serwera, zanim pierwsze zakończy jego wykonanie stworzy kolejny wątek. Teraz dla nieblokującego serwera, gdy jedno żądanie dociera do serwera WWW, nie tworzy wątku ale będzie czekał na zakończenie żądania i w przypadku gdy inne żądanie nadejdzie do frameworka przed zakończeniem jego wykonywania nie będzie w stanie przetworzyćgo przed nim zwraca wynik pierwszego żądania. Czy dobrze to zrozumiałem? Innym pytaniem, które mam, jest to, co dokładnie dzieje się z drugim żądaniem w nieblokującym frameworku, czy przeglądarka po prostu czeka na odpowiedź serwera, aż żądanie wygaśnie lub wydarzy się coś innego? Jeszcze inne pytanie brzmi: dlaczego aplikacje internetowe budowane z nieblokującymi serwerami są ogólnie uważane za szybsze (czy to tylko z powodu czasu spędzonego na planowaniu wątków, czy czegoś innego?) I wreszcie, jeśli nieblokujące frameworki mogą przetwarzać jedno żądanie na raz, w jaki sposób aplikacje webowe zbudowane na frameworkach nieblokujących mogą przetwarzać więcej żądań niż te zbudowane na frameworkach blokujących (zakładając, że powyższe stwierdzenie jest poprawne). Czy to oznacza, że dla każdej instancji frameworka blokującego na naszym serwerze faktycznie wdrażalibyśmy wiele instancji frameworka nieblokującego?


title: Jaki jest formalnie stan programu w Scheme?

text: Myślę, że mniej więcej zrozumiałem, jak wygląda przeanalizowany program Scheme (drzewo binarne z wartościami atomowymi na liściach, jeśli dobrze zrozumiałem). Czy ktoś może mi zdefiniować lub podać odniesienie, czym jest _stan_ (lub _obliczenie_) programu Scheme? Czy to tylko bieżące powiązanie plus pozycja lub stos pozycji w drzewie składni? (W takim przypadku byłbym wdzięczny za odniesienie do formalnej definicji wiązania Schematu :).) Czy jest jakiś prosty opis, jak ten dla Maszyny Turinga (program + aktualna zawartość taśmy + aktualna pozycja na taśmie)?


title: Czy dobrą praktyką jest metoda „start”, „uruchom” lub „wykonaj”?

text: Obecnie pracuję nad bazą kodu, która ma wiele klas, które implementują metodę Start. Wydaje mi się, że to konstrukcja dwufazowa, co zawsze uważałem za złą praktykę. Nie potrafię odróżnić tego od konstruktora. Kiedy należy użyć metody startu zamiast normalnej konstrukcji obiektu? Kiedy powinienem preferować korzystanie z konstruktora? Edycja: nie sądzę, że jest to istotne, ale językiem programowania jest C#, może równie dobrze dotyczyć Javy lub C++


title: Przegląd struktury aplikacji internetowej

text: Chciałbym otrzymać sugestie dotyczące struktury mojej aplikacji internetowej. **Co robi aplikacja:** Moja aplikacja otrzymuje pliki z około 800 skanerów w moim kraju, a użytkownicy widzą zeskanowane strony w tej aplikacji internetowej, a następnie mogą organizować strony w grupy, wybierać, które zachować, a które odrzucić, i wstaw dodatkowe informacje do każdej grupy. Następnie inny rodzaj użytkownika sprawdza, co zrobił pierwszy typ użytkownika i zatwierdza lub odrzuca każdą grupę stron. Następnie procedura na innym serwerze przekształca każdą grupę w wielostronicowy PDF i TIFF. Po tym małym tle, aby zorientować się, co robi moja aplikacja internetowa, tak wygląda drzewo plików: ajax |- ajaxaction1.php |- ajaxactionx.php cache |- xxx_xxxxxxxxxxxx.gif css |- style.min.css |- font-awesome.min.css czcionki | tutaj są czcionki potrzebne font-awesome.min.css js |-functions.min.js |-main.min.js |-jquery.x.x.x.min.js |-jquery.x.x.x.min.map |-jquery.lib1 .min.js |-jquery.libx.min.js widoki |-features.php |-features.tpl config.ini // plik konfiguracyjny bazy danych index.php // strona używana przez aplikację init.php // przeczytaj opis poniżej web.config // używany do ograniczania dostępu tylko do właściwych plików **ajax:** Folder, w którym znajdują się skrypty PHP, które są wywoływane przez Ajax w celu wykonania zapytań INSERT i UPDATE do bazy danych. **cache:** Folder, w którym znajdują się tymczasowe pliki .gif wyodrębnione ze zeskanowanych stron wysłanych ze skanerów na mój serwer. Te obrazy pozostają tutaj tylko przez czas potrzebny na ich przetworzenie, a następnie są usuwane. **css:** tutaj są przechowywane tylko dwa pliki css potrzebne mojej aplikacji internetowej. **js:** w tym folderze są przechowywane wszystkie pliki JS. `functions.min.js` to plik, w którym deklaruję wszystkie funkcje javascript `main.min.js` to nazwa funkcji **views:** Tutaj przechowuję pliki PHP i TPL, które są ładowane przez AJAX do pokaż żądane strony. Pliki PHP wykonują zapytania do bazy danych i przygotowują macierz, a następnie pliki TPL pobierają macierz i drukują znaczniki. **init.php:** W tym pliku wykonuję połączenie z bazą danych i inicjuję sesję $pdo. Sprawdzam również, czy użytkownik jest poprawnie zalogowany (do logowania użytkowników używam pojedynczego logowania zapewnianego przez zewnętrzne oprogramowanie). Tutaj ustawiłem również kilka popularnych funkcji PHP używanych w innych skryptach PHP. Ten skrypt znajduje się na każdej stronie PHP. Chciałbym uzyskać opinie o tym, jak uporządkowałem pliki i foldery mojej aplikacji.


title: Czy mixin według definicji umożliwia przechowywanie danych w zmiennych instancji na poziomie mixin?

text: Kilka implementacji mixinów (np. Ruby mixin, cecha Scala) obejmuje obsługę przechowywania danych (np. zmiennych, właściwości) między wywołaniami metod w zmiennych instancji. Było trochę debaty w tym pytaniu, czy metoda wirtualnego rozszerzenia Javy kwalifikuje się jako mixin, ponieważ nie może przechowywać danych w ten sposób; wszystkie zmienne są wprowadzane i wyprowadzane w zakresie wywołania metody i nie mogą być przechowywane w zmiennej wystąpienia. Zasadniczo toczyła się debata na temat tego, czym jest „mixin” z definicji i czy implementacje w Rubim wykraczają poza powszechnie uznaną definicję koncepcji programowania. Niestety definicja mixin wydaje się pod tym względem dość niejasna. Na przykład Wikipedia mówi co następuje: > Za pomocą domieszek definicja klasy definiuje tylko atrybuty i parametry > związane z tą klasą; metody pozostają do zdefiniowania gdzie indziej, jak w > Flavours i CLOS, i są zorganizowane w "funkcje ogólne". Te ogólne funkcje > są funkcjami, które są definiowane w wielu przypadkach (metodach) przez kombinacje typu > wysyłka i metody. Powyższe mówi, że mixin definiuje atrybuty, ale nie podaje źródeł, które mogłyby to wyjaśnić. Jednak każda inna definicja po prostu nie wspomina o tym, czy mixiny pozwalają na przechowywanie danych, czy też są ograniczone do metod. Aby jeszcze bardziej zwiększyć zamieszanie, Wikipedia wcześniej opisuje domieszki jako `interfejs z zaimplementowanymi metodami`, ale interfejsy nie mogą przechowywać zmiennych instancji. Próbowałem dowiedzieć się, jak to zostało zdefiniowane w Flavours, który był pierwszym językiem programowania, który używał czegoś, co nazywano „mixinami”, ale nie mogłem znaleźć wystarczającej ilości informacji na ten temat w Internecie. Czy zatem mixin z definicji pozwala na przechowywanie danych? Czy jest to coś, co jest niejednoznaczne i zależy od języka programowania?


title: Jak zorganizować większą aplikację Flask?

text: Mam stosunkowo prostą aplikację sieci web, która jest napisana w Pythonie przy użyciu mikroframeworku Flask. Naprawdę podobała mi się łatwość użycia Flaska, jednak w miarę jak aplikacja się rozrosła, zaczęła stawać się nieporęczna, mając wszystkie moje działania (i funkcje użytkowe) w jednym pliku. Mój plik views.py to około 700 linijek kodu i naprawdę chciałbym podzielić go na bardziej dyskretne jednostki. Jak zmienić strukturę kodu?


title: Planowanie zadań zależnych w sprincie scrum

text: Jestem teraz w projekcie wykorzystującym metodologię scrum z 2-tygodniowymi sprintami. Oto jak wygląda nasz zespół: * 1 analityk biznesowy * 1 tester * 1 projektant doświadczeń użytkownika * 2 programistów (1 dla UI i 1 dla procesów back-end) * 1 kierownik projektu W jednym sprincie będziemy mieli 1 element zaległości produktu (PBI) do zaprojektowania interfejsu użytkownika dla strony, inny PBI do napisania kodu .Net dla strony oraz 1 PBI do przetestowania strony. W jaki sposób należy zaplanować te 3 elementy rejestru produktów, aby wszystkie zostały ukończone do końca sprintu? Ponieważ wszyscy są od siebie zależni i wymagają współpracy co najmniej 3 członków zespołu, wydaje mi się, że każdy z nich potrzebuje terminów, aby zdążyć na czas. Scrum master powtarza, że nie potrzebują terminów, ponieważ zajmie się tym wielofunkcyjny zespół. To jednak nie zadziałało w 10+ sprintach. Czy kierownik projektu nie powinien być świadomy tej krytycznej ścieżki i monitorować jej postęp?


title: Pytania matematyczne na rozmowie kwalifikacyjnej z programistą?

text: Poszedłem więc na wywiad do Samsunga w Dallas w Teksasie. Sposób, w jaki rekruter opisał tę pracę, nie sprawiał wrażenia, że jest zbyt zorientowana na matematykę. Praca polegała głównie na programowaniu graficznym i C++. Tak, matematyka jest implikowana w programowaniu graficznym, zwłaszcza w shaderach, ale wciąż się tego nie spodziewałem... Cały wywiad trwał około półtorej godziny i zadawali mi tylko pytania związane z matematyką. Nie zadali mi ani jednego pytania programistycznego, co wydało mi się dziwne. Prawie wszystko, co zrobili, to zapytali mnie, jak napisać pewne procedury matematyczne jako funkcję C++, ale to wszystko. A co z pytaniami o filozofię programowania? Wzorce projektowe? Poprawność kodu? Stałość? Bezpieczeństwo wyjątków? Bezpieczeństwo wątku? Istnieje milion tematów, które mogliby omówić. Ale nie zrobili tego. Głównym problemem, jaki mam, jest to, że nie zadawali żadnych pytań programistycznych. Zasadniczo oznacza to dla mnie, że każdy programista, który jest dobry z matematyki, może znaleźć tu pracę, ale może napisać okropny kod. Oczywiście wydaje mi się, że zbombardowałem wywiad, ponieważ od około roku nie używałem żadnej algebry liniowej i łatwo zapominam matematykę, jeśli przez jakiś czas nie używałem jej w praktyce. Czy jacyś moi inni programiści są tam w ten sposób? Ja też jestem programistą gier, więc wydaje się to szczególnie dziwne. Im więcej się uczę, tym więcej starej wiedzy „wyskakuje” z mojego „stosu” (pamięci). Moje pytanie brzmi: czy ten wywiad wydaje się podejrzany? Czy to typowy wywiad, jaki mają duże korporacje? Podczas wywiadu powiedzieli mi, że proces wywiadu w Google jest podobny. Odbywają liczne, następujące po sobie wywiady, podczas których problemy matematyczne stają się bardziej zaawansowane.


title: Jak mam zająć się testowaniem kodu w projekcie solo?

text: Piszę oprogramowanie i chciałbym wydać je jako open source. Czy powinienem spróbować po prostu ustabilizować go na swoim komputerze (przy normalnym użytkowaniu; żadnych "rzeczy, których małpa by nawet nie zrobiła") przed wydaniem go, czy powinienem przyjąć inne podejście? * * * **To, do czego teraz skłaniam się, to:** 1. Napisz to sam na etapie **`pre-alpha`**, aby było częściowo użyteczne. Baw się funkcjami (tak jak zrobiłby to normalny człowiek). 2. Opublikuj go publicznie i dodaj kilka dzwonków i gwizdków podczas etapu **`alfa`** 3. Powiedz, że jest w **`beta`**, gdy wszystkie funkcje będą gotowe, a następnie wraz z innymi (mam nadzieję) wykonaj „testy na małpach”. 4. Wygeneruj rozgłos dla mojego [dość podstawowego i nudnego, ale wciąż wystarczająco dobrego dla darmowego i **`stabilnego`** ] projektu. Następnie ulepszaj to. To wydaje się być zwykłym systemem (dla mnie, który nigdy wcześniej nie robił tego wszystkiego). * * * **Czy jest coś, co mógłbym zrobić, aby automatycznie przetestować podstawowe błędy przed przejściem na alfę? Czy to jedna z najlepszych rzeczy, jakie mogę zrobić? Jak mam przejść do testowania?**


title: Jak wdrażane są leki generyczne?

text: _To jest pytanie z perspektywy wewnętrznej kompilatora._ Interesują mnie generyki, a nie szablony (C++), więc zaznaczyłem pytanie C#. Nie Java, ponieważ AFAIK generyki w obu językach różnią się implementacjami. Kiedy patrzę na języki bez generyków, jest to całkiem proste, możesz zweryfikować definicję klasy, dodać ją do hierarchii i to wszystko. Ale co zrobić z klasą generyczną, a co ważniejsze, jak obsługiwać odwołania do niej? Jak upewnić się, że pola statyczne są pojedyncze na wystąpienia (tj. za każdym razem, gdy parametry ogólne są rozwiązywane). Powiedzmy, że widzę wywołanie: var x = new Foo<Bar>(); Czy dodać nową klasę `Foo_Bar` do hierarchii? * * * **Aktualizacja:** Do tej pory znalazłem tylko 2 odpowiednie posty, jednak nawet one nie wchodzą w szczegóły w sensie „jak to zrobić samemu”: * http://www.jprl.com/ Blog/archiwum/development/2007/Aug-31.html * http://www.artima.com/intv/generics2.html


title: Wideo sprites HTML5

text: Obecnie pracuję nad projektem, w którym istnieje wymóg dynamicznego skomponowania wielu zsynchronizowanych źródeł wideo na jednym płótnie. Pierwotny prototyp, który złożyłem, załadował wideo do HTMLVideoElements, a następnie użył requestAnimFrame (poprzez podkładkę Paula Irisha), aby narysować je na jednym płótnie i zachować synchronizację między różnymi elementami. Chociaż jest to funkcjonalne i system może dość dobrze utrzymywać synchronizację (tolerancja +/- 80 ms), jest to co najmniej nieefektywne. Myślałem o optymalizacjach i jednym podejściem, które wydaje się całkiem proste, jest połączenie wszystkich mediów w jeden większy „obraz wideo” i obsłużenie tego. Umożliwiłoby to załadowanie go do pojedynczego elementu wideo, który mógłby następnie zostać użyty do wyodrębnienia i renderowania obszarów zainteresowania po stronie klienta za pomocą `drawImage()` i wyeliminowania potrzeby zarządzania synchronizacją między źródłami. Czy ktoś inny zaimplementował coś podobnego w przeszłości? Jeśli tak, jakie podejście sprawdziło się w Twoim przypadku?


title: Kiedy/dlaczego łatwiej błagać o wybaczenie niż prosić o pozwolenie?

text: Powiedzenie „Łatwiej błagać o wybaczenie niż prosić o pozwolenie” wydaje się dość popularne wśród programistów, a IIRC przypisano Grace Hopper. W jakich sytuacjach jest to zazwyczaj prawdziwe i dlaczego uważasz, że taka sprzeczna z intuicją propozycja byłaby słuszna?


title: Jakie są główne komponenty, technologie i funkcje nowej generacji aplikacji internetowych?

text: Co dalej w branży internetowej, gdy media społecznościowe osiągną plateau, jakie są kolejne kamienie milowe w tym „eksperymencie”? Chyba szukam dogłębnych opinii na temat tego, co dalej w naszej ukochanej branży? Co jest poza Facebookiem, wiki, współpracą, błyszczącymi przyciskami i interaktywną natychmiastową komunikacją? Co będzie napędzać kolejny boom internetowy?


title: Jak stworzyć menu dla aplikacji na Linuksa

text: Chcę stworzyć panel Pythona dla Linuksa, taki jak pypanel lub tint2, tylko dla zabawy i poćwiczyć z rozwojem Pythona. Teraz problem polega na tym, że chcę stworzyć automatycznie generowane menu, ale nie wiem od czego zacząć. Gdzie mogę znaleźć wszystkie zainstalowane oprogramowanie użytkownika w dystrybucji Linuksa? Wiem, że powinienem zajrzeć do folderu `/usr/bin`, ale nie wiem, czy to naprawdę najlepsza rzecz do zrobienia. Czy istnieje sposób na filtrowanie zainstalowanych aplikacji, aby uniknąć programów zależnych?


title: Klasyfikacja kolorów/skali szarości obrazu

text: Próbuję zaklasyfikować zestaw obrazów do grup odcieni szarości lub kolorów. Używałem w tym celu ImageMagic, porównując kolorowy obraz z wersją w skali szarości, a następnie używając Peak Error, aby określić, czy jest to obraz w skali szarości, jak pokazano tutaj: http://www.imagemagick.org/Usage/ Compare/#type_general Działa to, jednak daje fałszywe wyniki w przypadku wielu obrazów tylnych i białych. Wyśledziłem ten problem i uważam, że jest on spowodowany przez pseudo-czarne piksele (np. rgb (0,0,5)). Te pseudoczarne piksele wyglądają na pełnokolorowe, ponieważ technicznie tak jest. Czy istnieje lepszy sposób na klasyfikację tych obrazów? Co sugerowałbyś, żebym się pozbyć tych fałszywych wyników?


title: Web2.0, AJAX, HTML5, Facebook, sieć społecznościowa, OpenId, OAuth, przeglądarki internetowe... dokąd to zmierza?

text: W ciągu ostatnich pięciu do siedmiu lat widzieliśmy w sieci wiele nowych rzeczy: pojawił się Facebook, HTML5, nowe przeglądarki mocno się rozrosły, Google zawiódł z Wave. Facebook, GTalk i Gmail działają na wielu platformach i urządzeniach. Podobnie **pomyślałem** i **miałem nadzieję**, że fora, czat, poczta, usenet, pokoje rozmów i protokoły p2p mogą ze sobą współpracować, aby umożliwić użytkownikowi przejrzysty dostęp do wszystkich tych usług. Oczywiście zdałem sobie sprawę, że sprawy są znacznie bardziej skomplikowane z kilku powodów: * IETF nie może wymyślać nowych rzeczy. Po prostu proponują standardy. * Microsoft i inni wielcy gracze często stanowią przeszkodę dla istotnych innowacji w zakresie otwartych formatów. Największymi przeszkodami są formaty dokumentów i Internet Explorer, z jego opóźnioną reakcją wspierającą standardy sieciowe. * Smartfony, dzięki wyglądowi systemów operacyjnych, takich jak iOS i Android, są wreszcie w stanie poruszać się po Internecie: poprzednie urządzenia były głuche i nie były bezpośrednio połączone z Internetem. * Protokoły pocztowe pozostały niezmienione pomimo wzrostu ilości spamu i złośliwego oprogramowania. Nie wiem, co o tym myśleć, bo myślę, że jest jeszcze wiele do zrobienia, ale czuję, że to się nigdy nie stanie. Albo, że nikt nie wydaje się być zainteresowany podstawowymi funkcjami przesyłania tekstu... Więc jakie są według ciebie następne duże kroki w ewolucji sieci? Czy uważasz, że nadal będzie chodzić w parze z open source?


title: Sugestie dotyczące połączenia GUI .NET WPF z serwerem Java SE

text: **TŁO** Budujemy aplikację transakcyjną Java (SE), która będzie monitorować dane rynkowe i wysyłać komunikaty handlowe na podstawie danych rynkowych, a także parametrów konfiguracyjnych zdefiniowanych przez użytkownika. Planujemy udostępnić użytkownikowi cienkiego klienta, wbudowanego w .NET (WPF) do zarządzania parametrami, kontrolowania zachowania serwera i podglądu aktualnego stanu handlu. Klient nie potrzebuje aktualizacji w czasie rzeczywistym; zamiast tego będzie aktualizować widok raz na kilka sekund (lub jakikolwiek interwał skonfigurowany przez użytkownika). Klient ma do wykonania około 6 różnych operacji z serwerem, na przykład: * CRUD z parametrami konfiguracyjnymi * zapytanie o podzbiór danych * otrzymanie aktualizacji aktualnych pozycji z serwera Możliwe jest, że większość różnych operacji (z wyjątkiem odbierania dane) to po prostu różne odmiany zarządzania parametrami konfiguracyjnymi, ale jest zbyt wcześnie w naszej analizie, aby mieć pewność. Aby połączyć klienta z serwerem, rozważaliśmy użycie: * SOAP Web Service * RESTful service * zbudowanie własnego API opartego na TCP/IP (tekst lub xml) (najmniej preferowane - ale używamy tego podejścia z innymi aplikacjami, które posiadamy) Jak najlepiej rozumiem, zalety i wady różnych smaków usług internetowych to: **SOAP** pro: całkowicie zautomatyzowany w .NET (i Javie), modyfikacja interfejsu po stronie serwera nie wymaga zmian kodu w warstwie komunikacyjnej, wystarczy uruchomić odświeżanie na Odwołanie do usługi sieci Web w celu ponownego wygenerowania klas. con: więcej narzutu w warstwie komunikacyjnej, wysyłanie większej ilości tekstu, itp. Nie używamy kontenera J2EE, więc może nie działa tak dobrze z J2SE **REST ** pro: lżejsza waga, mniej danych. Ma dobrą obsługę .NET i Java. (Nie mam z tym żadnego prawdziwego doświadczenia, więc nie wiem, jakie to ma inne zalety.) Wada: klient nie będzie automatycznie informowany, czy zostaną dodane jakieś nowe operacje lub właściwości (?), więc warstwa komunikacji musi być aktualizowane przez programistę, jeśli interfejs serwera ulegnie zmianie. con: (oba podejścia) Serwer nie może tak naprawdę wysyłać aktualizacji do klienta w regularnych odstępach czasu (?) (Jednak nie będziemy mieli nic przeciwko, jeśli klient odpytuje serwer, aby uzyskać aktualizacje.) **PYTANIE ** Jakie są twoje opinie na temat powyższego opcje lub sugestie dotyczące innych sposobów połączenia 2 części? (Idealnie nie chcemy wkładać zbyt wiele pracy w warstwę komunikacyjną, ponieważ nie jest to znacząca część aplikacji, więc im więcej gotowych i zautomatyzowanych, tym lepiej.)


title: Modułowa architektura korporacyjna z wykorzystaniem MVC i Orchard CMS

text: Tworzę aplikację MVC na dużą skalę przy użyciu Orchard. I zamierzam podzielić moją logikę na moduły. Staram się również mocno rozdzielić aplikację, aby uzyskać maksymalną rozszerzalność i testowalność. Mam podstawową wiedzę na temat IoC, wzorca repozytorium, wzorca jednostki pracy i wzorca warstwy usług. Zrobiłem sobie schemat. Zastanawiam się, czy jest to poprawne i czy jest coś, co przegapiłem w odniesieniu do rozszerzalnej aplikacji. Zauważ, że każdy moduł to osobny projekt. ![Schemat architektury](http://i.stack.imgur.com/b8da2.png) * * * **Aktualizacja** Mam więc wiele modułów UI, które używają modułu db, dlatego zostały podzielone . Istnieją inne usługi, z których będą korzystać moduły interfejsu użytkownika. Moduły interfejsu użytkownika zostały podzielone, ponieważ będą tworzone z biegiem czasu, niezależnie od siebie.


title: Doradztwo w zakresie projektowania aplikacji internetowych o ponad 40-letniej żywotności

text: **Scenariusz** Obecnie jestem częścią projektu opieki zdrowotnej, którego głównym wymaganiem jest przechwytywanie danych o nieznanych atrybutach za pomocą formularzy generowanych przez użytkowników przez świadczeniodawców. Drugim wymogiem jest to, że integralność danych jest kluczowa, a aplikacja będzie używana przez ponad 40 lat. Obecnie migrujemy do bazy danych dane klienta z ostatnich 40 lat z różnych źródeł (Paper, Excel, Access, itp.). Przyszłe wymagania to: * Zarządzanie przepływem pracy formularzy * Zarządzanie harmonogramem formularzy * Zarządzanie oparte na zabezpieczeniach / rolach * Silnik raportowania * Obsługa urządzeń mobilnych / tabletów **Sytuacja** Zaledwie 6 miesięcy temu obecny (zakontraktowany) architekt/starszy programista „szybkie” podejście i zaprojektował kiepski system. Baza danych nie jest znormalizowana, kod jest sprzężony, warstwy nie mają dedykowanego celu, a dane zaczynają znikać, ponieważ zaprojektował kilka ziaren do wykonywania „usuwania” bazy danych. Baza kodu jest bardzo rozdęta i istnieją zadania tylko do synchronizacji danych, ponieważ baza danych nie jest znormalizowana. Jego podejście polegało na poleganiu na zadaniach tworzenia kopii zapasowych w celu przywrócenia brakujących danych i wydaje się, że nie wierzy w refaktoryzację. Po przedstawieniu premierowi moich ustaleń architekt zostanie usunięty po wygaśnięciu kontraktu. Otrzymałem zadanie przeprojektowania tej aplikacji. Mój zespół składa się ze mnie i jednego młodszego programisty. Nie mamy innych zasobów. Otrzymaliśmy 6-miesięczne zamrożenie zapotrzebowania, w którym możemy skupić się na odbudowie tego systemu. Zasugerowałem użycie systemu CMS takiego jak Drupal, ale ze względów politycznych w organizacji klienta system musi być zbudowany od podstaw. Po raz pierwszy będę projektował system o żywotności 40+. Pracowałem tylko nad projektami, które trwają 3-5 lat, więc ta sytuacja jest bardzo nowa, ale ekscytująca. **Pytania** * Jakie względy projektowe sprawią, że system będzie bardziej „przyszłościowy”? * Jakie pytania należy zadać klientowi/PMowi, aby system był bardziej „odporny na przyszłość”?


title: Jak zgłosić luki w zabezpieczeniach oprogramowania znalezione w bibliotece open source, które są powszechnie używane, ale mają zrujnowaną strukturę zespołu?

text: W przypadku większości projektów open source istnieje dobrze ugruntowany zespół projektowy i sponsoring korporacyjny oraz wielu aktywnych współpracowników. Procedura zgłaszania błędów jest jasno udokumentowana. Istnieją jednak również projekty open source, które istnieją od ponad 10 lat (może 15) i zostały uwzględnione we wszelkiego rodzaju bezpłatnych i komercyjnych produktach (systemy operacyjne i dystrybucje linuksa itp.) i wszyscy po prostu zakłada, że jest słuszny, mimo że niektóre jego części są w stanie rozpaczy i są pełne błędów. Wydaje mi się, że prawdziwi użytkownicy (wtajemniczeni programiści) po prostu wybierają korzystanie z biblioteki w określony sposób, aby nie wywołać błędu. Niewielu decyduje się na zabranie głosu. Istnieją również znane firmy, które po cichu naprawiają błędy (we własnych produktach), nie rozdając żadnych poprawek. I wykorzystaj to na swoją korzyść biznesową. Nie ma wiodącego dewelopera. Nie ma informacji o tym, kto jest aktywnymi programistami, poza tym, że możesz przeglądać listę dyskusyjną i zobaczyć, kto ostatnio przesłał łatki i założyć, że może znać kogoś, kto jest pomocny. Jak mam postępować w przypadku luki w zabezpieczeniach, nie ujawniając informacji w sposób, który daje amunicję złoczyńcom? _To pytanie jest dodatkiem ze strony: http://programmers.stackexchange.com/questions/5168/whats-the-biggest-software-security-vulnerabilty-youve-personally-discovered_


title: Jak sprawić, by projekt był łatwy do zrozumienia i intuicyjny?

text: Pracuję nad tym projektem, który wkrótce będzie zawierał mnóstwo pakietów, projektów itp. (Java). Tak więc od samego początku muszę śledzić wysokopoziomowy pakiet i strukturę klas, monitorować, która klasa jest wywoływana gdzie, aby nie komplikować tego po 6 miesiącach. Jaka jest właściwa droga do tego? Jakieś narzędzia do tego?


title: Testowanie modeli MVC przy użyciu ograniczeń referencyjnych SQL

text: Mam aplikację sieci web MVC, która jest przewodowa przeciwko PostgreSQL. DB wykorzystuje pełną gamę różnych ograniczeń referencyjnych, aby zapewnić integralność referencyjną, w przeciwieństwie do, powiedzmy, podejścia Railsowego, w którym próbujesz wykonać większość kontroli w logice modelu. Ponadto, z wyboru, nie używam ORM, ręcznie piszę instrukcje SQL dla każdego modelu. Teraz chcę napisać dla niego testy jednostkowe i testy funkcjonalne. Problem polega na tym, że jeśli napiszę te testy w oparciu o bazę danych (w przeciwieństwie do mockowania), będę musiał stworzyć cały długi hierarchiczny łańcuch odniesień dla każdego testowanego modelu, w przeciwnym razie system nie pozwoli mi ich wygenerować odkurzacz. Np. Nie mogę stworzyć modelu bez klucza obcego, a klucz obcy musi wskazywać na istniejący rekord itp. na całej długości łańcucha. Należy pamiętać, że w przeciwieństwie do ORM, nie mogę ufać, że moja warstwa dostępu do danych (DAL) będzie działać zgodnie z oczekiwaniami. Mogłem gdzieś wysnuć jakieś stwierdzenie, a może po prostu źle zrozumiałem logikę. Muszę przetestować moją warstwę dostępu do danych, aby zrobić to, co powinna. Jednym ze sposobów rozwiązania tego problemu jest użycie czegoś takiego jak Rails Factory Girl, które po odpowiednim skonfigurowaniu wygeneruje łańcuch rekordów potrzebny do utworzenia instancji dowolnego modelu w twoim systemie. W ten sposób testuję zarówno DAL, jak i logikę modelu. To oczywiście nie jest idealne, ponieważ przypadki testowe zmarnowałyby mnóstwo czasu na uderzanie w DB i dodały dodatkowy szablon, którego po prostu nie potrzebuję. Mój pakiet szybko się rozkręca w czasie pracy, co jest złe. Rozwiązanie, o którym myślę, to: * posiadanie zestawu testów tylko dla DAL. Ten zestaw testów zapewniłby utworzenie wszystkich właściwych odwołań i sprawdziłby tylko, czy instrukcje SQL działają zgodnie z oczekiwaniami. Referencje nie będą tak naprawdę testowane wprost (wydaje się trochę przesadą, ale można to zrobić w razie potrzeby), ale przynajmniej upewni się, że można zbudować łańcuch relacji w scenariuszu „szczęśliwej ścieżki”. Ten pakiet będzie ostatecznie stosunkowo krótki, a zatem nie będzie zużywał zbyt wielu cykli. * próbuj zarówno testy modelu, jak i kontrolera, aby rzeczy mogły być testowane w izolacji, bez przeszkadzających ograniczeń referencyjnych DB. W tym miejscu odbędzie się większość testów, więc wyśmiewanie bazy danych ma sens, jeśli chodzi o oszczędność czasu. W ten sposób również nie testuję dwukrotnie warstwy dostępu SQL, nie ma takiej potrzeby. Moje pytanie brzmi, czy proponowane powyżej rozwiązanie, w jaki sposób większość ludzi rozwiązuje swój SQL z ograniczeniami i problemem z testowaniem modelu/kontrolera, czy też brakuje mi tutaj opcji?


title: Czy powinienem używać webKit, czy istnieje lepsza technologia do tworzenia przeglądarki w systemie Windows?

text: Tworzę aplikacje internetowe najczęściej w RoR i PHP. Mniej więcej rok temu firma chciała używać mojej aplikacji, ale w samodzielnym oknie przeglądarki w systemie Linux, więc napisałem jedną w pythonie za pomocą webkita, zablokowałem ją tylko do dostępu do docelowej aplikacji internetowej, łatwo to zrobić. Teraz jakie mam opcje, aby zrobić to samo w systemie Windows? Potrzebuję podstawowych funkcji przeglądarki, takich jak przechodzenie wstecz i do przodu oraz zatrzymywanie skryptu przed ładowaniem. Będzie musiał działać samodzielnie lub może zainstalować za pomocą pliku .exe. Przepraszam za moją ignorancję na ten temat, ale bardzo rzadko wchodzę do środowiska Windows.


title: Wersjonowanie plików JavaScript w aplikacji internetowej

text: Obecnie buduję aplikację sieci Web przy użyciu stosu LAMP, który opiera się na JavaScript w interfejsie użytkownika. W miarę jak aplikacja rośnie i rozwija się, naturalnie planuję rozszerzać i zmieniać pliki javascript. Obawiam się, że wiele komputerów naszych użytkowników będzie buforować pliki (co zwykle chcę), ale chcę być proaktywny, aby mieć pewność, że nowe pliki zostaną pobrane podczas aktualizacji. Oczywistą odpowiedzią wydaje się być wersja plików javascript w całej aplikacji, tak że `edit.js` staje się `edit.0.3.6.js` i może być aktualizowany za każdym razem, gdy plik się zmieni, aby pobrać nową wersję. Myślę, że jest to najbardziej niezawodna metoda, ale zastanawiam się, czy istnieje łatwy sposób na automatyczne zarządzanie tymi zmianami wersjonowania. Używamy Github do kontroli wersji wszystkich naszych plików.


title: SS7 (M3UA, SCCP, TCAP, MAP) Stos

text: Buduję SMSC o otwartym kodzie źródłowym od podstaw; jest prawie skończony, operacje SRI i forwardSM działają, ale wciąż mam niewiele rzeczy do zrobienia dla części odbiorczej. Zbudowałem już stos SS7, ale używam DB do zapisywania identyfikatorów transakcji TCAP do późniejszej aktualizacji w celu uzyskania/generowania odpowiedzi. Moje podejście jest takie: utworzyłem tabelę pamięci (tabelę sterty), zapisałem TID TCAP w bazie danych, następnie porównałem otrzymany TID TCAP z TIDami zapisanymi w bazie danych, a następnie zdecydowałem, czy zakończyć sesję TCAP, czy kontynuować. Jaki jest najlepszy sposób na jego wdrożenie? Myślę o podwójnie połączonej liście, która zawiera TID TCAP. Czy zmierzam w dobrym kierunku, czy powinienem użyć innej techniki niż baza danych lub lista D-linked? Czy powinienem zostawić to tak, jak jest, a baza danych wykona zadanie zapisywania TID? Zwróć uwagę, że jako protokół transportowy używam implementacji SCTP dostępnej w systemie Linux (lsctp), językiem, którego używam, jest C, a bazą danych jest MYSQL.


title: Pytanie o „benchmark” dotyczący Java i .NET

text: Aby to usunąć z drogi - nie pytam, która platforma jest szybsza, ani nie próbuję rozpocząć wojny z ogniem. Pytanie: Dlaczego wersja .NET jest 5x wolniejsza w pierwszym teście? Otrzymałem następujące wyniki: .NET Test1: 48992696 Test2: 1210070 Java Test1: 9651995 Test2: 1029374 Czy jest to ściśle za implementacjami list? Jeśli tak, czy jest coś, co przyspiesza wstawianie list po stronie .NET? EDYCJA: Używane wstępnie przydzielone listy i usunięte dodatki int, dostałem to do .NET Test1: 11 838 363 Java Test1: 712 481 .NET namespace TestApp { class Program { static void Main(string[] args) { long samples = 100; długi test1Średnia = 0; for (int i = 0; i < próbki; i++) { test1Average += runTest1(); } test1Average = test1Average / próbki; System.Diagnostics.Debug.WriteLine("ŚREDNIA TESTU 1: " + test1Średnia); List<String> list = new List<String>(); for (int i = 0; i < 100000; i++) { list.Add("Ciąg: " + i); } długi test2Średnia = 0; for (int i = 0; i < próbki; i++) { test2Average += runTest2(lista); } test2Average = test2Average / próbki; System.Diagnostics.Debug.WriteLine("ŚREDNIA TEST 2: " + test2Średnia); } private static long runTest1() { List<String> list = new List<String>(); długi czas = System.DateTime.Now.Ticks; for (int i = 0; i < 100000; i++) { list.Add("Ciąg: " + i); } return (System.DateTime.Now.Ticks - czas) * 100; } private static long runTest2(List<String> list) { długi czas = System.DateTime.Now.Ticks; foreach (String s na liście) { s.ToString(); } return (System.DateTime.Now.Ticks - czas) * 100; } } } Java public class Main { public static void main(String[] args) { long samples = 100; długi test1Średnia = 0; for (int i = 0; i < próbki; i++) { test1Average += runTest1(); } test1Average = test1Average / próbki; System.out.println("ŚREDNIA TESTU 1: "+ŚREDNIA test1); List<String> list = new ArrayList<String>(); for (int i = 0; i < 100000; i++) { list.add("Ciąg: " + i); } długi test2Średnia = 0; for (int i = 0; i < próbki; i++) { test2Average += runTest2(lista); } test2Average = test2Average / próbki; System.out.println("ŚREDNIA TEST 2: "+test2Średnia); } private static long runTest1() { długi czas = System.nanoTime(); List<String> list = new ArrayList<String>(); for (int i = 0; i < 100000; i++) { list.add("Ciąg: " + i); } return System.nanoTime()-czas; } private static long runTest2(List<String> list) { długi czas = System.nanoTime(); for (String s : lista) { s.toString(); } return System.nanoTime()-czas; } }


title: Jak ustrukturyzować ten program?

text: Zmagam się z najlepszym sposobem ustrukturyzowania programu, który piszę, ponieważ metoda, którą obecnie mam, wydaje się bardzo niezgrabna, a każda część zależy w dużym stopniu od innych. Oto, co program musi zrobić: 1. Przeanalizować dokument Word, aby wyodrębnić listę kontaktów. 2. Pobierz listę kontaktów w określonej grupie z mojego konta Google. 3. Porównaj kontakty z dokumentu Word z kontaktami Google i albo: 4. Zaktualizuj kontakty w Google o szczegóły z dokumentu Word lub 5. Utwórz nowy kontakt w Google, jeśli taki nie istnieje lub 6. Usuń dowolny kontakty w Google, których nie ma w dokumencie Word. Chcę również * mieć graficzny interfejs użytkownika dla tego programu, który jest responsywny, podczas gdy wszystkie powyższe mają miejsce * pokazywać podgląd zmian, które wprowadzą kroki 4-6 przed ich faktycznym wykonaniem i umożliwić użytkownikowi odrzucenie zmian ( wszystko albo nic na razie byłoby w porządku) **Edytuj:** wszystko od tej pory jest tym, co obecnie zrobiłem. Dodałem to, aby można było udzielić konkretnej porady dotyczącej refaktoryzacji, jeśli uznano to za konieczne. Jeśli masz sposób, w jaki mogę ustrukturyzować ten program, najprawdopodobniej możesz pominąć resztę. * * * Już zacząłem, więc pozwól, że wyjaśnię, jak do tej pory napisałem kod. Program jest napisany w C#. 1. Parsowanie dokumentu Word w celu uzyskania listy kontaktów odbywa się w klasie o nazwie `WordDocumentParser`. Posiada konstruktor, który pobiera ścieżkę dokumentu tekstowego oraz metodę `GetContacts`, która wykonuje całe parsowanie i zwraca listę kontaktów. Co to jest warte, używam COM do obsługi parsowania. 2. Przede wszystkim kroki 2-6 zaczynają się od nowej klasy o nazwie `GoogleContactsMaintainer` z konstruktorem, który pobiera listę kontaktów z dokumentu Word, kilka ważnych grup w Google i `ContactsRequest`, który służy do pobierania/ zaktualizuj/zapisz/usuń kontakty w Google. Pierwszą rzeczą, jaką robi ta klasa, jest pobranie kontaktów z Google i dopasowanie ich do kontaktów z dokumentu tekstowego. Dopasowany kontakt Google jest zapisywany we właściwości kontaktu dokumentu Word. 3. Następnie robię podgląd czyli kolejne 3 kroki. 4. Zaczynam od aktualizacji kontaktów, które zostały dopasowane z dokumentu Word do kontaktów Google. Tworzę `ContactUpdater`, który aktualizuje dopasowany kontakt Google, ale nie zatwierdza zmian. Dodaje również do listy ciągów wszelkie zmiany, które zostały wprowadzone, i ustawia w kontakcie właściwość logiczną informującą, że został zaktualizowany. 5. Następnie tworzymy nowe kontakty Google dla tych kontaktów z dokumentu Word, które nie zostały dopasowane do kontaktu Google. Odbywa się to w klasie `ContactCreator`, która tworzy kontakt Google, ustawia go na kontakcie dokumentu Word i ustawia flagę na tym kontakcie, aby wskazać, że jest to nowy kontakt. Nowy kontakt nie jest zapisany. 6. Ostatnim jest usunięcie wszelkich kontaktów Google, które nie zostały dopasowane do kontaktu z dokumentu tekstowego. Aby to zrobić, po prostu znajduję te kontakty i dodaję je do listy z opisem mówiącym, że zostaną usunięte. 7. W tej chwili wyświetlam użytkownikowi te zmiany, a następnie natychmiast je aktualizuję (za minutę wyjaśnię, dlaczego użytkownik nie może tego zatrzymać). Odbywa się to w następujących trzech etapach. 8. Aktualizacja: znajdź kontakty z dokumentu Word, które mają ustawioną właściwość `HasBeenUpdated`, utwórz nowy `ContactUpdater` i zatwierdź zmiany. 9. Utwórz: znajdź kontakty z dokumentu Word, które mają ustawioną właściwość `NewContact`, utwórz nowy `ContactCreator` i wstaw nowy kontakt Google. 10. Usuń: znajdź kontakty Google, które nie zostały dopasowane do kontaktu z dokumentu Word i usuń je z Google. Próbując utrzymać responsywność mojego GUI podczas tego wszystkiego, stworzyłem klasę `MaintainContactsWorker`, która tworzy podklasy `BackgroundWorker` i wywołuje wszystkie powyższe 10 kroków z metody `OnDoWork`. Dlatego nie mogę zapytać użytkownika, czy chce zatwierdzić zmiany, czy nie. Dla mnie wszystko wydaje się strasznie połączone i całkowicie nietestowalne, więc mam nadzieję, że możesz wskazać rzeczy, które powinienem zrobić, aby złamać zależności i uczynić mój kod bardziej łatwym w utrzymaniu i testowalnym. Pisząc ten post, czuję, że powinienem mieć repozytorium, które obsłuży operacje CRUD, które wykonuję na kontaktach Google. Czy to dobry początek? Dziękuję za wszelkie sugestie, które możesz zaoferować, mam nadzieję, że wystarczająco dobrze się wytłumaczę.


title: Jako programista, co mam wiedzieć jak własną kieszeń?

text: Mówię o rzeczach związanych wyłącznie z programowaniem, a nie administracją systemem czy siecią. Niedługo skończę studia i zdobędę pracę programisty, więc jestem zainteresowany, aby się o tym dowiedzieć. Choć może to wydawać się subiektywnym pytaniem, myślę, że nie do końca i należy do kategorii najlepszych praktyk. Nie sądzę, że programista może wiedzieć wszystko o systemie operacyjnym, nad którym pracuje, o wszystkich API frameworka, nad którym pracuje, o wszystkich funkcjach i dziwactwach języków, z którymi pracuje, o wszystkich strukturach danych i algorytmach, o wszystkich ustawieniach dla jego kompilator, linker, IDE itp. Nie sądzę, że jest to praktyczne. Czy może? Zwykła odpowiedź brzmi „większość”. Co to jest najbardziej? Gdybyś miał przeprowadzić wywiad z programistą z około 5 letnim doświadczeniem, czego byś się spodziewał? Albo powiedzmy, że gdybyś wziął udział w rozmowie kwalifikacyjnej i masz za sobą około 10 lat doświadczenia, co byś odświeżył?


title: Algorytm Obozu Szkoleniowego

text: **Oświadczenie o problemie -** ![Oświadczenie o problemie](http://i.stack.imgur.com/IVyTN.png) Zadaniem jest znalezienie najbardziej dochodowego ciągłego segmentu testów, biorąc pod uwagę sekwencję wyników testów, z możliwość porzucenia wszystkich _k_ testów z wybranego zakresu. Problem wydaje się być problemem DP na początku, ale złożoność pojawia się, gdy pojawia się warunek upuszczenia testowego. Jakie modyfikacje można wprowadzić do klasycznego podejścia DP do tego problemu? A może jest do tego zupełnie inne podejście? Zakres testowy - N <= 104 Źródło - INOI 2011 Q Paper