title: Które projekty open source Scala powinienem studiować, aby poznać najlepsze praktyki kodowania

text: Jakie projekty open source poleciłbyś ludziom do nauki, aby dowiedzieć się, jak profesjonaliści piszą Scala? Niektóre atrybuty, których szukam - choć nie wszystkie muszą być obecne w każdym przykładowym projekcie: * Idiomatyczne użycie języka i bibliotek * Funkcjonalne techniki programowania * Współbieżność (przy użyciu aktorów lub innych metod) * Duża skala system z wieloma modułami * Czytelność * interop Java * itp.


title: Rzucanie i łapanie wyjątków w tej samej funkcji/metodzie

text: Napisałem funkcję, która prosi użytkownika o wprowadzenie danych, dopóki użytkownik nie wprowadzi dodatniej liczby całkowitej (liczby naturalnej). Ktoś powiedział, że nie powinienem rzucać i łapać wyjątków w mojej funkcji i powinienem pozwolić wywołującemu je obsługiwać. Zastanawiam się, co myślą o tym inni programiści. Prawdopodobnie też nadużywam wyjątków w funkcji. Oto kod w Javie: private static int sideInput() { int side = 0; Wejście ciąg; Skaner skanera = nowy skaner(System.in); do { System.out.print("Długość boku: "); input = scan.nextLine(); spróbuj { strona = Integer.parseInt(wejście); if (side <= 0) { // prawdopodobnie niewłaściwe użycie wyjątków throw new NumberFormatException(); } } catch (NumberFormatException numFormExc) { System.out.println("Nieprawidłowe dane wejściowe. Wprowadź liczbę naturalną."); } } while (strona <= 0); strona powrotna; } Interesują mnie dwie rzeczy: 1. Czy rozmówca powinien się martwić o wyjątki? Celem tej funkcji jest to, że dokucza użytkownikowi, dopóki użytkownik nie wprowadzi liczby naturalnej. Czy punkt funkcji jest zły? Nie mówię o interfejsie użytkownika (użytkownik nie może wyjść z pętli bez odpowiedniego wejścia), ale o zapętlonym wejściu z obsługiwanymi wyjątkami. 2. Czy powiedziałbyś, że instrukcja throw (w tym przypadku) jest nadużyciem wyjątków? Mogłem łatwo utworzyć flagę do sprawdzania poprawności numeru i wyświetlić komunikat ostrzegawczy na podstawie tej flagi. Ale to dodałoby więcej linii do kodu i myślę, że jest doskonale czytelny, jak jest. Chodzi o to, że często piszę osobną funkcję wejściową. Jeśli użytkownik musi wielokrotnie wprowadzać liczbę, tworzę osobną funkcję do wprowadzania, która obsługuje wszystkie wyjątki i ograniczenia formatowania.


title: Czy możliwe jest zaimplementowanie całkowicie bezpaństwowej gry wieloosobowej?

text: Stoję przed wyzwaniem zrozumienia, jak zaprogramować internetową wersję gry karcianej, która jest całkowicie bezpaństwowa. Tworzę wykres obiektów na początku gry i rozdaję karty Graczowi A i Graczowi B, więc układam je na ekranie. W tym momencie mógłbym założyć, że HTML i ciąg zapytania są tym, co przechowuje przynajmniej _część_ mojego stanu i po prostu przechowywać kopię stanu gry po stronie serwera wyłącznie w celu sprawdzenia danych wejściowych, które otrzymuję od klientów internetowych. Mimo to wydaje mi się, że stan gry _jest ze swej natury_ zmienny: karty są rozdawane z talii itp. Czy po prostu tego nie otrzymuję? A może powinienem po prostu starać się zminimalizować efekty uboczne moich funkcji na obiektach, które biorę jako dane wejściowe? Jak zaprojektowałbyś bezpaństwową grę karcianą?


title: Dlaczego miałbyś kiedykolwiek używać Lisp?

text: > **Możliwy duplikat:** > Dlaczego Lisp jest przydatny? Lisp zawsze wydawał mi się bardzo osobliwym językiem... ciekawym w koncepcji, ale po prostu nie wydaje się intuicyjny jak na przykład Java, C czy C++. Dlaczego tak wiele osób używa Lisp?


title: Jaka jest relacja między serwerem aplikacji, biblioteką klient/serwer TCP/UDP i gniazdem?

text: Do tej pory jedyną koncepcją sieciową, jaką kiedykolwiek zaimplementowałem, są podstawowe gniazda, które są częścią API java.net. Teraz próbuję nauczyć się niektórych API/frameworków wyższego poziomu w java i mam problem z rozróżnieniem między bibliotekami klient/serwer TCP/UDP, takimi jak Apache MINA lub kryonet, a serwerami aplikacji, takimi jak Tomcat lub JBoss. Ponadto byłbym wdzięczny, gdybym mógł poznać relacje między java.net.Socket a serwerami aplikacji i bibliotekami klient/serwer. Moja hipoteza jest taka, że serwery aplikacji używają gniazd sieciowych, które są podobne do gniazd, ale są ograniczone przez coś związanego z protokołem HTTP. Co więcej, mam wrażenie, że biblioteki klient/serwer TCP/UDP są po prostu abstrakcjami wyższego poziomu podstawowych gniazd. Czy to jest poprawne?


title: Czy używanie JavaScript/JQuery do układu i stylu jest złą praktyką?

text: Wiele, ale nie wszystkie problemy z układem HTML można rozwiązać za pomocą samego CSS. Dla tych, którzy nie mogą, bardzo popularne stało się JQuery (przy wczytywaniu dokumentów).* Ze względu na swoją łatwość, wielu programistów szybko używa JQuery lub Javascript do tworzenia układu i stylu — nawet bez zrozumienia, czy problem może być rozwiązany za pomocą samego CSS. Ilustrują to odpowiedzi na takie pytania. **Czy to zła praktyka? Jakie są argumenty za/przeciw? Czy ktoś, kto widzi to w praktyce, powinien spróbować przekonać tych programistów, że jest inaczej?** **Jeśli tak, to jakie są najlepsze odpowiedzi na argumenty przemawiające za JQuery mówiące, że to „tak proste”?** * * * * Przykład: Układy, które sobie życzą aby użyć pewnego rodzaju pionowego przepływu układu, często wpada w ślepe zaułki z samym CSS -- obejmuje to układy podobne do Pinteresta, chociaż nie jestem pewien, czy jest to w rzeczywistości niemożliwe w przypadku CSS.


title: Różnice między procesami i technikami testowania oprogramowania?

text: Nie rozumiem tych terminów. Na przykład, czy testy jednostkowe powinny być wymienione jako proces lub technika testowania oprogramowania? Myślę, że testowanie jednostkowe to technika testowania oprogramowania. A co z rozwojem opartym na testach? Czy możesz podać kilka przykładów procesów i technik testowania oprogramowania? Moim zdaniem proces testowania oprogramowania jest częścią cyklu życia wytwarzania oprogramowania. Na przykład, jeśli używamy V-Modelu, procesem testowania oprogramowania będzie Test systemu, Test akceptacji, Test integracji.


title: Nerwowy o „prawdziwy” świat

text: Obecnie studiuję na kierunku Informatyka oraz maturę z matematyki (małoletnia jest osadzona w specjalności). Program ma silny program nauczania C++. Zrobiliśmy trochę UNIXa i języka asemblera (nie jest to zabawne), a w przyszłych klasach jest C i Java, które muszę wziąć. Program, w którym się znajduję, nie używał STL, ale raczej projekt w stylu STL, który został stworzony od podstaw dla programu. Z tego, co przeczytałem, STL i to, co zrobiłem, są bardzo podobne, ale to, czego użyłem, wydawało się bardziej przyjazne dla użytkownika. Niektóre z programów, które musiałem napisać w C++ do zadań, to: * serwer haseł, który wykorzystywał hashowanie haseł ze względów bezpieczeństwa, * symulator routera, który używał tablicy haszowania i map, * solver labiryntu, który używał wyszukiwania w głąb , * program podróżujący po drzewie, który przemierza drzewo za pomocą sortowania poziomowego, postorder, inorder, sortowania przez selekcję, sortowania przez wstawianie, sortowania bitowego, sortowania opartego na podstawie, sortowania przez scalanie, sortowania na stercie, sortowania szybkiego, sortowania topologicznego, stosów, kolejek, kolejek priorytetowych, * i moje najmniej ulubione, czerwono-czarne drzewa. Wszystko to zostało zrobione w ciągu trzech semestrów, co wystarczyło na ich zakodowanie i przekazanie. Biorąc to pod uwagę, gdybym powiedział, że mam użyć stosu do przekształcenia równania w notację infiksową lub coś w tym rodzaju, byłbym zgubiony przez kilka godzin. Moim głównym zmartwieniem podczas pisania jest to, że kiedy kończę studia i kończę rozmowę kwalifikacyjną, jakie są niektóre pytania, które są stawiane w celu oceny moich umiejętności? Jakie są niektóre z najważniejszych obszarów informatyki, które są powszechne w tej dziedzinie? Obecnie próbuję uzyskać kilka pomysłów na programy, które mogę napisać w C++, które mnie zainteresują i zachęcą do dalszej nauki języka. Przyszło mi do głowy rozwiązanie sodoku, ale nie wiem, od czego zacząć. Przepraszam za tyradę, ale trochę się denerwuję o przyszłość. Wszelkie wskazówki są mile widziane.


title: Powód błędu odbicia

text: Pracuję nad projektem wtyczki Eclipse. Korzystając z tej wtyczki, użytkownicy mogą tworzyć projekty Eclipse Java o pewnej specyfice. Na przykład mogą dodać nazwy klas Java, które zostaną zapisane w pliku. Te klasy Java można tworzyć w źródłach projektu lub używać z pliku jar, który należy dodać do ścieżki klasy projektu. W takim przypadku wtyczka użyje odbicia, aby pobrać dane z każdej klasy. Istnieją dwa różne przypadki testowe, które dają ten sam błąd, ponieważ wtyczka nie może znaleźć klasy do utworzenia instancji: * JAR zawierający klasę o nazwie zapisanej w pliku nie jest dodawany do ścieżki klasy projektu. Więc w tym przypadku ścieżka klasy jest niekompletna. * Użytkownik wtyczki zaktualizował jar, w którym jego stara wersja zawierała nazwaną klasę, ale nowa wersja nie zawiera (co może się zdarzyć, jeśli klasa została usunięta z nowej wersji jara). W takim przypadku wtyczka nie znajdzie klasy, ale ścieżka klasy jest kompletna. Tak więc wtyczka musi rozróżnić dwa przypadki testowe, gdy nie uda się znaleźć nazwy klasy przy użyciu odbicia. Jak to zrobić?


title: Przechowywanie typów wartości i typów referencyjnych w .net

text: W .net **typy wartości** są przechowywane w **stosie**, gdzie jako **typy referencyjne** są przechowywane na **zarządzanym stercie**. Jaki jest powód tego? Czy nie można zamienić miejsca przechowywania?


title: Czy korzystanie z frameworka PHP liczy się jako doświadczenie w korzystaniu z PHP dla firmy, która nie korzysta z tego frameworka?

text: Rozpocząłem pracę w firmie, która używa frameworka Yii PHP. Używam głównie Yii, ale także trochę frontendowych rzeczy, takich jak jQuery i Ajax. Martwię się, że ograniczę zestaw umiejętności do frameworka, który nie jest zbyt popularny. To znaczy, gdyby firma, w której pracowałem, używała Ruby on Rails lub nawet Django, nie miałbym tego poczucia troski o przyszłość. Moje pierwsze pytanie brzmi zatem, w odniesieniu do możliwości znalezienia pracy w przyszłości gdzie indziej, czy moje poczucie niepokoju jest uzasadnione? Po drugie, widzę wiele miejsc pracy w PHP, ale czy uważasz, że doświadczenie w korzystaniu z frameworka PHP liczy się jako cenne doświadczenie dla firmy, która nie używa tego konkretnego frameworka ani żadnego frameworka w ogóle?


title: Grube modele Vs. Logika biznesowa, gdzie narysujesz rozróżnienie?

text: Dzisiaj wdałem się w gorącą debatę z innym deweloperem w mojej organizacji na temat tego, gdzie i jak dodawać metody do klas mapowanych w bazie danych. Używamy `sqlalchemy`, a większa część istniejącej bazy kodu w naszych modelach baz danych to niewiele więcej niż torba mapowanych właściwości z nazwą klasy, prawie mechaniczne tłumaczenie z tabel bazy danych na obiekty Pythona. W argumencie moje stanowisko było takie, że podstawową wartością używania ORM jest możliwość dołączenia zachowań i algorytmów niskiego poziomu do mapowanych klas. Modele to po pierwsze klasy, a po drugie trwałe (mogą być trwałe przy użyciu xml w systemie plików, nie musisz się tym przejmować). Jego zdaniem każde zachowanie w ogóle jest „logiką biznesową” i koniecznie należy do dowolnego miejsca poza modelem trwałym, który ma być używany tylko do trwałości bazy danych. Z pewnością uważam, że istnieje rozróżnienie między tym, co _jest_ logiką biznesową, i powinno być oddzielone, ponieważ ma pewną izolację od niższego poziomu tego, jak to jest zaimplementowane, a logiką domeny, która moim zdaniem jest abstrakcją zapewnianą przez klasy modelu kłóciłem się o to w poprzednim akapicie, ale trudno mi położyć palec na tym, co to jest. Mam lepsze wyobrażenie o tym, co może być API (którym w naszym przypadku jest HTTP „ReSTful”), ponieważ użytkownicy wywołują API z tym, co chcą _zrobić_ , w odróżnieniu od tego, co mogą robić i w jaki sposób zostanie zrobione. * * * tl;dr: Jakie rzeczy mogą lub powinny znajdować się w metodzie w zmapowanej klasie podczas korzystania z ORM, a co należy pominąć, aby żyć w innej warstwie abstrakcji?


title: Skąd mam wiedzieć, czy jestem dobrym programistą?

text: Jak większość ludzi, uważam się za nieco powyżej średniej w swojej dziedzinie. Dobrze zarabiam, awansowałem i nigdy nie miałem problemów z uzyskaniem dobrych referencji lub pracą. Ale byłem w pobliżu na tyle, by zauważyć, że wielu z najgorszych programistów, z którymi pracowałem, uważało ich za jednych z najlepszych. Źli programiści, którzy są otoczeni przez innych złych programistów, wydają się najbardziej łudzić się. Z pewnością nie jestem idealna. Popełniam błędy. Tęsknię za terminami. Ale wydaje mi się, że robię mniej więcej tyle samo głupich ruchów, co „inni dobrzy programiści”. Problem polega na tym, że definiuję „innych dobrych programistów” jako „ludzi takich jak ja”. Zastanawiam się więc, czy programista może w jakiś sposób dokonać rozsądnej samooceny? Skąd wiemy, czy w naszej pracy jesteśmy dobrzy czy źli? Lub, jeśli terminy takie jak _dobry_ i _zły_ są zbyt źle zdefiniowane, w jaki sposób programiści mogą uczciwie zidentyfikować swoje mocne i słabe strony, aby mogli wykorzystać pierwsze i pracować nad ulepszeniem tych drugich?


title: Jak mierzysz się jako programista?

text: > **Możliwy duplikat:** > Skąd mam wiedzieć, czy jestem dobrym programistą? > Jak ocenić siebie jako programistę Uczę się Pythona samodzielnie. Jak dotąd wszystko idzie dobrze, ale jak mam się zmierzyć? Chodzi mi o to, jak mogę powiedzieć „Jestem początkujący” lub „Jestem średniozaawansowany”? Czy jest jakaś wskazówka, z którą mógłbym się zmierzyć, coś, czego muszę się nauczyć, zanim uzyskam wystarczające kwalifikacje?


title: Jak ocenić zrozumienie języka programowania?

text: **Tło:** (może pominąć): Obecnie jestem na drugim roku studiów na kierunku Informatyka i staram się o staż na rok pracy. Jedna z aplikacji, z którą się spotkałem, prosi mnie o ocenę mojej znajomości języków programowania, które znam. cytat : " _oceń swoje zrozumienie i wiedzę w skali od 1 do 10, przy czym 10 jest najwyższą wartością (np. JAVA=8, C++=6, itd.)._ " Teraz czuję, że znam języki, które znam, ale możliwe, że przeceniam lub niedoceniam swoje umiejętności w nich, ponieważ ostatecznie wciąż się uczę. **Pytanie:** czy istnieje sposób lub systematyczne podejście, którego mogę użyć, aby ocenić moje zrozumienie języka programowania?


title: Jakie są moje umiejętności programistyczne w stosunku do innych programistów

text: Jestem studentem, który obecnie studiuje CS na kiepskim uniwersytecie w kraju trzeciego świata. Ciągle jednak pragnę się doskonalić. Moim celem jest dostosowanie się do standardów programistów w Stanach Zjednoczonych. Aby osiągnąć ten cel, programuję nieprzerwanie (4-5 godzin dziennie). Ale tu pojawia się moje kłopotliwe położenie. Już teraz jestem uważany za lepszego niż większość moich rówieśników w konkursach uniwersyteckich, ale ze względu na naprawdę niską jakość edukacji porównanie jest w zasadzie bezużyteczne. Przeszukałem internet w poszukiwaniu strony, która ocenia programistów na podstawie wyzwań, ale nie udało mi się ich znaleźć. Więc pytanie brzmi. Czy mogę w jakiś sposób porównać moje umiejętności programistyczne z resztą świata? I na koniec, chociaż rozumiem, że SE woli pytania, na które można odpowiedzieć, a nie pytania, które skłaniają do debaty, nadal prosiłbym o sugestie społeczności. W moim kraju przeważnie nikt nie dba o samodoskonalenie, a to dla mnie bardzo ważna sprawa.


title: Jak ocenić siebie jako programistę

text: > **Możliwy duplikat:** > Skąd mam wiedzieć, czy jestem dobrym programistą? Jestem pewien, że wielu z nas uważa się za dobrych programistów, moje pytanie brzmi: jak się tego upewnić? Skąd wiedzieć, że jestem „powyżej średniej”? Jak porównać się z innymi programistami? Nie chodzi mi o codzienne formalne testy, jak się ocenia? Dzięki, że nie zamykasz


title: Jakie są wytyczne i opinie, aby zostać Dobrym Programistą?

text: > **Możliwy duplikat:** > Skąd mam wiedzieć, czy jestem dobrym programistą? > Jak skutecznie uczyć się PHP? Mam wątpliwości co do siebie. Myślę, że nie jestem wystarczająco dobry w programowaniu. Naprawdę bardzo bardzo starałem się nauczyć programowania i jestem temu oddany. Czy możesz mi doradzić, jakie rzeczy muszę opanować, aby zostać lepszym programistą lub rzeczy, które pomogą mi poprawić moje umiejętności programistyczne? Czy naprawdę muszę się uczyć c/c++ lub javy? Jestem programistą PHP i chcę go opanować przed nauką nowego języka. Skąd mam wiedzieć, czy moje umiejętności są wystarczające?


title: Czy można zmierzyć, czy ktoś jest „dobrym” programistą?

text: > **Możliwy duplikat:** > Skąd mam wiedzieć, czy jestem dobrym programistą? Jest tu wiele pytań dotyczących rozpoznawania lub uznawania kogoś za dobrego/złego programistę. To wszystko jest subiektywne. Chciałbym wiedzieć, czy istnieje sposób na zmierzenie tego. Zdaję sobie sprawę, że będzie i powinien być w tym element subiektywny. Ale czy możliwe jest również posiadanie rzeczywistych liczb, które wspierają (lub zaprzeczają) takiej ocenie?


title: Jak zmierzyć własne umiejętności w języku programowania?

text: > **Możliwy duplikat:** > Skąd mam wiedzieć, czy jestem dobrym programistą? Jak wielu programistów pracowałem w kilku językach. Chociaż oczywiście są takie, w których czuję się swobodniej niż inne, nie mam realnego sposobu na precyzyjne zmierzenie moich umiejętności w konkretnym języku. Pomyślałem więc o systemie, który pozwoli mi w tym pomóc. Poszukuję 5 wspólnych kryteriów w językach programowania, do których będę miał wartość od 1 (junior) do 4 (senior), aby reprezentować moje umiejętności. Jednak nie mam pojęcia, jakie kryteria powinienem wybrać. Czy ktoś ma sugestię? Dziękuję.


title: Jak odróżnić zły kod od dobrego kodu?

text: > **Możliwy duplikat:** > Skąd mam wiedzieć, czy jestem dobrym programistą? Patrzyłem na kilka postów na temat szybkości wykonywania języka (np. czy jeden język był szybszy od drugiego, czy na odwrót), i powszechną odpowiedzią było to, że tak naprawdę zależy to od tego, jak dobry jest programista. Zastanawiałem się, co to właściwie znaczy. Jak odróżnić zły kod od dobrego kodu?


title: Co jest uważane zawodowo za „dobrego programisty”?

text: > **Możliwy duplikat:** > Skąd mam wiedzieć, czy jestem dobrym programistą? Czasami słyszę, jak ktoś mówi „dobry programista”, kiedy zobaczyłem faceta mówiącego, że zamierza promować dobrych programistów. Moje pytanie brzmi: jaka jest definicja dobra? Nie pytam tutaj, jak znaleźć dobrego programistę ani jak go zidentyfikować, ale po prostu wiem, czym jest „goo programista” w sensie zawodowym. Drugie pytanie: Skąd mam wiedzieć, czy jestem dobrym czy złym programistą?


title: Jak zapobiegać grubym widokom w MVC?

text: Jestem tylko ciekaw. Jeśli jestem głównym deweloperem w firmie składającej się z kilkudziesięciu programistów, czy jest jakiś sposób, aby uniemożliwić początkującemu programistę tworzenie grubego widoku? Przez gruby widok mam na myśli pusty kontroler, pusty model i posiadanie całej bazy danych i logiki biznesowej w widoku wraz z html/js.


title: Co zrobić z oceną niepełnej historii?

text: Jestem częścią zespołu programistycznego, który jest stosunkowo nowy w Scrum, załóżmy, że pod koniec sprintu kilka dużych historii jest albo w toku, albo nie zostało "zaakceptowanych" przez PO. Po pierwsze, co dzieje się z tymi historyjkami użytkowników? Czy po prostu przenosisz je do następnego sprintu? Jeśli tak, czy należy je ponownie oszacować? Moim zdaniem praca pozostała nad tymi historyjkami użytkownika może być minimalna czy duża? Jeśli nie, dlaczego nie? EDYCJA: W moim konkretnym przypadku historie nie zostały ukończone z powodu kilkudniowej przeszkody, a nie z powodu niedoszacowania historii użytkownika. Dla tych z Was, którym może to pomóc, używamy `VersionOne`


title: Jaki jest najlepszy przepływ pracy kontroli wersji/kontroli jakości dla starszego systemu?

text: Staram się znaleźć równowagę w naszym procesie rozwoju i testowania. Używamy teraz Git i jestem przekonany, że ReinH's Git Workflow For Agile Teams jest świetny nie tylko dla dużych Agile, ale dla prawie każdego zespołu w DVCS. To właśnie próbowałem wdrożyć, ale to po prostu nie jest chwytliwe. Mamy duży, przestarzały system ze złożonym środowiskiem, setkami wyjątkowych i nieodkrytych defektów i nie ma naprawdę dobrego sposobu na skonfigurowanie środowiska testowego z realistycznymi danymi. Trudno jest również publikować aktualizacje bez zakłócania pracy użytkowników. Przede wszystkim trudno jest przeprowadzić dokładną kontrolę jakości w tym procesie... i potrzebujemy dokładnych testów z tym starszym systemem. Czuję, że nie jesteśmy w stanie wykonać niczego tak zgrabnego, jak przepływ pracy Git opisany w linku. Jak to zrobić?


title: W jaki sposób javascript po stronie klienta jest objęty licencją GPL?

text: Jeśli użyję biblioteki JavaScript na licencji GPL w aplikacji internetowej, czy musiałbym oferować kod źródłowy całej witryny każdemu, kto pobrał i uruchomił bibliotekę JavaScript?


title: Postrzeganie programisty, który używa gotowej implementacji internetowej na swojej osobistej stronie?

text: Załóżmy, że jesteś programistą/twórcą stron internetowych i chcesz założyć osobistą witrynę z portfolio. Niestety, jak większość osób pracujących na pełen etat i posiadających rodzinę, Twój czas jest trudny do zdobycia. Decydujesz się, zamiast budować własną stronę od podstaw, wdrożyć coś takiego jak WordPress czy Drupal. Jaki wpływ (jeśli w ogóle) może to mieć na postrzeganie Ciebie jako dewelopera przez ludzi (potencjalnych pracodawców/współprogramistów)?


title: Czego powinienem się nauczyć od Scheme?

text: Zastanawiałem się, jakich unikalnych funkcji mogę nauczyć się od Scheme, które pomogą mi stać się lepszym programistą? Mam duże doświadczenie w językach głównego nurtu i chcę poszerzyć swoje horyzonty i dowiedzieć się o aspektach funkcjonalnych, których brakuje w innych językach. Znam domknięcia z javascript, wyrażenia lambda z C# i zastanawiałem się, na czym mogę się skupić, czego brakuje w innych językach? Pomijając składnię Lisp, czuję się tak, jak to, co widziałem do tej pory, z czym spotkałem się już w innych językach. **Co jest wyjątkowego w Schemacie/Lispie, co nauczy mnie czegoś nowego?**


title: Czy korzystając z biblioteki programistycznej dla organizacji, nadal może to być projekt non-profit?

text: Obecnie pracuję nad aplikacją webową, która ma prezentować dane przechowywane w bazie danych. Do prezentacji jest prośba o przedstawienie tego zarówno w formie tabeli, jak i w formie wykresu. Format tabeli jest prosty, po prostu wyślij dane i voila! Jednak w przypadku formatu wykresu okazało się to nieco trudniejsze. Przeglądałem wiele różnych bibliotek pod kątem wizualizacji danych i wydaje się, że jest ich sporo, które udostępniają umowy licencyjne; bezpłatnie dla projektów non-profit lub do użytku niekomercyjnego. Teraz, gdybym miał stworzyć coś dla firmy, która później miała to sprzedawać, to mogę wyraźnie odróżnić, że jest to uważane za komercyjne wykorzystanie. Ale jeśli pracuję dla organizacji (nie non-profit) nad projektem, który ma być używany wyłącznie do celów wewnętrznych, nie zbliży się to do klienta, czy jest to uważane za projekt non-profit? **EDYTUJ:** Przykładem takiej licencji jest Creative Commons Uznanie autorstwa — wersja niekomercyjna 3.0.


title: Unikanie odpytywania z komponentami

text: Po stworzeniu oddzielnych komponentów, które muszą się ze sobą komunikować, wkraczasz w sferę programowania systemów, w której musisz założyć, że błędy mogą powstać na dowolnym etapie procesu. Wyrzucasz bloki „try-catch” przez okno i musisz samodzielnie opracować solidne alternatywy do obsługi błędów. Mamy dwa systemy, oba z interfejsem REST. Oba systemy mają GUI, za pomocą którego użytkownicy mogą dodawać/aktualizować informacje. Kiedy informacja jest dodawana do jednego systemu, musi być przekazana do drugiego. Mamy oprogramowanie integracyjne (pośrednik), które odpytuje z minuty na minutę, pobiera dodatki/edycje i tłumaczy je z jednego systemu na drugi. Każde wywołanie śledzi sygnaturę czasową ostatniego pomyślnego uruchomienia — mamy jedną sygnaturę czasową do komunikacji w obu kierunkach. W ten sposób, jeśli jakakolwiek część systemu ulegnie awarii, możemy wznowić w miejscu, w którym przerwaliśmy, gdy problemy zostaną naprawione. Słyszałem złe rzeczy o podejściach opartych na sondażach: mianowicie o tym, że działa bez względu na to, czy rzeczywiście jest praca. Słyszałem, że podejścia oparte na wypychaniu są bardziej wydajne, ponieważ są uruchamiane na żądanie. Próbuję zrozumieć, jak mogło zadziałać podejście oparte na wypychaniu. Jeśli któryś z systemów próbuje wypchnąć dodanie/edycję, musimy założyć, że może się nie powieść, ponieważ drugi system nie działa. Wydawało mi się, że każdy system musiałby utrzymywać własną kolejkę wychodzącą, aby wznowić działanie po naprawieniu problemu z innym systemem. Wydaje mi się, że zastosowanie podejścia push eliminuje pośrednika, ale nakłada na każdy system większą odpowiedzialność za zarządzanie jego wiadomościami do drugiego systemu. Wydaje się, że nie jest to czysty sposób na oddzielenie obaw. Teraz oba systemy muszą przejąć obowiązki pośrednika. Nie wiem, jak przeprojektować pośrednika na architekturę opartą na wypychaniu. Ryzykujesz, że wiadomości zostaną utracone, jeśli sam pośrednik zawiedzie. Czy istnieje architektura odporna na awarie, której można użyć do zarządzania interakcjami systemu bez sondowania? Próbuję zrozumieć, czy przegapiliśmy lepszą alternatywę, kiedy opracowaliśmy/wdrożyliśmy naszego pośrednika opartego na ankietach. Oprogramowanie wykonuje swoją pracę, ale jest pewne opóźnienie.


title: Jak sprawdzić, czy zestawy bibliotek pochodzą z danej witryny sieci Web?

text: Jak zostałoby zaimplementowane poniższe rozwiązanie? Czy musisz umieścić ten kod w każdym zestawie biblioteki, czy tylko w głównym zestawie, który określa, czy można bezpiecznie wywołać zestaw biblioteki na podstawie tego, czy pochodzi on z danej witryny sieci Web w sieci intranet? Ponadto, kto powinien wywołać metodę CheckSite — każdy zestaw biblioteki lub główną aplikację? Oto przykład i rozwiązanie z egzaminu praktycznego do egzaminu C# Specialist Exam 70-483, do którego się odnoszę: > Jesteś programistą aplikacji dla firmy. Tworzysz aplikację na serwerze WWW firmy, która będzie manipulować > poufnymi danymi partnerów biznesowych. Aplikacja do wykonania swojej pracy opiera się na wielu zestawach bibliotek > w intranecie firmy. Należy > zweryfikować, czy każdy zestaw pochodzi z tej samej intranetowej witryny sieci Web. Którego > kodu należy użyć, aby zweryfikować, czy bieżący zestaw > pochodzi z intranetu firmy? public bool CheckSite () { SiteMembershipCondition site = new SiteMembershipCondition( “http://intranet.company.com” ); return site.Check( Assembly.GetCallingAssembly().Evidence ); }


title: Najlepsze praktyki międzyoperacyjne: czy powinienem używać klasy statycznej, czy klasy normalnej?

text: Mam C# frontonu, który wymaga wywołania zaplecza C++. Więc interop jest potrzebny. Mam "warstwę międzyoperacyjną", która konwertuje strukturę danych C# na strukturę C++ i wykonuje całą pracę gruntu zwalniającą pamięć. Moje pytanie brzmi, czy powinienem napisać tę warstwę międzyoperacyjną jako klasę _static_, czy też powinienem ją zawinąć w normalną klasę i utworzyć jej wystąpienie jako obiekt, gdy muszę go użyć?


title: Jaka powinna być następna rzecz po tym, jak zostaniesz zaakceptowany jako współtwórca projektu Open Source?

text: Więc po raz pierwszy próbuję pracować z `Projektem Open Source`. Utworzyłem konto `Code Plex` przeglądane w poszukiwaniu projektu, którego, jak sądziłem, mógłbym stać się częścią. Wysłałem prośbę o dołączenie do projektu. Kierownik projektu zaakceptował moją prośbę. „Pobrałem” już „kod źródłowy” projektu. Czy ktoś może po prostu zasugerować, co powinienem robić dalej? Ponieważ nigdy nie pracowałem z „Projektami Open Source”, myślę, że najlepszą rzeczą dla mnie byłoby przejrzenie „kodu” i po prostu przestudiowanie go i zrozumienie, jak to działa. Poza tym chcę wiedzieć, co wielu z was robi, kiedy zostaje się przyjętym jako współpracownik. Również projekt, który wybrałem do pracy zawiera `ASP.NET MVC` i bibliotekę `javascript` `Raphael.js`, z którą nie mam żadnego doświadczenia. Więc czy powinienem też zacząć się temu przyglądać? Wszelkie sugestie są mile widziane.


title: Jak odróżnić dobrą firmę konsultingową od warsztatu?

text: Wydaje mi się, że większość firm konsultingowych robi niewiele więcej niż dopasowuje życiorysy do stanowisk, zazwyczaj stosując wnikliwe kryteria, takie jak „X lat doświadczenia w technologiach Y i Z”. Ale są też firmy konsultingowe, które próbują znaleźć utalentowanych programistów i w nich zainwestować. Zamiast po prostu zapewniać wsparcie dla personelu, albo współpracują z klientem w celu realizacji projektu, albo dostarczają całemu zespołowi. Jak skutecznie (i szybko) określić, który jest który? Skoro nikt nie reklamuje się jako „sklep z karoserią”, jak znaleźć i pozyskać firmę, która faktycznie poszukuje dobrych programistów, a nie tylko wznawia? Czy istnieje test Joela dla firm konsultingowych? Taki, który można zastosować przed zatrudnieniem? Pytam tutaj jako potencjalny pracownik.


title: Czy HTTPS wystarczy, aby uniknąć ataków typu powtórka?

text: Udostępniam kilka metod REST na serwerze dla aplikacji mobilnej. Chciałbym uniknąć sytuacji, w której użytkownicy mogą podsłuchiwać, jak zbudowane są metody HTTP (z aplikacji mobilnej), a następnie przesyłać je ponownie na serwer. Przykład : * Aplikacja mobilna wysyła żądanie * Użytkownik korzysta z proxy i może sprawdzić, co się dzieje w sieci * Użytkownik widzi i zapisuje żądanie, które właśnie wysłał telefon komórkowy * => Teraz nie chcę, aby użytkownik był w stanie ręcznie wysłać to żądanie Czy wystarczy zabezpieczyć serwer przez HTTPS?


title: Jakich błędów nieprogramistycznych programista powinien unikać?

text: Ludzie popełniają błędy, nawet w prawdziwym życiu... Czego my, geekowi programiści, powinniśmy unikać?


title: Jak można zbudować całą bazę kodu ze źródeł w skali Google?

text: Pierwsza odpowiedź na stare, ostatnio aktywne pytanie połączona z filmem opowiadającym o tym, jak działa repozytorium Google. Jedną z interesujących rzeczy, o której wspomniano, jest fakt, że **wszystko jest budowane ze źródeł, bez polegania na plikach binarnych.** Pomaga to uniknąć problemów z zależnościami, które stają się przestarzałe, ale nadal są używane w innych projektach, problem, z którym się często spotykałem. Jak to jest technicznie możliwe? Gdybym spróbował tego samego w swojej firmie, nawet biorąc pod uwagę ogromną przepaść między skalą kodu mojej firmy a skalą Google, nie byłoby to możliwe z dwóch powodów: * IDE (Visual Studio) szybko przestanie odpowiadać , biorąc pod uwagę, że bardzo cierpi na nawet małe rozwiązania zawierające, powiedzmy, 50 projektów. * Każda analiza statyczna zostałaby pochłonięta przez rozmiar całej bazy kodu. Na przykład metryki kodu lub statyczne sprawdzanie kontraktów kodu byłyby prawie niemożliwe (kontrakty kodu prawdopodobnie zajęłyby dni lub tygodnie). * Przy ciągłej integracji kompilacja również zajęłaby ogromną ilość czasu i spowodowałaby pęknięcie serwerów, gdy tylko projekt z wieloma zależnościami zostanie zmodyfikowany, co wymagałoby ponownej kompilacji dużego drzewa projektów. Jak mała firma może obejść te problemy i być w stanie: 1. Korzystać ze środowiska IDE bez pogorszenia wydajności, 2. Kompilować kod po każdym zatwierdzeniu bez obciążania serwera, nawet jeśli konsekwencje zmiany wymagają dużej ilości baza kodu do przekompilowania?


title: Przestarzałe metody w bazie kodu

text: Wiele kodu, nad którym ostatnio pracowałem, zarówno zawodowo (czytaj: w pracy), jak i w innych sferach (czytaj: w domu, dla znajomych/rodziny/itd., czy NIE DO PRACY), zostało przerobionych, przeprojektowanych i kilkakrotnie ponownie wdrożone – tam, gdzie to możliwe/wymagane. Miało to na celu uczynienie rzeczy mniejszymi, szybszymi, wydajniejszymi, lepszymi i bliższymi specyfikacji (gdy wymagania uległy zmianie). Wadą tego jest to, że mam teraz kilka baz kodu, które mają przestarzałe bloki metod (i w niektórych miejscach małe obiekty). Zastanawiam się nad tym, aby ten kod był możliwy do utrzymania i łatwy do cofnięcia po zmianach. Używam już oprogramowania do kontroli wersji w obu przypadkach, ale zastanawiam się, czy istnieją jakieś konkretne techniki, które zostały użyte przez innych do utrzymywania zastąpionych metod bez zwiększania rozmiaru skompilowanych danych wyjściowych? W tej chwili po prostu zawijam stary kod w wielowierszowe komentarze w stylu C. Oto przykład tego, co mam na myśli (styl C, pseudo-kod): void main () { //Popracuj //Foo(); //Przestarzałe wywołanie metody Bar(); //Nowa metoda } /***** Nieaktualny kod ***** /// Podsumowanie metody void Foo() { //Popracuj } ***** Nieaktualny kod *****/ // / Podsumowanie metody void Bar() { //Popracuj trochę } Dodałem przykład stylu C, po prostu dlatego, że jestem pewniejszy z językami stylu C. Próbuję umieścić to pytanie jako agnostyczne językowe (stąd tag) i jeśli to możliwe, wolałbym odpowiedzi agnostyczne językowe - ponieważ widzę to pytanie jako bardziej pytanie dotyczące technik i projektowania. Chciałbym zachować stare metody i bloki z wielu powodów, z których głównym jest możliwość szybkiego przywrócenia starszej metody działania w przypadku niepowodzenia niektórych testów lub nieprzewidzianych okoliczności. Czy istnieje lepszy sposób na zrobienie tego (komentarze wielowierszowe)? Czy są jakieś narzędzia, które pozwolą mi przechowywać te stare metody w osobnych plikach? Czy to w ogóle dobry pomysł?


title: z Javy do SAS

text: Jestem doświadczonym pytonem, javą, ... innym programistą z (dość zaawansowaną) edukacją matematyczną (więc rozumiem na przykład statystyki i eksplorację danych). Z różnych powodów myślę o przejściu na obszar SAS/BI (nazywam SAS, ponieważ może to być dla mnie możliwy sposób wejścia w BI). Moje pytanie, dla każdego, kto może mieć doświadczenie w obu przypadkach: czy w obecnym stanie BI jest tego wart? Mam na myśli to, że czasy wielkich pomysłów w BI _dla biznesu_ już się skończyły (są interfejsy API, menedżerowie myślą, że wiedzą, co można z nimi zrobić), a moje wykształcenie matematyczne może okazać się zbyteczne. Ponadto duże firmy mają teraz uporządkowane dane, mają dobrze ugruntowane procedury BI, a próba ich analizy z innego punktu widzenia może nie być tym, czego chcą. Kolejna różnica to: podczas gdy w Javie itp. programowaniu jeden kody i kody i kody, nie wiem, czy tak jest w przypadku BI; w rzeczywistości z tego, co przeczytałem w sieci, programista BI (lub OLAP, ...itd.) w dużej organizacji jest zwykle w stanie gotowości i w rzeczywistości niewiele koduje.


title: Jak robiono programowanie 20 lat temu?

text: Obecnie mamy wiele pomocy programistycznych, które ułatwiają pracę, w tym: * IDE * Debugery (wiersz po wierszu, punkty przerwania itp.) * Skrypty Ant itp. do kompilacji * Witryny takie jak StackOverflow, które pomogą, jeśli utkniesz z problemem programistycznym 20 lat temu żadna z tych rzeczy nie istniała. Jakich narzędzi używali ludzie do programowania i jak sobie radzili bez tych nowszych narzędzi? Chciałbym dowiedzieć się więcej o tym, jak wtedy robiono programowanie.


title: Czy wystarczy przeczytać specyfikację?

text: To pytanie koncentruje się wokół Scheme, ale naprawdę może być zastosowane do dowolnego LISP-a lub ogólnie języka programowania. **Tło** Więc niedawno ponownie zacząłem się nim bawić, bawiąc się nim raz lub dwa razy wcześniej. Aby ugruntować swoje zrozumienie języka, znalazłem _Poprawione^5 Raport na temat Algorytmicznego Schematu Językowego_ i czytałem go wraz z rozszerzeniami/implementacjami mojego kompilatora/interpretera (Schematu kurczaka). Dodatkowo, aby to zobaczyć, aktywnie szukałem kodu Scheme w projektach open source i takich, i próbowałem go przeczytać i zrozumieć. Do tej pory wystarczyło mi to, aby zrozumieć składnię Schematu i ukończyłem prawie wszystkie dziewięćdziesiąt dziewięć zadań Schematu (patrz tutaj), a także przyzwoitą liczbę problemów Projektu Euler. **Pytanie** Chociaż do tej pory nie stanowiło to problemu, a moje rozwiązania są bardzo zbliżone do tych podanych, czy brakuje mi dużej części programu? Albo, mówiąc bardziej ogólnie, czy czytanie specyfikacji języka wraz z dobrze napisanym kodem w tym języku jest wystarczające, aby się z niego uczyć? Czy też inne zasoby, książki, wykłady, filmy, blogi itp. są również niezbędne w procesie uczenia się.


title: Jak zaprojektować metodę log(), do której można łatwo uzyskać dostęp spoza klasy Console?

text: Niedawno mój zespół zaprogramował niestandardową konsolę programisty w grze wideo, którą można łatwo ukryć lub wyświetlić, ponieważ jest wygodniejsza i mniej kłopotliwa. Klasa Console zawiera funkcję log(string), która powinna być łatwo dostępna z dowolnego miejsca poza nią, bez konieczności odwoływania się do niej wszędzie. Jak możemy zaprojektować metodę, do której można łatwo uzyskać dostęp z zewnątrz klasy? Na przykład drukowanie wiadomości do konsoli w C++ jest tak proste, jak: cout << "Wiadomość"; Cóż, w najlepszym razie chcemy czegoś podobnego, może Console::log(), ale nie mamy pojęcia, jak osiągnąć _właściwy_ sposób robienia tego. Twoje zdrowie.


title: Jak poradzić sobie z projektem MIT bez dołączonej informacji o prawach autorskich?

text: W moim projekcie używam (prawdopodobnie porzuconej) biblioteki. Strona projektu Google Code wspomina, że jest licencjonowana przez MIT. Nigdzie w samym kodzie ani w żadnym z dołączonych plików nie ma informacji o prawach autorskich ani licencji. Najbliższe jest nazwisko autora w jednym z nagłówków. Ponieważ jedynym wymogiem licencji MIT jest włączenie informacji o prawach autorskich, która nie istnieje w tej bibliotece, jaki jest najlepszy sposób postępowania?


title: Zmiennicy kariery: jak konkurować z absolwentami IT/ComSci

text: Zastanawiam się, jakie są szanse na zmianę kariery (połowa 20 lat), która może mieć 3-6 miesięcy doświadczenia w programowaniu w porównaniu z młodszymi świeżo upieczonymi absolwentami IT/Com Sci? Widzisz, mimo że naprawdę kocham programowanie (Java/J2EE), nikt nie daje mi informacji zwrotnych, kiedy aplikuję online. może dlatego, że woleli absolwentów IT/ComSci od osoby zmieniającej karierę, jak ja. Czy możesz więc doradzić, jak zwiększyć moje szanse na zatrudnienie? Jak mogę zdobyć prawdziwe doświadczenie w programowaniu, jeśli nikt mnie nie zatrudnia? Potrafię tworzyć własne projekty (działam na stronie e-commerce bla bla bla), ale to i tak różni się od prawdziwej pracy. A mój kod działa, ale wciąż wymaga wielu poprawek i nikt nie może mi powiedzieć, jak go poprawić, bo nikt tego nie widzi (bo robię to sam?). Czy znasz jakieś strony internetowe typu open source (java/j2ee) / internetowe oferty pracy w domu, które przyjmują stażystów java/j2ee?


title: Programowanie puzzle ze stałym wyborem

text: PYTANIE: Jest impreza, w której bierze udział N zawodników. W wydarzeniu są trzy zadania: A,B,C (powiedzmy). Każdy uczestnik bierze udział w zawodach w podanej kolejności: tzn. zawodnik musi najpierw wypełnić A i B przed rozpoczęciem C. Jednak w wydarzeniu A może brać udział tylko jedna osoba na raz. W B i C może uczestniczyć jednocześnie dowolna liczba osób. A więc impreza działa w następujący sposób. W czasie 0 pierwszy zawodnik rozpoczyna A, podczas gdy pozostali obywatele czekają, aż pierwsza osoba skończy. Gdy tylko pierwsza osoba skończy, przechodzi do zdarzenia B, a druga osoba zaczyna A. Ogólnie, gdy dana osoba kończy A, następna osoba zaczyna A. Za każdym razem, gdy dana osoba kończy z A, przechodzi do B natychmiast, niezależnie od tego, co zrobią pozostali zawodnicy. Cała impreza kończy się, gdy wszyscy zawodnicy ukończą wszystkie 3 konkurencje. Tak więc podstawowym pytaniem jest podana liczba uczestników N oraz czas, jaki każda osoba zajmuje na każde z 3 wydarzeń, oblicz minimalny czas, w którym całe wydarzenie może zostać ukończone. MOJA PRÓBA: Oto algorytm, który wymyśliłem: LeastTime(ludzie (2d tablica [n][3] z czasem każdej osoby dla każdego zdarzenia, n, front_chosen = false) Najmniejszy czas dla n osób można podzielić na 2 przypadki: 1. Obecny gość siedzący pierwszy w wydarzeniu A 1.1 Bierzemy t1_1 -> czas dla obecnego gościa w wydarzeniu A + czas potrzebny pozostałym na zakończenie całego wydarzenia z zajętym frontem 1.2 Bierzemy t1_2 -> czas dla aktualnego gościa w zdarzeniu A + czas jego pozostałych zdarzeń 1.3 Czas potrzebny na całe zdarzenie w tym przypadku wynosi t1 = max{t1_1,t1_2} 2 Aktualny gość nie jest pierwszy w zdarzeniu A 2.1 Modyfikujemy ludzi tak że pierwszy element jest umieszczony jako ostatni 2.2 t2 -> LeastTime(ludzie, n, false) 3. Zwracamy min {t1,t2} Tak więc wymyśliłem. Jakie są lepsze, tj. bardziej wydajne rozwiązania? Nawet alternatywne rozwiązania będzie pomocny.


title: Dlaczego SQL nie może zwrócić połączonych tabel w formacie zagnieżdżonym?

text: Załóżmy na przykład, że chcę pobrać użytkownika oraz wszystkie jego numery telefonów i adresy e-mail. Numery telefonów i e-maile są przechowywane w osobnych tabelach, od jednego użytkownika do wielu telefonów/e-maili. Mogę to zrobić dość łatwo: WYBIERZ * FROM użytkowników LEWY JOIN e-maile WŁĄCZONE email.user_id=user.id LEWY JOIN telefony WŁĄCZONE phone.user_id=user.id Problem* polega na tym, że zwraca nazwę użytkownika, DOB , ulubiony kolor i wszystkie inne informacje przechowywane w tabeli użytkowników w kółko dla każdego rekordu (użytkownicy * e-maile * rekordy telefonów), prawdopodobnie pochłaniając przepustowość i spowalniając wyniki (chyba że się mylę? ). Nie byłoby ładniej, gdyby zwracał po jednym wierszu dla każdego użytkownika, aw tym rekordzie była _lista_ e-maili i _lista_ telefonów? Ułatwiłoby to również pracę z danymi. Wiem, że możesz uzyskać takie wyniki za pomocą LINQ lub innych frameworków, ale wydaje się, że jest to słabość w podstawowym projekcie relacyjnych baz danych. Moglibyśmy to obejść za pomocą NoSQL, ale czy nie powinno istnieć jakieś pośrednie miejsce? Czy czegoś mi brakuje? Dlaczego to nie istnieje? * Tak, został zaprojektowany w ten sposób. Rozumiem. Zastanawiam się, dlaczego nie ma alternatywy, z którą łatwiej pracować. SQL może nadal robić to, co robi, ale potem może dodać słowo lub dwa słowa kluczowe, aby wykonać trochę przetwarzania końcowego, które zwraca dane w formacie zagnieżdżonym zamiast produktu kartezjańskiego.


title: Dlaczego Microsoft porzucił IronRuby i IronPython?

text: Kilka lat temu Microsoft ogłosił, że Ruby i Python pojawią się na .net. Projekty nazywały się odpowiednio IronRuby i IronPython. Microsoft powiedział, że projekty będą budowane na bazie DLR .net. WIKIpedia wskazuje, że pod każdym względem te projekty zostały porzucone przez Microsoft. Dlaczego Microsoft zrezygnował z tych projektów?


title: Ułożenie kolorów na planszy w jak najprzyjemniejszej formie

text: Dana prostokątna deska o wysokości H i szerokości W. Podano N kolorów i każdy kolor zajmuje Xi procent powierzchni na planszy. Suma Xi to 1. Kolory na planszy muszą być umieszczone w prostokątach. Optymalne rozwiązanie ma proporcje prostokątów jak najbliżej 1. Idealny przypadek ma tablicę wypełnioną tylko kwadratami. Jaki jest najlepszy algorytm do układania prostokątów?


title: Definiowanie dni i czasu pracy

text: Pracuję nad rozwojem oprogramowania parkingowego SMS i utknąłem w pewnym momencie na miesiąc... Muszę wprowadzić okresy płatności (lub czas pracy, dzień pracy, jeśli wolisz). Oto problem: na przykład strażnicy ruchu drogowego pracują od poniedziałku do soboty. Od poniedziałku do piątku godziny pracy od 07:00 do 21:00, a w sobotę od 07:00 do 14:00. Żądanie projektu polegało na tym, że klient może płacić za parkowanie SMS-em bez ograniczeń, co zrobiłem, ale nie zaimplementowałem tej logiki. Zacząłem od stworzenia tabeli dla tych okresów płatności, składa się ona z: dayofweek (INT, do użycia z funkcją mysql DAYOFWEEK, aby powiedzieć mi, który dzień w tygodniu jest obecną datą), work_start i work_stop (DATETIME, do zdefiniowania rozpoczęcia i kończący dzień pracy), ale nie jestem pewien, czy powinienem używać DATETIME, ze względu na datę, czy tylko TIME. Pomysł jest taki: Jeśli wyślesz SMS o godzinie 20:50 w poniedziałek, powinien on być ważny do 07:50 we wtorek (płatny na godziny). Wydłużenie terminu płatności, dotyczące czasu pracy w tygodniu. Obecnie działa z wydłużaniem czasu o godzinę bez tej reguły. Naprawdę przydałaby się pomoc lub pomysły, utknąłem z tym od dłuższego czasu...


title: Czy we wbudowanym jest jakaś różnica między sterownikiem urządzenia a biblioteką?

text: Zakładając platformę bez trybu jądra, taką jak Atmel AVR, czy jest jakaś różnica między sterownikiem urządzenia a biblioteką, biorąc pod uwagę, że i tak wszystko jest w trybie użytkownika? Pytam, ponieważ myślę o tym, jak chcę ułożyć swój kod. To jest tak: +----------------+ | Logika biznesowa | +----------------+ | Biblioteka CAN | +----------------+ | Sterownik MCP2515 | +----------------+ | Sterownik SPI | +----------------+ Sterownik SPI ma obsługę przerwań i komunikuje się bezpośrednio z urządzeniem peryferyjnym SPI mikrokontrolera, co _brzmi_ jak sterownik, ale poza tym nie widzę, jak to się różni od, powiedzmy, biblioteki CAN, która ma funkcje wysokiego poziomu, takie jak „wyślij tę wiadomość”.


title: Jak mogę przyczynić się do projektów open source?

text: Jaka jest mechanika przyczyniania się do projektów open source? Jak są zarządzane? Co dokładnie oznacza przesłanie poprawki? Czy powinienem poczytać o zaawansowanych technikach kontroli wersji?


title: Czy obiekty zachowują tożsamość we wszystkich warunkach innych niż klonowanie w PHP?

text: PHP 5.5 Przeprowadzam kilka przekazywania obiektów z założeniem, że wszystkie zachowają swoją tożsamość - wszelkie zmiany dokonane w ich stanach z wnętrza metod innych obiektów będą dalej obowiązywać. Czy dobrze zakładam? Podam tutaj moją podstawową strukturę. konstruktor klas { protected $foo_ids = array(); // ustaw w konstrukcji chronionej $foo_collection; chronione $bar_ids = tablica(); // ustaw w konstrukcji protected $bar_collection; funkcja chroniona initFoos() { $this->foo_collection = new FooCollection(); foreach($this->food_ids as $id) { $this->foo_collection->addFoo(new foo($id)); } } protected function initBars() { //ten sam pomysł co initFoos } protected function wireFoosAndBars(fooCollection $foos, barCollection $bars) { // przekazać argumenty za pomocą $this->foo_collection i $this->bar_collection foreach($foos as $foo_obj) { // (foo_collection implementuje IteratorAggregate) $bar_ids = $foo_obj->getAssociatedBarIds(); if(!empty($bar_ids)) { $bar_collection = new barCollection(); // podkolekcja będąca składnikiem każdego foo foreach($bar_ids as $bar_id) { $bar_collection->addBar(new bar($bar_id)); } $foo_obj->addBarCollection($bar_collection); // teraz każdy foo_obj ma kolekcję obiektów bar, z których każdy znajduje się również w kolekcji głównej. Czy to te same przedmioty? } } } } Martwi mnie to, że `foreach` podobno działa na kopii swoich tablic. Chcę, aby wszystkie obiekty $foo i $bar zachowały swoją tożsamość bez względu na to, którego obiektu $collection są częścią. Czy to ma sens? EDYCJA: Rozumiem, że użycie słowa kluczowego `clone` jest jedynym sposobem, aby naprawdę skopiować obiekt w PHP 5+. Użycie operatora przypisania po prostu tworzy kolejne odniesienie do tego samego obiektu. Mam nadzieję, że zwracane wartości i `foreach` również działają w ten sposób.


title: Składnia przekazywania lambda

text: Obecnie pracuję nad refaktoryzacją programu, który wywołuje jego części przez odpytywanie w strukturze bardziej sterowanej zdarzeniami. Stworzyłem klasy sched i task za pomocą sceda, aby stały się klasą bazową bieżącej pętli głównej. Zadania zostaną utworzone dla każdego licznika, aby można je było odwołać zamiast odpytywania. Każde z głównych wywołań zdarzeń jest rodzajem licznika, który zbiera informacje i wyświetla je. Kiedy program jest uruchamiany, wszystkie włączone liczniki są „konstruowane” przez główny-podrzędny. W tym subskrypcie chcę zachować „ten” wskaźnik powiązany z licznikiem, a także wspólną nazwę „procedury działania”. void MeterMaker::Meter_n_Task (Meter * newmeter,) { push(newmeter); // obsługuj zdarzenia losowania bez określonego czasu Zadanie t = new Task(now() + 0.5L); t.period={0,1U}; t.work_meter = newmeter; t.work = [&newmeter](){newmeter.checkevent( );};<<--attempt at lambda t.flags = T_Repeat; t.enable_task(); _xos->sched_insert(t); } Przykładowe wywołanie do niego: Meter_n_Task(new CPUMeter(_xos, "CPU ")) Uczyniłem harmonogram jako klasę bazową głównej procedury (obsługującej pętlę) i próbowałem wariacji serwerowych, aby klasa zadania była podstawą klasy miernika, ale ciągle napotykają przeszkody. „whack-a-mole” – wbij coś, aby naprawić coś w jednym miejscu, a potem nowy problem wyskakuje gdzie indziej. Częścią problemu jest to, że plik sched.h, który próbuje przechowywać t Zadanie Q zawiera plik nagłówkowy zadania. Plik zadania Chce odwoływać się do najbardziej „podstawowej”, klasy _Meter_. Klasa meter pobiera główną klasę rodzica, gdy przekazuje kopię rodzica dzieciom, aby mogły uzyskać dostęp do procedur rysowania w rodzicu. Dwa odnośniki w pliku zadań dotyczą wskaźnika „tego” licznika i podrzędnego elementu aktualizacji licznika (wywoływanego przez to). nieważne *te_dane= NULL; void (*ta_funkcja)() = NULL; Uwaga -- tak naprawdę nie chciałem przechowywać ich w klasie, ponieważ _chciałem_ użyć lamdby w powyższej procedurze meter&task do przechowywania podprogramu+kontekstu używanego do wywołania procedury działania licznika. Nie udało się rozgryźć składni. Ale napotykam inne problemy ze składnią, próbując przechowywać wskaźniki... takie jak g++: COMPILE lsched.cc W pliku dołączonym z meter.h:13:0, z ltask.h:17, z lsched.h:13, z lsched.cc:13: xosview.h:30:47: error: oczekiwana nazwa klasy przed '{' token class XOSView : public XWin, public Scheduler { Tak jak powyżej, gdzie prosi o klasę, gdzie nazwa klasy "Scheduler" jest . !?!? Co? To JEST nazwa klasy. Ciągle kręcę się w kółko z rzeczami, które nie mają sensu... Idealnie byłoby, gdyby lamba działała poprawnie w procedurze Meter_n_Task na górze. Chciałem przechowywać tylko 1 wskaźnik w klasie „Task”, który był wskaźnikiem do mojej lambdy, która już przechwyciłaby wartość „this” ... ale nie mogłem w ogóle uruchomić tej składni, gdy próbowałem ją uruchomić do zmiennej var w klasie „Zadanie”. Ten projekt, FWIW, to mój ząbkujący projekt na nowym C++... (oczywiście to proste!.. ;-))... Poczyniłem spore postępy w innych obszarach kodu, ale ta lambda składnia mnie zakłopotała... w takich chwilach doceniam łatwość tego typu operacji w perlu. Westchnienie. Nie jestem pewien, w jaki sposób poprosić o pomoc tutaj, ponieważ nie jest to proste pytanie. Ale pomyślałem, że spróbuję!... ;-) Szkoda, że nie mogę dołączyć plików do tego pytania.


title: Projektowanie warstwy domeny i innych modułów z myślą o wstrzykiwaniu zależności

text: Obecnie jestem nowy we wzorcu Dependency Injection. Jestem pod wpływem linku Marka Seemanna. **Mam zamieszanie, czy interfejs dla klasy agenta jakiegoś modułu agenta powinien być zawarty w warstwie domeny?** _przez agenta mam na myśli klasę/moduł, który współdziała z zewnętrznymi wcf/ webservices._ Mam diagram, który pokazuje to. Krótko mówiąc, czy w porządku jest mieć: Interfejs IProductAgent w warstwie biznesowej, gdzie rzeczywista implementacja będzie w module agenta. Zamieszanie wynika z tego, że: **Czy wywołanie usługi jest w ogóle uważane za regułę biznesową?** Dziś usługa spełnia obiekt, jutro może być jakiś inny sposób zaspokojenia tego samego obiektu. Zasada substytucji Liskova. Przepraszam, jeśli mieszam tutaj różne rzeczy.


title: Jak nazywasz klasy bez metod?

text: Jak nazywasz klasy bez metod? Na przykład class A { public string coś; publiczne int; } Powyżej jest klasą bez żadnych metod. Czy ten rodzaj zajęć ma specjalną nazwę?


title: Różne typy CMS - Plusy i minusy

text: Jak rozumiem, istnieją trzy różne "typy" CMS: 1. **Własny** : CMS zbudowany i będący własnością firmy oraz zmodyfikowany w celu zaspokojenia potrzeb klienta. 2. **Open-Source** : otwarta/darmowa wersja powyższego. Istniejący system dostosowany do potrzeb klienta. (np. Drupal, Joomla, itp.) 3. **Pełne zamówienie** : CMS zbudowany od podstaw do potrzeb klienta. Wydaje mi się, że z perspektywy klienta kolejność jego preferencji (gdyby wszystko inne było równe) byłaby 3 -> 2 -> 1. Istnieje niebezpieczeństwo, że opcja 3 może być usiana trudnym do zrozumienia kodem, ale to jest niebezpieczeństwo także z pozostałymi dwoma. Jako programiści, co jest najlepsze dla naszych klientów? Pytam o to, ponieważ konkurencyjna agencja właśnie zaproponowała jednemu z naszych klientów, że systemy CMS Open-Source są preferowanym rozwiązaniem. Chociaż widzę korzyści płynące z korzystania z oprogramowania systemu operacyjnego, nie widzę, jak jest ono lepsze niż rozwiązanie w pełni wykonane na zamówienie. Jak ujął to blog dla programistów: > „Dodawanie funkcji do [istniejącego] CMS nie jest łatwe. Zajmuje więcej czasu niż > opracowanie samej funkcji, ponieważ musisz nakłonić CMS do zrobienia > czegoś, do czego nie został zaprojektowany . Dotyczy to zwłaszcza funkcji > często zapisujących w bazie danych, takich jak funkcje społecznościowe lub funkcje, które > mają nietypową logikę biznesową”.


title: Umiem programować i jak nauczyć się programować, ale jak/gdzie uczysz się jak poprawnie tworzyć systemy?

text: Jest wiele rzeczy, które należy wziąć pod uwagę przy tworzeniu systemu, weźmy na przykład system oparty na sieci WWW, w którym użytkownicy logują się i współdziałają ze sobą, tworząc i edytując treści. Teraz muszę pomyśleć o bezpieczeństwie, walidacji (nawet nie sądzę, że jestem w 100% pewien, co to oznacza), „upewnieniu się, że użytkownicy nie nadepną sobie na nogi” (termin na to?), zapobieganiu błędom w wielu przypadki, upewniając się, że dane bazy danych nie staną się problematyczne w nieoczekiwanych... sytuacjach? Wszystkie te rzeczy, których nie wiem, jak i gdzie się uczyć, czy istnieje książka o tego rodzaju rzeczach? Tak jak powiedziałem, wydaje się, że istnieje ogromna różnica między pisaniem kodu a faktycznym pisaniem właściwego kodu, wiesz o co mi chodzi? Czuję, że w mojej obecnej pracy programistycznej brakuje wiele z tego, co opisałem, a później widzę problemy, które powoduje, a wtedy problemy są znacznie trudniejsze do rozwiązania, ponieważ dane istnieją i ludzie z nich korzystają. Czy ktoś może wskazać mi książki lub zasoby lub odpowiedni podzbiór programowania (?) do tego rodzaju nauki? PS: możesz poprawić moje tagi, nie wiem o czym mówię. Edycja: Zakładam, że niektóre z przykładów, które napisałem, odnoszą się również do innych typów systemów, po prostu nie znam żadnych innych dobrych przykładów, ponieważ głównie zajmowałem się pracą w sieci.


title: dlaczego bazy danych noSQL są bardziej skalowalne niż SQL?

text: Ostatnio dużo czytałem o bazach danych noSQL. Rozumiem twierdzenie CAP, zasady ACID, zasady BASE i podstawową teorię. Ale nie znalazłeś żadnych zasobów, dlaczego noSQL jest łatwiej skalowalny niż RDBMS (np. w przypadku systemu, który wymaga wielu serwerów DB)? Myślę, że utrzymanie ograniczeń i kluczy obcych kosztuje zasoby, a kiedy DBMS jest rozproszony, jest to o wiele bardziej skomplikowane. Ale spodziewam się, że jest o wiele więcej. Czy ktoś może wyjaśnić, w jaki sposób noSQL/SQL wpływa na skalowalność?


title: Dlaczego NoSQL zamiast SQL?

text: > **Możliwy duplikat:** > Kiedy ktoś mógłby używać MongoDB (lub podobnego) zamiast tradycyjnego RDMS? Jak dobrze SQL i NoSQL idą łeb w łeb. Czytałem gdzieś, że bazy danych SQL nie nadają się do danych, które są dobrze ustrukturyzowane lub mają jakąś graficzną strukturę. Czy tak jest naprawdę? Poza Facebookiem, Google i kilkoma innymi dużymi graczami w sieci, nie wiem, jak dobrze z tych narzędzi korzystali mali gracze i start-upy. Znalazłem inne podobne pytanie o to samo tutaj. Ale nie mogłem stąd zebrać zbyt wielu statystyk. Są to pewne specyficzne przypadki i czy istnieje ogólny wzorzec (jak ten wspomniany powyżej), do którego można wykorzystać te bazy danych NoSQL? Jak mądrze będzie, jeśli start-up zdecyduje się na bazę danych NoSQL, jeśli programiści wiedzą, że ilość danych będzie trochę duża i dobrze ustrukturyzowana, ale wymaga częstych operacji CRUD? Tutaj na stackoverflow można znaleźć pytania o to, kiedy nie używać SQL, ale czy są jakieś scenariusze, w których należy unikać baz danych NoSQL? Ponadto, jak efektywne będzie jednoczesne używanie obu, aby uzyskać z nich to, co najlepsze? Ostatnie pytanie, czy te rozproszone bazy danych NoSQL działają równie dobrze, gdy są używane w konfiguracji z jednym węzłem?


title: Zawijanie usługi sieciowej opartej na REST

text: Projektuję system, który będzie działał online pod Microsoft Windows Azure. Jednym ze składników jest usługa sieciowa oparta na REST, która w rzeczywistości będzie opakowaniem (przy użyciu wzorca proxy), która wywołuje usługi sieci Web REST partnera biznesowego, co ma związek z magazynem BLOB (uwaga: nie używamy magazynu Azure). Większość funkcji będzie polegać na przyjmowaniu żądania, dzwonieniu do naszego partnera usługi sieciowej, odbieraniu żądania, a następnie przekazywaniu go z powrotem do klienta. Jest wiele powodów, dla których warto to zrobić, ale jednym z głównych jest to, że zamierzamy obsługiwać trzech klientów: naszą aplikację komputerową (win i mac), aplikacje mobilne (iOS) i interfejs internetowy. Posiadanie jednego API, które następnie wysyłamy do naszego partnera, chroni nas, jeśli ten partner kiedykolwiek się zmieni. Chcę, aby nasza usługa obsługiwała zarówno JSON, jak i XML dla formatu przesyłania danych, JSON dla sieci i prawdopodobnie XML dla komputerów stacjonarnych i mobilnych (w tych produktach mamy już parser XML). Nasz partner obsługuje również oba te formaty. Planowałem używać ASP.NET MVC 4 z Web API. Gdy to projektuję, to, co mnie niepokoi, to statyczne sprawdzanie typu C#. Co się stanie, jeśli partner doda lub usunie elementy z danych? Prawdopodobnie możemy to zakodować defensywnie, ale nadal mam pewne obawy. Ponadto musimy wykonać sporo żmudnego kodowania, aby skonfigurować nasze API, a następnie odwrócić się i wywołać API naszego partnera. Prawdopodobnie nie ma jednak dużego wyboru. Ale z tyłu głowy zastanawiam się, czy może bardziej dynamiczny język nie byłby lepszym wyborem. Chcę się skontaktować i zobaczyć, czy ktoś musiał to robić wcześniej, z jakich rozwiązań technologicznych korzystał (nie jestem przywiązany do tego, obecnie Azure może obsługiwać inne technologie) i czy ktoś, kto zrobił coś takiego może wskazać wszelkie pojawiające się problemy. Dziękuję! Badanie problemu wydaje się znajdować tylko rozwiązania, które skupiają się na połączeniu usługi sieciowej SOAP przez serwer proxy, a nie to, o czym tutaj mówię. Uwaga: wysłano krzyżowo (z sugestii) z http://stackoverflow.com/questions/11906802/wrapping-rest-based-web-service Dziękuję!


title: Pełny poziom zaufania: czy powinien być problemem?

text: **Czy powinienem martwić się o bezpieczeństwo mojej aplikacji, jeśli działa ona na poziomie pełnego zaufania?** Jeśli tak, dlaczego? Jakie szkody można wyrządzić? Jeśli poziom zaufania powinien być problemem, dlaczego jest to poziom domyślny dla aplikacji asp.net, a nie średni? Znam wszystkie _tak_ i _nie_ pomiędzy średnim i pełnym poziomem zaufania, ale nie widzę, gdzie mogłoby to stanowić **poważne** ryzyko dla aplikacji i serwera. Biorąc to pod uwagę: Mój dostawca usług internetowych chce (i będzie) zmienić poziom zaufania na Średni dla aplikacji IIS asp.net mvc działającej na **dedykowanym** serwerze. To po prostu zepsuje moją aplikację, ponieważ w dużym stopniu opiera się na przestrzeni nazw `System.Reflection` i używa zestawów innych firm, które nie mają zdefiniowanego `AllowPartiallyTrustedCallers`. Aplikacja działa z określonym użytkownikiem, który ma dostęp tylko do odczytu do katalogu aplikacji i wykonuje uprawnienia tylko do procedur przechowywanych na serwerze Sql. Uwierzytelnianie odbywa się przez SSPI, więc nie ma haseł w web.config. Dostawca usług internetowych twierdzi, że jeśli pozwolą mojej aplikacji działać z pełnym zaufaniem, nie mogą zagwarantować bezpieczeństwa mojego serwera. Nigdy nie słyszałem o jednym przypadku, w którym pełne zaufanie było przyczyną złamania zabezpieczeń. Wydaje mi się, że nie są pewni tego, co robią. Nie widzę tutaj luki w zabezpieczeniach. Jedyną wadą bezpieczeństwa, jaką widzę ogólnie, jest kradzież hasła z pliku web.config, ale nie jest to możliwe w mojej obecnej konfiguracji...


title: Jak uniknąć oscylacji przez systemy oparte na zdarzeniach asynchronicznych?

text: Wyobraź sobie system, w którym istnieją źródła danych, które muszą być zsynchronizowane. Prostym przykładem jest model - powiązanie danych widoku przez MVC. Teraz zamierzam opisać tego rodzaju systemy źródłami danych i hubami. Źródła danych publikują i subskrybują zdarzenia, a centra przekazują zdarzenia do źródeł danych. Obsługując zdarzenie, źródło danych zmieni jego stan opisany w zdarzeniu. Publikując zdarzenie, źródło danych umieszcza jego aktualny stan w zdarzeniu, dzięki czemu inne źródła danych mogą używać tych informacji do odpowiedniej zmiany swojego stanu. Jedyny problem z tym systemem polega na tym, że zdarzenia mogą być odzwierciedlane z koncentratora lub innych źródeł danych, co może wprowadzić system w nieskończoną oscylację (przez asynchroniczną lub nieskończoną pętlę przez synchronizację). Na przykład A -- źródło danych B -- źródło danych H -- hub A -> H -> A -- odbicie od huba A -> H -> B -> H -> A -- odbicie od innego źródła danych zsynchronizować stosunkowo łatwo jest rozwiązać ten problem. Możesz porównać bieżący stan ze zdarzeniem, a jeśli są równe, nie zmieniasz stanu i nie wywołujesz ponownie tego samego zdarzenia. Asynchronicznie nie mogłem jeszcze znaleźć rozwiązania. Porównanie stanów nie działa w przypadku obsługi zdarzeń asynchronicznych, ponieważ istnieje ostateczna spójność, a nowe zdarzenia mogą być publikowane w niespójnym stanie, powodując te same oscylacje. Na przykład: A(*->x) -> H -> B(y->x) -- może iść równolegle z B(*->y) -> H -> A(x->y) -- więc najpierw A zmienia się w stan x, podczas gdy B zmienia się w stan y -- następnie B zmienia się w stan x, podczas gdy A zmienia się w stan y -- i tak w nieskończoność... Jak myślisz, jaki jest algorytm do rozwiązania tego problemu? Jeśli istnieje rozwiązanie, czy można je rozszerzyć, aby zapobiec oscylacjom powodowanym przez wiele koncentratorów, wiele różnych zdarzeń itp. ? **aktualizacja:** Nie wydaje mi się, żebym to działało bez większego wysiłku. Myślę, że ten problem jest taki sam, jak w przypadku synchronizacji wielu baz danych w systemie rozproszonym. Myślę więc, że to, czego naprawdę potrzebuję, to ograniczenia, jeśli chcę automatycznie zapobiec temu problemowi. Jakie ograniczenia proponujesz?


title: Przykładowy model domeny dla sklepu internetowego

text: Jesteśmy grupą 4 studentów programistycznych obecnie studiujących na Cape Peninsula University of Technology. Obecnie naszym zadaniem jest stworzenie aplikacji webowej pełniącej funkcję sklepu internetowego. Zdecydowaliśmy się zrobić back-end w Javie, korzystając z Google Guice dla trwałości (co jest w większości nieistotne dla mojego pytania). Ogólny pomysł do tej pory na wykorzystanie PHP do tworzenia strony internetowej. Zdecydowaliśmy, że po oddaniu projektu chcemy spróbować i zarejestrować działalność gospodarczą, aby faktycznie wdrożyć stronę internetową. **Problem**, którego doświadczamy, dotyczy modelu domeny. Są to w większości drobne sprawy, jednak zaczynają wpływać na harmonogram naszego projektu. Ponieważ wszyscy jesteśmy młodymi studentami informatyki, praktycznie nie mamy doświadczenia w świecie biznesu. W związku z tym w pierwszej kolejności spędzamy dość dużo czasu na planowaniu modelu domeny. Teraz niektóre z problemów, które podnosimy, to powiedzmy odniesienie między encją Klient a encją zamówienia. Obecnie nie mamy identyfikatora klienta w encji zamówienia i mamy listę encji zamówienia w encji klienta. Ostatnio zastanawiałem się, czy mechanizm utrwalania fizycznie umieści identyfikator klienta w tabeli zamówień, nawet jeśli nie ma go w encji? Zacząłem się więc zastanawiać, czy jeśli załadujesz obiekt klienta, przeszuka on całą tabelę zamówień w poszukiwaniu zamówień z identyfikatorem klienta. Powiedzmy, że masz 10 000 klientów i 500 000 zamówień, czy to nie potrwa bardzo długo? Są też pewne procesy biznesowe, których nie do końca rozumiem. Na koniec moje pytanie brzmi: czy ktoś zna przykładowy model domeny, który jest podobny do tego, co staramy się osiągnąć, a który będzie można bezpiecznie traktować jako odniesienie? Nie chcę być posądzany o kradzież własności intelektualnej, zwłaszcza, że moglibyśmy zaimplementować to jako biznes.


title: Czy testy jednostkowe są opracowywane czy testowane?

text: Rozmawiałem z kierownikiem ds. testów na temat roli testów jednostkowych i integracyjnych. Poprosiła, aby programiści zgłosili, co i jak przetestowali na jednostkach i integracji. Z mojego punktu widzenia testowanie jednostkowe i integracyjne jest częścią procesu rozwoju, a nie procesu testowania. Poza semantyką mam na myśli to, że testy jednostkowe i integracyjne nie powinny być uwzględniane w raportach z testów, a testerzy systemów nie powinni się nimi przejmować. Moje rozumowanie opiera się na dwóch rzeczach. 1. Testy jednostkowe i integracyjne są zawsze planowane i wykonywane w oparciu o interfejs i umowę. Niezależnie od tego, czy korzystasz z sformalizowanych umów, nadal testujesz to, co m.in. ma to zrobić metoda, czyli kontrakt. W testach integracyjnych testujesz interfejs między dwoma różnymi modułami. **Interfejs i umowa** określają, kiedy test przejdzie. Ale zawsze testujesz ograniczoną część całego systemu. Z drugiej strony testowanie systemów jest planowane i przeprowadzane zgodnie ze specyfikacją systemu. **Specyfikacja** określa, kiedy test przejdzie. 2. Nie widzę żadnej wartości w przekazywaniu szerokości i głębokości testów jednostkowych i integracyjnych testerowi (systemów). Załóżmy, że piszę raport, który zawiera listę rodzajów testów jednostkowych wykonywanych na określonej klasie warstwy biznesowej. Co ma z tego wynieść? Ocenianie na podstawie tego, co powinno, a co nie powinno być testowane, jest fałszywym wnioskiem, ponieważ system może nadal nie działać tak, jak wymagają tego specyfikacje, mimo że wszystkie testy jednostkowe i integracyjne przejdą pomyślnie. To może wydawać się bezużyteczną akademicką dyskusją, ale jeśli pracujesz w ściśle formalnym środowisku, tak jak ja, jest to naprawdę ważne przy ustalaniu, jak robimy rzeczy. W każdym razie, czy całkowicie się mylę? (Przepraszam za długi post.)


title: Właściwy XAML dla aplikacji Windows 8

text: Chciałem lepiej zrozumieć właściwy projekt XAML, ponieważ większość mojego obecnego doświadczenia dotyczy tego, w czym dorastałem: Windows Forms. Mówiąc dokładniej, chociaż jest to tak naprawdę specyficzny podzbiór Xaml, jestem zainteresowany tworzeniem aplikacji dla systemu Windows 8. Przeczytałem znaczną część książki do egzaminów 70-502 autorstwa Microsoftu i oczywiście odwiedziłem witrynę Microsoftu, aby dowiedzieć się, ile pikseli, gdzie i jak ma się znaleźć, aby spełnić wytyczne projektowe Windows 8. Wszystkie te zasoby koncentrują się jednak na problemach o bardzo małej skali. Jak zrobić przycisk, jak podłączyć go do kontrolera... Szukam zasobów, które nauczą mnie jak przetłumaczyć projekt na xaml. Wszystkie poszczególne elementy są mi znane, choć nie dogłębne. DockPanels, StackPanels, przyciski, pola, obramowania i style. Ale nie mam zasobu, który powiedziałby mi, jak połączyć je w wysokiej jakości projekt. Czy ktoś ma zasoby, które uczą obsługi Xaml w skali aplikacji?


title: Stawanie się lepszym programistą C/Java

text: Obecnie osiągnąłem szczyt i chcę być lepszy w kodowaniu w C i Javie. Chcę się poprawić, ale myślę, że osiągnąłem stabilizację na krzywej uczenia się. Nie mogę znaleźć w sieci żadnych „zaawansowanych” samouczków; większość rzeczy, które są wstępami, które już znam. Naprawdę nie wiem, dokąd mam się udać, aby wyzdrowieć. Jak przejść przez płaskowyż? Czy przeczytanie źródeł jądra Linuksa pomoże? Czy jest strona lub coś z zaawansowanymi ćwiczeniami lub zadaniami do wykonania? Nie coś, co wymaga wiedzy eksperckiej i nic podstawowego, ale coś pośrodku. Coś z łamigłówkami lub zagadkami programistycznymi, które zajmują najwyżej kilka godzin, ale nie miesięcy. Mówiąc zaawansowany mam na myśli to, że składnię już dobrze znam. Nie opanowałem tego i wciąż popełniam błędy tu i tam, ale nie byłbym całkowicie bezużyteczny bez mojego wybranego IDE (Eclipse). W Javie mam podstawową znajomość kolekcji, biblioteki Swing i biblioteki JDBC. Mam też podstawowe doświadczenie z mrówką i junitem. Potrafię tworzyć podstawowe gry 2D oraz programy użytkowe z łącznością z lokalną bazą danych. Czytam na dźwięk API Java. Jeśli chodzi o C, jest dość zardzewiały. Znam składnię i wiem, jak używać make, ale nie znam wielu bibliotek. Majstrowałem przy sqlite3 i kilka lat temu stworzyłem prostą grę typu pacman, która działa na konsoli win32, ale nigdy tak naprawdę nie przekroczyłem podstawowej składni. Niedawno dowiedziałem się również o wskaźnikach funkcji. Zasadniczo lekcje, które większość książek zawiera w swoich pierwszych kilku rozdziałach, tak naprawdę nie wiem, dokąd mam się teraz udać. Zdaję sobie sprawę, że najlepszym sposobem na poprawę jest kodowanie, ale tak naprawdę nie wiem _co_ kodować. Naprawdę nie chcę ciągle tworzyć tego samego rodzaju programów, ale nie przychodzi mi do głowy żaden krótki, ale nowy projekt.


title: Ponowne wykorzystanie metod CRUD do danych w warstwie dostępu do danych, ale są one aktualizowane zbyt szybko

text: Zgadzam się, że powinniśmy umieścić metody CRUD w warstwie dostępu do danych， Jednak w moim obecnym projekcie mam pewne problemy. Jest to przestarzały system, a w niektórych konkretnych klasach menedżera jest sporo metod CRUD. Ludzie, w tym ja, wydają się po prostu dodawać do tego nowe metody, zamiast ponownie wykorzystywać istniejące metody. Ponieważ 1. Nie wiemy, czy istniejąca metoda jest tym, czego potrzebujemy 2. Nawet jeśli mamy kod źródłowy, czy naprawdę musimy przeczytać kod innych, a następnie podjąć decyzję? 3. Jest aktualizowany zbyt szybko. Nie masz czasu na zapoznanie się z API DAO. Wracając do pytania, jak rozwiązujesz to w swoim projekcie? Jeśli mówimy „ponowne użycie”, to naprawdę musi być wielokrotnego użytku, a nie tylko wymówką.


title: Czy mogę sprzedawać aplikacje na amerykańskim rynku Apple App Store?

text: biorąc pod uwagę dziwaczną segregację geograficzną Apple, zastanawiałem się, czy jako Włoch mogę stworzyć angielską aplikację sprzedawaną w amerykańskim sklepie z aplikacjami za 0,99 USD (niezależnie od obecnych kursów wymiany USD <=> EUR). To wydaje się naprawdę głupie pytanie i mam nadzieję, że mogę, ale kto wie, skoro nie mogę ich kupić, może nie mogę też ich sprzedać.


title: Jakie są dobre sposoby dla doświadczonego programisty klienta .NET na rozpoczęcie nauki programowania w sieci Web?

text: Moje tło jest następujące. Programuję od młodości, pracowałem w BASICu, potem Asm dla M68K, potem C, C++, a teraz spędziłem ostatnie 5 lat w .NET, stając się raczej dobrym programistą .NET. Gdzieś po drodze zdałem sobie sprawę, że nie mam pojęcia, jak działa internet, nie wiem, jak działa TCP/IP, nie mam pojęcia, do czego jest zdolny HTML, ani jak PHP gra na obrazie, ani dlaczego Ruby on Rails powinno mnie uszczęśliwić. Nie mam doświadczenia z LAMP ani IIS i mam tylko pojęcie o tym, czym jest Sharepoint. W skrócie: jestem głupcem. Jestem inteligentnym i zdolnym programistą, ale brakuje mi nawet podstawowych umiejętności (routing, hosting, hosting niestandardowego DNS do rozwiązywania domen intranetowych itp.) Nie mam pojęcia, od czego zacząć naukę tworzenia stron internetowych. Oto dobra wiadomość! Wiem, czego chciałbym się nauczyć (przynajmniej na razie!) Chcę móc rozwijać własną domenę osobistą do hostowania usług WSDL, obsługi moich aplikacji, prezentowania mojej pracy, hostowania mojego życiorysu, by sprzedawać moją markę, że tak powiem. Stackoverflow, błagam, pomóż temu odłączonemu, ale utalentowanemu programiście stać się częścią obecnej ery, zamiast być reliktem tkwiącym w poprzedniej wielkiej złotej erze oprogramowania! Uwaga: na razie wolałbym pozostać w związku z MS, ponieważ jestem już zaznajomiony z ekosystemem .NET. Jestem w porządku, ale nie jestem na to gotowy (chyba?) Jeśli możesz mnie przekonać, że jest inaczej, to w porządku.


title: Obsługa wsparcia poza godzinami pracy

text: To nie jest pytanie programistyczne per se - więcej o zarządzaniu aplikacjami. Pracuję dla dość małej firmy, która na początku rozrosła się dosyć szybko i odniosła duży sukces w stosunkowo krótkim czasie. Prawie cały handel odbywa się online, a nasz zespół IT jest bardzo mały w stosunku do ilości pieniędzy, które są pompowane przez witrynę (jestem ja i dwóch innych). Czasami poza godzinami pracy pojawiają się „przeskoki”, które nieuchronnie powodują, że ja lub jeden z moich kolegów otrzymuje telefon. Nasze call center nie jest szczególnie dobre w analizie błędów itp. iw 99% przypadków rozwiązanie to w rzeczywistości problem z wprowadzaniem danych / szkoleniem użytkowników. 1% przypadków to prawdziwy błąd. Nasza firma nalega teraz, abyśmy my trzej programiści ustalili dyżur telefoniczny, w którym można się z nami skontaktować z zapewnieniem, że nie wyjedziemy z miasta itp. bez zapłaty, niezależnie od tego, czy zadzwonią do nas, czy nie, na wypadek, gdyby coś poszło nie tak poza godzinami pracy . Nie wszystkie nasze umiejętności się pokrywają, więc mogę nie być w stanie szybko zdiagnozować i naprawić problemu, który mógłby dotyczyć jednego z pozostałych (np. przekroczenie limitu czasu bazy danych wymagałoby DBA, problemy z pocztą e-mail wymagałyby naszego pracownika ds. infrastruktury, problemy z witryną wymagałyby mnie). Nikt z nas nie jest z tego szczególnie zadowolony, więc zastanawiałem się, czy ktoś inny miał podobne doświadczenia i jak poradziłeś sobie z tą sytuacją? EDYCJA: Dziękuję wszystkim za sugestie – zaznaczyłem jedną jako właściwą odpowiedź wyłącznie na podstawie, ponieważ sprawiła, że poczułem się trochę lepiej, ale wszystkie sugestie są w dużej mierze związane z tym, o czym dyskutowaliśmy wewnętrznie. Czujemy, że to trochę niesprawiedliwe, że musimy teraz rezygnować z weekendów, aby wszyscy inni mogli się wzbogacić. Staramy się dążyć do bardziej dojrzałego procesu rozwoju, aby zminimalizować błędy, ale wymagałoby to również zmian od reszty firmy, a oni _naprawdę_ nie chcą niczego zmieniać poza IT!


title: Jak zachować prostotę zestawu zmian/wersji VCS w obliczu przypadkowych zatwierdzeń częściowych?

text: Pracując nad projektem z kilkoma kolegami z klasy zauważyłem, że otrzymujemy wiele częściowych zatwierdzeń, które są następnie poprawiane: Rev 249 Log: committing change foo, yeah! Dziennik Rev 250: ojej, zapomniałeś tych plików! Dziennik Rev 251: ojej, jak mógłbym zapomnieć inny plik w * tej samej * zmianie? Oczywistą odpowiedzią jest zachowanie większej ostrożności. Ale od 2011 roku programiści nadal są (prawie) ludźmi i są podatni na błędy. Problem polega na tym, że powoduje to niejednoznaczność podczas przywracania lub łączenia. Czy je tam zostawiamy? Czy modyfikujemy historię zatwierdzeń?


title: Jak przekonać szefa do korzystania z Codeigniter lub YII w pracy?

text: Pracuję dla firmy zajmującej się tworzeniem stron internetowych i w ciągu jednego roku, który tu spędziłem, nie było żadnych ulepszeń w technologiach, które wykorzystaliśmy do budowy naszych stron internetowych. Wprowadziłem do nich jquery (kupując Novice to Ninja przez Sitepoint) i teraz chcę pozbyć się wszystkich tych gównianych PHP od zera i zamiast tego użyć frameworka PHP. Więc jakiego rozumowania mogę użyć, aby przekonać szefa do zmiany i jak przekonać innych programistów?


title: Czy komputer z obsługą wielodotyku umożliwi mi tworzenie aplikacji na Androida, symulując dotykowy interfejs użytkownika bez urządzenia z systemem Android?

text: Niedawno kupiłem Samsung Galaxy Tab jako referencyjną implementację (telefon i tablet z Androidem pierwszej generacji) Androida 2.x do tworzenia aplikacji. Zauważyłem, że na targach CES 2011 mówiono o wielu planszach Androida 3.0 (Motorola XOOM itp.). Gdybym miał komputer wielodotykowy z zainstalowanym na nim pakietem SDK/emulatorem Androida, czy pozwoliłoby mi to dokładniej przybliżyć symulację urządzenia, umożliwiając użytkownikowi wprowadzanie danych za pośrednictwem ekranu wielodotykowego? Czy działałoby przez dotyk tak, jak system Windows 7 rozpoznaje dotyk jako wejście w stylu myszy? Czy ktoś to zrobił?


title: Przegląd projektu: jak dobrze mój projekt zorientowany obiektowo pasuje do zasad SOLID?

text: _Ten wątek będzie długi, ale postaram się go skrócić jak najkrócej. Dziękuję._ Niedawno zaimplementowałem stosunkowo prosty program. To, co robi ten program, to wygenerowanie prostego utworu muzycznego i odtworzenie go. Opiszę projekt zorientowany obiektowo programu i chciałbym poznać Twoją recenzję projektu. **Szczególnie, jak dobrze pasuje do zasad SOLID** , gdzie nie, i jak mogę ulepszyć swój projekt, aby był bardziej SOLIDNY w przyszłości. _(Jeśli w opisie jest coś, co nie jest wystarczająco jasne, proszę mi powiedzieć.)_ Mój projekt podzieliłem na dwie części. **1-** System „za kulisami”, który generuje treść – serię nut i akordów (co zostanie wyjaśnione później) – i jest odpowiedzialny za jej odtworzenie. **2-** System, który zapewnia interfejs użytkownika do sterowania systemem „za kulisami”. Ten system informuje inny system, kiedy tworzyć nową muzykę i kiedy ją odtwarzać. Każdy system opiszę osobno. * * * **System 1 - odpowiedzialny za generowanie i odtwarzanie muzyki.** Sposób tworzenia muzyki polega na wygenerowaniu progresji akordów (serii akordów do grania jeden po drugim), a następnie wygenerowaniu melodii opartej na na tej progresji. Opiszę, jak to jest zaprojektowane „od dołu do góry”. **Generowanie progresji akordów**. Klasa `Uwaga`: najbardziej podstawowa klasa. Odpowiada za odtwarzanie plików dźwiękowych i jest ustawiony w instancji na odtwarzanie określonego dźwięku (C, D itp.). Posiada interfejs do odtwarzania () i do zatrzymywania () odtwarzania. Posiada również metodę `getName()`, która ją identyfikuje (nazwa jest przekazywana do Note'a przez konstruktor). Klasa `Akord`: ta klasa jest tworzona za pomocą tablicy trzech obiektów `Note` i nazwy. Na przykład, `Akord` o nazwie `cMajor` zostanie utworzony z uwagami `c`, `e` i `g` oraz ciągiem „CMajor”. `Akord` ma interfejs do odtwarzania() i stop() nut, z którymi jest komponowany, ma metodę `getName()` oraz metodę `getNotes()`, która zwraca tablicę Notes. Klasa „Progresja”: ta klasa jest tworzona za pomocą tablicy obiektów „Akord” i ma logikę, aby odtwarzać je i zatrzymywać jeden po drugim w określonym tempie (prędkość, w BPM - uderzenia na minutę). Posiada metodę `play(int bpm)` oraz metodę `getChords()`, która zwraca tablicę Chords. Klasa `ProgressionGenerator`: implementuje algorytm do tworzenia określonej serii obiektów `Chord` i tworzenia instancji `Progression` za pomocą tych akordów. Podsumowując: progresja składa się z akordów, które składają się z nut. ProgressionGenerator tworzy instancję progresji z określoną serią akordów. **Generowanie melodii**. Klasa `MelodyNote`: skomponowana z jednej nuty `Note`. Posiada atrybut „podwójny czas trwania”, który określa, jak długo ta nuta ma być grana w stosunku do taktu/taktu muzyki (np. „półnuta” jest określona jako 0,5, „ćwierć” jako 0,25). Posiada metodę `getDuration()` i interfejs do play() i stop(), jest to wewnętrzna `Note` (zasadniczo deleguje do Note). Klasa `Melody`: skomponowana z serii `MelodyNote`s. Ma logikę, aby odtworzyć serię nut z określoną prędkością. Używa czasu trwania każdego „MelodyNote”, aby wiedzieć, kiedy zatrzymać nutę i zagrać następną. Klasa `MelodyGenerator`: implementuje algorytm do generowania serii `MelodyNote` i tworzenia z nią instancji `Melody`. Czyni to w oparciu o „Progresję”. Sygnatura metody to „Generowanie melodii (progresja progresji)”. **Podsumowując:** Progresja **\--> skomponowana z** Akordów **\--> skomponowana z** Nuty Melodia **\--> skomponowana z** MelodyNote **Każdy obiekt kontroluje swoją wewnętrzną obiektów i eksponuje je.** Na przykład Chord ma logikę, aby odtwarzać swoje wewnętrzne notatki i ma metodę `getNotes()`, która zwraca je każdemu, kto musi wiedzieć. Na przykład, `MelodyGenerator` używa `progression.getChords()` do zbudowania melodii według określonej serii akordów. Używa również `chord.getNotes()` podczas wybierania nut do umieszczenia nad akordem. **Ostatnia rzecz:** generatory używają pojedynczej klasy `NotesAndChordsSupplier`, aby uzyskać potrzebne instancje Note i Chord. Przekazuje im istniejące instancje. * * * **System 2 - odpowiedzialny za dostarczanie interfejsu użytkownika do sterowania tworzeniem i odtwarzaniem muzyki.** Ten system został zaprojektowany przy użyciu **wzorca MVC.** Model hermetyzuje tworzenie i odtwarzanie muzyki. Widok to interfejs użytkownika, który udostępnia przyciski, które mówią modelowi, aby odtwarzał i tworzył nową muzykę. Kontroler jest powiadamiany przez Widok po naciśnięciu przycisków i wywołuje odpowiednie akcje na Modelu. **Model** Model zawiera `Progression`, `ProgressionGenerator`, `Melody` i `MelodyGenerator`. Kiedy każe mu generować nową muzykę, po prostu przekazuje zadanie generatorom. Kiedy każe mu grać muzykę, deleguje zadanie na melodię i progresję. Uproszczony kod: public void makeNewMusic(){ progression = progGenerator.generate(); melodia = melodyGenerator.generate(progresja); } public void playMusic(){ // to faktycznie uruchamia dwa oddzielne wątki, ale nie ma to znaczenia. progresja.play(); melodia.play(); } Model jest połączony (w luźny sposób) z dwoma obiektami: `Melodią` i `Widokiem` \- poprzez wzorzec Observer. Model implementuje dwa interfejsy: `Observer` i `Observable`. Jest zarejestrowany jako obserwator do melodii, a widok jest zarejestrowany jako obserwator do modelu. Kiedy Melody zakończy odtwarzanie, powiadamia swojego obserwatora - Model. Gdy Model zostanie powiadomiony, powiadamia swojego własnego obserwatora - Widok. W ten sposób widok otrzymuje powiadomienie o zakończeniu odtwarzania, dzięki czemu może ponownie włączyć przyciski interfejsu użytkownika, które zostały wyłączone podczas odtwarzania. **Widok** Widok jest interfejsem użytkownika i ma dwa przyciski: „Odtwórz” i „Nowa melodia”. Wywołują one odpowiednio `playButtonPressed()` i `newTuneButtonPressed()` na kontrolerze. Widok zawiera również metody `enableButtons()` i `disableButtons()`. Jak powiedziałem, Widok jest zarejestrowany jako Obserwator Modelu. Jest powiadamiany po zakończeniu odtwarzania muzyki, dzięki czemu może ponownie włączyć przyciski, które zostały wyłączone przez kontroler po rozpoczęciu odtwarzania. **Kontroler** Kiedy widok wywołuje `newTuneButtonPressed()` na kontrolerze, po prostu deleguje do Modelu: `model.makeNewMusic()`. Kiedy widok wywołuje `playButtonPreesed()` na kontrolerze, dzieją się dwie rzeczy. 1- Kontroler wywołuje `disableButtons()` w widoku. 2- Kontroler wywołuje `playMusic()` na Modelu. Wszystkie przyciski w widoku są wyłączone przez kontroler po rozpoczęciu odtwarzania muzyki. Kontroler rejestruje View jako obserwatora w modelu, a Model jako obserwatora w swoim członku Melody. * * * **Diagram klas UML ilustrujący architekturę** _(Uwaga: w tym poście pominąłem klasę`Scale`, co nie jest ważne. Zignoruj ją na diagramie)._ ![tutaj opis obrazka ](http://i.stack.imgur.com/Xi0mc.png) * * * **Dziękujemy za przeczytanie tego wszystkiego. Będę wdzięczny za wszelkiego rodzaju krytykę zorientowanego obiektowo projektu programu.** **Szczególnie, jak dobrze zasady SOLID i OO są zintegrowane w moim projekcie i jak mogę projektować więcej w duchu SOLID w przyszłości.* *


title: Jak mogę zidentyfikować przestrzeń nazw bez użycia literału ciągu?

text: Mój zespół ma wiele konwencji IOC, które wyglądają mniej więcej w stylu... if (type.Namespace == "My.Fun.Namespace") { // robienie rzeczy } Oczywiście utrzymywanie tego rodzaju rzeczy po pewnym czasie staje się brutalne i wolelibyśmy nie. Jedyną opcją, o jakiej mogłem pomyśleć, było przechowywanie ich wszystkich w jednym miejscu, jako stałe łańcuchowe lub coś w tym rodzaju, ale to nie jest dużo lepsze... Rozważaliśmy tworzenie klas, które zasadniczo służą jako identyfikatory przestrzeni nazw w celu mieć prawie typ zakotwiczenia, z którego można się wyłączyć, na przykład... if (type.Namespace == typeof(My.Fun.Namespace.MarkerClass).Namespace) { // do rzeczy } Ale to po prostu wydaje się dziwne. Czy istnieje inny sposób rozwiązania tego problemu, o którym po prostu nie wiemy? Jeśli nie, czy ktoś miał szczęście z koncepcją całej klasy znaczników?


title: Jak radziłbyś nie używać udostępnionego arkusza kalkulacyjnego do śledzenia błędów/problemów?

text: W naszej firmie programiści chcą używać odpowiedniego narzędzia do śledzenia błędów do zarządzania problemami w naszej aplikacji. Kierownictwo nalega jednak na korzystanie z udostępnionego arkusza kalkulacyjnego (wcześniej udostępnionego pliku Excel, teraz arkusza kalkulacyjnego w rozwiązaniu internetowym umożliwiającym równoczesny dostęp). Ich argumentem jest to, że arkusz kalkulacyjny pozwala im mieć bardziej szczegółowy wgląd w stan projektu, ponieważ widzą, ile błędów jest otwartych na pierwszy rzut oka. Pozwala im to również zobaczyć, kto pracuje nad każdym błędem i uzyskać oszacowanie czasu potrzebnego do zamknięcia ich wszystkich (ponieważ programiści są zobowiązani do wypełnienia oszacowania czasu błędu, nad którym pracują). Jak możesz zrozumieć, nie jest to praktyczne dla programistów (oprogramowanie do śledzenia błędów zostało wynalezione z jakiegoś powodu). Jak więc mogę polecić oprogramowanie do śledzenia błędów, aby ułatwić pracę programistom? Jako bonus, które oprogramowanie poleciłbyś, aby umożliwić kierownictwu uzyskanie informacji zwrotnych (liczba otwartych błędów, kto nad nimi pracuje, szacowanie czasu) z widokiem na wysokim poziomie?


title: Test zgodności i inna metoda testowania do wykorzystania podczas tworzenia oprogramowania

text: Dodam funkcję do oprogramowania i będę musiał zaktualizować lub zmodyfikować niektóre publiczne API obecnego oprogramowania open source. Jakie kroki można podjąć, aby zapewnić kompatybilność oprogramowania. jakie są metody testowania, które są używane w świecie open source do testowania nowo dodanych funkcji? Program Open Source to: Xapian


title: Nowy stopień; Aby przezwyciężyć całkowity brak doświadczenia, czy powinienem porzucić kreatywny projekt zwierzaka zamiast takiego, który wykazywałby bardziej przydatne umiejętności?

text: Obecnie pracuję nad projektem na githubie, który moim zdaniem byłby dobrą demonstracją mojej inicjatywy, kreatywności i entuzjazmu. Jest to gra edukacyjna, którą rozwijam w pygame, która umożliwia użytkownikowi nauczenie się poprawy produktywności programistycznej za pomocą vima, szczególnie z pythonem, chociaż nauka szybszego kodowania za pomocą vima powinna być możliwa do przeniesienia na dowolny język. Myślę, że jest to coś, co może mieć masowy urok i przynieść wymierne korzyści wielu ludziom. -Jednak- kończę studia za miesiąc (mój dyplom to informatyka z niepełnoletnią w języku angielskim), bez doświadczenia, które jest istotne, aby pomóc mi w znalezieniu jakiejkolwiek pracy w tej dziedzinie, i gpa, który nie reklamuje moje zasługi. Mógłbym rozpocząć karierę w tworzeniu gier, ale niekoniecznie to mnie najbardziej interesuje i widzę siebie aplikującego do startupów w całym kraju. Do miejsc, na które patrzę aplikując, pokazanie, że mam doświadczenie z pygame, będzie w dużej mierze nieistotne, z wyjątkiem demonstracji moich umiejętności kodowania, kropka. Wiele umiejętności, które są bardziej rynkowe, takie jak modelowanie danych, GIS, aplikacja mobilna, programowanie, javascript, .net framework i różne technologie tworzenia stron internetowych, nie zostaną zaprezentowane w tym projekcie (z drugiej strony pracodawcy lubią aby zobaczyć znajomość git i Pythona). Zastanawiam się, czy powinienem poświęcić cały swój wolny czas w ciągu najbliższych kilku miesięcy w ten projekt, ponieważ jestem nim zmotywowany i zainteresowany, i czy wartość wykazania ambicji i „dobrych pomysłów” (z braku lepszego terminu i moim zdaniem) zrekompensuje brak wykazania się bardziej pożądanymi umiejętnościami. Prawdopodobnie jestem w punkcie, w którym powinienem teraz albo w pełni zaangażować się w ten projekt, albo odłożyć go na bok na rzecz czegoś innego i skłaniam się ku kontynuacji tego, nad czym już pracuję, ponieważ uważam, że to świetny pomysł i coś, co można osiągnąć przy wystarczającym zaangażowaniu w ciągu najbliższych kilku miesięcy. Ale najważniejszą rzeczą dla mnie jest możliwość znalezienia pracy po college'u, o którą bardzo się martwię, ponieważ krajobraz zawodowy, po którym poruszam się po raz pierwszy, jest o wiele bardziej onieśmielający, niż mogłem się spodziewać, z prawie każdym praca (nawet krótkoterminowe kontraktowe) wymagająca wieloletniego doświadczenia, którego mi brakuje. ## Krótko mówiąc, wspólnym mianownikiem odpowiedzi na pytanie „Jak mogę sprostać wymaganiom związanym z doświadczeniem w pracy” wydaje się „Pochwal się własnym projektem”. Chcę wiedzieć, nad KTÓRYM projektem powinienem pracować, aby jak najlepiej zwiększyć moje szanse na znalezienie pracy po studiach, pamiętając, że nie mam doświadczenia. Uważam, że to pytanie ma zastosowanie do każdego nowego absolwenta, któremu brakuje widocznego doświadczenia.


title: Przypisanie ról w komunikacji, gdy strony mogą próbować oszukiwać

text: Załóżmy, że dwa węzły w sieci peer-to-peer inicjują komunikację. W tej komunikacji jeden węzeł musi pełnić funkcję „nadawcy”, inny – „odbiorcy” (nazwy ról są tu dowolne). Chciałbym, aby węzły potwierdzały obie role z mniej więcej równym prawdopodobieństwem. Oznacza to, że w N komunikacji z różnymi innymi węzłami dany węzeł przyjąłby rolę „nadawcy” mniej więcej N/2 razy. Ponieważ nie ma dostępnego zewnętrznego arbitra, węzły powinny uzgadniać swoje role, wymieniając wiadomości. Haczyk polega na tym, że możemy natknąć się na nieuczciwego węzła, który w większości lub we wszystkich przypadkach próbowałby zostać „odbiorcą” i nakłonić drugą stronę, aby zawsze służyła jako „nadawca”. Poszukuję algorytmu przypisywania ról stronom komunikacji, aby żadna strona nie mogła z dużym prawdopodobieństwem otrzymać z góry określonej roli. Strona, która próbuje oszukiwać, nie może się komunikować.


title: Kiedy używać kodu statusu HTTP 404 w API?

text: Pracuję nad projektem i po kłótni z ludźmi w pracy przez ponad godzinę. Postanowiłem dowiedzieć się, co mogą powiedzieć ludzie na giełdzie. Piszemy API dla systemu, jest zapytanie, które powinno zwrócić drzewo organizacji lub drzewo celów. Drzewo Organizacji to organizacja, w której użytkownik jest obecny. Innymi słowy, to drzewo powinno zawsze istnieć. W organizacji zawsze powinno być obecne drzewo celów. (to tam zaczęła się kłótnia). W przypadku, gdy drzewo nie istnieje, mój współpracownik zdecydował, że dobrze będzie odpowiedzieć na odpowiedź z kodem statusu 200. A potem zaczął mnie prosić o naprawienie kodu, ponieważ aplikacja rozpadała się, gdy nie ma drzewa. Postaram się oszczędzić płomienie i wściekłość. Zasugerowałem zgłoszenie błędu 404, gdy nie ma drzewa. Dałoby mi przynajmniej znać, że coś jest nie tak. Używając 200, muszę dodać specjalne sprawdzenie do mojej odpowiedzi w wywołaniu zwrotnym powodzenia, aby obsłużyć błędy. Oczekuję, że otrzymam obiekt, ale w rzeczywistości mogę otrzymać pustą odpowiedź, ponieważ nic nie zostanie znalezione. Oznaczenie odpowiedzi jako 404 brzmi całkiem uczciwie. I wtedy wybuchła wojna i dostałem wiadomość, że nie rozumiem schematu kodu statusu HTTP. Więc jestem tutaj i pytam, co jest nie tak z 404 w tym przypadku? Dostałem nawet argument "Nic nie znalazłem, więc słusznie jest zwrócić 200". Uważam, że to źle, bo drzewo powinno być zawsze obecne. Jeśli nic nie znaleźliśmy i czegoś się spodziewamy, powinien to być 404. # Więcej informacji, zapomniałem dodać adresy URL, które są pobierane. Organizacje /OrgTree/Get Goals /GoalTree/GetByDate?versionDate=... /GoalTree/GetById?versionId=... Mój błąd, oba parametry są wymagane. Jeśli zostanie podana jakakolwiek wersja versionDate, którą można przeanalizować do daty, zwróci wersję zamkniętą. Jeśli wprowadzisz coś w przeszłości, zwróci pierwszą wersję. Jeśli przez Id z identyfikatorem, który nie istnieje, podejrzewam, że zwróci pustą odpowiedź z 200. ### Extra Ponadto uważam, że najlepszą odpowiedzią na problem jest utworzenie domyślnych obiektów podczas tworzenia organizacji, nie mając drzewo nie powinno być prawidłowym przypadkiem i powinno być postrzegane jako niezdefiniowane zachowanie. Nie ma możliwości korzystania z konta bez obu drzew. Z tego powodu powinni być zawsze obecni. # też mam link do tego (jeden podobny, ale nie mogę go znaleźć) http://viswaug.files.wordpress.com/2008/11/http-headers-status1.png


title: Problemy z używaniem plików źródłowych przez Haskella

text: Niedawno zacząłem używać Haskell Platform. Stworzyłem plik źródłowy za pomocą Wordpada i nazwałem go add. Próbowałem go dwukrotnie kliknąć, aby otworzyć go w ghci, ale otrzymuję <[1 z 1] Compiling Main (C:\add.hs,interpeted) C:\add.hs:1:6: błąd parsowania na wejściu '\ ' Załadowano nieudane moduły: brak.> Co mam zrobić, aby móc użyć mojego pliku źródłowego?. Czy powinienem użyć innego edytora tekstu?. Dziękuję


title: Rozproszone narzędzia programistyczne — (kontrola wersji i zarządzanie projektami)

text: Ostatnio stałem się odpowiedzialny za wybór oprogramowania do kontroli źródeł i zarządzania projektami, które będzie używane w firmie, która mnie zatrudnia. Obecnie wykorzystuje Jira (zarządzanie projektami) i Subversion (kontrola wersji). Wiem, że istnieje wiele innych opcji - te, o których wiem, są w tym artykule http://mashable.com/2010/07/14/distributed-developer-teams/ . Skłaniam się ku zaleceniu, aby po prostu pozostali przy tym, co mają, ponieważ wydaje się to wykonalne, a każda zmiana musiałaby być warta kosztów przejścia na github/basecamp lub inne rozwiązanie. Kilka szczegółów na temat zespołu: * Jest to sklep z programami rozproszonymi. Spotkania całego zespołu w jednej sali są rzadkością. * Obecnie jest to bardzo mały zespół programistów (trzech programistów). * Oprogramowanie do zarządzania projektami jest używane przez programistów i jednego lub dwóch menedżerów produktu. Jakie masz doświadczenia z aplikacjami internetowymi do kontroli wersji i zarządzania projektami? Czy są jakieś, które poleciłbyś i uważasz, że warte są zmiany czasu na naukę nowych usług/wdrożenie zmiany? Edycja: Po dokształceniu się w zakresie opcji wydaje się, że DVCS oferuje potężne korzyści, w które warto zainwestować teraz, w przeciwieństwie do późniejszego okresu istnienia firmy, gdy koszt zmiany jest wyższy: jestem maniakiem Subversion, dlaczego powinienem rozważyć, czy nie rozważasz Mercurial, Git lub jakikolwiek inny DVCS?


title: Typowe błędy, które prowadzą do zepsutych niezmienników

text: Moim głównym źródłem dochodu jest tworzenie stron internetowych i dzięki temu zacząłem cieszyć się cudami programowania, ponieważ moja znajomość różnych języków wzrosła z biegiem lat dzięki pracy i osobistej zabawie. W pewnym momencie doszedłem do wniosku, że moje wykształcenie w college'u nie wystarczy i że chcę wrócić do szkoły, aby uzyskać dyplom uniwersytecki z informatyki lub inżynierii oprogramowania. Próbowałem wielu rzeczy w swoim życiu i zajęło mi trochę czasu, zanim znalazłem coś, co uważam za pasję i to jest to. Jest jednak jeden aspekt tego obszaru studiów, który mnie odrzuca. Wyzwaniem są dla mnie formalne metody udowodnienia poprawności programu. Nie chodzi o to, że mam problem z poprawnym pisaniem kodu, mogę spojrzeć na algorytm i zobaczyć, czy jest on poprawny lub wadliwy, ale czasami mam trudności z przełożeniem tego na formalne definicje. Dostałem doskonałe lub prawie doskonałe oceny z każdego zadania programistycznego, które wykonałem na poziomie uczelni, ale ostatnio dostałem zestaw podręczników od faceta z uniwersytetu Waterloo i stwierdziłem, że mam problemy, jeśli chodzi o kilka formalizmów . Cóż, w tym momencie to naprawdę tylko jedna rzecz. Naprawdę pomogłoby mi, gdyby ktoś z was mógł mi podać kilka dobrych przykładów typowych błędów, które prowadzą do uszkodzonych niezmienników, zwłaszcza w pętlach. Mam kilka podręczników do inżynierii oprogramowania i informatyki, ale pokazują one tylko, jak powinno być. Chciałbym wiedzieć, co się dzieje, aby łatwiej było rozpoznać, kiedy to się dzieje. Poruszanie tego tematu jest niemal żenujące, ponieważ formalizmy są tak naprawdę podstawowymi fundamentami, na których budowane są sprawy merytoryczne. Chcę to teraz przezwyciężyć, żeby nie przeszkadzało mi to później.


title: Jak zorganizować dużą aplikację Railsową?

text: Pracuję nad dużym (poziom ERP) projektem Rails. Posiadamy 150 stołów i ponad 150 modeli. Znalezienie modelki zajmuje kilka minut. Czy powinniśmy dodać wszystkie modele do folderu modeli, czy umieścić je w różnych podfolderach? To samo dotyczy kontrolerów i widoków.


title: Rola certyfikatów Microsoft ADO.Net, ASP.Net, WPF, WCF i Kariera?

text: **Jestem fanem firmy Microsoft i entuzjastą platformy .Net.** Chcę dopasować swoją karierę zawodową w zakresie obecnych i przyszłych technologii .Net. Mam MCTS w ASP.Net 3.5. Pytanie dotyczy kontynuacji certyfikacji i rozwoju mojej kariery, a może innej pracy! **Chcę nadążyć za przyszłymi technologiami Microsoft .Net.** Moja obecna praca jednak na to nie pozwala. Dlatego staram się o certyfikaty oparte na .Net, aby być na bieżąco z najnowszymi technologiami .Net. Moje pytania: 1. Jakimi certyfikatami powinienem następować? Mam w głowie MCTS .Net 3.5 WPF (Egzamin 70-502) i MCTS .Net 3.5 WCF (Egzamin 70-504), więc mogę iść na rozwój Silverlight i szukać pracy związanej z rozwojem Silverlight. 2. Jakie inne kroki muszę podjąć, aby rozwinąć profesjonalną wiedzę w zakresie technologii takich jak WPF, WCF i Silverlight, gdy mój obecny pracodawca niechętnie przechodzi na najnowsze technologie .Net? Jestem pewien, że jest tu wielu ludzi, którzy pracują z technologiami .Net i mają doświadczenie przemysłowe. Jako nowicjusz i początkujący w mojej karierze muszę podjąć właściwą decyzję, dlatego szukam pomocy tej społeczności w prowadzeniu mnie na właściwą ścieżkę.