title: Czy cele SMART są przydatne dla programistów?

text: Kilka znanych mi organizacji wykorzystuje cele SMART dla swoich programistów. SMART to akronim od słów „Specyficzny, mierzalny”, osiągalny, istotny i ograniczony w czasie. Są dość powszechne w dużych korporacjach. Moje wcześniejsze doświadczenia z celami SMART nie były aż tak pozytywne. Czy inni programiści uznali je za skuteczny sposób mierzenia wydajności? Jakie są przykłady dobrych celów SMART dla programistów (jeśli istnieją).


title: Jaka jest Twoja najlepsza technika whiteboardingu podczas współpracy z zespołem?

text: Chciałem wiedzieć, jakie rozwiązania stosujecie podczas modelowania szkiców na tablicach. Od czasu mojej lektury bardzo dobrej książki Crega Larmana Applying UML and Patterns, na co dzień zajmuję się modelowaniem biznesu i oprogramowania za pomocą tablic. Problem polega na tym, że trudno mi być „zwinnym” i „iteracyjnym” po wymazaniu tablicy i zrobieniu z niej migawki. Szkicowanie to dla mnie droga, ale gdy tylko cała moja praca zostanie sfotografowana w cyfrowym obrazie, nie widzę wymaganej wartości dodanej konieczności przerysowywania jej na tablicy lub używania narzędzia UML. Chciałem wiedzieć, jakie są wasze techniki dla tych z was, którzy wolą whiteboarding nad narzędziami UML? (oprogramowanie internetowe/komputerowe, sprzęt, materiały itp.), które stosujesz, aby osiągnąć te kryteria: * Udoskonalaj i powtarzaj poprzednie tablice, które zostały wymazane * Współpracuj zdalnie (nie tylko między salami) * Synchronizuj i jednocześnie pracuj nad Twoje szkice Przyszedłem, aby wyszukać tablice internetowe w Internecie i znalazłem następujące, które są całkiem fajne: * Vyew * Dabbleboard * Twiddla Jednak moje rozwiązanie wydaje się przechodzić przez Smart Technologies, zwłaszcza z ich oprogramowaniem Notebook, które jest bardzo dobre do tablicy wielu projektów. Zastanawiałem się również, czy niektórzy mają jakieś uwagi dotyczące tej aplikacji i ich oprogramowania konferencyjnego (wykorzystanie ich cyfrowych tablic itp.)


title: Jak efektywnie używać instrukcji switch z enum?

text: Chciałbym wiedzieć, jak mogę użyć wyrażenia `switch` z wartościami `enum` w następujących scenariuszach: Tworzę mały program do systemu rezerwacji lotów. Program ma na celu wprowadzenie pewnych szczegółów na temat pasażera. Program ogranicza również użytkownikowi możliwość wyboru miejsc docelowych innych niż następujące 3 miejsca docelowe. Po wybraniu miejsca docelowego numer lotu ma zostać przypisany automatycznie. Użytkownik wybierze jedną z trzech destynacji, a program przypisze pasażerowi odpowiedni numer lotu. Numer lotu zostanie przypisany jak poniżej: Numer lotu docelowego Londyn 201 Frankfurt 233 Berlin 241 Powiedzmy, że robię „wyliczenie” miejsc docelowych, to jak mogę użyć tutaj instrukcji switch? To nie jest praca domowa. Robię to tylko po to, by odkrywać.


title: Przejrzystość w Pythonie i Jythonie

text: Jestem programistą Java, ale chcę programować w Jythonie. Nigdy wcześniej nie programowałem w Pythonie, ale przeglądałem kilka samouczków i jestem pewien, że mogę to pojąć. Moje pytanie dotyczy jasności w sprawie Jythona. Rozumiem, że Jython daje radość z pisania kodu w Pythonie z dodatkową korzyścią dostępu do bibliotek Java. Czy to oznacza, że można zastosować wszystkie aspekty i praktyki kodowania Pythona, takie jak tworzenie animacji, struktury wejścia-wyjścia, czy też istnieje zupełnie nowa struktura, której należy się nauczyć, aby kodować Jythona?


title: Jakie jest znaczenie zwrotu Fałsz w funkcji PHP?

text: chciałem wiedzieć, co oznacza return False w funkcji. przejdź przez tę funkcję: function reset_password($password,$user_id) { $sql="UPDATE user SET password='$password' GDZIE user_id='$user_id'"; if(!mysql_query($sql,$this->mycon)) { array_push($this->err_msg,"Błąd podczas wstawiania - ".mysql_error($this->mycon)); zwróć fałsz; } else { //Zresetuj kod hasła. } } w tej funkcji chciałem wiedzieć, co oznacza return false.


title: Restrukturyzacja dużego rozszerzenia Chrome/aplikacji internetowej

text: Mam bardzo złożone rozszerzenie Chrome, które stało się zbyt duże, aby utrzymać je w obecnym formacie. Chciałbym to zmienić, ale mam 15 lat i jest to pierwsza aplikacja internetowa lub rozszerzenie tego typu, które zbudowałem, więc nie mam pojęcia, jak to zrobić. **TL;DR:** Mam dużą/złożoną aplikację internetową, którą chciałbym zrestrukturyzować i nie wiem jak to zrobić. **Czy powinienem postępować zgodnie z moim obecnym planem restrukturyzacji (poniżej)? Czy to brzmi jak dobry punkt wyjścia, czy może jest jakieś inne podejście, którego mi brakuje? Czy powinienem _nie_ robić żadnej z wymienionych przeze mnie rzeczy?** Chociaż nie ma to związku z pytaniem, rzeczywisty kod znajduje się na Github, a rozszerzenie znajduje się w sklepie internetowym. Podstawowa struktura jest następująca: **index.html** <html> <head> <link href="css/style.css" rel="stylesheet" /> <!-- Zawiera główne style aplikacji -- > <link href="css/widgets.css" rel="stylesheet" /> <!-- A ten zawiera style widżetów --> </head> <body class="unloaded"> <!-- Niski- elementy bazowe poziomu są tutaj „zakodowane na stałe”, klasa rozładowana jest używana do przejść i jest usuwana przy ładowaniu. np.: --> <div class="tab-container" tabindex="-1"> <!-- Tab nav --> </div> <!-- Szablony dla wszystkich części aplikacji i widżetów są przechowywane jako elementy tutaj. Planuję zmienić je na elementy <script> podczas restrukturyzacji, ponieważ <template> potrzebuje poprawnego kodu HTML. --> <template id="template.toolbar"> <!-- Treść szablonu --> </template> <!-- Szablony koniec --> <!-- Wtyczki --> <script type="text/ javascript" src="js/plugins.js"></script> <!-- Zawiera kod dla wszystkich widżetów, planuję przenieść go do sieci i pobrać wkrótce w razie potrzeby. --> <script type="text/javascript" src="js/widgets.js"></script> <!-- Zawiera główną aplikację JS. --> <script type="text/javascript" src="js/script.js"></script> </body> </html> **widgets.js** (initLog || (window.initLog = [])).push([new Date().getTime(), "Podczas ładowania strony jest przechowywany dziennik, dzięki czemu można analizować wydajność i wykrywać błędy"]); // Widgety są przechowywane w obiekcie i rozszerzane (za pomocą jQuery, ale prawdopodobnie przełączę się na podkreślenie, jeśli używam Backbone) w razie potrzeby var Widgets = { 1: { // Identyfikator widżetu, ustawia się tutaj, aby widżety mogły być pobierane przez ID id: 1, // Ponownie ID widżetu, jest używany po zduplikowaniu i odłączeniu obiektu widżetu size: 3, // Domyślny rozmiar, w tym przypadku średni kolejność: 1, // Kolejność pokazana w "sklepie" nazwa: " Pogoda", // Interwał nazw widżetów: 300000, // Interwał odświeżania nicename: "pogoda", // Rozmiary nazw bezpiecznych widżetów HTML i JS: ["tiny", "mały", "średni"], // Dostępne rozmiary widżetów desc: "Krótki opis widżetu", settings: [ { // Specyfikacje ustawień widżetu przechowywane jako tablica obiektów. Służą one do dynamicznego generowania wyskakujących okienek z ustawieniami widgetów. type: "list", nicename: "location", label: "Location(s)", placeholder: "Wprowadź lokalizację i naciśnij Enter" } ], config: { // Ustawienia widżetu zapisane w obiekcie tabs (patrz skrypt .js dla informacji o pamięci) size: "medium", location: ["San Francisco, CA"] }, data: {}, // Dane widżetu w pamięci podręcznej przechowywane lokalnie, dzięki temu mogą działać w trybie offline customFunc: function(cb) {} , // Widżety mogą opcjonalnie definiować funkcje niestandardowe w dowolnej części odświeżania obiektu: function() {}, // Pobiera dane z sieci i buforuje je lokalnie w danych, a następnie wywołuje render. Jest wywoływany po załadowaniu strony w celu szybszego ładowania render: function() {} // Renderuje widżet tylko przy użyciu informacji z danych, jest wywoływany podczas ładowania strony. } }; **script.js** (initLog || (window.initLog = [])).push([new Date().getTime(), "Te są również na końcu każdego pliku"]); // Wtyczki, rozszerzenia i globalne znajdują się tutaj. tj. Number.prototype.pad = .... var iChrome = function(refresh) { // Główny init iChrome, wywoływany z odświeżaniem podczas odświeżania, aby nie uruchamiać ponownie libs iChrome.Status.log("Rozpoczęcie generowania strony"); // Od teraz zdefiniowany jest iChrome.Status.log, używany zamiast initLog iChrome.CSS(); // Dynamicznie generuj CSS na podstawie ustawień iChrome.Tabs(); // Spowoduje to pobranie kart przechowywanych w pamięci (patrz pobieranie poniżej) i wyrenderowanie wszystkich kolumn i widżetów w razie potrzeby iChrome.Status.log("Wyrenderowane karty"); // Zostaną one pominięte w dalszej części tego fragmentu, ale są używane wszędzie // Sprawdza, czy jest justInstalled => pokaż pierwsze kroki są uruchamiane tutaj /* Główny init uruchamia absolutne minimum wymagane do wyświetlenia strony, to ustawia wszystkie nie -widoczne lub natychmiast potrzebne rzeczy (takie jak przeciąganie widżetów) po przekroczeniu limitu czasu */ iChrome.deferredTimeout = setTimeout(function() { iChrome.deferred(refresh); // Przekaż dalej odświeżanie, patrz wyżej }, 200); }; iChrome.deferred = function(odśwież) {}; // Powoduje to wywołanie modułów jeden po drugim w odpowiedniej kolejności, aby zakończyć renderowanie strony iChrome.Search = function() {}; // Moduły mają podstawową funkcję init i są pisane wielkimi literami i pisane wielkimi literami iChrome.Search.submit = function(val) {}; // Metody w modułach są pisane wielkimi literami, a nie wielkimi literami /* Pamięć rozszerzeń jest asynchroniczna i pobierana na początku plugins.js, a następnie jest przechowywana w zmiennej przetwarzanej przez iChrome.Storage. Moduł pobierający sprawdza, czy zdefiniowano processStorage, a jeśli zostanie wywołany, w przeciwnym razie ustawienia pozostają w iChromeConfig */ var processStorage = function() { iChrome.Storage(function() { iChrome.Templates(); // Szablony są odczytywane z ich elementów i przechowywane w pamięci podręcznej iChrome();// Init nazywa się }); }; if (typeof iChromeConfig == "object") { processStorage(); } ### Cele restrukturyzacji 1. **Wykorzystanie pamięci:** Chrome najwyraźniej ma przeciek pamięci w rozszerzeniach, próbują to naprawić, ale pamięć wciąż rośnie za każdym razem, gdy strona jest ładowana. Aplikacja używa również wiele samodzielnie. 2. **Czytelność kodu:** W tym momencie nie mogę śledzić tego, co jest wywoływane w kodzie. Podczas przepisywania kodu planuję wszystko odpowiednio skomentować. 3. **Współzależność modułów:** W tej chwili moduły często się odwołują, AFAIK to wcale nie jest dobre, ponieważ każda zmiana wprowadzona w jednym module może wpłynąć na niezliczoną liczbę innych. 4. **Tolerancja błędów:** W tej chwili odporność na błędy lub obsługa błędów jest bardzo mała. Jeśli widżet powoduje, że reszta strony przestaje się renderować, użytkownik powinien przynajmniej móc go usunąć. Szybkość nie jest obecnie problemem i chciałbym, żeby tak pozostało. ### Jak myślę, że powinienem to zrobić * Restrukturyzację należy wykonać za pomocą Backbone.js i zdarzeń wywołujących moduły (np. na storage.loaded => init). * Każdy moduł powinien znajdować się w swoim własnym pliku, myślę, że powinien istnieć zestaw podstawowych plików, na których wszystkie moduły mogą polegać i wywoływać bezpośrednio, a wszystko inne powinno być oparte na zdarzeniach. * Struktura widżetów powinna być w dużej mierze taka sama, ale może również powinny być podzielone na własne pliki. * AFAIK nie możesz załadować wszystkich szablonów do folderu, dlatego muszą pozostać w linii. * Grunt powinien być używany do łączenia wszystkich modułów, wtyczek i widżetów w jeden plik. Wszystkie szablony powinny być również wstępnie skompilowane. ### Pytanie: **Czy powinienem postępować zgodnie z moim obecnym planem restrukturyzacji? Czy to brzmi jak dobry punkt wyjścia, czy może jest jakieś inne podejście, którego mi brakuje? Czy powinienem _nie_ robić żadnej z wymienionych przeze mnie rzeczy?** Czy aplikacje napisane w Backbone są bardziej intensywne (pamięć i szybkość) niż te napisane w Vanilla JS? Ponadto, czy mogę oczekiwać poprawy poprzez odpowiednią restrukturyzację, czy też mój obecny kod jest tak dobry, jak można się spodziewać?


title: Architektura pulpitu wyświetlającego zagregowane statystyki

text: Chciałbym wiedzieć, jakie są wspólne wzorce architektoniczne dla poniższego problemu. Aplikacja internetowa A zawiera informacje o sprzedaży, użytkownikach, wyniku responsywności itp. Niektóre z tych informacji są intensywne obliczeniowo i/lub mają złożoną logikę biznesową (np. wynik responsywności). Buduję osobną aplikację (B) do zadań administratora wewnętrznego, która modyfikuje dane w aplikacji sieciowej A i raportuje dane z aplikacji sieciowej A. Do pisania planuję użyć spokojnego api. Np. utworzyć nową encję, zaktualizować encję itp. W aplikacji B chciałbym pokazać kilka wykresów i inne dane zbiorcze z ostatnich 12 miesięcy. Planuję przechowywać dane zbiorcze dla każdego miesiąca w redis. Niektóre dane powinny być aktualizowane częściej, np. co 10 minut. Mogę wymyślić 3 sposoby na zrobienie tego. 1. Zaplanowane zadanie w aplikacji B, które łączy się z interfejsem API aplikacji A, który udostępnia pewne zagregowane dane. Następnie aplikacja B przechowuje go w Redis i używa go do wizualizacji stron. Minusy: wykonuje złożone obliczenia w ramach zapytania internetowego, wymaga dużo pracy np. serwer i klient interfejsu API, przechowywanie itp., zalety: logika biznesowa nadal działa w aplikacji A. 2. Zaplanowane zadanie w aplikacji A, które agreguje dane w procesie innym niż WWW i przechowuje je bezpośrednio w Redis, aby umożliwić dostęp do aplikacji B. 3. Zaplanowane zadanie w aplikacji A, które agreguje dane w procesie innym niż WWW i używa interfejsu API w aplikacji B do ich zapisania. Chciałbym wiedzieć, czy istnieje dobrze znane rozwiązanie architektoniczne tego typu problemów, a jeśli nie, jakie są inne zalety/wady rozwiązania, które zasugerowałem?


title: Czy definicje kroków ogórka w Javie powinny być metodami statycznymi czy metodami instancji?

text: Jesteśmy nowi w użyciu ogórka z selenem do pisania zautomatyzowanych zestawów testów. Naszym początkowym podejściem było posiadanie jednej klasy Java na plik funkcji. Teraz dodaliśmy metody instancji w każdej klasie dla odpowiednich definicji kroków. Teraz, jeśli musimy ponownie użyć definicji kroku w innym pliku funkcji, napotykamy problemy, ponieważ nie możemy ponownie użyć tej samej adnotacji z tym samym wzorcem regex z żadną inną metodą innej klasy, ani nie możemy użyć istniejącej definicji kroku który jest w innej klasie. Te metody współdzielą zmienne instancji, takie jak odwołanie do sterownika. Teraz ponowne użycie metody instancji jako definicji kroku jest również problemem, ponieważ tych metod nie można ponownie użyć poza klasą i nie mogę umieścić wszystkich definicji kroków w jednej klasie. Przyjrzałem się niektórym próbkom ruby, odkryłem, że piszą one pewnego rodzaju bloki, które nie mają dostępu do stanu współdzielonego. Po prostu wykonują kroki. Czy więc w Javie powinienem zawsze tworzyć statyczne metody, które po prostu wykonują kroki jeden po drugim i nie udostępniają żadnego stanu?


title: Czy codzienne zatwierdzanie/wpisywanie kodu to dobra praktyka?

text: Czytałem notatkę Martina Fowlera na temat ciągłej integracji i jako obowiązkową wymienia on „Każdy codziennie angażuje się w główną linię”. Nie lubię zatwierdzać kodu, chyba że sekcja, nad którą pracuję jest kompletna i że w praktyce zatwierdzam swój kod co trzy dni: jednego dnia, aby zbadać/odtworzyć zadanie i dokonać wstępnych zmian, drugiego dnia, aby dokończyć zmiany , a trzeciego dnia napisać testy i posprzątać je przed przesłaniem. Nie czułbym się komfortowo, przesyłając kod wcześniej. Teraz ściągam zmiany z repozytorium i integruję je lokalnie, zwykle dwa razy dziennie, ale nie robię tego często, chyba że mogę wykroić mniejszy kawałek pracy. **Pytanie:** czy codziennie stosuje tak dobrą praktykę, że powinienem zmienić swój przepływ pracy, aby się do tego dostosować, czy nie jest to wskazane? _**Edytuj:_** Myślę, że powinienem był wyjaśnić, że miałem na myśli "zatwierdź" w znaczeniu tego słowa w CVS (aka "push"), ponieważ prawdopodobnie to miał na myśli Fowler w 2006 roku, kiedy to pisał. ^ Kolejność jest bardziej dowolna i zależy od zadania, chodziło mi o zilustrowanie przedziału czasu i czynności, a nie dokładnej kolejności.


title: Czy istnieją oferty (bezpłatne lub tanie) licencjonowania programu Visual Studio dla programistów typu open source?

text: Mam kilka projektów open source, ale nie mam już licencji na Visual Studio. Słyszałem, że Resharper ma jakąś umowę z współtwórcami projektów open-source. Czy jest coś podobnego dla Visual Studio? Dziękuję. * * * **EDYTUJ** ps: Głównym projektem, o który się martwię, jest DotNetZip. Używam edytora tekstu o otwartym kodzie źródłowym do modyfikowania kodu i plików projektu; a projekt jest hostowany w CodePlex, do którego mogę się dostać za pomocą „bezpłatnych” narzędzi wiersza polecenia Visual Studio TFS. Moim głównym problemem jest to, że nie mogę już projektować ani uruchamiać testów, które umieściłem w kodzie. Wiem, że istnieje Nunit i inne alternatywne frameworki testowe, ale kod jest już oprzyrządowany dla MSTest (chyba tak jest) i chciałbym, aby testowanie było stabilne, jeśli to możliwe. **EDIT2** Wiem o DreamSpark, ale nie jestem studentem. Po prostu deweloper projektu open source. **EDIT3** Myślę, że lepszym pytaniem może być _jaka jest najtańsza opcja dla mnie, indywidualnego programisty open-source, aby licencjonować Visual Studio, aby móc przeprowadzać testy w moim projekcie?_


title: Stary programista zniknął. Zamierzam zatrudnić innego programistę. Jak mam do tego podejść?

text: Po ponad roku pracy nad projektem sieci społecznościowej dla mnie przy użyciu WordPressa i BuddyPressa, mój programista zniknął, mimo że otrzymywał wynagrodzenie co tydzień, przez cały okres. Tak, nie umarł, ponieważ użyłem narzędzia do śledzenia poczty e-mail, aby potwierdzić i zobaczyć, że otwiera moje e-maile, ale nie odpowiada. Wygląda na to, że dostał inną pracę. Zastanawiam się, dlaczego po prostu nie mógł tego powiedzieć. I nawet wypłaciłem mu zaliczkę za pracę, której nie wykonał. Problem polega na tym, że nigdy nie poprosiłem o pełną dokumentację dla większości funkcji, w których kodował. I było WIELE funkcji na ten ponad rok, a niektóre z nich mają błędy, których on nadal nie naprawił. Teraz wszystko wydaje się zagmatwane. Jaka jest pierwsza rzecz, którą powinienem teraz zrobić? Jak mam postępować? Myślę, że pierwszą rzeczą do zrobienia będzie znalezienie innego programisty, ale chcę zacząć od właściwej ścieżki, od udokumentowania całego aktualnego kodu, aby każdy programista mógł pracować nad wszystkimi funkcjami bez problemów. Czy to pierwsza rzecz, którą powinienem zrobić? Jeśli tak, jak mam się do tego zabrać? Jaki jest standardowy typ dokumentacji wymaganej do czegoś takiego? Czy mogę dostać programistę, który po prostu zrobi dokumentację dla wszystkich kodów i naprawi błędy, czy też dokumentacja nie jest naprawdę ważna? Poza tym, czy uważasz, że lepszym rozwiązaniem jest zdobycie kolejnego "indywidualnego" programisty, czy firmy, w której pracują programiści, aby w przypadku zniknięcia programisty przypisanego do mojego projektu inny mógł go zastąpić bez mojego udziału? Czuję, że to jest podejście, które powinienem był przyjąć na początku.


title: Jak przeanalizować scenariusz, w którym błąd nie został wykryty i dostosować przepływ pracy deweloperskiej, aby zapobiec podobnym błędom?

text: Miałem błąd, który był naprawdę trudny do wyśledzenia, ponieważ wszystkie testy jednostkowe były zielone, ale aplikacja produkcyjna nie działała poprawnie. Oto, co się stało: miałem klasę filtra, która ustawiała moją aplikację tak, aby ignorowała dane, które nie znajdowały się w określonych oknach czasowych. * Test jednostkowy, który wydawał mi się dokładny, zmienił kolor na zielony. * Dodatkowo moje testy integracyjne również przyniosły oczekiwane wyniki. * Produkcja jednak nie działała. * W wyniku dwóch pierwszych pocisków problem ten był bardzo trudny do znalezienia. Okazało się, że problem polegał na tym, że moje daty testów używały mojej strefy czasowej (Ameryka/Chicago), ale dane produkcyjne podawały daty w UTC, z czego nie zdawałem sobie sprawy, a logika filtra nie była poprawna dla dat UTC. (Używałem obiektów `DateTime` w czasie joda). 1. **Gdzie nastąpiła awaria mojego przepływu pracy?** * Czy nie udało mi się utworzyć specyfikacji określającej, że logika jest potrzebna do obsługi dat w dowolnej strefie czasowej? * Czy nie przeanalizowałem dokładnie wszystkich przypadków na poziomie testu jednostkowego? * Czy nie udało mi się zapewnić, że test integracyjny był wystarczająco podobny do produkcyjnego? * Inny? 2. **Jakie zmiany mogę wprowadzić w przepływie pracy, aby lepiej zapobiegać tego rodzaju błędom w przyszłości?** 3. **W jaki sposób mogę skuteczniej debugować problem, gdy występuje problem w środowisku produkcyjnym, ale nie w testach?* *


title: Czy mądrze jest przechowywać klucze aplikacji, identyfikatory itp. bezpośrednio w aplikacji?

text: Słyszałem, jak niektórzy mówią, że tak nie jest, ale nigdy nie sugerują alternatywy. Czy to prawda? **AKTUALIZACJA** Czy jest możliwe przechowywanie tego zewnętrznego z aplikacji i wywołanie go?


title: Czy można częściowo zmienić kolekcję za pomocą PUT lub DELETE?

text: Mam kolekcję produktów w grupie produktowej np.: product-groups/123/products 1. Jeśli muszę **dodać** do kolekcji, czy mogę przekazać tylko **niektóre** produkty z PUT? 2. Jeśli muszę usunąć **niektóre** produkty z kolekcji, czy mogę przekazać **dane filtru** (tablicę identyfikatorów) za pomocą polecenia DELETE? Jak najlepiej wdrożyć funkcjonalność w duchu ReST? Edycja: elementy są linkami do oddzielnych podmiotów, w zasadzie identyfikatorami produktów.


title: Jak czysto zaprojektować centralną pętlę renderowania/animacji?

text: Uczę się programowania graficznego i jestem w trakcie swojego pierwszego takiego projektu o jakiejkolwiek treści. Ale w tej chwili naprawdę zmagam się z tym, jak to zaprojektować czysto. Pozwól mi wyjaśnić. Aby wyświetlić skomplikowaną grafikę w wybranym przeze mnie języku (JavaScript -- słyszałeś o tym?), musisz narysować zawartość graficzną na elemencie `<canvas>`. Aby wykonać animację, musisz wyczyścić `<canvas>` po każdej klatce (chyba że chcesz, aby poprzednie grafiki pozostały). Tak więc większość demonstracji JavaScript związanych z kanwą, jakie widziałem, ma funkcję taką jak ta: function render() { clearCanvas(); // tutaj rysuj requestAnimationFrame(render); } `render`, jak można się domyślać, zamyka rysunek pojedynczej klatki. Co zawiera pojedyncza ramka w określonym momencie, cóż... to jest określone przez stan programu. Tak więc, aby mój program wykonał swoje zadanie, wystarczy spojrzeć na stan i zdecydować, co ma zostać wyrenderowane. Prawidłowy? Prawidłowy. Ale to jest bardziej skomplikowane, niż się wydaje. Mój program nazywa się "Critter Clicker". W moim programie widzisz kilka uroczych zwierzątek podskakujących po ekranie. Kliknięcie na jeden z nich pobudza go, sprawiając, że odbija się jeszcze bardziej. Dostępny jest również ekran startowy z napisem „Kliknij, aby rozpocząć!” przed wyświetleniem stworzeń. Oto kilka obiektów, z którymi pracuję w moim programie: StartScreenView // reprezentuje ekran startowy CritterTubView // reprezentuje obszar, w którym żyją zwierzaki CritterList // zbiór wszystkich zwierzaków Critter // pojedynczy model zwierzaka CritterView // widok pojedynczego zwierzaka Nie ma w tym nic zbyt rażącego, jak sądzę. Jednak gdy zaczynam rozwijać swoją funkcję „renderowania”, utknęłam, bo wszystko, co piszę, wydaje mi się okropnie brzydkie i przypomina pewną popularną włoską potrawę. Oto kilka podejść, których próbowałem, z włączeniem mojego wewnętrznego procesu myślowego i pominięciem niepowiązanych fragmentów dla jasności. ### Podejście 1: "Warunki są na samym dole" // "Po prostu napiszę program tak, jak myślę, klatka po klatce." if (assetsLoaded) { if (userClickedToStart) { if (critterTubDisplayed) { if (crittersDisplayed) { forEach(crittersList, function(c) { if (c.wasClickedRecently) { c.getAgitated();}}); } else { displayCritters(); } } else { displayCritterTub(); } } else { displayStartScreen(); } } To bardzo uproszczony przykład. Jednak nawet przy widocznym tylko ułamku wszystkich warunków renderowania, „renderowanie” zaczyna już wymykać się spod kontroli. Więc rezygnuję z tego i próbuję innego pomysłu: ### Podejście 2: Pod dywan // "Każdy obiekt widoku będzie odpowiedzialny za własne renderowanie. // "Przekażę każdemu obiektowi stan programu i każdy może renderować się." startScreen.render(state); critterTub.render(state); critterList.render(state); Innymi słowy, „startScreen.render” sprawdzi „stan”, aby zobaczyć, czy rzeczywiście trzeba go narysować, czy nie, i podjąć właściwą akcję. Wydaje się jednak, że rozwiązuje to tylko problem związany z estetyką kodu. Trzeci i ostatnie podejście, które rozważam, którym się podzielę, to pomysł, że mógłbym wymyślić własne „koło”, aby się tym zająć.Wyobrażam sobie funkcję, która przyjmuje strukturę danych, która określa, co powinno się wydarzyć w danym punkcie w wywołaniu `render` -- ujawniając warunki i zależności jako rodzaj drzewa. ### Podejście 3 : Mad Scientist renderTree({ phases: ['startScreen', 'critterTub', 'endCredits'], dependencies: { startScreen: ['assetsLoaded'], critterTub: ['startScreenClicked'], critterList ['critterTubDisplayed'] // etc }, wyjątki: { startScreen: ['startScreenClicked'], // itd. } }); To wydaje się fajne. Nie jestem do końca pewien, jak to faktycznie działa, ale widzę, że jest to dość sprytny sposób wyrażania rzeczy, zwłaszcza jeśli flexuję niektóre zdarzenia JavaScript. W każdym razie jestem trochę zakłopotany, ponieważ nie widzę oczywistego sposobu, aby to zrobić. Jeśli nie możesz powiedzieć, przechodzę do tego ze świata tworzenia stron internetowych i stwierdzam, że robienie animacji jest nieco bardziej egzotyczne niż tworzenie aplikacji MVC do obsługi prostych żądań -> odpowiedzi. * * * Jakie jest czyste, sprawdzone rozwiązanie tego powszechnego problemu typu „myślę, że”?


title: Jakie zmiany mogę wprowadzić w moim IDE, aby zminimalizować skutki mojej dysleksji?

text: Programuję i mam dysleksję. Moja wizja jest doskonała. Słabo przetwarzam symbole i jestem myślicielem wizualnym. Kiedy koduję, jestem wolniejszy niż normalni ludzie, ponieważ jestem nieprzewidywalnie nieświadomy błędów, które popełniam. Uczę się Pythona, a środowiska programistyczne zawierające tylko tekst powodują u mnie duży stres wizualny; Używam Wingware, które jest nieco pomocne, ale nie mogę wykonać zadań w wyznaczonym czasie. Czy możesz zaproponować zakwaterowanie, które by mi pomogło? Jakie adaptacje byłyby dla mnie pomocne? Czy jest jakiś sposób na automatyczne znajdowanie, zaznaczanie i naprawianie tego rodzaju błędów? Korekta, widzę to, czego oczekuję lub coś znajomego. Nie zauważam literówek, pomijam linie itp., a błędy pojawiają się w testach. Nawet kopiując i wklejając mogę przegapić linie i spowodować błędy. Bloki tekstu od marginesu do marginesu przyprawiają mnie o ból głowy, podobnie jak niektóre kombinacje kolorów Nie przetwarzam tekstu jako symboli, raczej jako obiektów, które można obracać, transponować tak, aby cyfry w liczbie przesuwały się w różne miejsca, mogę dostrzec „123” JAK „132”, LITERY „pddq” wyglądają tak samo dla mnie. Uważam to za trudne - ten sam kształt obrócony i odbity.


title: Czy termin „portal internetowy” jest przestarzały?

text: Mój szef używa terminu „portal” do projektu, nad którym cały czas pracuję. Dla mnie to słowo kojarzy mi się z Yahoo w późnych latach 90-tych. Czy słowo „portal” ma konotacje oldschoolowe, czy to tylko ja? Czy uważasz, że używanie go jest w porządku, czy może przeciągnie postrzeganie produktu przez naszych klientów w średniowiecze?


title: Wyszukiwanie interpolacyjne a wyszukiwanie binarne

text: Kiedy należy używać wyszukiwania interpolacyjnego zamiast wyszukiwania binarnego? Na przykład mam posortowany zestaw danych, w jakich sytuacjach należy użyć wyszukiwania binarnego, aby znaleźć element w tym zestawie danych lub w jakiej sytuacji należy użyć wyszukiwania interpolacyjnego? Jakie właściwości zbioru danych byłyby decydującym czynnikiem?


title: Różnice między programowaniem w szkole a programowaniem w przemyśle?

text: Wielu studentów po ukończeniu studiów i dostaniu pierwszej pracy czuje, że tak naprawdę nie umie programować, mimo że mogli być dobrymi programistami na studiach. Jakie są różnice między programowaniem w środowisku akademickim a programowaniem w „rzeczywistym świecie”?


title: Zdarzenia HTTP? Czy jest na to standard / precedens?

text: Naszą architekturą są serwery HTTP (napisane na zamówienie), dzięki którym niestandardowi klienci wysyłają żądanie HTTP o pewne informacje, a informacje są zwracane tak, jak działa HTTP. Ale potrzebujemy specjalnego niestandardowego „rozszerzenia”, które jest żądaniem, które jest subskrypcją na otrzymywanie asynchronicznych „zdarzeń” w zasobie. Na przykład klient wysyła żądanie http subskrybując zdarzenia na jakiejś jednostce. Ponieważ „encja” generuje zdarzenia, są one przekazywane do serwera http, a serwer http musi następnie wyszukać subskrypcje dla tej jednostki i wysłać komunikat o zdarzeniu do wszystkich subskrybowanych klientów. Mam nadzieję, że to ma sens. Więc moje pytania to: * Czy zostało to zrobione wcześniej / czy istnieje standard, na który powinienem się przyjrzeć? * Jeśli nie ma standardu, jakieś sugestie, jak wdrożyć? * W jaki sposób serwer http wysyła niechcianą „wiadomość” do klienta?


title: Zaimplementować stronę rejestracyjną w Vaadin czy nie?

text: To jest taktyczne pytanie dotyczące implementacji dotyczące użycia Vaadin lub jakiejś części mojej aplikacji. Vaadin to świetna platforma do logowania użytkowników i wdrażania zaawansowanych aplikacji internetowych z wieloma stronami. Myślę jednak, że nie jest to zbyt dobrze przystosowane do projektowania stron w celu rejestrowania nowych użytkowników dla mojej aplikacji. Czy mam rację? Czy się mylę? Wydaje mi się, że prosty login HTML/CSS/Javascript + rejestracja e-mail + e-mail potwierdzający z linkiem potwierdzającym nie może być łatwo zaimplementowany w Vaadin. Wygląda na to, że Vaadin byłby przesadą. Czy sie zgadzasz? A może czegoś mi brakuje? Oczekuję opinii od doświadczonych użytkowników Vaadin.


title: Jak analizować różne typy liczb za pomocą LALR(1)

text: Rozważ parser LALR(1) dla formatu pliku, który pozwala na liczby całkowite i liczby zmiennoprzecinkowe. Jak zwykle, coś w rodzaju `42` powinno być prawidłową liczbą całkowitą i poprawną liczbą zmiennoprzecinkową (z pewną automatyczną konwersją w tle). Mogą istnieć reguły parsowania, w których oczekiwana jest liczba zmiennoprzecinkowa lub całkowita, oraz inne, w których oczekiwana jest _tylko_ liczba całkowita, np.: foo1 : bar FLOAT buzz | bar INT brzęczenie ; foo2 : trochę INT inne rzeczy ; Rozważmy teraz coś takiego jak foo3: bar FLOAT xyz FLOAT abc FLOAT brzęczenie; ale w każdej pozycji w tej regule, zamiast `FLOAT`, dozwolone jest również `INT`. * Przekształcenie tej reguły w 8 reguł (jedna reguła dla każdej kombinacji `FLOAT` i `INT`) nie wchodzi w grę. (Rozważ regułę zawierającą 4 lub 5 liczb...) * Używając reguły typu float_or_int : FLOAT | INT; nie pomoże, ponieważ generalnie ta reguła zredukuje wszystkie `INT` do `float_or_int`, a reguł takich jak `foo2` nie można już analizować. (Ponieważ przy wystarczająco dużej gramatyce, jednotoetonowy lookahead nie może uniknąć konfliktów shift-reduce- wynikających z tej reguły.) * Gdy leksyk widzi liczbę bez kropki dziesiętnej, nie może zdecydować, czy parser aktualnie oczekuje int czy pływak lub wew. Jak można to zrobić w elegancki sposób?


title: Jak włączyć język obcy do praktyki?

text: Mamy tu kilku stażystów, którzy mają zlecenia ze studiów, aby zintegrować mówienie, czytanie i pisanie po francusku z ich stażem. Wszyscy pracują nad stworzeniem własnej aplikacji internetowej i zastanawiam się, jak możemy zintegrować francuski z ich projektami. Oto kilka rzeczy, które wymyśliłem: * Przetłumacz cały front-end projektu na francuski * Napisz francuską dokumentację do projektu * Promuj aplikację we francuskiej społeczności * Mów po francusku (wyłącznie?) do naszych kierowników projektów Wszelkie inne pomysły lub sugestie? Czy ktoś jeszcze ma z tym doświadczenie?


title: Jak zmienić licencję na licencję typu open source?

text: Otrzymałem pozwolenie na zredukowanie reguł z naszej niestandardowej licencji używanej w projekcie Advanced Electron Forum. Nie jestem pewien, co dokładnie jest potrzebne, aby licencja była powyżej licencji open source dla produktu, ale myślę, że trzeci termin jest tym, który powinien zostać usunięty/zmieniony. Z poważaniem.


title: Jaki silnik graficzny jest używany w Photoshopie

text: Zastanawiam się, jaki jest domyślny silnik graficzny używany w Photoshopie? To świetne narzędzie. I nie wiem, jak oni to robią? Chodzi mi o to, że jeśli chcę stworzyć takie proste narzędzie, użyję MFC/GDI+. Więc co jest podstawą, aby Photoshop był świetnym narzędziem?


title: Kiedy należy używać BooleanUtils.isTrue(...) i BooleanUtils.isFalse(...)?

text: O tej funkcji: `org.apache.commons.lang3.BooleanUtils.isFalse(Boolean bool)` i podobny `isTrue`, mój współpracownik (mniej doświadczony) używa go do **każdej** wartości logicznej w kodzie. Staram się go przekonać, że to nie jest dobra praktyka, ponieważ sprawia, że kod jest mylący. W moim POV powinna być używana TYLKO, jeśli testowana wartość logiczna jest typem nieprymitywnej `Boolean` i może być `null`. Właściwie nawet to uważam za niepotrzebne, ponieważ implementacja tej funkcji to po prostu `Boolean.TRUE.equals(bool)` lub `Boolean.FALSE.equals(bool)`. W każdym razie myślę, że to całkowicie szalone zrobić coś takiego: boolean isReady = true; if (BooleanUtils.isTrue(isReady)) { // ... } po prostu wykonaj if (isReady) { // ... } lub `(!isReady)` w przeciwnym razie. Jego jedynym argumentem, aby tego użyć, jest „łatwe do odczytania”. Po prostu nie mogę zaakceptować tego argumentu. Czy się mylę? Jakich argumentów mogę użyć, aby przekonać go, że żaden bezużyteczny kod nie jest lepszy od bezużytecznego kodu w tym przypadku? Dzięki chłopaki.


title: Wydajność operacji modyfikacji NoSQL

text: Pracuję nad aplikacją, która w niedalekiej przyszłości (miejmy nadzieję) będzie musiała przetwarzać dziesiątki lub setki tysięcy pozycji (pozycja to obecnie jeden wiersz w tabeli relacyjnej bazy danych) na sekundę. Jeśli dobrze zrozumiałem, bazy danych NoSQL są superbohaterami w wyszukiwaniu danych dzięki magii map-reduce. Ale czy bazy danych NoSQL zapewnią dodatkową wydajność w porównaniu z relacyjnymi w moim przypadku?


title: Co zrobić, jeśli zadanie jest zbyt trudne? Staż/Szkolenie letnie

text: Swoje letnie szkolenie lub staż prowadzę przez 2 miesiące w firmie informatycznej jako Sysadmin i Web developer. To mój pierwszy tydzień. Mój mentor przydzielił mi pracę nad istniejącym projektem Flash/AS3 (sam), aby go udoskonalić i dodać nowe funkcje. (Myślę, że nie było to częścią mojego planu treningowego) Problem polega na tym, że nigdy nie pracowałem nad AS3, więc poświęciłem swój czas w tym tygodniu, aby dowiedzieć się o nim jak najwięcej. Dzisiaj zobaczyłem kod źródłowy projektu i został on zlecony na zewnątrz z 3500 linijkami kodu plus żadnych komentarzy ani żadnej dołączonej dokumentacji. Panikuję . W firmie nie ma nikogo z doświadczeniem AS3/Flash ani mojego mentora. Nie jestem pewien, czy mogę wykonać zadanie z ich wymaganiami. Jak na pewno potrzebuje doświadczonego programisty w tej dziedzinie, dodatkowo mam tylko 2 miesiące - więc to krótko. Stąd pytam tutaj i szukam rad i sugestii co dalej. Czy mam go zapytać i wyjaśnić? czy powinienem zaryzykować i (spróbować) nad tym pracować? Co jeśli zawiodę? Z góry dzięki! EDIT: Nie jestem pewien, czy mam wykonać zadanie w 2 miesiące. Jestem pewien, że mniej, że pracuję przy innych projektach. Tak naprawdę nie pytałem. Ponieważ nie mieszkam w Stanach Zjednoczonych, nie jestem pewien, czy stażysta jest właściwym słowem. Każdy student uczelni jest zobowiązany do odbycia praktyki wakacyjnej przez 2 miesiące w firmie. Na koniec albo zaliczy kurs, albo nie.


title: Czy captcha są warte zmniejszonej użyteczności?

text: Kiedy warto używać captcha? Kiedy to niepotrzebna przeszkoda? Czy captcha to tylko szybka naprawa dla leniwego/niedoświadczonego programisty, czy naprawdę jest to najlepszy sposób na zapobieganie spamowi i botom?


title: Czy istnieje czysta alternatywa dla WTF, która komunikuje się z programistami?

text: > **Możliwy duplikat:** > Inny termin na określenie wspólnego zapachu kodu Programiści od razu wiedzą, co mam na myśli, mówiąc o znalezieniu „WTF” w bazie kodu. W szczególności jest to rzeczownik, który odnosi się do skrajnie błędnego podejścia/wdrożenia, a nie typowo wykrzyknika (chociaż może być używany również jako wykrzyknik). Nie chcę używać wyrażeń, które cienko przesłaniają nieprzyzwoitość, ale nie przychodzi mi do głowy żaden substytut, który szybko i zwięźle przekaże tę ideę. Jakieś pomysły?


title: Jak obliczyć koszt kursu, który udzielę?

text: Zamierzam przeprowadzić kurs javascript dla niektórych programistów w lokalnej firmie, znam wszystkie przedmioty, których będę uczyć i oszacowuję czas trwania, pamiętaj też, że kurs będzie dla doświadczonych programistów, więc będzie zawierał wiele zaawansowanych przedmiotów. Nie wiem jak obliczyć mój koszt, ktoś tam ma doświadczenie i może mi doradzić?


title: Oddziel działanie od stwierdzenia w testach jednostkowych

text: ## Konfiguracja Wiele lat temu przyjąłem styl testowania jednostkowego, który bardzo mi się spodobał. Krótko mówiąc, używa klasy bazowej do oddzielenia Arrangement, Action i Assertion testu na osobne wywołania metod. Robisz to, definiując wywołania metod w [Setup]/[TestInitialize], które będą wywoływane przed każdym uruchomieniem testu. [Ustawienia] public void Setup() { before_each(); //układ ponieważ(); //akcja } Ta klasa bazowa zwykle zawiera również wywołanie [TearDown], gdy używasz tej konfiguracji do testów integracyjnych. [TearDown] public void Cleanup() { after_each(); } To często rozbija się o strukturę, w której klasy testowe dziedziczą z serii klas Given, które składają się na konfigurację (tj. GivenFoo : GivenBar : WhenDoingBazz) z Asercjami będącymi testami jednowierszowymi z opisową nazwą tego, co obejmują [Test ] public void ThenBuzzSouldBeTrue() { Assert.IsTrue(result.Buzz); } ## Problem Istnieje bardzo niewiele testów, które owijają się wokół pojedynczej akcji, więc kończy się na wielu klasach, więc ostatnio zająłem się definiowaniem akcji za pomocą serii metod w samej klasie testowej: [Test] public void ThenBuzzSouldBeTrue () { ponieważ_działanie_zostało_podjęte(); Assert.IsTrue(wynik.Buzz); } private void because_an_action_was_taken() { //wykonaj akcję tutaj } Powoduje to powstanie kilku metod „akcji” w klasie testowej, ale pozwala na grupowanie podobnych testów (np. class == WhenTestingDifferentWaysToSetBuzz) ## Pytanie Czy ktoś inny ma lepszy sposób oddzielając trzy „A” z testowania? Czytelność testów jest dla mnie ważna, więc wolałbym, aby w przypadku niepowodzenia testu sama struktura nazewnictwa testów informowała o tym, co się nie powiodło. Jeśli ktoś może odczytać strukturę Inheritance testów i dobrze wiedzieć, dlaczego test może się nie powieść, to czuję, że dodaje to dużo wartości do testów (np. GivenClient : GivenUser : WhenModifyingUserPermissions : ThenReadAccessShouldBeTrue). Jestem świadomy testów akceptacyjnych, ale jest to bardziej na poziomie jednostki (lub serii jednostek) z wyśmiewanymi warstwami brzegowymi. _EDIT_: Moje pytanie brzmi, czy istnieje zdarzenie lub inna metoda wykonania bloku kodu przed poszczególnymi testami (coś, co można zastosować do określonych zestawów testów bez zastosowania do wszystkich testów w klasie, tak jak obecnie robi to [Setup] Czy istnieje inna metoda osiągnięcia tego samego, jeśli nie istnieje to zdarzenie, co do którego jestem prawie pewien, że nie istnieje? Używanie [Setup] dla każdego przypadku stanowi problem w każdym przypadku. Coś takiego jak [Action("Category ")] (metoda konfiguracji stosowana do określonych testów w klasie) byłaby fajna, ale nie mogę znaleźć żadnego sposobu na zrobienie tego.


title: Wdrażanie zestawu procesów w procedurze składowanej czy poprzez kod?

text: Chcę wiedzieć, jaka jest odpowiednia metoda realizacji poniższego przypadku (najlepsza praktyka). Jeśli tworzę zestaw procesów w ten sposób: 1. Wybierz dane z zestawu tabel DB. 2. pętla na wybranym wyniku. 3. Sprawdź kilka razy w każdej iteracji. 4. Wstaw wynik do innej tabeli. * * * Wdrażanie poprzednich kroków w procedurze składowanej lub w transakcji za pomocą mojego kodu (asp.net)? Odnośnie wydajności, bezpieczeństwa i niezawodności.


title: Jaki jest najlepszy sposób obsługi podobnej funkcjonalności w osobnych historyjkach użytkowników / elementach historii produktu w dzienniku?

text: Używam szablonu TFS 2010 SCRUM. Załóżmy więc, że mam te historyjki użytkowników: Jako użytkownik chcę mieć możliwość dodawania kontaktów bezpośrednio ze strony Partnera. Jako użytkownik chcę mieć możliwość dodawania kontaktów bezpośrednio ze strony Projekt. Projektuj mądrze formularze kontaktowe powinny być takie same, podobnie jak funkcjonalność. Tak więc, jeśli użytkownik kliknie przycisk dodawania kontaktu na dowolnej stronie, pojawi się wyskakujące okienko umożliwiające dodanie nowego kontaktu. Czy obie te historie powinny mieć podobne zadania, skoro rozwój i projekt są podobne? Czy powinienem podzielić funkcje na osobne historie? Aktualizacja: Czy bardziej akceptowalne jest napisanie tego: Jako użytkownik chcę dodać kontakty z dowolnego obszaru witryny, abym nie musiał wracać do konkretnej strony z danymi kontaktowymi. Wtedy mógłbym dostarczyć funkcje, których potrzebujemy do tej historii?


title: Jak zarządzałbyś rozwojem pomiędzy wieloma oddziałami Stagingu?

text: Mamy Oddział Inscenizacji. Następnie opracowaliśmy gałąź Beta, którą użytkownicy mogą przenieść, kiedy tylko zechcą, ze starej gałęzi produkcyjnej do nowych funkcji. Nasz plan wydawał się prosty, testujemy na Staging, kiedy przedmioty są poddawane kontroli jakości, są wybierane i wdrażane do wersji beta. Oto problem! Błąd dyskretnie trafi do wersji Beta, a ponieważ Beta jest środowiskiem produkcyjnym, wymaga poprawek _szybkich_ i _dokładnych_. Ale nie wszystkie kontrole jakości zostały wykonane. Wejdź do diabła Git.. Więc znalazłem problem w wersji beta. Spokojnie, zostało to już naprawione w Staging, ale kiedy przejdę do wyboru elementu, Beta prawie nie ma żadnych innych wymagań wstępnych kodu, aby zaimplementować tę małą zmianę. Teraz Beta ma trochę tu i trochę tam i nie wyobrażam sobie, żeby baza kodu była tak stabilna jak Staging. Co więcej, mam do czynienia z pewnymi szalonymi konfliktami Git i muszę naprawiać kilka rzeczy, aby nadrobić to, czego Beta nie dogoniła ze Staging. Czy ktoś uprzejmy lub nieuprzejmy może mi powiedzieć, co robimy źle, jeśli chodzi o montaż tego projektu? Jakieś niesamowite rekomendacje, obejścia lub alternatywy dla systemu, który wymyśliliśmy?


title: Jakie wytyczne należy spełnić, aby coś można było nazwać aplikacją webową

text: Moim zdaniem aplikacja internetowa to każda strona internetowa, która ma kilka skomplikowanych funkcji i jest obsługiwana z sieci, ale wiem, że są tu ludzie, którzy są o wiele mądrzejsi ode mnie i wskażą inne funkcje, których nie zauważam. Na przykład: * Jeśli nie ma systemu logowania, czy nadal mogę nazwać go aplikacją internetową? (ponieważ większość aplikacji internetowych jest oparta na użytkownikach). * Czy powinienem myśleć o CMS jako o aplikacji internetowej? a co z witrynami, które są z nim zbudowane? prawdopodobnie nie są to aplikacje internetowe, prawda? * Czy Gmail jest aplikacją internetową? Tak myślę. * Czy Twitter jest aplikacją internetową? Tak, choć funkcjonalność jest dość prosta. Jakie więc warunki trzeba spełnić, aby strona internetowa była aplikacją webową? PS System tagów StackExchange definiuje aplikacje internetowe jako > aplikacje dostępne przez „sieć”, co może oznaczać Internet, > lub sieć wewnętrzną (intranet).


title: Czy każda metoda powinna mieć oddzielną klasę testową JUnit?

text: Piszę testy jednostkowe JUnit dla moich zajęć. Czy lepiej mieć osobną klasę dla każdej metody, czy mieć tylko jedną klasę testową dla każdej rzeczywistej klasy?


title: Potrzebujesz pomocy w zrozumieniu przykładu rekurencji w Pythonie

text: Python to mój pierwszy język programowania i uczę się go z „Jak myśleć jak informatyk”. W rozdziale 5 autor podaje następujący przykład rekurencji: def factorial(n): if n == 0: return 1 else: recurse = factorial(n-1) result = n * recurse zwróć wynik Rozumiem, że if n = 3 , to funkcja wykona drugą gałąź. Ale nie rozumiem, co się dzieje, gdy funkcja wchodzi do drugiej gałęzi. Czy ktoś może mi to wyjaśnić?


title: Pozyskiwanie danych — jedna aplikacja czy wiele?

text: Mam ponad 30 źródeł danych, które codziennie zbieram w różnych formatach (xml, html, csv). W ciągu ostatnich trzech lat zbudowałem około 20 aplikacji konsolowych c#, które wychodzą, pobierają dane i ponownie formatują je w bazie danych. Ale jestem ciekaw, co robią inni ludzie przy tego typu zadaniach. Czy ludzie budują jedno narzędzie, które ma wiele zmiennych i danych wejściowych, czy też projektują ponad 20 programów do zeskrobywania i analizowania tych danych. Wszystko jest zakodowane w każdej konsoli i uruchamiane przez Menedżera zadań Windows. Dodano kilka dodatkowych przemyśleń/szczegółów: * Z 30 źródeł wszystkie mają unikalne właściwości, wszystkie są przesyłane do indywidualnych tabel MySQL i mają różną częstotliwość. Na przykład jedno źródło danych jest uderzane raz na minutę, inne co 5 minut. Większość to raz na godzinę i raz dziennie. Obecnie pobieram formaty (xml, csv, html), parsuję je do sformatowanego csv i umieszczam w folderach pomostowych. W tym folderze uruchamiam aplikację, która odczytuje plik konfiguracyjny specyficzny dla folderu. Gdy do folderu zostanie dodany nowy plik csv, aplikacja przesyła dane do określonych tabel MySQL wyznaczonych w pliku konfiguracyjnym. Zastanawiam się, czy warto przebudować to wszystko w większy, złożony program, który jest bardziej zdolny do dynamicznego dodawania treści + zadrapań i dostosowywania się do zmian formatu. Poszukiwanie myśli z zewnątrz.


title: Jaki algorytm(y) można zastosować, aby osiągnąć w miarę dobre przewidywanie następnego słowa?

text: Jaki jest dobry sposób zaimplementowania „przewidywania następnego słowa”? Na przykład użytkownik wpisuje „jestem”, a system sugeruje „a” i „nie” (lub ewentualnie inne) jako następne słowo. Znam metodę, która wykorzystuje łańcuchy Markowa i jakiś tekst szkoleniowy (oczywiście), aby mniej lub bardziej to osiągnąć. Ale gdzieś przeczytałem, że ta metoda jest bardzo restrykcyjna i dotyczy bardzo prostych przypadków. Rozumiem podstawy sieci neuronowych i algorytmów genetycznych (choć nigdy nie używałem ich w poważnym projekcie) i być może mogłyby się przydać. Zastanawiam się, czy istnieją jakieś algorytmy, które przy odpowiednim tekście szkoleniowym (np. artykuły prasowe i własne pisanie użytkownika) mogą wymyślić w miarę odpowiednie sugestie dla następnego słowa. Jeśli nie (linki do)algorytmów, mile widziane są ogólne wysokopoziomowe metody zwalczania tego problemu.


title: W jaki sposób inni ludzie dbają o aktualność kodu na wielu komputerach? (coś innego niż DropBox)

text: Jestem facetem od sprzętu/infrastruktury, który wraca do szkoły, aby uzyskać dyplom (WRESZCIE...) i biorę kilka lekcji programowania wprowadzającego na niskim poziomie. Oprócz JAVY, nad którą pracuję w szkole, majsterkuję też w kilku innych językach. Pracuję w sklepie z bardzo utalentowanymi programistami i staram się nauczyć od nich jak najwięcej. Zasadniczo samodzielna nauka pisania kodu, który ułatwi mi pracę związaną z infrastrukturą, dzięki czemu mam więcej czasu na naukę. Mając to na uwadze, spędzam 90% czasu na Eclipse, a 8% na BlueJay (bla, wiem) i 2% na VS Express. Ponieważ mam 5 różnych maszyn między pracą a domem, mam duże problemy z aktualizowaniem kodu dla różnych projektów podczas pracy na różnych maszynach. Próbowałem użyć Dropbox i ustawić folder lokalny na wszystkich moich komputerach na moim obszarze roboczym w Eclipse i to działało świetnie przez tydzień. Potem dowiedziałem się, że firma korzystała z Internetu, ponieważ ich Dropbox utrzymywał połączenie na żywo z siecią przez 100% czasu, w którym działał. Wypróbowałem starą szkolną metodę pendrive'a i ciągle zapominam zapisać najnowszą wersję na pendrive. Więc zasadniczo to, czego szukam, to porady dotyczące tego, jak użytkownicy aktualizują swój kod? Czy istnieją podobne narzędzia, takie jak DropBox, i próbują synchronizować się tylko wtedy, gdy coś się zmieni? Czy są jakieś inne sugestie dotyczące repozytorium online, z którym mogę to zrobić, bez rejestrowania ponad 50 godzin tygodniowo w naszym raporcie dotyczącym zapory?


title: Którego narzędzia do śledzenia błędów online/hostowanego używasz w swojej pracy i projektach?

text: Przez lata zgromadziłem wiele projektów pobocznych, które z czasem powoli poprawiam. Za każdym razem, gdy wracam do jednego, poświęcam trochę czasu na czytanie plików tekstowych, które zawierają projekt, ostatnie błędy, kolejne funkcje itp..., nad którymi powinienem popracować - to nie jest ładne. Chcę przejść na coś bardziej formalnego. Idealnie byłby to w pełni funkcjonalny, internetowy system śledzenia błędów, który pozwala na bezpłatne lub prawie bezpłatne śledzenie błędów w moich własnych projektach. Poza tym, najlepiej byłoby to zrobić prywatnie - nie chcę, aby wszyscy widzieli moje projekty poboczne i jaki bałagan narobiłem z niektórych z nich.


title: Licencjonowanie dystrybucji dla narzędzia Windows XP Junction

text: Moja aplikacja musi utworzyć dowiązanie symboliczne do katalogu w systemie Windows XP, aby ominąć ograniczenie długości ścieżki pliku do ~256 znaków. Windows XP nie ma wbudowanej tej funkcji. Wybrałem Junction z Sysinternals jako kandydata do rozwiązania tego problemu. Jednak teraz prawo mówi mi, że nie mogę rozpowszechniać Junction wśród moich użytkowników; musieliby to pobrać sami. Mój problem polega na tym, że moi użytkownicy nie są połączeni z Internetem i prawdopodobnie mają zbyt wiele biurokratycznych przeszkód, aby uzyskać zgodę na pobranie i przeniesienie tego oprogramowania. 1. Czy ktoś znalazł wyjątek i legalnie dystrybuowane oprogramowanie Sysinternals, takie jak Junction? 2. Jaką darmową/open/libre alternatywę mam do tworzenia dowiązań symbolicznych do katalogów w systemie Windows XP?


title: W jaki sposób należy rozprowadzać umiejętności w zespołach?

text: Po przeczytaniu tego zauważyłem, że wydaje się, że istnieje wiele nieporozumień co do tego, jak zespoły zwinne powinny być zorganizowane w grupie programistów o różnych umiejętnościach (czyli prawie wszystkich zespołach). Czy wszyscy najlepsi programiści powinni zostać umieszczeni w swoich własnych zespołach i otrzymać pracę o najwyższym priorytecie? To w dużej mierze zapewni wykonanie najważniejszych zadań. W tym samym czasie pozostajesz z „mniej niż perfekcyjnymi” zespołami gdzie indziej, nagromadzając dług techniczny, nawet jeśli dotyczy to tylko zadań o niskim priorytecie. Z drugiej strony, równomiernie rozmieszczone zespoły mogą mieć tę zaletę, że twoi opóźnieni programiści są nieco lepsi, ale mają potencjał do demotywacji najcięższych graczy. Ponadto, jeśli połączysz kilka dobrych wzorców projektowych z mnóstwem okropnych antywzorców, możesz naprawdę otrzymać coś, co równie dobrze mogłoby być zbiorem antywzorców. Wszystkie zespoły mają swoich silnych koderów i nie tak silnych koderów, jak więc sobie z tym poradzić?


title: Jak radzić sobie z kolegami odmawiającymi przestrzegania praktyk?

text: Rozmawiałem z innym kolegą o tym, czego powinniśmy używać, gdy jednostka DB odnosi się do innej. Nie sądzę, że istnieje dobry powód, aby przerwać praktykę umieszczania Klucza Podstawowego w encji odsyłającej. Jednak jeden z moich kolegów mówi: „Powinieneś użyć klucza zastępczego w encji, ale lepiej umieścić naturalny klucz czytelny dla człowieka w encji odsyłającej. Dopóki jest unikalny, jest w porządku i łatwiej jest, gdy robisz wsparcie lub prace konserwacyjne "Wiem, że to zadziała, ale oczywiście nie jest to dobra praktyka, że umieszczasz unikalną kolumnę nie-PK jako "klucz obcy", tylko po to, aby uzyskać trochę łatwości w pisaniu SQL podczas wsparcia, ponieważ możemy mieć mniej łączenia tabel. Chociaż wspomniałem, że jego podejście jest niepoprawne koncepcyjnie i powoduje problemy zbyt praktycznie itp., wydaje się, że raczej godzi się na poprawność modelu danych w zamian za łatwość zadań wsparcia ad hoc. I powiedział: „Wiem, że to nie jest dobra praktyka, ale dobra praktyka nie jest złotą zasadą”. Szczerze mówiąc, czuję się sfrustrowany, kiedy mam do czynienia z czymś takim. Wiem, że zawsze zdarzają się przypadki, że powinniśmy złamać jakąś zasadę lub praktykę, ale teraz bez wątpienia tak nie jest. Co zrobisz, gdy staniesz w obliczu takiej sytuacji? Załóżmy, że jesteś starszym programistą, od którego oczekuje się wkładu w różne kierunki rozwoju i konwencję.


title: Co jest takiego wyjątkowego w Node.js?

text: Ostatnio pojawiło się wiele pochwał dla Node.js. Nie jestem programistą, który miał duży kontakt z aplikacjami sieciowymi. Z mojego zrozumienia Nodes.js wynika, że jego siła jest taka: mamy tylko jeden wątek obsługujący wiele połączeń, zapewniając architekturę opartą na zdarzeniach. Jednak na przykład w Javie mogę utworzyć tylko jeden wątek za pomocą NIO/AIO (co jest nieblokującym interfejsem API z mojego zrozumienia) i obsługiwać wiele połączeń za pomocą tego wątku, a do implementacji danych dostarczam architekturę opartą na zdarzeniach obsługa logiki (nie powinno być to takie trudne, zapewniając jakieś wywołanie zwrotne itp.)? Biorąc pod uwagę, że JVM jest jeszcze bardziej dojrzałą maszyną wirtualną niż V8 (oczekuję, że również będzie działać szybciej), a architektura obsługi opartej na zdarzeniach wydaje się być czymś łatwym do stworzenia, nie jestem pewien, dlaczego Node.js przyciąga tak wiele uwagi. Czy przegapiłem kilka ważnych punktów?


title: Integracja reklamy z aplikacjami WP7: Jakieś doświadczenia?

text: Czy ktoś z Was zintegrował lub myśli o zintegrowaniu admob, MS pubCenter, adwhirl lub innego dostawcy reklam z Twoimi aplikacjami? Podziel się swoimi doświadczeniami... 1. Kto płaci najlepiej? 2. Jakieś przepisy? 3. Masz problemy z zatwierdzeniem aplikacji przez Microsoft Market? 4. Jeśli wybrałeś Admob: Którą wtyczkę proponujesz? To czy tamto czy tamto? 5. Jakieś doświadczenia w Europie lub Niemczech? (MS pubCenter jest na razie tylko w USA) **Edytuj:** Myślę, że omówiliśmy wystarczająco dużo o akceptacji reklamy mobilnej. **Skupmy się teraz na pytaniach, które zadałem.** **Edytuj 2:** Hmm, może Stackoverlfow jest lepszym miejscem do omówienia pytań 2-5. Czy ktoś mógłby przenieść ten?


title: Czy jest jakaś korzyść z używania jednego języka w stosunku do innych konkurencyjnych stron programistycznych, takich jak SPOJ lub TopCoder?

text: Znam trochę C++, Javę i Rubiego. Chcę być teraz biegły w jednym z nich i nie wiem, jak wybrać. Zastanawiałem się, czy wybór jednego z drugim będzie w jakikolwiek sposób korzystny dla konkurencyjnego programowania?


title: Instancja obiektu iOS dostępna z trzech oddzielnych klas, czy ładowanie 3 plików nib za pomocą jednej klasy?

text: W moim projekcie mam trzy pliki nib, z których każdy jest sterowany przez własną klasę (pliki .h i .m). Każda końcówka ma stylizowany wzór z pełnoekranowym obrazem tła i kilkoma nakładkami działającymi jako przyciski. Każdy przycisk ma własny dźwięk kliknięcia, a większość przycisków w każdym pliku nib będzie odtwarzać inny film na przycisk. Aby odtworzyć wideo, każdy z moich trzech plików .m ma kilka metod podobnych do tej: -(IBAction) videoButtonClicked: (id)sender{ if([tag nadawcy] == 1) { AudioServicesPlaySystemSound (buttonClick1); [self loadMoviePlayer:[[NSBundle mainBundle] pathForResource:@"Video 1" ofType:@"mov"]]; } else if ([tag nadawcy] == 2) { AudioServicesPlaySystemSound (buttonClick2); [self loadMoviePlayer:[[NSBundle mainBundle] pathForResource:@"Video 2" ofType:@"mov"]]; } else if ([tag nadawcy] == 3) { AudioServicesPlaySystemSound (buttonClick3); [self loadMoviePlayer:[[NSBundle mainBundle] pathForResource:@"Video 3" ofType:@"mov"]]; } else if ([tag nadawcy] == 4) { AudioServicesPlaySystemSound (buttonClick4); [self loadMoviePlayer:[[NSBundle mainBundle] pathForResource:@"Video 4" ofType:@"mov"]]; } } - (void)loadMoviePlayer:(NSString*) movieURL { // Odtwórz film z pakietu NSURL *url = [NSURL fileURLWithPath:movieURL]; player = [[przydział MPMoviePlayerViewController] initWithContentURL:url]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(movieFinishedCallback:) name:MPMoviePlayerPlaybackDidFinishNotification obiekt:player]; [self presentMoviePlayerViewControllerAnimated:player]; [uwolnienie gracza]; } Mój kod działa teraz, ponieważ filmy są osadzone w moim folderze zasobów. Jednak razem filmy są zbyt duże, aby można je było dołączyć do aplikacji i pobrać z App Store. W związku z tym aplikacja będzie pobierać je z serwera, więc chcę utworzyć jedną klasę zarządzania wideo, aby śledzić, które filmy zostały pobrane. Myślę, że powinienem mieć jedną instancję obiektu, ale w jaki sposób moje trzy kontrolery mogą komunikować się z jedną instancją? Jestem prawie pewien, że jeśli mam jedną klasę, która ładuje poprawny plik .nib, mogę sprawić, by ta jedna instancja porozmawiała z moją jedną instancją zarządzania wideo. Ale czy niepotrzebnie marnowałbym pamięć, ładując wszystkie trzy końcówki jednocześnie?


title: Czym dziedziczenie prototypowe różni się praktycznie od dziedziczenia klasycznego?

text: Dziedziczenie, polimorfizm i enkapsulacja to trzy najbardziej wyróżniające się, ważne cechy obiektów OOP, z których wynika, że dziedziczenie ma obecnie wysokie statystyki użytkowania. Uczę się JavaScript, a tutaj wszyscy mówią, że ma on dziedziczenie prototypowe, a ludzie na całym świecie mówią, że jest to coś **daleko innego** od dziedziczenia klasycznego. Jednak nie mogę zrozumieć, jaka jest ich różnica z punktu praktycznego użycia? Innymi słowy, kiedy definiujesz klasę bazową (prototyp), a następnie wyprowadzasz z niej jakieś podklasy, oboje macie dostęp do funkcjonalności swojej klasy bazowej i możecie rozszerzać funkcje na klasach pochodnych. Jeśli weźmiemy pod uwagę to, co powiedziałem, jest zamierzonym wynikiem dziedziczenia, to dlaczego miałoby nas obchodzić, czy używamy wersji prototypowej czy klasycznej? Aby się bardziej oczyścić, nie widzę różnicy w użyteczności i wzorcach użytkowania dziedziczenia prototypowego i klasycznego. Skutkuje to tym, że nie jestem zainteresowany dowiedzeniem się, dlaczego są różne, ponieważ oba skutkują tym samym, OOAD. Czym praktycznie (nie teoretycznie) dziedziczenie prototypowe różni się od dziedziczenia klasycznego?


title: Jaki jest dobry wzorzec dla wielu języków w MongoDb?

text: Powiedz, że chcę zbudować witrynę internetową obsługującą wiele języków i korzystającą z magazynu danych MongoDB. Zastanawiam się, jakie jest dobre podejście do posiadania wielu wersji treści i tytułu artykułu, po jednej dla każdego języka. Czy powinienem przechowywać wszystkie wersje w tym samym dokumencie artykułu? Jak zbiór par klucz-wartość kodu języka i tekstu w polu treści artykułu. W ten sposób otrzymałbym nie więcej niż 1 prośbę o przeglądanie artykułów, ale dostałbym również więcej danych, niż mógłbym potrzebować, więc odpowiedź jest większa. Czy jest lepsze rozwiązanie? Jak i dlaczego?


title: Czy Clojure ma kontynuację?

text: Zacząłem programować w Pythonie. Kiedy używam Pythona, koncepcje takie jak współprogram, zamknięcie wprawiały mnie w zakłopotanie. Teraz wydaje mi się, że znam ich na pewnym powierzchownym poziomie, ale chcę uzyskać „oświecenie”, więc postanawiam nauczyć się Clojure, dialektu Lisp. Kupiłem książkę Stuarta Halloway'a i jest dobra. Ale kiedy spojrzałem na indeks tej książki, nie ma słów takich jak współprogram, kontynuacja. Wygooglowałem to, ale też jest coś. Tak więc moje pytanie brzmi: Czy Clojure ma kontynuację lub współprogram (który służy do wykonywania zadań takich jak ping-pongi bez przepełnienia stosu? Styl Pythona (chociaż standard Pythona nie obsługuje w pełni tej symetrycznej procedury): def ping(): while 1: print, funkcja "ping" do przełączania na ping def pong(): while 1: funkcja do przełączania na ping print " pong" Jeśli nie, to czy lepiej nauczyć się pojęć funkcjonalnych, jeśli nie, to lepiej nauczyć się Schematu?


title: PHP i SQL, razem czy indywidualnie?

text: Skończyłem z HTML i CSS. Teraz chcę wiedzieć, czy powinienem uczyć się PHP i SQL razem, czy indywidualnie. Zasadniczo mam tę książkę, `O'Reily Head First PHP and MySQL`. Czy powinienem wziąć tę książkę, czy zacząć od książki tylko dla PHP? Czy jest jakaś różnica?


title: Algorytm wyznaczania najszybszej trasy?

text: Powiedzmy, że jedziemy od 1 do 5. Najkrótsza trasa to 1-4-3-5 (łącznie 60 km). ![Graph](http://i.stack.imgur.com/w0SnS.png) W tym celu możemy użyć algorytmu Dijkstry. Problem w tym, że najkrótsza trasa nie zawsze jest najszybsza z powodu korków lub innych czynników. Na przykład: * 1-2 znane są z częstych korków, więc należy tego unikać. * Nagle dochodzi do wypadku samochodowego na 4-3, więc należy go również unikać. * Itd... Więc chyba możemy przyspieszyć na trasie 1-4-5, bo nie ma korków/wypadków, więc dojedziemy o 5 szybciej. Cóż, to jest ogólna idea i nie zastanawiałem się jeszcze nad szczegółami. Czy istnieje jakiś algorytm do rozwiązania tego problemu?


title: Badanie rozwoju języków funkcjonalnych

text: W ostatnich latach wydaje się, że funkcjonalne języki programowania cieszą się prawdziwym wzrostem popularności. Języki takie jak Erlang, Haskell, Scala, F# i Clojure wydają się być dość dobrze znane, a wiele popularnych witryn programistycznych (takich jak Stack Overflow) wydaje się być pełnych pytań i dyskusji na ich temat. Pytanie brzmi, jak byś zajął się badaniem rozwoju tych języków w ujęciu realnym. Oczywiście wiem o indeksie TIOBE, ale czy to naprawdę najlepsze źródło do pomiaru popularności danego języka programowania? Miejmy nadzieję, że to pytanie będzie dozwolone, ponieważ wielu programistów patrzy na to, aby zdecydować, czy dana technologia będzie działać przez długi czas, czy nie (chociaż nie jest to mój osobisty cel).


title: Dlaczego C++ jest nadal preferowany do tworzenia rozbudowanych aplikacji z graficznym interfejsem użytkownika w najnowszych językach dynamicznych?

text: Widzę, że większość aplikacji zawierających obszerną zawartość GUI jest zwykle tworzona w C++. Większość gier/przeglądarek jest napisana w C++. Czy nie możemy po prostu opracować lepszych aplikacji GUI z najnowszymi dynamicznymi językami? Wiem, że Java nie byłaby świetnym wyborem. Ale co z językami takimi jak Python, które są natywnie zbudowane na C? Czy najnowsze języki nie mają być lepsze od swoich przodków? Dlaczego wciąż musimy przedkładać stary C++ nad najnowsze języki? I chciałbym też wiedzieć, co odpowiada w C++ za lepszą szybkość przetwarzania GUI? Z drugiej strony, czego brakuje innym najnowszym językom?


title: Jak wymawiasz techniczne angielskie słowa wokół obcych?

text: Pracuję jako programista w moim kraju ojczystym, gdzie angielski nie jest językiem ojczystym. Uważam się jednak za native speakera, ponieważ większość mojej nauki odbywała się w środowisku amerykańskim. Codziennie muszę rozmawiać z kolegami o sprawach technicznych, a angielskie słowa oczywiście cały czas się pojawiają. Moi koledzy wymawiają angielskie słowa zupełnie inaczej niż powinno (w większości przypadków) i czuję się dziwnie, próbując je poprawić lub mówić „właściwy sposób”, ponieważ sprawia to wrażenie, że jestem kutasem i często bierze skoncentruj się od rzeczywistego obiektu. Jak radzicie sobie z tego rodzaju „problemem”?


title: Scalanie oddziałów, na których pracował ten sam kod

text: Jeśli istnieją dwa niepowiązane ze sobą zadania, z wyjątkiem tego, że zmiany dotyczą tego samego projektu i kończą się dotykaniem co najmniej jednej z tych samych klas/metod, jak sobie z tym poradzić? Dwóch różnych programistów mogło podjąć się jednego zadania. Każdy programista utworzy nową gałąź poza integracją, będzie w niej pracował, a następnie będzie musiał scalić. Podczas łączenia dwóch gałęzi, w większości przypadków "Take Source Branch" jest właściwe dla Up-Merging, a "Take Target Branch" jest właściwe dla Back-Merging. Ale podczas łączenia wstecznego lub łączenia podwójnego mogą wystąpić konflikty, które nadpisują kod poprzednio scalonego projektu, jeśli obaj zmienią tę samą klasę/metodę. Jedna odpowiedź brzmi: „Więc pozwól tylko jednemu programiście pracować nad obydwoma zadaniami po kolei”. Tyle że jesteśmy w SCRUM i każdy dev może podjąć się każdego zadania. Nie chcemy zaczynać przypisywania. Inna odpowiedź brzmi: „Niech deweloperzy się spotkają i wykombinują, jak ręcznie połączyć niektóre rzeczy”. Ale to jest praca! Lol. Czy brakuje mi metody?


title: Problem z licencjonowaniem biblioteki GPL (EXT JS)

text: Dzień dobry Wszystkim, naprawdę nie mam możliwości interpretacji GPL dla EXTJS dla mojej pracy/pomysłu/osobistego projektu. Widzę, że jest to aktywne forum, mam nadzieję, mam na to zamknięcie. Najpierw pozwól, że wyjaśnię mój projekt, tworzę tę stronę internetową, która jest jak portal internetowy, który jest przeznaczony dla użytkownika końcowego, teraz ta aplikacja internetowa używa biblioteki EXTJS, która jest na licencji GPL, tak jak w moim rozumieniu na tej GPL Każda aplikacja korzysta z biblioteki licencji GPL powinna być wydany jako Open Source i zgodny z GPL Linsence, to jest wtedy, gdy ja lub moja aplikacja jest derywacją lub zmodyfikowałem Bibliotekę i wydałem ją. lub rozdaj. Ale EXTJS ma tę podwójną licencję, która zazwyczaj daje mi prawo do robienia tego, czego chcę. bez podawania mojego kodu. Jeśli moja aplikacja jest przeznaczona tylko dla użytkownika końcowego, a nie jest pochodną formą pracy, biblioteką czy narzędziem programistycznym, nie będę jej rozpowszechniać, ponieważ jest w sieci. dzięki temu również Biblioteki, z których będę korzystać, pozostaną niezmienione. i będę miał listę bibliotek, z których korzystam, i odpowiednią licencję na ich uznanie. Biorąc pod uwagę to, czy nie mogę zamknąć mojej aplikacji i nie naruszać GPL? czy mogę używać biblioteki GPL, o ile spełnione są powyższe? Krótko mówiąc, czy mogę używać biblioteki na GPL, nie wydać swojego kodu jako licencji zgodnej z OPensource i nadal NIE naruszać warunków GPL? Z góry dziękuję Nick Ace


title: Jak dozwolony użytek dotyczy fragmentów kodu?

text: Czy istnieje rozmiar, w którym można skopiować w ramach dozwolonego użytku kod, na który nie masz licencji? Na przykład, co się stanie, jeśli skopiuję fragment, który zawiera (zwykle) 3 wiersze kodu? Czy to dozwolony użytek? Jeśli jest to dozwolony użytek, jaka długość jest wymagana, zanim potrzebuję licencji?


title: Co powinien wiedzieć programista Pythona podczas nauki Rubiego?

text: Jestem programistą Pythona od około 18 miesięcy, składający się z jednego stażu i kilku projektów pobocznych, i uważam się za całkiem komfortowego w tym języku. Wydaje się jednak, że w dziedzinie programowania wiele uwagi poświęca się Rubiemu, ale nie poświęca się już dużo uwagi Pythonowi. Czy w nauce Rubiego pojawią się rzeczy Pythona, które są po prostu złymi praktykami w Ruby? Na co powinienem uważać, a czego unikać?


title: Porady zawodowe: doktorat z teorii języków programowania

text: Bardzo interesują mnie teorie języków programowania i zamierzam zastosować doktorat w tym temacie, ale chcę wiedzieć więcej o karierze po studiach. oprócz bycia profesorem, ale także jaki zawód mogę dostać?


title: Zaawansowana praktyka przeglądu kodu i testowania jednostkowego

text: Jako lider zespołu zarządzający grupą programistów bez doświadczenia (i nie widzących potrzeby) w przeglądzie kodu i testach jednostkowych, jak możesz rozwinąć praktykę przeglądu kodu i testów jednostkowych? W jaki sposób zamierzasz stworzyć sposób, aby przegląd kodu i testowanie jednostkowe naturalnie pasowały do przepływu pracy programisty? Jednym z oporów tych dwóch obszarów jest to, że „zawsze trzymamy się terminów, więc nie ma czasu na przegląd kodu i testy jednostkowe”. Kolejnym oporem przed przeglądem kodu jest to, że obecnie nie wiemy, jak to zrobić. Czy powinniśmy sprawdzać kod przy każdym zameldowaniu, czy sprawdzać kod w określonym terminie?


title: Argumenty za tym, że środowisko programistyczne jest takie samo jak produkcyjne

text: Intuicyjnie wydaje się właściwe, aby środowisko programistyczne (i wszystkie środowiska testowe) były jak najbliżej kompilacji produkcyjnej. Czy istnieją jakieś udokumentowane argumenty na poparcie tej intuicji?


title: Jak działa kompilator lub tłumacz języków programowania?

text: Obecnie istnieje więcej kompilatorów między językami programowania (zwłaszcza z niektórych języków „X” do JavaScript). Zastanawiam się, jak te są rozwijane? Jakie są ogólne kroki, które należy podjąć, aby pisać algorytmy, jeśli mam taki algorytm? Czy muszę być całkowicie dokładny w analizie leksykalnej? Jeśli chodzi o moją wiedzę, powinni postępować zgodnie z tymi samymi krokami, co tłumaczenie języka 'X' na język asemblera (kompilacja podstawowa). Czy tak faktycznie zostały opracowane? CZY istnieje inny sposób? Dziękuję


title: Jakie są różnice między AppMobi i PhoneGap?

text: Jestem nowy w tworzeniu aplikacji wieloplatformowych. Natknąłem się na bardzo podobne międzyplatformowe frameworki AppMobi i PhoneGap. Chcę wiedzieć * Czy są jakieś różnice między apk/ipa utworzonym za pomocą Appmobi a apk/ipa utworzonym za pomocą PhoneGap? * Czy jest jakaś różnica w natywnych funkcjach, których można użyć? * Jakie są zalety appmobi nad phonegap lub PhoneGap nad Appmobi? Również inne różnice między tymi dwoma.


title: Co zrobić, gdy Twoi koledzy nie cenią łatwości utrzymania kodu

text: Od kilku lat pracuję w tym samym dziale rozwoju oprogramowania. W tym czasie średni pobyt dewelopera wynosił 6-9 miesięcy. Kilku istnieje już od ponad 2 lat, ale większość z naszych około 20 programistów pojawia się i odchodzi w stosunkowo wysokim tempie. W efekcie większość naszych projektów stała się koszmarami utrzymania ruchu. Wykonawcy wejdą, zakodują kilka wydań łat i wyjdą. Nasz dział ma wytyczne dotyczące rozwoju (robimy TDD), ale nie są one egzekwowane. Ostatnio naciskałem na nasz dział, aby tworzył bardziej czytelny kod. Poprosiłem o obowiązkowe przeglądy kodu i obowiązkowe TDD. Kierownictwo w pełni się ze mną zgadza... teoretycznie. W praktyce TDD zawsze wychodzi przez okno. Uzasadnieniem jest zawsze to, że w naszej domenie musimy dostarczać TERAZ. Ciągle powtarzam kolegom, że po prostu kopiemy sobie dziurę i że nasze obecne podejście do tworzenia oprogramowania kosztuje nasz dział dużo pieniędzy… ale wydaje się, że nie jest to słyszalne. Co mogę zrobić, aby moi współpracownicy zobaczyli wartość utrzymania kodu? Jak wyjaśnić, że krótkoterminowe zwycięstwa bez długoterminowej wizji nie są trwałe?


title: Jak efektywnie współpracować w zespole o mieszanym zapleczu/mindsetu w zakresie OOP?

text: Niedawno zostałem przydzielony do nowego wysokowydajnego projektu C++ (finanse) wraz z 3 innymi facetami, którzy, tak jak ja, określają siebie jako "głównie programiści C/C++", co oznacza, że wszyscy również pracowaliśmy w Javie i inne rzeczy, wszyscy mamy porównywalne doświadczenie (8 do 10 lat) i z powodzeniem współpracowaliśmy przy tworzeniu innych projektów (nie C/C++). Wkrótce przekonałem się, że mamy tak różne nastawienie, jeśli chodzi o nasz „ojczysty język programowania”, że ryzykujemy nie tylko dobrą realizację projektu, ale także ogólne samopoczucie zespołu/biura. W szczególności: Wywodzą się z elektrotechniki/automatyki/politechniki, więc ich rozumowanie jest ściśle związane z działaniem sprzętu, sposobem poruszania się bajtów, działaniem procesora, buforowaniem instrukcji, ogólnie wszystkim w niższych warstwach. Robili programowanie wbudowane, programowanie ARM (ledwo wiem, co to jest). Wkrótce dowiedziałem się, że ich praktyczne doświadczenie dotyczy głównie C, a nie C++. Myślą proceduralnie, a nie OOP. Z drugiej strony, nauczyłem się myśleć w sposób bardziej abstrakcyjny, stosować zasady takie jak enkapsulacja, niskie sprzężenie/wysoka kohezja do tworzenia oprogramowania modułowego wielokrotnego użytku. Moją specjalnością jest język programowania C++, z naciskiem na konstrukcje językowe, które pomagają uzyskać szybki i wielokrotnego użytku kod generyczny. Myślę, że wzorce projektowe, idiomy, koncepcje. Przez 9 lat tworzenia oprogramowania konsekwentnie byłem świadkiem, jak słaba konserwacja systemów oprogramowania jest zdecydowanie największym obciążeniem zespołów. Hojnie dokumentuję swój kod, piszę staranne interfejsy. Przyjmuję metaprogramowanie szablonów jako sposób na uzyskanie szybkich i wielokrotnego użytku produktów. Przyjmuję nowe standardowe funkcje C++11. Tam, gdzie widzę możliwość ponownego użycia i luźne połączenie, widzą „komplikację”. Chcą „zobaczyć to wszystko”. Chcą widzieć `char*`, a nie jakąś klasę bufora w metodach interfejsu. W pewnym momencie ktoś powiedział nawet: „Nie obchodzi mnie, jak proste są twoje interfejsy, jeśli twoja implementacja wygląda na skomplikowaną”. Problem polega na tym, że tak naprawdę staramy się przejść z monolitycznego stylu systemów na system wielokrotnego użytku – piszemy bibliotekę. Jednak nie chcą, aby ich struktury w stylu C były zanieczyszczone metodami szablonowymi, typedef i c-torami, nawet jeśli żaden z nich nie czyni ich struktur nie-POD. Nie chcą też widzieć static_assert(std::is_pod<...>). Uwielbiają memcpy i wskaźniki i generalnie trzymają się z dala od odniesień. Mają tendencję do myślenia, że typedefy są w jakiś sposób złe. Naprawdę starałem się, aby zobaczyli abstrakcję tego, czym jest. Jest to kod wraz z danymi, na których operuje. Z konieczności biblioteka musi zdefiniować pewne interfejsy, aby użytkownik mógł ją podłączyć do większego produktu. Mają tendencję do postrzegania tych interfejsów jako sposobów, w których mój kod _wymaga, aby ich kod zachowywał się/wyglądał tak, jak chcę i nie pozwala im robić rzeczy po swojemu_ , ale bez faktycznego informowania mnie o konkretnej funkcjonalności, której nie mogą uzyskać. Nie popełnij błędu, nie jestem ignorantem, jeśli chodzi o wydajność. Wiem o liniach pamięci podręcznej, przewidywaniu rozgałęzień, obciążeniu wirtualizacji metod, alokacji sterty, wyszukiwaniu hashów. Jestem dobry w złożoności algorytmów (choć to nie ma tu większego znaczenia), strukturach danych, inlineniu i kilku innych optymalizacjach kompilatora, takich jak RVO. Wierzę, że dzięki nowoczesnemu kompilatorowi wielowarstwowy produkt OOP C++ wielokrotnego użytku może osiągnąć 10% wydajności monolitycznego produktu tylko w języku C, jeśli zostanie starannie napisany i zoptymalizowany. Szczerze wierzyłem, że będziemy się uzupełniać w naszym myśleniu. Jakie są Twoje myśli? Proszę nie bądź zbyt surowy, musimy sprawić, by to zadziałało.


title: Jakie wytyczne programistyczne dla aplikacji sieciowej szachów?

text: Chciałbym zaimplementować prostą szachową aplikację sieciową peer to peer: jedna instancja programu może zarejestrować gracza znajomych, a gdy jeden znajomy jest "podłączony" (mam na myśli zarówno dostępne przez inną instancję programu, jak i zarejestrowane jako przyjaciel), mogę poproś go, aby zagrał w grę. Ponieważ znam język J2SE, a także framework Swing, próbowałem rozpocząć kodowanie, korzystając z Socketów. Problem polega na tym, że potrzebuję sposobu, aby * zarejestrować moich znajomych (lub inne konta) * zdobyć ip znajomego, aby utworzyć gniazdo (po drugiej stronie będzie ten sam problem) : z problemem dynamicznych adresów ip. oznacza, że zserializowany adres może nie być już ważny * zostaniesz poinformowany, że druga strona "połączyła się" Myślę, że pierwszy i trzeci punkt można rozwiązać, jeśli użyję serwera PHP, który będzie miał wszystkie informacje dla wszystkich zarejestrowanych użytkowników. Aplikacja powinna działać w następujący sposób: 1. Po pierwsze, przed próbą połączenia, użytkownicy muszą zarejestrować konto na serwerze PHP, które będę musiał zaimplementować (z bazą danych MySQL) 2. Podczas uruchamiania aplikacji użytkownik loginy, podając swoją nazwę użytkownika i hasło. Aby aplikacja mogła pobierać znajomych (i np. statystyki) dzięki serwerowi 3. Gdy dwóch znajomych jest gotowych do wspólnej gry, serwer przekazuje wszystkie potrzebne informacje (takie jak adres ip) obu instancji aplikacji gracza. Moje główne trudności będą dotyczyć (de)serializacji dynamicznych adresów IP oraz pobierania informacji o użytkowniku na serwerze PHP. Co sugerujesz ?


title: Kiedy klasa kleju lub zarządzania robi za dużo?

text: Mam skłonność do budowania scentralizowanych klas, które zarządzają innymi klasami w moich projektach. Nie przechowuje wszystkiego samodzielnie, ale większość żądań danych trafia najpierw do „menedżera”. Patrząc na odpowiedź na to pytanie zauważyłem określenie "Obiekt Boga". Wikipedia wymienia to, co zrozumiałe, jako antywzorzec. Gdzie przebiega granica między legalną klasą kleju lub modułem, który przekazuje dane i wiadomości z miejsca na miejsce, a klasą, która robi za dużo?


title: Podejścia do zmniejszenia złożoności cyklomatycznej

text: Uruchomiłem nasz kod przez JSHint i zdecydowałem się zamienić testy na złożoność cyklomatyczną, a następnie rozpocząłem długi sprint refaktoryzacji. Jedno miejsce mnie zdziwiło, oto fragment kodu: var raf = null //raf oznacza requestAnimationFrame if (window.requestAnimationFrame) { raf = window.requestAnimationFrame; } else if (window.webkitRequestAnimationFrame) { raf = window.webkitRequestAnimationFrame; } else if (window.mozRequestAnimationFrame) { raf = window.mozRequestAnimationFrame; } else if (window.msRequestAnimationFrame) { raf = window.msRequestAnimationFrame; } else { raf = polyfillRequestAnimationFrame; } Nic dziwnego, że w tej implementacji CM jest 5, pierwszą próbą było użycie rozwiązania z MDN: var requestAnimationFrame = window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || window.msRequestAnimationFrame; window.requestAnimationFrame = requestAnimationFrame; Co dla mnie po prostu wygląda na włamanie (tak, wiem, większość pełnoetatowych programistów javascript się ze mną nie zgadza, jednak jest to powszechna opinia w naszym zespole). Bazując na moim kodzie, znalazłem inne hacki, które mogłem zastosować do pełnego lintera kodu, wśród tych, z których byłem dumny przez około 5 sekund, było użycie zrozumienia tablic: var rafs = [ window.requestAnimationFrame, window.webkitRequestAnimationFrame, window.mozRequestAnimationFrame, window .msRequestAnimationFrame, polyfillRequestAnimationFrame ].filter(function (rafClosure) { return rafClosure !== null && rafClosure !== undefined; }); zwrot rafs[0]; Jestem jednak ciekaw, czy istnieje mniej lub bardziej standardowa praktyka refaktoryzacji długiego kodu rozgałęziającego (to nie jest trywialne do zredukowania)?


title: Porada: dylemat osoby przeprowadzającej wywiad po raz pierwszy

text: Pracuję w swojej pierwszej pracy od około 2 lat i zostałem „poproszony” o przeprowadzenie wywiadu z potencjalnym kolegą z zespołu (którego być może również będę musiał mentorować) w dość krótkim czasie (2 dni od teraz). Początkowo dano mi wolną rękę (a przynajmniej tak myślałem i dlatego się zgodziłem), ale dzisiaj powiedziano mi, żebym „nie zadawać _książkowych_ pytań” – co oznacza, że mogę zadawać tylko podstawowe łamigłówki programistyczne i rzeczy podobne do „ pytanie fizbuzza. Mocno wierzę, że nieznajomość podstawowych notacji algorytmicznych (najbardziej mglistych idei złożoności czasoprzestrzennej) lub najmniejszej idei wyrażeń regularnych sprawiłaby, że praca z tym facetem byłaby bardzo trudna dla każdego. Wiem, że proszę o dużo tutaj, ale według ciebie, jaki byłby kompleksowy sposób przetestowania _absolutnie podstawowych_ wymagań faceta od CS (ma 2 lata doświadczenia) bez brzmienia zbyt pedantycznego/książkowego itp.? Wydaje się, że uzasadnione byłoby zadawanie tylko pytań w języku C/prostych łamigłówek… ale naprawdę chcę mieć coś innego niż „znajdowanie pętli na listach połączonych”, które stało się w pewnym sensie stwierdzeniem otwierającym większość wywiadów technicznych! ! To jest rozmowa twarzą w twarz z godziną lub więcej czasu – spojrzałem na podstawowe pytania Steve'a na ekranie telefonu i zastanawiałem się, czy istnieje przewodnik na temat „podstawowych pytań do rozmowy twarzą w twarz”, który mógłbym może użyć (lub skompilować z odpowiedzi społeczności tutaj). EDYCJA: Pozycja dotyczy głównie zadania programowania na poziomie jądra w języku C, z pewnymi drobiazgami C ++ wymaganymi do napisania struktury testowej.


title: Nigdy wcześniej z nikim nie rozmawiałem... POMOCY?

text: W tej firmie zajmującej się śledzeniem GIS było 3 programistów, ale teraz jest ich 2. W zeszłym tygodniu mój szef został zwolniony. Dzisiaj na wywiady przyjadą nowi deweloperzy. Przyjdą z agencji pośrednictwa pracy. Naprawdę nie wiem, jak być po tej stronie rozmowy rekrutacyjnej. Jakieś porady lub przykładowe pytania, które mogę zadać? Tło firmy: Nasza dwójka nosi wiele kapeluszy. Jesteśmy administratorami bazy danych MySQL, piszemy usługi internetowe w C#, w tym API, istnieją procesy zaplecza w C#, które generują raporty i generują alerty, a także mamy kilka projektów VB6, które osobiście mam nadzieję zastąpić. Nasza aplikacja internetowa składa się z niespełna 10 tys. wierszy kodu javascript, prawie 2 tys. wierszy kodu HTML i prawie 4 tys. wierszy kodu CSS. Nie używamy wielu frameworków ani bibliotek poza jQuery i Bing Maps. Jestem tu od roku jako programista i nigdzie nie pracowałem z jakimikolwiek obowiązkami związanymi z zarządzaniem. Jakie pytania mogę zadać, aby naprawdę pokazać mi, że ktoś wie, jak się rozwijać w tych językach? Naprawdę rysuję tutaj puste miejsce.


title: Jakie są problemy ze stosunkowo dużą wspólną biblioteką?

text: Dopóki kod w bibliotece podstawowej jest tak luźno powiązany, jak podzielenie go na osobne biblioteki, w czym problem? Ogólnie rzecz biorąc, posiadanie wielu zestawów składających się na rozwiązanie .NET jest bolesne. Ponadto, gdy kod w jednym rozwiązaniu musi zostać udostępniony, można go po prostu dodać do biblioteki wspólnej, zamiast decydować, do której biblioteki wspólnej należy go dodać lub tworzyć jeszcze jedną bibliotekę. edytuj: pytanie przychodzi do mnie po krótkim użyciu Smalltalk, gdzie cały kod jest dostępny do użycia przez cały czas.


title: Czy istnieje dobry powód, aby używać interfejsu Collection w języku Java?

text: Słyszałem argument, że powinieneś używać najbardziej ogólnego dostępnego interfejsu, aby nie być przywiązanym do konkretnej implementacji tego interfejsu. Czy ta logika dotyczy interfejsów, takich jak _java.util.Collection_? Zdecydowanie wolałbym zobaczyć coś takiego: List<Foo> getFoos() lub Set<Foo> getFoos() zamiast Collection<Foo> getFoos() W ostatnim przypadku nie wiem, jaki zestaw danych mam mam do czynienia, podczas gdy w pierwszych dwóch przypadkach mogę poczynić pewne założenia dotyczące porządku i wyjątkowości. Czy _java.util.Collection_ ma użyteczność poza byciem logicznym rodzicem zarówno dla zestawów, jak i list? Gdybyś natknął się na kod, który wykorzystywał _Collection_ podczas przeglądu kodu, w jaki sposób określiłbyś, czy jego użycie jest uzasadnione i jakie sugerowałbyś zastąpienie go bardziej szczegółowym interfejsem?


title: Jak ocenić umiejętności Java

text: Zostałem poproszony o przygotowanie tabeli, w której programiści w zespole mogliby wykorzystać do oceny swojego poziomu Java (może od 1 do 5). A wtedy będą wiedzieć, czego im brakuje, aby mogli skupić się na nauce tej techniki. Myślę o Matrycy Umiejętności, ale nie wiem od czego zacząć. Czy mógłbyś mi pomóc jakąś wskazówkę? Z góry dziękuję. * * * Jak skomentował Paul, chciałbym zaktualizować niektóre informacje. nasze oprogramowanie jest po prostu związane z Web-Application przy użyciu Core Java, JSP, JSF, Struts, Spring, Hibernate. Aplikacja desktopowa używa Core Java, Swing do tworzenia


title: Książka na temat koncepcji technologii informatycznych dla programistów

text: Czy istnieje dobra książka i/lub seria artykułów, które wyjaśniają pojęcia IT, takie jak sieć, domena Windows, bezpieczeństwo (certyfikaty SSL), kryptografia, infrastruktura IT itp.? Jestem programistą średniego poziomu, który chciałby zbudować dobrą podstawę na tych tematach, ponieważ pomogłoby mi to zobaczyć, jak mój system pasuje. Teraz zdaję sobie sprawę, że te tematy są obszerne i mają wiele zasobów dostępnych na poszczególne tematy. Moim celem, na tym etapie mojej kariery, nie jest koniecznie zdobycie głębi informacji, zamiast tego szukam dobrej ogólnej wiedzy praktycznej iw razie potrzeby uciekam się do tych specjalnych książek tematycznych. Jestem pewien, że musieliście przezwyciężyć ten wstrząs w swojej karierze jako programista oprogramowania dla przedsiębiorstw. Co zrobiłeś? Z jakich zasobów skorzystałeś? W jaki sposób można wypełnić luki w wiedzy i uzyskać niezbędne zrozumienie, które jest niezbędne do osiągnięcia sukcesu. Bardzo interesuje mnie czytanie o twoich doświadczeniach. Dzięki za komentarze do tej pory. Z góry dziękuję!


title: Co to znaczy wykonać operację „w miejscu” dla języków tłumaczonych?

text: Pytanie dotyczące programowania: > Odwróć słowa w ciągu (słowa są oddzielone jedną lub większą liczbą spacji). **Teraz > zrób to na miejscu**. Co oznacza „w miejscu” w powyższym kontekście dla interpretowanego języka, takiego jak PHP lub JavaScript?


title: Czy usługi sprawdzania kodu są warte zachodu?

text: Widziałem strony internetowe, które sprawdzają programistów pod kątem umiejętności pisania kodu. Jest to usługa, w której wpisujesz pytanie programistyczne, a następnie wysyłasz link. Kandydaci do pracy programują swoje rozwiązanie na pytanie, gdy są one synchronizowane i rejestrowane. Osoba, która umieściła pytanie, może następnie odtworzyć nagranie wideo swojego kandydata, który programuje skrypt. Ten film pozwala im zobaczyć, jak szybko i zgrabnie potrafi kodować ich kandydat do pracy. Czy tego typu usługi są tego warte? Jakie zastrzeżenia i ograniczenia wiążą się z używaniem takich rzeczy do sprawdzania potencjalnych pracowników?


title: Jak spełnić wymagania AGPL w moim serwisie internetowym?

text: Chcemy prostego narzędzia do analizowania formularzy PDF, pobierającego tylko powiązane nazwy pól i wartości użytkownika. PDFSharp byłby dla nas dobrą opcją, ponieważ jest na licencji MIT, ale jest kilka wersji Acrobata za sobą - więc nie zadziała. Najpopularniejszą biblioteką (z tego, co ujawniły moje poszukiwania) wydaje się być iTextSharp. W ten sposób zostałem wprowadzony w zawiłości AGPL. Teraz o strukturze naszej aplikacji. Chcemy czegoś prostego i wielokrotnego użytku wśród dowolnych aplikacji, z których będziemy mogli później korzystać, a które wymagają tej samej funkcjonalności. Mój plan polegał na zaprojektowaniu prostej usługi internetowej, która pobiera plik PDF i po prostu zwraca pola i wartości na liście par klucz-wartość. Wygląda na to, że dopóki jest to usługa intranetowa, AGPL nie ma obaw, jak opisano w tym pytaniu: Czy mogę bezpiecznie korzystać z biblioteki open source w wewnętrznym projekcie o zamkniętym kodzie źródłowym? To jest nasz najbardziej prawdopodobny scenariusz, ale chciałem być świadomy z wyprzedzeniem na wypadek, gdybyśmy musieli ujawnić naszą usługę na zewnątrz (na przykład w przypadku niektórych naszych klientów Silverlight). Gdyby usługa była wyeksponowana na zewnątrz, to w ramach AGPL musielibyśmy po prostu podać źródło samej usługi? Czy też należałoby podać źródło jakiegokolwiek konsumenta usługi? Tak więc szukam 1) potwierdzenia, że w scenariuszu intranetowym nie ma dalszych rozważań i 2) co jest konieczne, jeśli usługa sieciowa jest publicznie widoczna?


title: Udostępnianie metod uwierzytelniania w API i aplikacji internetowej

text: Chcę udostępnić implementację uwierzytelniania w aplikacji sieci web i interfejsie API sieci web. Aplikacja webowa będzie ASP.NET (głównie MVC 4), API będzie w większości ASP.NET WEB API, choć spodziewam się, że będzie też miało kilka niestandardowych modułów lub handlerów. Chcę: 1. Udostępnić jak najwięcej implementacji uwierzytelniania między aplikacją a interfejsem API. 2. Spraw, aby aplikacja internetowa zachowywała się jak uwierzytelnianie formularzy (atrakcyjna strona logowania, opcja wylogowania, przekierowanie do/ze strony logowania, gdy żądanie wymaga uwierzytelnienia/autoryzacji). 3. Niech wywołujący API używają czegoś bliższego standardowemu HTTP (401 – Nieautoryzowane, a nie 302 – Przekierowanie). 4. Zapewnij mechanizmy wylogowania po stronie klienta i serwera, które nie wymagają zmiany hasła (więc podstawowe HTTP jest wyłączone, ponieważ klienci zazwyczaj buforują swoje dane uwierzytelniające). Sposób, w jaki myślę o zaimplementowaniu tego, to użycie zwykłego starego uwierzytelniania formularzy ASP.NET dla aplikacji sieci Web i wypychanie innego modułu na stos (podobnie jak MADAM - Mixed Authentication Disposition ASP.NET Module). Ten moduł będzie szukał jakiegoś nagłówka HTTP (specyficznego dla implementacji), który wskazuje, że "rozmówcą jest API". Jeśli ustawiony jest nagłówek "caller is API", to usługa zareaguje inaczej niż standardowe uwierzytelnianie formularzy ASP.NET, będzie: 1. 401 zamiast 302 na żądanie bez uwierzytelnienia. 2. Wyszukaj nazwę użytkownika + hasło w niestandardowym nagłówku HTTP „Login” i zwróć bilet FormsAuthentication w niestandardowym nagłówku „FormsAuth”. 3. Poszukaj biletu FormsAuthentication w niestandardowym nagłówku „FormsAuth”. Moje pytania to: 1. Czy istnieje platforma dla ASP.NET, która obejmuje już ten scenariusz? 2. Czy w tej proponowanej realizacji są jakieś rażące dziury? Moją główną obawą jest zagrożenie bezpieczeństwa, którego nie widzę, ale podobnie obawiam się, że może być coś w takiej implementacji, co sprawi, że praca z nią będzie zbyt restrykcyjna lub niezręczna.


title: Kiedy wzorzec projektu modelu prezentacji powinien zawierać co najmniej jeden kontroler?

text: Badałem wykorzystanie wzorca projektowego Presentation Model dla aplikacji, którą zamierzam zbudować. Konkretną technologią, której będę używał, jest Flex, chociaż wątpię, czy ma to znaczenie w przypadku tego pytania. Ogólnie rzecz biorąc, większość przykładów modeli prezentacji, które napotkałem, jest dość spójna w podstawowej implementacji. Mniej więcej podążają za opisem modelu prezentacji Martina Fowlera do T, jeśli chodzi o trzy podstawowe pojęcia: widok, model, model prezentacji. Myślę, że to rozumiem. Jednak widziałem kilka innych przykładów, które rozszerzają to dalej, włączając obiekty kontrolera, zdarzenia i usługi oprócz trzech podstawowych konstrukcji, które wymieniłem powyżej. Przykłady, które widziałem, to (zwróć uwagę, że oba używają Swiz do DI i obsługi zdarzeń): * CafeTownsend * Przykład modelu prezentacji Swiz Rozumiem rozumowanie warstwy usług. Możesz chcieć lub potrzebować pobrać dane z interfejsu SOAP jednego dnia, interfejsu REST następnego i SharedObject trzeciego dnia. Interfejs warstwy usług ułatwia zamianę logiki pobierania i trwałości. Jednak nie jestem pewien, czy rozumiem, dlaczego dodanie kontrolera jest zaletą? W przykładach połączonych powyżej pewna logika w modelu prezentacji jest wysyłana i obsługiwana w samym modelu prezentacji, podczas gdy inna logika jest wysyłana i adresowana w kontrolerze. Domyślam się, że logika specyficzna dla widoku jest uchwycona w modelu prezentacji. Potwierdza to pogląd, że model prezentacji jest po prostu abstrakcyjną reprezentacją widoku. Ponadto podejrzewam, że kontrolery są używane do przechwytywania wspólnej logiki biznesowej i zdarzeń, które nie są specyficzne dla widoku i nie są wykonywane przez warstwę usług (np. Trwałość). Powinno to wspierać ponowne użycie w całej aplikacji i pomóc w zwiększeniu testowalności aplikacji. * Czy ten wniosek jest słuszny? * Czy brakuje mi innych zalet? * Jakie są wady (oprócz więcej kodu)? * Skąd wiesz, kiedy logika powinna znajdować się w modelu prezentacji, a kiedy powinna znajdować się w kontrolerze?


title: Baza danych gier karcianych na Androida do budowania talii

text: Tworzę grę karcianą na Androida, w której gracz może wybierać spośród wielu kart, aby zbudować talię zawierającą około 60 kart. Obecnie mam całą bazę utworzonych kart, które użytkownik może przeglądać. Następnym krokiem jest umożliwienie użytkownikowi wybrania kart i stworzenia talii z dowolnymi kartami, które chciałby. Mam formularz, w którym użytkownik może wyszukać konkretne karty na podstawie kilku różnych atrybutów. Wyniki wyszukiwania są wyświetlane w działaniu listy. Moja myśl o tworzeniu talii polega na dodaniu klucza podstawowego każdej wybranej przez użytkownika karty do tabeli bazy danych SQLite z ilością, jaką chciałby w talii. W ten sposób, gdy użytkownik szuka kart, widzi stan talii. Gdy użytkownik zdecyduje się zapisać talię. Wyeksportuję listę kart do XML i wyczyszczę zawartość tabeli. Jeśli użytkownik chciał wprowadzić zmiany w talii, ładowałby ją, byłaby przetwarzana z powrotem do tabeli, aby mogli wprowadzić zmiany. Podobna sytuacja miałaby miejsce, gdy w końcu załadowano talię do gry. Jestem tylko ciekaw, co reszta z was może pomyśleć o tej metodzie. Obecnie jest to projekt osobisty i tylko ja nad nim pracuję. Jeśli uda mi się wymyślić najlepszą implementację, zanim zacznę kodować, mam nadzieję, że oszczędzę sobie trochę czasu i kłopotów.


title: Jak stworzyć aplikację korzystającą z bazy danych w sposób zwinny/test-driven-development?

text: Chcę dodać bazy danych (tradycyjne RDBMS typu klient/serwer, takie jak Mysql/Postgresql w przeciwieństwie do NoSQL lub wbudowane bazy danych) do mojego zestawu narzędzi jako programista. Używałem SQLite do prostszych projektów z tylko 1 klientem, ale teraz chcę robić bardziej skomplikowane rzeczy (tj. Tworzenie stron internetowych w oparciu o bazę danych). Zwykle lubię przestrzegać zasad zwinnego i/lub opartego na testach rozwoju. Generalnie koduję w Perlu lub Pythonie. Pytania: 1. Jak przetestować mój kod tak, aby każde uruchomienie zestawu testów rozpoczynało się od stanu „nieskazitelnego”? Czy w każdym teście uruchamiam oddzielną instancję serwera bazy danych? Czy używam tymczasowej bazy danych? 2. Jak zaprojektować moje tabele/schemat, aby był elastyczny w stosunku do zmieniających się wymagań? 3. Czy zaczynam od ORM dla mojego języka? Czy mogę trzymać się ręcznego kodowania SQL? Jedną z rzeczy, które nie są dla mnie atrakcyjne, jest konieczność zmiany więcej niż jednej rzeczy (powiedzmy, instrukcja CREATE TABLE i powiązane instrukcje crud) dla jednej zmiany, b/c, która jest podatna na błędy. Z drugiej strony spodziewam się, że ORM będą wolniejsze i trudniejsze do debugowania niż surowy SQL. 4. Jaka jest ogólna strategia migracji danych między jedną wersją programu a nowszą? Czy ostrożnie piszę instrukcje ALTER TABLE między każdą wersją, czy też zrzucam dane i importuję świeże w nowej wersji?


title: Czy dokumentacja powinna być polityką firmy, czy obowiązkiem każdego programisty?

text: Na obecnym stanowisku zmagam się ostatnio z całym tematem dokumentacji. Jestem w takim momencie w mojej karierze programistycznej, że czuję, że dopiero co narodziłem się w całym świecie poprawnej i efektywnej dokumentacji. Obecnie niewiele można znaleźć w jakiejkolwiek bazie danych lub kodzie źródłowym firmy. Dokumenty specyfikacji użytkownika są zazwyczaj opracowywane w wątkach poczty e-mail, w dobry dzień. Zastanawiam się, czy jestem winny, że nie byłem wobec siebie surowy w tej kwestii? Czy to programista jest odpowiedzialny za utrzymywanie tego i aktualizowanie tam, gdzie jest to potrzebne lub brakuje? Uświadomiłem sobie, że najlepszym sposobem podejścia do dokumentacji jest udawanie, że masz jedną nogę za drzwiami, a inna dusza będzie musiała przejąć twoją pracę. Myśli?


title: Czy istnieje sposób sprawdzenia, czy redystrybuowany kod został zmieniony?

text: Chciałbym redystrybuować moją aplikację (PHP) w taki sposób, aby użytkownik otrzymał warstwę frontonu (prezentacji), która korzysta z interfejsu API na moim serwerze za pośrednictwem usługi sieci Web. Chcę, aby użytkownik mógł zmienić swoją część aplikacji, ale jednocześnie wykluczył taką zmienioną aplikację z normalnego wsparcia i oferował wsparcie za godzinę. Czy istnieje sposób na sprawdzenie, czy kod źródłowy został zmieniony? Jedynym rozwiązaniem, o którym mogę pomyśleć, jest uzyskanie sum kontrolnych wszystkich plików, a następnie przesłanie ich przez moje API i porównanie ich z oryginalną aplikacją. Czy można to zrobić w bezpieczniejszy sposób, aby użytkownikowi trudniej było złamać taką ochronę?


title: Rozwiązanie raportowania w PHP / CodeIgniter - Logika po stronie serwera a po stronie klienta

text: Tworzę raport dla użytkownika końcowego. Chcieliby zobaczyć listę wszystkich widżetów... ale chcieliby też zobaczyć widżety z brakującymi atrybutami, takimi jak brakujące nazwy lub brakujący rozmiar. Myślałem więc o stworzeniu jednej metody, która zwraca dane json zawierające wszystkie widżety ... a następnie za pomocą JavaScript, aby umożliwić im filtrowanie danych pod kątem brakujących danych, zamiast ponownego zapytania bazy danych. Docelowo muszą mieć możliwość zapisywania wszystkich „raportów” (przefiltrowanych wersji danych) w pliku csv. Oto dwie opcje, nad którymi się zastanawiam: **Projekt 1** Utwórz 3 oddzielne metody w moim kontrolerze/modelu, takie jak: get_all_data() get_records_with_missing_names() get_records_with_missing_size() A potem, gdy te metody zostaną wywołane, wyświetliłbym dane na ekranie i daj im przycisk, aby zapisać do pliku csv. **Projekt 2** Utwórz jedną metodę o nazwie get_all_data(), a następnie jakoś daj im w widoku narzędzia do filtrowania danych json przy użyciu tabel itp., a następnie pozwól im zapisać podzbiory danych. Rzeczywistość jest taka, że aby wyświetlić wszystkie dane, nadal muszę je „masować”, a zatem wiem, którym rekordom brakuje atrybutów. Więc wolałbym nie tworzyć oddzielnych metod przez każdy filtr. Nie jestem jeszcze pewien, jak bym to zrobił, ale w tym momencie chciałbym poznać kilka zalet / wad każdej metody. Dziękuję.


title: Czy (A)GPLv3 pozwala ludziom na anonimowe współtworzenie kodu?

text: Czy AGPLv3 lub GPLv3 pozwala ludziom współtworzyć kod bez określania autora wniesionego kodu? Czy pozwala ludziom na rozwidlenie projektu (A)GPL bez określania autorów rozwidlonego kodu?


title: Jak długo powinienem ćwiczyć kata kodowe?

text: Niedawno dowiedziałem się o idei kodowania kata na blogu Dave'a Thomasa i bardzo się tym zainteresowałem. Chciałbym usłyszeć opinie osób, które mają doświadczenie z kata kodowymi; czy zakłada się, że powinienem ćwiczyć jedno kata, dopóki nie znajdę rozwiązania problemu, czy jest inne wytłumaczenie?


title: Uruchamianie cherryPy na Apache czy nie?

text: Wygląda na to, że cherryPy ma samodzielny serwer WWW, czy sugeruje się wdrożenie aplikacji na serwerze Apache? czy po prostu użyć samodzielnego? Jeśli tak, to jakie plusy i minusy między tymi decyzjami? Dziękuję.