title: Czy dobrą praktyką jest utrzymywanie 2 powiązanych tabel (przy użyciu auto_increment PK), aby mieć ten sam Max identyfikatora auto_increment po zmodyfikowaniu table1?

text: To pytanie dotyczy dobrych praktyk projektowych w programowaniu. Spójrzmy na ten przykład, mamy 2 powiązane ze sobą tabele: Table1 textID - text 1 - love.. 2 - men... ... Table2 rID - textID 1 - 1 2 - 2 ... Uwaga: W Table1: * `textID ` to klucz podstawowy z auto_inkrementacją W Tabeli 2: * `rID` to klucz podstawowy z auto_inkrementacją & `textID` to klucz obcy * Relacja jest taka, że 1 `rID` będzie mieć 1 i tylko 1 `textID` ale 1 `textID` może mieć kilka „rID”. Tak więc, gdy tabela1 została zmodyfikowana, tabela2 powinna zostać odpowiednio zaktualizowana. Ok, oto fikcyjny przykład. Budujesz bardzo skomplikowany system. Kiedy modyfikujesz 1 rekord w tabeli 1, musisz śledzić powiązany rekord w tabeli2. Aby śledzić, możesz zrobić tak: **Opcja 1** : Kiedy modyfikujesz rekord w tabeli 1, spróbujesz zmodyfikować powiązany rekord w tabeli 2. Może to być dość trudne pod względem programowania, szczególnie dla bardzo bardzo skomplikowany system. **Opcja 2** : zamiast modyfikować powiązany rekord w tabeli 2 zdecydowałeś się usunąć stary rekord w tabeli 2 i wstawić nowy. To jest łatwiejsze do zaprogramowania. Załóżmy na przykład, że używasz opcji 2, a kiedy zmodyfikujesz `rekord 1,2,3,....,100` w tabeli 1, tabela2 będzie wyglądać tak: Tabela2 rID - textID 101 - 1 102 - 2 .. 200 - 100 Oznacza to, że **Max** identyfikatorów auto_increment w tabeli 1 jest nadal taki sam (100), ale **Max** identyfikatorów auto_increment w tabeli 2 osiągnął już 200. co jeśli użytkownik zmodyfikuje wiele razy? jeśli tak, to w table2 może zabraknąć rekordów? możemy użyć `BigInt`, ale to sprawi, że aplikacja będzie działać wolniej? Uwaga: Jeśli poświęcisz czas na programowanie modyfikacji rekordów w tabeli 2, gdy tabela 1 została zmodyfikowana, będzie to bardzo trudne i dlatego będzie podatne na błędy. Ale jeśli po prostu wyczyścisz stary rekord i wstawisz nowe rekordy do tabeli 2, programowanie jest znacznie łatwe, a zatem Twój program jest prostszy i mniej podatny na błędy. **Czy więc dobrą praktyką jest utrzymywanie 2 powiązanych tabel (przy użyciu auto_increment PK), aby mieć ten sam Max identyfikatora auto_increment, gdy tabela1 została zmodyfikowana?**


title: Czy wznowienie przerwanej operacji POST na żądanie GET jest zgodne z REST?

text: Mam API RESTful, jeden z zasobów ma stan, który jest określany zbiorczo przez wiele serwerów, nie wszystkie należą do nas. Jedna z operacji na tym zasobie będzie musiała zmodyfikować stan wielu serwerów. Klient wysyła żądanie POST w celu wykonania tej operacji do naszego serwera API, a nasz serwer API wysyła żądania do innych serwerów w celu realizacji żądania. Ze względu na charakter całej operacji nie wszystkie operacje można wykonać w ramach jednej transakcji. Interfejsy API dla uczestniczących serwerów w większości nie obsługują zatwierdzania dwufazowego, ale większość z nich ma pewną gwarancję idempotentności, chociaż nie wszystkie z nich są RPCish, a nie RESTful. Jeśli podczas tej operacji wystąpi jakikolwiek błąd, zasób pozostanie w stanie pośrednim, ale serwer powinien mieć możliwość powtórzenia operacji od momentu, w którym przerwał, aby naprawić stan zasobu. Czy byłoby to zły pomysł, czy też byłoby to sprzeczne z zasadami REST, gdyby serwer w przejrzysty sposób wznawiał niedokończone operacje przy następnym przeładowaniu stanu żądania (za pomocą GET), zamiast wymagać od klienta wykrycia, że zasób jest w stanie pośrednim i wyślij kolejną prośbę o naprawienie sytuacji, zanim przejdziesz dalej. Z jednej strony GET ma być bezpieczną operacją, ale z drugiej strony pozwolenie GET na rozwiązanie sytuacji upraszcza klienta, ponieważ nie musi on zajmować się tą sytuacją. Należy zauważyć, że użytkownicy również wchodzą w bezpośrednią interakcję z innymi uczestniczącymi serwerami (tj. nie tylko za pośrednictwem naszego klienta), więc mogą zobaczyć niektóre efekty operacji, jeśli zasób zostanie pozostawiony w stanie pośrednim.


title: Czy można używać C++ z platformą .NET?

text: Czytałem wiele komentarzy na temat programowania GUI, zarówno w C# jak i C++. Zauważyłem, że framework Microsoftu .NET jest potężny do programowania GUI. Czy można więc używać C++ i .NET Framework? Myślę, że będzie to świetna kombinacja, ponieważ C++ jest potężnym językiem, a .NET Framework jest preferowany do programowania GUI w systemie Windows, jak czytałem. Czy można napisać GUI w C#, a funkcjonalność w C++?


title: W jakim formacie należy przesyłać wartości w bazie danych w PHP?

text: Tworzę aplikację opartą na konkursie quizowym na egzaminy konkursowe. Użytkownik może podać różne kategorie testów, które będą zawierały różne typy pytań następujących typów: 1. Pojedynczy wybór, 2. Wielokrotny wybór, 3. Dopasowanie, 4. Rozumienie (pytanie będzie akapitem i na podstawie że będą pytania), 5. Dowolny tekst (użytkownik będzie musiał wpisać odpowiedź), 6. Zakres (użytkownik musi wybrać liczbę od 1 do 10). Obawiam się, że tworząc pytania ze strony administratora, jak mogę zarządzać bazą danych dla powyższego typu pytań? Mam jedną kolumnę odpowiedzi w tabeli pytań, ale jest sześć rodzajów pytań, więc jaki powinien być wygodny sposób zapisywania odpowiedzi w bazie danych, aby gdy użytkownik udzielił odpowiedzi, mogłem łatwo sprawdzić, czy odpowiedź pasuje? Myślę o zapisaniu odpowiedzi w postaci tagów XML. Czy to będzie dobre podejście?


title: Jaki powinien być sens używania ścisłego porównania do tego konkretnego ciągu: 'final'

text: W przeglądzie kodu, który robiłem dla współpracownika, powiedziałem, że tutaj: if (someValue === 'final'){ Nie ma sensu używać ścisłego porównania, ponieważ jedynym sposobem przekazania go jako true jest z inną wartością ciągu równa się końcowi. Myślę, że to wystarczy: if (someValue == 'final'){ Jego argumentem jest to, że obiekt może mieć metodę toString, która zwraca ten ciąg, ale ściśle nie ma tego samego typu danych. Chociaż to prawda, jako komputer (który nie jest inteligentny jak człowiek), z drugiej strony nie ma sensu, ponieważ na końcu drogi jedynym sposobem, aby przekazać to jako prawdziwe, jest łańcuch równy finalowi. Oto jego przykładowy kod: Test = function(){} Test.prototype.toString = function () { return 'final'; } var nie zgadzam sięDaniel = new Test(); document.getElementById('foo').innerHTML = (disagreeDaniel == 'final'); Chodzi mi o to, żebyście otrzymali lepsze wyjaśnienie dla niego, dlaczego nie ma sensu ścisłego porównania z ustalonym ścisłym, takim jak „ostateczny”, ponieważ nie ma sposobu, aby przekazać go jako pozytywny z wartością inną niż „ostateczny”. '.(jego przykład na końcu zwraca ciąg znaków) Dla mnie ścisłe porównanie jest przydatne dla wartości logicznych, null, undefined, zero, gdzie te mogą w niektórych przypadkach przekazywać wszystkie jako fałszywe. Chcę poznać twoje opinie. **====== Aktualizacja ===** Łatwo jest stwierdzić, że ludzie nie czytają. Moje pytanie dotyczyło sensu użycia === do porównania z „ostatecznym”. Mam wiele wyjaśnień na temat rzeczy, które nie mają nic do roboty. Dla porównania do null, false, zero itp. powiedziałem, że użyłem === dla TYCH przypadków, ale nie dla długich ciągów. ale ludzie próbowali mi wyjaśnić o null, false, zero itp. Do tej pory werdykt jest taki, że nie ma argumentu SOLID (jest kilka dobrych, ale nie solidnych), które pokazują, dlaczego używamy === do porównania z „ostatecznym” powinno być lepsze niż use ==(przeczytaj ponownie, to tylko ten przypadek użycia, mówię o jednym konkretnym przypadku użycia). Rozmawiałem też ze współpracownikiem, dałem mu +1 do kodu. Nie mam problemów z ===, mój problem nigdy nie musiał go używać, moim celem zawsze było i jest i będzie, jaki powinien być **sens** i wygląda na to, że byłoby to pytanie z mimo wszystko odpowiedzią . ps. inną rzeczą, której nauczyłem się dawno temu, jest nigdy nie być agresywnym wobec innych opinii; "Tematy techniczne" dla kilku programistów są jak religia dla religijnych (a niektórzy goście właśnie o tym pamiętali). ps2. Oznaczyłem jako rozwiązany jako demokratyczny, nie chcę niczego demonstrować, tylko pomyślałem, że ta strona jest do dobrych dyskusji i dostałem to. :D


title: foreach na liście lub foreach na liście.where

text: Nie wiem jak nazwać to pytanie. Oto mój przykład: foreach (var item in lstItem.Where(item => stock.ItemCode == item.ItemCode)) { stock.ItemName = item.ItemName; stock.NazwaJednostkiPozycji = pozycja.NazwaJednostkiPozycji; stock.Marka = item.Marka; stock.NazwaRodziny = item.NazwaRodziny; } lub // Załóżmy, że lista zawiera pozycje var list = lstItem.Where(item => stock.ItemCode == item.ItemCode); foreach (var element na liście) { stock.ItemName = item.ItemName; stock.NazwaJednostkiPozycji = pozycja.NazwaJednostkiPozycji; stock.Marka = item.Marka; stock.NazwaRodziny = item.NazwaRodziny; }      Który jest lepszy?


title: Gdzie należy zadeklarować zmienne używane w pętlach for w Javie, aby uzyskać maksymalną wydajność?

text: Mówię hipotetycznie, ale użyję przykładu tego, nad czym pracowałem jakiś czas temu na zajęciach z programowania. Jest lepszy sposób na wykonanie tej operacji, ale nie o to chodzi. Przykład pokazujący, o co mi chodzi, chcę wziąć BufferedImage i indywidualnie manipulować każdym pikselem. Czyli coś takiego: for(int x = 0; x < out.getWidth(); x++) { for(int y = 0; y < out.getHeight(); y++) { int color = in.getRGB(x, y); int r = (kolor & 0xff0000) >>> 16; int g = (kolor & 0x00ff00) >>> 8; int b = (kolor & 0x0000ff); //Zrób coś z r //Zrób coś zg //Zrób coś zb color = (r << 16) | (g <<8) | b; out.setRGB(x, y, kolor); } } powrót; Czy ta pętla byłaby mniej lub bardziej wydajna, gdybym zadeklarował color, r, g i b poza pętlami for?


title: Gdzie są zadeklarowane zmienne C?

text: Widzę dużo kodu ze zmiennymi zadeklarowanymi zaraz po funkcji, ale kiedy publikuję coś takiego, ludzie wpadają w szał i mówią, że lepiej je zadeklarować, gdy są używane. Zakładam, że to wszystko kompiluje się do tego samego pliku wykonywalnego, więc jest to po prostu kwestia stylu. O ile wiem, prawie cały kod C (99,9%, który widziałem) deklaruje je na początku i tak to robiono przez wiele lat. Dlaczego więc ludzie ciągle sugerują, że są deklarowani bliżej bloku, który ich używa?


title: Gdzie deklarujesz zmienne? Szczyt metody lub kiedy ich potrzebujesz?

text: Mam dylemat (oczywiście geekowski). **Uwielbiam** deklarować zmienne na początku moich metod i zazwyczaj porządkuję je w jakiś logiczny sposób. Problem polega na tym, że kiedy lista staje się długa, wymyka się spod kontroli. Czy powinienem je po prostu zadeklarować **kiedy ich potrzebuję**?


> **Possible Duplicate:** > Gdzie deklarujesz zmienne? Szczyt metody lub kiedy ich potrzebujesz? Czy to ma znaczenie, czy deklaruję zmienne wewnątrz lub na zewnątrz pętli w Javie? Czy to for(int i = 0; i < 1000; i++) { int temp = doCoś(); jakasMetoda(temp); } równy temu (w odniesieniu do wykorzystania pamięci)? temp. wewn = 0; for(int i = 0; i < 1000; i++) { temp = doCoś(); jakasMetoda(temp); } A co jeśli zmienna tymczasowa jest na przykład ArrayList? for(int i = 0; i < 1000; i++) { ArrayList<Integer> array = new ArrayList<Integer>(); fillArray(tablica); // zrób coś z tablicą } EDYCJA: za pomocą `javap -c` otrzymałem następującą zmienną wyjściową poza pętlą: public static void main(java.lang.String[]); Kod: 0: iconst_0 1: istore_1 2: iconst_0 3: istore_2 4: iload_2 5: sipush 1000 8: if_icmpge 25 11: invokestatic #2 // Metoda doSomething:()I 14: istore_1 15: iload_1 16: invokestatic #3 / / Metoda someMethod:(I)V 19: iinc 2, 1 22: goto 4 25: return Zmienna wewnątrz pętli: public static void main(java.lang.String[]); Kod: 0: iconst_0 1: istore_1 2: iload_1 3: sipush 1000 6: if_icmpge 23 9: invokestatic #2 // Metoda doSomething:()I 12: istore_2 13: iload_2 14: invokestatic #3 // Metoda jakaśMethod:(I )V 17: iinc 1, 1 20: goto 2 23: return A dla zainteresowanych ten kod: public class Test3 { public static void main(String[] args) { for(int i = 0; i< 1000; i++ ) { jakaśMetoda(zrobićCoś()); } } private static int doCoś() { return 1; } private static void someMethod(int temp) { temp++; } } daje to: public static void main(java.lang.String[]); Kod: 0: iconst_0 1: istore_1 2: iload_1 3: sipush 1000 6: if_icmpge 21 9: invokestatic #2 // Metoda doSomething:()I 12: invokestatic #3 // Metoda someMethod:(I)V 15: iinc 1 , 1 18: goto 2 21: return Ale optymalizacja odbywa się wtedy w czasie wykonywania. Czy można spojrzeć na zoptymalizowany kod? (Przepraszam za długą EDYCJĘ)


title: Gdzie należy deklarować zmienne

text: Biorąc pod uwagę, że mam pętlę `for` w metodzie klasy. Czy zwiększana zmienna powinna być zadeklarowana jako `członek klasy`, czy też powinna być zadeklarowana `w metodzie`, której jej używa (lub nawet bezpośrednio w pętli `for`)? O ile zadeklarowanie go wewnątrz metody wydaje się łatwiejsze i czystsze, to czy zadeklarowanie go na początku klasy nie daje większej kontroli nad nim? Coś jak deklaracja `int var_used_for_loop_in_method_x`. Czym jest dobra praktyka programistyczna? Zauważ, że nie pytam specjalnie o pętlę `for`. Pytam, czy powinniśmy starać się umieścić większość zmiennych jako członków klasy tak często, jak to możliwe, czy nie.


title: Pisanie testu jednostkowego dla jednostki zależnej od platformy

text: Mam metodę do przetestowania, która zależy od systemu operacyjnego, jakie jest najlepsze podejście do testowania metody w zależności od systemu operacyjnego? Czy ma testować na każdym systemie operacyjnym, którego potrzebuję? Czy istnieje lepsze podejście do przeprowadzania testów tylko na jednym systemie? Bardziej konkretną informacją jest to, że mam metodę, która jest zależna od systemu operacyjnego, używając metody `platform.system` Pythona w instrukcji if-else i muszę ją przetestować, wszystkie możliwe wyniki tej metody. Ta metoda wygląda tak: def updateString(): if platform.system() == 'Darwin': return "http://download.com/to/OSX/version" elif platform.system() == 'Linux': return "http://download.com/to/Linux/version" elif platform.system() == 'Windows': return "http://download.com/to/Windows/version" else: return "Zasięgnij porady jak zaktualizować”.


title: Jaka jest najlepsza dokumentacja, którą tworzysz i dlaczego?

text: Myślę, że można bezpiecznie założyć, że dla większości programistów tworzenie dokumentacji nie jest tak zabawne, jak samo kodowanie. Myślę, że można również bezpiecznie założyć, że większość dobrych programistów dostrzega potrzebę przydatnej dokumentacji, a kod, który piszą, nie jest wyjątkiem w żadnym razie. Więc chciałbym wiedzieć: jaka jest najlepsza dokumentacja, którą tworzysz (a kod źródłowy się nie liczy). Odpowiedź może być dowolna, od komentarzy po testy jednostkowe. Większym pytaniem jest _dlaczego_ jest to najlepsza dokumentacja, jaką tworzysz?


title: Czy zależność tablicy od poprzednich warunków jest uważana za cykliczną?

text: Na przykład weźmy przypadek liczby Fibonacciego, aby obliczyć n-tą liczbę, której wymagasz termin „n-1” i „n-2”. Jeśli robię to z podejściem oddolnym, czy jest to rekurencja, ponieważ `f(n)` zależy od `f(n-1)`?


title: Agnostyk DBMS - Jak nazwać kolumnę COUNT z zapytania SQL

text: Mam problem z nazwaniem kolumny COUNT() z zapytań SQL i będę przełączać się między różnymi wariantami * _Count * [Count] (sql lub "count" lub backticks dla MySQL itp.) * C * Cnt * CountSomething (gdzie "coś" jest liczone pole lub "CountAll") * NoOfRows * RowCount * itp. Czy ktoś wymyślił nazwę, z której jesteś zadowolony i zawsze używaj bez wahania? Niepokoi mnie to, ponieważ po dołączeniu do SO niedawno moje odpowiedzi wykazały tendencję do przerzucania się bez konsekwencji. Muszę to uporządkować. Proszę pomóż. (Skoro już przy tym jesteśmy, czego używasz dla SUM itp.?) **Uwaga:** Zanim zamkniesz to pytanie, zastanów się, czy to nie było: Jaka jest najlepsza nazwa dla niemutującej metody „dodawania” w niezmienna kolekcja?


Jaka jest różnica między modelem do testów a modelem do rozwoju? Czy model do testów zawiera tylko to, co powinniśmy przetestować? Czy używamy tych samych diagramów w modelu do testów i modelu do rozwoju? Na przykład, jeśli użyjemy diagramów sekwencji do generowania przypadków testowych, te diagramy nie będą używane do kodowania? Wypowiadam się w kontekście testowania opartego na modelu (MBT).


title: Jak stworzyć aplikację na smartfona, aby uzyskać dostęp do aplikacji internetowej?

text: Mój kolega stworzył wewnętrzną aplikację internetową. Ta aplikacja działa tylko w przeglądarce Internet Explorer, co oznacza, że nie mam do niej dostępu ze smartfona. Czy istnieje sposób na stworzenie aplikacji, która będzie służyła jako pomost między moim smartfonem a tą aplikacją internetową, umożliwiając mi korzystanie z aplikacji internetowej z dowolnej innej przeglądarki/urządzenia mobilnego?


title: Co muszę zrobić używając bibliotek z licencją BSD?

text: Tworzę grę używając LWJGL i to jest ich licencja. Czego nie rozumiem, to co mam zrobić? Planuję stworzyć grę i ją rozprowadzać, a nie kod źródłowy, tylko plik .jar i być może sprzedać ją za kilka dolarów. Jest tam napisane, że muszę zachować prawa autorskie, więc czy to oznacza, że muszę dołączyć do słoika folder z dokumentacją, w którym znajduje się biblioteka, czy też muszę zrobić coś w grze, jak napisy i powiedzieć „zrobione z LWJGL”?


title: Funkcje zwracające „OK” lub „komunikat o błędzie” zamiast procedur

text: Dołączyłem do pisania średniej wielkości wielozadaniowej aplikacji bazodanowej jako współprowadzący. Obecnie ma około 150 tabel (i rośnie) i ogólną funkcjonalność, którą możesz sobie wyobrazić jako bardzo mały ERP. W wielu miejscach w kodzie funkcjonalności, które normalnie należałyby do procedur (mam na myśli funkcje bez zwracanej wartości), takie jak `DeleteAttachment` czy `SaveRecord`, są umieszczane w funkcjach, których wartość zwracana jest w ciągu znaków. Zwracają albo `"OK"` w przypadku powodzenia lub wiadomości typu `"Usunięcie nie powiodło się, ponieważ ......."` lub `"Niewystarczające uprawnienia dla ......."`. Na koniec często użytkownikowi końcowemu przedstawiana jest przekazana przez niego wiadomość. Z jednej strony jest to skuteczny mechanizm śledzenia potencjalnych problemów. Z drugiej strony nie jestem pewien, czy powinienem zachęcać do takiego podejścia do pisania wewnętrznej logiki biznesowej. Rozumiem, że umieszczanie niekrytycznych problemów w wyjątkach również nie jest zbyt dobrą drogą (`EInsufficientUserPrivileges`, `ERecordAlreadyExists`). Czy powinniśmy pozostać przy obecnym podejściu, czy może jest jakieś inne, które jest bardziej odpowiednie dla aplikacji wykorzystujących wiele sprawdzeń i logiki biznesowej?


title: Dlaczego globalne państwo jest tak złe?

text: Zanim zaczniemy, powiem, że dobrze znam koncepcje Abstraction i Dependency Injection. Nie potrzebuję tu otwierać oczu. Cóż, większość z nas powtarza (zbyt) wiele razy, nie rozumiejąc: „Nie używaj zmiennych globalnych” lub „Singletony są złe, ponieważ są globalne”. Ale co naprawdę **jest** tak złego w złowieszczym globalnym państwie? Załóżmy, że potrzebuję globalnej konfiguracji dla mojej aplikacji, na przykład ścieżek folderów systemowych lub poświadczeń bazy danych dla całej aplikacji. W takim przypadku nie widzę innego dobrego rozwiązania, niż umieszczenie tych ustawień w jakiejś globalnej przestrzeni, która będzie powszechnie dostępna dla całej aplikacji. Wiem, że **nadużywanie** jest złe, ale czy globalna przestrzeń naprawdę jest **TO** zła? A jeśli tak, to jakie są dobre alternatywy?


title: Przekazywanie centralnych obiektów lub posiadanie instancji globalnych?

text: Mając większą aplikację WinForms z kilkoma klasami, obecnie przekazuję odwołania do kilku "centralnych" obiektów do wywołań funkcji. Prowadzi to do większej liczby parametrów metody. Przykład: public static class Program { private static MyCentral _central; ... } ... public class SomeController { public object SomeFunction(MyCentral central) { // Zrób coś z instancją MyCentral. } } Teraz zadaję sobie pytanie, czy powinienem porzucić to podejście i zamiast tego używać singletonów dla tych centralnych obiektów, aby każdy mógł zawsze uzyskać dostęp do tych obiektów i nie muszę już ich przekazywać. Przykład: public static class Program { public static MyCentral Central { get; zestaw prywatny; } ... } ... public class SomeController { public object SomeFunction() { // Zrób coś z singletonem Program.Central. } } **Moje pytanie:** Czy istnieją jakieś zasady dotyczące tego, czy preferowane jest podejście singletonowe, czy podejście „przekazywanie obiektów dookoła”?


title: Czy powinienem używać zewnętrznych zmiennych globalnych czy statycznych zmiennych globalnych z funkcjami "get" i "set" w C?

text: Pracuję nad jednym z moich pierwszych projektów w C (kod mikrokontrolera), który jest podzielony na wiele plików C. Zauważyłem pewną niespójność w moim kodowaniu, gdzie miałem pewne zmienne zadeklarowane jako zewnętrzne zmienne globalne i po prostu uzyskiwałem do nich bezpośredni dostęp (ISR i kilka innych miejsc), a inne zadeklarowane statyczne zmienne globalne, a następnie uzyskiwał do nich dostęp z różnych plików za pomocą wywołań funkcji. Jaki jest najlepszy sposób, aby to zrobić? Czy powinienem zawsze utrzymywać zakres tak mały, jak to możliwe, nawet jeśli oznacza to dodawanie dodatkowych funkcji tylko w celu ustawienia lub odczytania wartości? A może powinienem po prostu uczynić je globalnymi we wszystkich plikach i po prostu uzyskać do nich bezpośredni dostęp.


title: Nieskończone pętle, w których pierwszy raz jest inny

text: To nie jest poważny problem ani nic, o co ktoś mnie poprosił, po prostu pozornie prosta rzecz, którą wymyśliłem jako ćwiczenie umysłowe, ale mnie zatkał i czuję, że powinienem już znać odpowiedź. Może jest duplikat, ale nie udało mi się go znaleźć. Załóżmy, że ktoś poprosił Cię o napisanie fragmentu kodu, który prosi użytkownika o wprowadzenie liczby i za każdym razem, gdy wprowadzona liczba nie jest zerem, mówi „Błąd” i pyta ponownie. Kiedy wejdą do zera, to się zatrzymuje. Innymi słowy, kod ciągle pyta o liczbę i powtarza się, aż zostanie wprowadzone zero. W każdej iteracji _z wyjątkiem pierwszej_ wypisuje również "Błąd". Najprostszy sposób, jaki przychodzi mi do głowy, to coś w rodzaju następującego pseudokodu: int number = 0; do { if(liczba != 0) { print("Błąd"); } print("Wpisz numer"); liczba = getInput(); } while(liczba != 0); Chociaż to robi to, co powinno, osobiście nie podoba mi się powtarzający się kod (testujesz numer != 0 dwa razy) - coś, czego generalnie należy unikać. Jednym ze sposobów uniknięcia tego byłoby coś takiego: int number = 0; while(true) { print("Wprowadź liczbę"); liczba = getInput(); if(liczba == 0) { przerwa; } else { print("Błąd"); } } Ale to, czego nie lubię w tym, to "while(true)", kolejna rzecz, której należy unikać. Jedyny inny sposób, jaki przychodzi mi do głowy, obejmuje jeszcze jedną rzecz, której należy unikać: etykiety i `goto`s: int number = 0; idź do pytania; błąd: print("Błąd"); pytanie: print("Podaj numer"); liczba = getInput(); if(liczba != 0) { goto błąd; } Innym rozwiązaniem byłoby posiadanie dodatkowej zmiennej do testowania, czy należy powiedzieć „Błąd”, czy nie, ale jest to zmarnowana pamięć. Czy można to zrobić bez robienia czegoś, co ogólnie uważa się za złą praktykę (powtarzanie kodu, teoretycznie niekończąca się pętla lub użycie `goto`)? Rozumiem, że coś takiego nigdy nie byłoby wystarczająco skomplikowane, aby pierwszy sposób stanowił problem (zwykle wywołałbyś funkcję do sprawdzania poprawności danych wejściowych), ale jestem ciekawy, czy istnieje sposób, o którym nie pomyślałem.


title: Czy mój szef powinien zdecydować, jakiego IDE powinienem użyć?

text: Mam tylko proste pytanie: Czy mój szef powinien/mogłby zdecydować/dyktować, jakiego rodzaju IDE powinienem/muszę używać do mojego rozwoju? Tło: Zajmuję się tworzeniem oprogramowania od 10 lat, używając różnych IDE dla różnych języków. Ale przez ostatnie lata korzystałem z Eclipse. Dzieje się tak głównie dlatego, że używam go zarówno do Androida (Java), jak i PHP oraz tworzenia stron internetowych. Wiem, że nie jest najnowszy i nie ma wszystkich nowych fajnych funkcji, które mają inne IDE, ale czuję się z nim całkiem komfortowo, a szczególnie podoba mi się wtyczka SVN i narzędzia dla Androida, które ma. Jestem trochę nowy w tej firmie, a wybór IDE zawsze był moją własną decyzją podczas pracy dla innych firm. Moi poprzedni pracodawcy nigdy nie próbowali aktywnie zmienić mojego wyboru IDE. Ale mój nowy szef chce, żebym przesiadł się na coś, co nazywa się PHPStorm, którego próbowałem i okazało się, że jest dla mnie trochę „zajęty”. Po prostu ma dla mnie za dużo funkcji. Mój szef mówi, że nie chce mnie zmuszać, ale wykorzystuje każdą okazję, by wspomnieć o PHPStorm i wydaje się trochę zirytowany, ponieważ nadal używam zaćmienia. To jest uczucie, które mam. Moim zdaniem, jakiego rodzaju IDE używam nie jest „jego stolikiem”. To powinien być mój osobisty wybór. Może się mylę. Może jestem arogancki? Nie pomaga to, że wszyscy inni członkowie zespołu przeszli na PHPStorm (z dala od IntelliJ, netbeans itp.). Mój szef chce „Jeden pomysł za-zarządzaj wszystkimi”. W ten sposób kod stanie się bardziej spójny i będziemy mogli uczyć się od siebie nawzajem – mówi. To powiedziawszy, lubię mojego szefa, więc jest to ściśle kwestia IDE. Więc tak, czuję się trochę zirytowany tą sytuacją. Jak myślisz, jak byś się czuł, co byś zrobił w tej sytuacji?


title: Czy osobiście odpowiadam za błędy w oprogramowaniu medycznym, które opracowałem jako pracownik?

text: Trochę tła: jestem zatrudniony w małej australijskiej agencji internetowej, która zajmuje się tworzeniem aplikacji mobilnych (iOS). Projekt, nad którym pracuję, umożliwia użytkownikom zapisywanie informacji o dawkach leków, które są synchronizowane z serwerem zaplecza. Użytkownicy muszą wyrazić zgodę na Warunki korzystania z usługi, Zastrzeżenie itp. przed użyciem aplikacji. To moja pierwsza aplikacja na iOS, a projekt przekracza obecnie budżet. W rezultacie kierownictwo nie poświęca zasobów na pytania i odpowiedzi, a zamiast tego naciska na więcej funkcji. Jestem pracownikiem agencji, która została zakontraktowana przez organizację non-profit. Aplikacja prawdopodobnie zostanie wydana pod nazwą naszej agencji, ale mamy też możliwość wypuszczenia jej jako non-profit. Moje pytanie brzmi, czy jeśli w aplikacji zostaną znalezione błędy, w wyniku których użytkownik przyjmie nieprawidłową dawkę leku, czy osobiście odpowiadam? Czy jest coś, co mogę lub powinienem zrobić, aby chronić się osobiście?


title: Czy Scrum zmienia aktywnych programistów w pasywnych programistów?

text: Jestem web developerem pracującym w zespole trzech programistów i jednego projektanta. Minęło już około pięciu miesięcy, odkąd wdrożyliśmy zwinną metodologię tworzenia oprogramowania scrum. Ale mam dziwne uczucie, że po prostu chciałem się podzielić na tej stronie. Jednym z ważnych czynników w życiu człowieka jest proces podejmowania decyzji. Jednak jest duża różnica w podejmowanych decyzjach. Niektóre decyzje są po prostu wynikiem wewnętrznej lub zewnętrznej siły, podczas gdy inne decyzje są całkowicie oparte na twojej wolnej woli, a niektóre decyzje są po prostu czymś pomiędzy. Im więcej masz swobody w podejmowaniu decyzji, tym bardziej samodzielna stanie się twoja praca. To wydaje się być regułą. Ponieważ sami kształtujemy nasze życie. Jest duża różnica między **decydowaniem, co robić**, a **otrzymywaniem instrukcji, co robić**. Przed scrumem czułem, że mam większą swobodę w podejmowaniu decyzji związanych z rozwojem, analizą, priorytetyzacją implementacji itp. Miałem większe poczucie **decyduję o tym, co robię**. Jednak ze względu na metodologię scrum, obecnie wiele decyzji pochodzi po prostu od właściciela produktu. Nadaje priorytety PBI, analizuje, jak powinno działać oprogramowanie, a czasem nawet jak należy zaimplementować UI i funkcjonalność. Wiem, że to część metodologii scrum, wiem też, że może to w przyszłości zaowocować lepszą sprzedażą produktu. Jednak teraz czuję, że **zawsze każą mi coś zrobić, zamiast decydować się coś zrobić**. Ten syndrom uczynił mnie teraz bardziej bierną wobec pracy. 1. Zwykle szukam mniej, aby znaleźć lepsze rozwiązanie, podejście lub technikę 2. Nie budzę się rano oczekując, że dostanę do przyjemnej pracy. Raczej czuję się zmuszony do pracy, aby żyć 3. Mam większy głód pracy nad własnymi hobbystycznymi projektami po pracy 4. Nie będę już naciskał na zespół, by wspinać się na wyższe poziomy technologiczne 5. Wydaję więcej czas teraz na obiad lub podwieczorek i mam mniejszy zapał do powrotu do pracy 6. Teraz jestem bardziej skłonny do wcześniejszego zakończenia pracy, abym mógł wrócić do domu Duży problem polega na tym, że widzę i diagnozuję to zachowanie w moich kolegach też. Czy to wynik Scrum? Czy scrum naprawdę sprawia, że zespół programistów czuje, że nie ma udziału w tworzeniu całego oprogramowania, przez co staje się pasywny dla projektu? Jak mogę przezwyciężyć to uczucie?


title: Ubuntu, OpenSuse, świat linuksa dla programistów internetowych

text: Uczę się tworzenia stron internetowych. Moim głównym systemem operacyjnym jest Windows 7, ale używałem Linuksa i obecnie korzystam z podwójnego rozruchu z Ubuntu. Moja wiedza o Linuksie jest jednak dość ograniczona. Mogę pracować z wierszem poleceń w prostych zadaniach, ale to prawie wszystko. Nie robię żadnych skryptów powłoki, nie znam zbyt dobrze najważniejszych poleceń ani ogólnie systemu. Interesuję się tworzeniem stron internetowych. Czy powinienem lepiej zapoznać się z Linuksem? Czy jest to konieczne na przyszłych stanowiskach pracy, biorąc pod uwagę moje zainteresowania?


title: Treść żądania RESTful HTTP OPTIONS

text: Mam problem z określeniem, co mogę umieścić w treści odpowiedzi na żądanie `OPTIONS`? czy są konwencje? standardy? Co umieszczasz? czy podajesz tylko listę innych METOD? czy powinieneś dać reprezentację?


title: Czy oddzielne przebiegi parsowania i leksykania są dobrą praktyką z kombinatorami parsera?

text: Kiedy zacząłem używać kombinatorów parserów, moją pierwszą reakcją było poczucie wyzwolenia z tego, co wydawało się sztucznym rozróżnieniem między parsowaniem a leksykowaniem. Nagle wszystko się po prostu parsowało! Jednak niedawno natknąłem się na ten post na codereview.stackexchange ilustrujący kogoś, kto przywraca to rozróżnienie. Na początku myślałem, że to bardzo głupie z ich strony, ale potem fakt, że w Parsec istnieją funkcje wspierające to zachowanie, skłania mnie do kwestionowania siebie. Jakie są zalety/wady parsowania nad już zleksowanym strumieniem w kombinatorach parsera?


title: Jak mogę dowiedzieć się o optymalizacji pamięci podręcznej procesora (w C)?

text: Czytając te dwa pytania, widzę, że zrozumienie zachowania pamięci podręcznej procesora może być ważne w przypadku dużych ilości danych w pamięci. Chciałbym zrozumieć, jak działa buforowanie, aby dodać kolejne narzędzie do mojego zestawu narzędzi optymalizacyjnych. Jak mogę dowiedzieć się, jak działa pamięć podręczna procesora, aby móc pisać kod, który rozsądnie z niej korzysta? W związku z tym, czy istnieje sposób profilowania kodu, aby sprawdzić, czy słabe użycie pamięci podręcznej spowalnia działanie?


title: W jaki artefakt pakuje się klasy pośrednie?

text: Zmodularyzowaliśmy nasze API na kilka niezależnych komponentów. Niezależne, co oznacza, że można je zbudować za pomocą Maven i wykorzystać jako zależności w innych projektach, takich jak aplikacje internetowe. Teraz, aby korzystać z tego interfejsu API, musi istnieć _pośrednia klasa przetwarzania_, która dokonuje _tłumaczenia modelu danych klienta na model danych wywołanych (komponentu)_. Pytanie brzmi, czy ta klasa obsługi/procesora należy i musi być spakowana wraz z aplikacją kliencką JAR/WAR, czy też jest częścią komponentu JAR. Jaka jest konwencja?


title: Nowy w programowaniu/cel c

text: Niedawno zacząłem pracować nad niektórymi aplikacjami na iPhone'a, zaczynając od bazy, w której zasadniczo nie miałem doświadczenia w programowaniu (uczyłem się matematyki i miałem bardzo mało modułów programowania). Przeszedłem przez Beginning Mac Programming: Develop with Objective-C i Cocoa i uznałem to za przydatne, podczas gdy dało mi poczucie, że muszę szybko rozwiązać mój brak prawdziwych podstaw w programowaniu. W dającej się przewidzieć przyszłości moja praca będzie polegać na tworzeniu aplikacji na iPhone'a – chcę mieć prawdziwe pojęcie o celu-c, zanim w nadchodzących miesiącach sprawy staną się bardziej pod presją. Czy najlepiej jest najpierw przestudiować c, zanim zajmę się niuansami celu-c? Jeśli tak, czy ktoś miał jakieś doświadczenie w uczeniu się za pośrednictwem zasobów internetowych? Byłoby super, gdyby ktoś mógł polecić stronę internetową do samodzielnej nauki. Przepraszam, jeśli dotyczy to jakiegoś starego gruntu, ale nic w podobnych pytaniach nie odpowiedziało na moje pytanie. Każda pomoc jest mile widziana :)


title: Czy Ruby on Rails jest odpowiednim frameworkiem dla aplikacji desktopowej?

text: Zastanawiałem się, czy istnieją oczywiste zalety i wady używania Ruby on Rails do tworzenia aplikacji desktopowych. RoR ma świetną infrastrukturę do szybkiego rozwoju, prawidłowej implementacji specyfikacji i automatycznych testów akceptacyjnych, ogromną liczbę popularnych bibliotek i obietnicę aktywnego rozwoju i utrzymania w przyszłości. Wady, które widzę, dotyczą głównie użyteczności - instalacja aplikacji Rails jako usługi lokalnej i uruchamianie przeglądarki, gdy musi być aktywna, może nie przychodzić naturalnie dla wielu użytkowników ... lub być technicznie łatwa do wdrożenia i obsługi dla różnych platformy.


title: Czy to „normalne”, że ludzie nie pracują?

text: Po ukończeniu studiów nieco ponad rok temu zostałem zatrudniony jako młodszy programista. Szybko zauważyłem, że jestem o stopnie wielkości szybszy niż wszyscy inni programiści; wydaje się, że dzieje się tak dlatego, że po prostu nie tracę czasu „ogólnie”. Jednak większość innych ludzi wydaje się lubić wpatrywać się w sufit, przeglądać YouTube, Facebook i przypadkowe strony internetowe i generalnie wykonywać w ciągu dnia pracę, którą ja zwykle wykonuję w godzinę. Jestem na 100% pewien, że gdyby się skoncentrowali, również byliby w stanie wykonać tę pracę w godzinę. Szybko awansowałem na starszego programistę, a ostatnio na kierownika zespołu, a teraz zastąpiłem wiele z tych osób nowymi pracownikami (wciąż jeszcze kilka osób do odejścia). Sytuacja jest teraz bardziej akceptowalna, ale myślę, że mogłaby być znacznie lepsza. Nie mogę jednak nie zauważyć, że wszyscy zachowują się tak, jakby to było „normalne”. Wszyscy moi szefowie nie przejmują się tym i oni też wydają się działać niewiele lub nic. Zawsze trudno mi je znaleźć, przyjeżdżają znacznie później niż powinny i wyjeżdżają wcześniej. Oczywiście w tym przypadku nic nie mogę zrobić, ponieważ są ponad mną, ale czy to jest „norma” we wszystkich firmach, czy po prostu skończyłem w bardzo złym (to moje pierwsze doświadczenie zawodowe)? Poza tym, czy za kilka lat „stanę się taki jak oni”?


title: Jak wdrożyć Continuous Delivery za pomocą aplikacji internetowej Java?

text: Czytałem o ciągłym dostarczaniu i brzmi niesamowicie, aby zautomatyzować proces wdrażania. Czytałem o możliwościach, jak to zrobić za pomocą aplikacji Java Webapps, ale zwykle kończy się to wdrożeniem serwera CI lub wtyczki maven na Tomcat BEZ restartowania Tomcata za pomocą API zarządzania Tomcats. Ale to prowadzi do problemów z OutOfPermGenSpace, więc nie używałbym tych rozwiązań do produkcji. Ponadto kłopotliwe jest zabicie wymykającego się spod kontroli Tomcata. Czy jest jakaś technologia, która ułatwiłaby wdrażanie aplikacji internetowych Java w środowisku produkcyjnym? Używam mavena do budowania moich artefaktów i wdrażania do repozytorium Nexusa. EDYCJA: Nie próbuję znaleźć sposobów na zapobieganie problemom z przestrzenią Permgen. Próbuję automatycznie wdrożyć do produkcji. Nie powinno być żadnych ręcznych kroków poza wybraniem wersji i kliknięciem przycisku (lub podaniem numeru wersji do skryptu wiersza poleceń). Chcę się dowiedzieć, czy muszę tworzyć tego rodzaju ustawienia ręcznie, czy jest na to gotowe rozwiązanie. Jak dotąd LiveRebel wydaje się być jedynym rozwiązaniem, które nie wymaga ode mnie samodzielnego wdrażania wszystkiego.


title: Klasy nie powinny wywoływać innych klas?

text: Właśnie skończyłem czytać The Art of Unit Testing Roya Osherove'a. To była interesująca książka, ale mam problem z czymś, o czym wspomina pod koniec (sekcja 11.2.2): > Identyfikowanie „roli” w aplikacji i wyodrębnianie ich w interfejsach > jest ważną częścią procesu projektowania. Klasa abstrakcyjna nie powinna wywoływać > klas konkretnych, a klasy konkretne nie powinny też wywoływać klas konkretnych >, chyba że są to obiekty danych (obiekty przechowujące dane, bez zachowania >). Dzięki temu możesz mieć wiele szwów w aplikacji, gdzie możesz interweniować i zapewnić własną implementację. W szczególności nie rozumiem, co ma na myśli mówiąc, że konkretne klasy nie powinny nazywać się konkretnymi klasami. Rozważ następujące przykłady w języku C#: double roundedAge = Math.Floor(exactAge); Czy nie jest to uważane za wywołanie klasy, ponieważ Math.Floor jest metodą statyczną? A może Osherove mówi, że powyższy wiersz kodu to zły projekt? Inny przykład: using (StreamReader reader = new StreamReader(path)) { // do rzeczy } Czy to zły projekt z powodu użycia StreamReadera? A może to wystąpienie StreamReader jest po prostu obiektem przechowującym dane, jak opisano w powyższym cytacie? Zamiast rozpoczynać dyskusję na temat tego, czy złą praktyką jest zwoływanie klas do innych klas, moim celem jest próba lepszego zrozumienia, co oznacza Osherove w cytowanym przeze mnie fragmencie. Czy naprawdę ma na myśli, że należy unikać kodu z dwóch powyższych przykładów? Z góry dziękuję za wszelkie odpowiedzi. EDIT: Poniżej znajduje się ilustracja z książki, która prawdopodobnie wyjaśnia. ![Ładny](http://i.stack.imgur.com/7Jb0F.png)


title: Jak „cofnąć się”?

text: Uważam, że zaczynam projekty i, z powodu mojego braku doświadczenia, stwierdzam, że stare struktury baz danych i ogromne bloki kodu są nieefektywne i kosztowne w pamięci. Jednak zanim zdaję sobie sprawę, że konieczne jest przeprojektowanie całego projektu, projekt urósł do takich rozmiarów, że jest po prostu za późno na powrót i modyfikację projektu w jego obecnym stanie i wymaga zupełnie nowego pliku projektu i cały ten łobuz. **Jak mam zapobiegać takim koleinom jak ten, kiedy jest już za późno na powrót i modyfikację obecnego projektu, aby dopasować go do specyfikacji zmodyfikowanych na długo od momentu powstania projektu?** (Z góry przepraszam za niejasną gramatykę, to był tutaj długi dzień... jak zapewne wiesz.)


title: Udostępnianie na Github

text: W ciągu ostatnich kilku tygodni otrzymałem dużą pomoc od użytkowników StackOverflow przy projekcie i zamiast zachować dla siebie gotowy produkt, chciałem się nim podzielić bez żadnych licencji, ale nie chcę, aby podczas instalacji było tak dużo pracy że użytkownicy unikają prób. Mam zamiar opublikować go na Github i wybrać licencjonowanie domeny publicznej. Chciałbym być bardzo prosty w obsłudze dla użytkowników i po prostu FTP i gotowe. Mając to na uwadze, czy muszę się upewnić, że usunę takie rzeczy, jak plik JQuery i inne zależności na licencji GPL / MIT, których nie napisałem, ale od których zależy mój kod? Nie usunąłem żadnych informacji o prawach autorskich z innego kodu, a wszystko to jako open source, byłoby po prostu miło, gdyby użytkownicy mogli pobrać wszystko na raz, oczywiście nie próbując reprezentować, że jestem posiadaczem licencji na zależności. Wewnątrz moich plików znajdują się również fragmenty, czy muszą one być uzewnętrznione za pomocą instrukcji instalacji, czy można je opublikować tak, jak jest? Oto przykład, mój plik nav.php ma 115 linii i mam te na górze:  <link href="css/admin.css" rel ="stylesheet">


title: Zainteresowany opiniami na temat projektu systemu QA

text: Jestem w początkowej fazie tworzenia systemu QA i chcę mieć pewność, że decyzje projektowe, które teraz podejmuję, mają sens i nie będą mnie później ugryźć w tyłek. Jeśli masz nawet najdrobniejszą rzecz lub coś w tym rodzaju, napisz, będę wdzięczny za wszelkie uwagi na ten temat (jestem w tym całkiem nowy). **Folder rozwiązania QA:** * Assembly do testów regresji (biblioteka klas) * Assembly do testów integracyjnych (biblioteka klas) * Assembly do testów jednostkowych (biblioteka klas) * Assembly do narzędzi związanych z QA (biblioteka klas) **Każdy zestaw ma ta podstawowa struktura:** [TestFixture] public class SomeComponent{ [Test] public void SomeComponentFunction(){ bool someBool; //Niektóre rzeczy Assert.IsTrue(someBool,""); } [Test] //itd. } **Zastanawiam się nad pewnymi konkretnymi rzeczami** (ale jestem otwarty na wszelkie uwagi) * Czy biblioteki klas są odpowiednim typem projektu do użycia? Widzę zaletę używania aplikacji konsolowych, dzięki czemu możesz uruchamiać te testy niezależnie od NUnit (ale nie wiem, dlaczego miałbyś to robić zamiast po prostu używać NUnit). * Mam trudności ze zrozumieniem różnicy między testami na poziomie regresji a testami na poziomie systemu. W przypadku testu na poziomie systemu wygląda na to, że uruchamiasz test end-to-end i porównujesz wynik końcowy z jakimś „Standardowym” wynikiem. Czy to nie jest tylko testowanie regresji?


title: Jak ważne są dane ITJobsWatch?

text: _(Przez cały dzień zastanawiałem się, czy zadać to pytanie tutaj – moim największym zmartwieniem byłoby to, że byłoby to postrzegane jako nie na temat lub nieistotne. Nie dotyczy to Stanów Zjednoczonych, to prawda, ale BARDZO istotne dla rynku brytyjskiego.)_ Moje pytanie brzmi: czy menedżerowie ds. rekrutacji / decydenci IT w Wielkiej Brytanii wykorzystują dane z ITJobsWatch w procesie podejmowania decyzji, jak ważne są te dane i jak dokładne są one Twoim zdaniem. (jako drugorzędne, bardziej ogólnoświatowe pytanie: czy ludzie korzystają z witryn agregacji wynagrodzeń w procesie podejmowania decyzji/negocjacji) Kilka zastrzeżeń! Nie pracuję dla nich, nie mam z nimi nic wspólnego. Zapraszam (autentyczne) komentarze od przedstawicieli serwisu o tym, jak zbierają dane (mały akapit już przeczytałem na ich stronie). Nie brałbym też pod uwagę, że podkręcam stronę tutaj – wyobrażam sobie, że każdy wart swojej pracy menedżer w Wielkiej Brytanii już o tym będzie wiedział! Zostałem zapytany, czy dane na stronie są aktualne i trafne, i jestem ciekaw reakcji z rynku brytyjskiego.


title: Jak radzicie sobie z tłumaczeniem w celu lokalizacji oprogramowania?

text: Większość oprogramowania, które napisałem w swojej karierze, została zbudowana dla klientów anglojęzycznych, ale ostatnio pracuję nad projektem, w którym pożądana jest lokalizacja interfejsu użytkownika dla większej liczby języków. Jestem tylko ciekaw, w jaki sposób inne sklepy programistyczne uzyskują tłumaczenia. Czy używają notorycznie wadliwych silników tłumaczeń online? Wiem, że istnieją tłumacze do wynajęcia, ale czy będę musiał wyśledzić i zatrudnić kilkunastu z nich, aby wykonać dokładną pracę polegającą na zlokalizowaniu mojego interfejsu? Czy istnieją usługi, które specjalizują się w tym dla szerokiej gamy języków? Być może użycie czegoś takiego jak Amazon Mechanical Turk byłoby opcją, ale nie mam pojęcia, jak zróżnicowana jest dostępna siła robocza w tej witrynie. Wyobrażam sobie, że nie bardzo.


title: System wieloużytkownikowy z zaszyfrowaną bazą danych

text: Obecnie rozwijam rozwiązanie hostowane w ASP.NET przy użyciu MVC3 i Entity Framework. Ten produkt zostanie następnie udostępniony wielu klientom jako rozwiązanie hostowane. Ponieważ dane przechowywane przez każdego klienta będą miały kluczowe znaczenie dla jego działalności, przewidujemy, że wielu z nich będzie nalegać, aby dane były przechowywane w bazie danych w postaci zaszyfrowanej. Dlatego projektujemy system mając to na uwadze. Czy są jakieś zalecane procedury, aby to zrobić? Jak można by zaszyfrować dane klientów w taki sposób, że nawet my z dostępem roota do bazy danych nie możemy uzyskać dostępu do ich danych? Uważam, że w EF nie ma wbudowanej obsługi zaszyfrowanych danych, czy to prawda? A jeśli tak, jak zaszyfrować/odszyfrować dane?


title: Jak zebrać krytykę bardzo specyficznej lub niszowej aplikacji?

text: Obecnie opracowuję samodzielnie aplikację, która jest wysoce specyficzna dla domeny; aplikacja niszowa, jeśli chcesz. To wszystko jest oczywiście dobre i dobre; ale jest jeden problem; Nie jestem w sytuacji, w której mam naturalną grupę testerów. Tak naprawdę nie chodzi o znalezienie testerów pod kątem technicznej dokładności; aplikacja, o której mowa, ma dwie zalety: jest (przynajmniej na razie) bardzo prosta w projektowaniu i implementacji oraz posiada programistę, który ma również odpowiednią wiedzę o domenie. Jednak pomimo mojej odpowiedniej wiedzy; W rzeczywistości nie jestem w grupie docelowej aplikacji, co prowadzi między innymi do problemów z identyfikacją przydatnych funkcji do przyszłej implementacji. Jakie są zatem drogi do zbadania, jeśli chodzi o faktyczne znalezienie użytkowników końcowych?


title: Czy normalne jest myślenie o problemie projektowym przez wiele dni bez napisania kodu?

text: Czasami wpatruję się tępo w przestrzeń lub szkicuję pomysły i piszę kilka pseudokodów na papierze. Potem wykreślam go i zaczynam od nowa, a kiedy wydaje mi się, że mam właściwe rozwiązanie problemu, zaczynam pisać kod. Czy normalne jest myślenie przez kilka dni bez pisania kodu? Czy to znak, że zupełnie źle podchodzę do problemu? Denerwuje mnie fakt, że nie otrzymam żadnego namacalnego kodu napisanego w moim IDE.


title: Jaki wpływ na CoffeeScript ma Haskell?

text: Używam CoffeeScript już od jakiegoś czasu. Na Wikipedii mówi się, że CoffeeScript jest pod wpływem Haskella. Ale po sprawdzeniu składni Haskella zauważyłem niewielkie podobieństwo do CoffeeScript. Na który aspekt CoffeeScript ma wpływ Haskell?


title: Przycisk restartu w Pythonie

text: Mam problem z Pythonem. Tworzę tekstową grę przygodową i staram się uruchomić funkcję restartu, gdy umrzesz. Próbuję liczyć zgony, wykonując zgony = zgony + 1 za każdym razem, gdy umrzesz, ale jedynym sposobem na ponowne uruchomienie jest ponowne uruchomienie całego skryptu, który resetuje licznik zgonów. Czy ktoś wie, jak zrestartować skrypt bez ponownego uruchamiania programu?


title: Gdzie znaleźć klientów?

text: Mój główny obszar: tworzenie stron internetowych. Oczywiście nie oczekuję, że ktokolwiek odda swoją „kopalnię złota” czy coś w tym rodzaju, ale nie wiem, gdzie powinienem reklamować swoje usługi. Mam jeszcze jednego programistę, z którym współpracuję i mamy wielu zadowolonych klientów - na stronach freelancerów. Rzecz w tym, że strony internetowe freelancerów po prostu wysysają z ciebie życie, gdy przebijają cię absurdalne stawki. Chcę przyciągnąć klientów, którzy są bardziej zainteresowani jakością i odpowiedzialnością niż ceną. Jakieś sugestie? Jestem z tym tak zagubiony. EDYCJA: Dodano nagrodę w wysokości 200 - cała moja "reputacja". EDYCJA: Dodano drugą nagrodę w wysokości 50, którą słyszałem o nowatorskim pomyśle. Pracuj dla projektu open source i zostań wyróżniony w sekcji „zaufani programiści”, jeśli taki mają. Wejście?


title: REST – Kompromisy między negocjacją treści za pomocą nagłówka Accept a rozszerzeniami

text: Pracuję nad projektowaniem RESTful API. Wiemy, że chcemy zwrócić JSON i XML dla dowolnego zasobu. Myślałem, że zrobimy coś takiego: GET /api/something?param1=value1 Zaakceptuj: application/xml (lub application/json) Jednak ktoś rzucił do tego rozszerzenia, takie jak: GET /api/something. xml?parm1=value1 (lub /api/something.json?param1=value1) Jakie są kompromisy z tymi podejściami? Czy najlepiej polegać na nagłówku accept, gdy rozszerzenie nie jest określone, ale należy uwzględniać rozszerzenia, gdy są określone? Czy jest jakaś wada tego podejścia?


title: Wady funkcjonalnej formy pośredniej

text: Piszę optymalizator dla języka podobnego do JavaScript i muszę wybrać pośrednią reprezentację kodu. Oczywistym/typowym wyborem w dzisiejszych czasach jest Static Single Assignment (SSA). Jednak _Modern Compiler Implementation w C_ omawia również funkcjonalną formę pośrednią, co zasadniczo oznacza przejście na czysto funkcjonalną dla reprezentacji pośredniej (czysto pod względem tylko zmiennych lokalnych, dane sterty są nadal mutowalne, a nie CPS, tylko proste bloki typu „let” i tail). połączeń) i ma pewne zalety pod względem łatwiejszego wnioskowania. Przypuszczalnie nie jest to oczywiste lub wszyscy już używaliby takiej reprezentacji, więc moje pytanie brzmi: jakie wady ma funkcjonalna forma pośrednia w porównaniu z SSA?


title: Jaki jest najlepszy sposób radzenia sobie ze starszym kodem, który nie jest objęty kontrolą wersji?

text: Jaki jest najlepszy sposób tworzenia i utrzymywania starszego kodu, który nie jest objęty kontrolą wersji? Dodanie go do kontroli wersji jest oczywiście oczywistą odpowiedzią, ale jeśli nie możesz, z jakiegoś powodu, co byś zrobił? Kilka powodów, dla których kontrola wersji nie byłaby możliwa, to: * Kierownictwo jest temu przeciwne (nie rozumie tego, uważa, że zajęłoby to zbyt dużo czasu, nie jest tego warte itp.) * Nie nie mieć uprawnień administratora do zainstalowania wymaganego oprogramowania. * Kod działa/jest przechowywany w starszych systemach z ograniczonymi możliwościami kontroli wersji. Tak więc, jeśli prawdziwa kontrola wersji nie jest dostępna, co robisz? Skonfigurować regularny system tworzenia kopii zapasowych? A może utworzyć foldery z nazwami wersji?


title: Ile szczegółów zawiera dobry test regresji interfejsu użytkownika?

text: Używamy szczegółowego testu regresji interfejsu użytkownika krok po kroku dla naszej komercyjnej aplikacji internetowej. Posiada test „szkieletowy” dla najczęściej używanych / najważniejszych części systemu, z opcjonalnymi testami dla określonych obszarów funkcjonalności. Korzystanie z tego planu zdecydowanie pomogło nam zapewnić wysokiej jakości oprogramowanie. Jednak posiadanie bardzo szczegółowych testów może przynieść efekt przeciwny do zamierzonego. Tester koncentruje się na wykonywaniu testu i całkowicie przeoczy problemy z użytecznością lub nie zauważy dość oczywistych problemów, takich jak brak dolnej części strony. W przeciwieństwie do tego, niektóre z najlepszych testów interfejsu użytkownika mają miejsce podczas tworzenia wersji demonstracyjnej nowej funkcji. Często robię swoje najlepsze testy, udając, że demonstruję system wyimaginowanej osobie. Jednak kiedy mówię testerom: „Po prostu zademonstruj system sobie”, nie obejmują one prawie tak wiele funkcji, jak w przypadku szczegółowego testu punkt po punkcie. Wielokrotnie jestem proszony o dostarczanie coraz większej ilości szczegółów w planie testów, tak aby nowy nieprzeszkolony tester mógł z nim testować bez zadawania żadnych pytań. Jednak szczegóły wydają się nieproduktywne. Ile szczegółów umieszczasz w teście regresji, aby był skuteczny? Jak piszesz testy, które sprawiają, że tester skupia się bardziej na systemie niż na odhaczaniu pozycji w teście?


title: Czy aplikacje internetowe pozwalają szybkim typistom danych na „pisanie z wyprzedzeniem”?

text: W niektórych kontekstach wprowadzania danych widziałem typistów danych, którzy piszą naprawdę szybko i tak dobrze znają aplikację, z której korzystają, i mają mechaniczną jakość w swojej pracy, aby mogli „wpisywać z wyprzedzeniem”, tj. kontynuować pisanie i „tab-bing " i "wchodzenie" szybciej niż wyświetlacz się aktualizuje, tak że w wielu przypadkach wpisują dane dla następnego formularza, zanim sam się narysuje. Następnie, gdy pojawi się ten formularz następnego wpisu, ich naciśnięcia klawiszy wypełniają pola tekstowe i kontynuują pisanie, wybieranie itp. W takich kontekstach ta prędkość jest pożądana, ponieważ te osoby są naprawdę produktywne. Myślę, że ten „typ z wyprzedzeniem” jest możliwy tylko w aplikacjach komputerowych, ale mogę się mylić. Moje pytanie brzmi, czy ten sposób obsługi bufora klawiatury (który w aplikacjach desktopowych nie wymaga dodatkowego programowania) jest możliwy do osiągnięcia w aplikacjach internetowych, czy też jest to niemożliwe ze względu na sposób działania aplikacji internetowych, obsługi sesji itp. (opóźnienie sieci i obciążenie generowanie nowych stron internetowych ) ? **Edycja:** przez „wpisz z wyprzedzeniem” mam na myśli „wpisywanie z wyprzedzeniem” (wpisywanie z wyprzedzeniem, niż można załadować następny formularz zgłoszeniowy), a nie podpowiadanie, że podczas pisania, jak-google wpisz z wyprzedzeniem. > Pisanie z wyprzedzeniem to funkcja komputerów i oprogramowania (oraz niektórych maszyn do pisania), która > umożliwia użytkownikom kontynuowanie pisania niezależnie od > programu lub komputera — użytkownik może pisać z dowolną szybkością, a jeśli > oprogramowanie odbierające jest zajęte czas zostanie wywołany, aby obsłużyć to > później. Często oznacza to, że wprowadzone naciśnięcia klawiszy nie będą natychmiast wyświetlane na ekranie >. Ta technika programowania służąca do obsługi użytkownika, który jest > znany jako bufor klawiatury.


title: Czy jest jakaś różnica między cudzysłowami `pomoc', ``pomoc", 'pomoc' i "pomoc"?

text: Czasami znajduję się w plikach z kodem źródłowym, które mają komentarze w cudzysłowie, takie jak te , zwróć uwagę na ` : `help' ``pomoc" Na przykład są to komentarze z pliku kodu źródłowego GNU cat, cat.c: /* Zwykły cat. Kopiuje za `input_desc' do STDOUT_FILENO. */ > /* Wybierz wersję `cat' do użycia. Jeśli podano jakieś opcje (więcej niż -u, --version lub --help), użyj `cat', w przeciwnym razie użyj `simple_cat'. */ > /* Pomijaj ostrzeżenie `used przed zainicjowaniem'. */ Podczas gdy w innych częściach używane jest "" : /* Określa ile kolejnych nowych linii znajduje się na wejściu. 0 nowych linii sprawia, że NEWLINES -1 , 1 znak nowej linii powoduje, że NEWLINES 1 itd. Początkowo 0 oznacza, że jesteśmy na początku nowej linii "Stan" procedury jest określany przez NEWLINES. */ Co oznacza `?i do czego służy?


title: Java: „Zanieczyszczenie hałdy”

text: „**Zanieczyszczenie sterty**” jak w typach niereifikowalnych (Samouczki Java™ > Nauka języka Java > Ogólne (zaktualizowane)) Dlaczego tak się to nazywa?


title: Programowanie i modelowanie obiektowe

text: W tym semestrze biorę udział w kursie OOA/D. Na poziomie akademickim uczą do tej pory programowania obiektowego. Mam co do tego pewne wątpliwości. 1. Czy to prawda, że programowanie obiektowe można wykonać bez żadnego konkretnego modelowania, takiego jak OMT. 2. Jakie są dostępne modele tworzenia oprogramowania zorientowanego obiektowo?


title: Konwencja nazewnictwa adresów URL z powtarzającą się literą

text: Jaka jest dobra praktyka nazywania adresu URL, jeśli zawiera on powtarzające się litery. Na przykład `/info/foossite` Dwie **s** wyglądają dość dziwnie i gdyby był to punkt dostępowy dla `Web-Service`, mogłoby to prowadzić do błędów ortograficznych. W większości języków programowania mamy notację `Camel`. Jednak ponieważ w adresach URL nie jest rozróżniana wielkość liter, nie mamy tutaj tego luksusu. Jaka jest więc najlepsza praktyka w tym zakresie?


title: Zarządzanie złożonymi relacjami za pomocą Entity Framework

text: Używam Entity Framework z włączonym śledzeniem POCO i zmianą. Zacząłem od relacji CASCADE DELETE, ale w niektórych sytuacjach, z powodu cyklicznych lub wielu możliwych ścieżek kaskadowych, SQL Server uniemożliwiał mi dodanie CASCADE DELETE... więc muszę sam zarządzać tymi usunięciami. Weźmy na przykład następującą sytuację: * Witryna ma wiele obudów * Obudowa ma wiele kart * Karta ma wiele portów * Łącze ma dwa porty (`PortAId` i `PortZId`) (a port może uczestniczyć w wielu łączach) . Pierwsze 3 relacje mają opcję CASCADE DELETE, jednak ostatnia relacja („Link”) ma „wiele ścieżek kaskadowych” w atrybutach „Link.PortAId” i „Link.PortZId”. Z tego powodu _nie mogłem_ dodać relacji CASCADE DELETE. * * * Mój **problem** polega na tym, że kiedy port zostaje usunięty, rzucane jest ograniczenie klucza obcego, ponieważ nadal istnieje `Link`, który odwołuje się do usuniętego portu. * * * Próbowałem przejrzeć `ChangeTracker` w `SaveChanges()` w poszukiwaniu `portów, które zostały usunięte, i usunąć ich odpowiednie linki; _ale_ port usunięty niejawnie (poprzez CASCADE DELETE) nie pojawia się w ChangeTracker; więc muszę też poszukać kart, obudowy i witryn... staje się to nie do utrzymania. Następnie spróbowałem dodać `TRIGGER`s do bazy danych, takie jak: CREATE TRIGGER delete_port_links ON Ports FOR DELETE AS DELETE FROM Links WHERE PortAId IN (SELECT Id FROM usunięty) OR PortZId IN (SELECT Id FROM usunięty) ... jednak `FOR ` wyzwala uruchamianie _po_ sprawdzeniu (i niepowodzeniu) ograniczenia klucza obcego. Nie mogę użyć `ZAMIAST`, ponieważ tabela ma klucz obcy. * * * Więc naprawdę utknąłem w kwestii tego, w jakim kierunku iść w dół, aby to rozwiązać. Jakie techniki, wzorce lub funkcje EF pozwolą mi wykryć, kiedy port (bezpośrednio lub niejawnie) został usunięty, tak abym mógł również usunąć łącza?


title: libavcodec/libavformat pytanie

text: Widziałem ten kod, do którego odwołuje się w dwóch różnych miejscach, ale nie widziałem, aby ktokolwiek o tym mówił, ale wygląda na to, że w wierszu 00339 jest pusty blok if i po prostu skopiowałem kod, aby go skompilować, wypróbuj, ale wygrał nawet nie skompilować przyczyny tego. if (liczba_klatek >= STREAM_NB_FRAMES) { /* nie ma więcej klatek do skompresowania. Kodek ma opóźnienie kilku klatek, jeśli używamy klatek B, więc ostatnie klatki otrzymujemy, przepuszczając ponownie ten sam obraz */ } else { Jakiś pomysł lub wyjaśnienie, dlaczego tak jest. Czy to błąd autora podczas kopiowania? Co się z tym dzieje, jeśli tak czy inaczej się blokuje?


title: Autozapis w narzędziach do tworzenia stron internetowych

text: Pracuję nad nowym internetowym narzędziem programistycznym (zarządzanie wersjami w oparciu o git). Testy użyteczności wykazały, że programiści są przyzwyczajeni do ręcznego zapisywania. Poprosiłem 15 programistów pracujących z Eclipse lub Visual Studio o programowanie w moim internetowym edytorze kodu. Po krótkiej misji zapytałem ich, czy uważają, że ich kod jest zapisany. Wszyscy powiedzieli nie i szukali przycisku zapisu, ale nie zauważyli włączania się i wyłączania etykiety „zapisano” w prawym górnym rogu. Zastanawiam się, czy automatyczne zapisywanie będzie lepszym doświadczeniem i czymś, do czego programiści się przyzwyczają, jak w google docs?


title: Czy powinienem używać klas znajomych w C++, aby umożliwić dostęp do ukrytych członków?

text: Oto moja sytuacja (prosty przykład). Powiedzmy, że mam klasę o nazwie „HiddenData” Następnie mam inną klasę o nazwie „StoreHiddenData” I wreszcie klasę o nazwie „OperateHiddenData” Oto rzecz, moja klasa o nazwie „HiddenData” ma prywatnych członków, których nie chcę reszty świata, ale nadal potrzebuję klas, aby móc operować na prywatnych członkach tej klasy `HiddenData` (na przykład `StoreHiddenData` i `OperateHiddenData`). Chciałbym móc przekazać ten obiekt różnym klasom, które robią na nim różne rzeczy. Inną rzeczą, o której myślałem, jest utworzenie formy uchwytu do tych obiektów `HiddenData`, ale nie mogę wymyślić sposobu na użycie uchwytów bez ponownego użycia klas zaprzyjaźnionych (aby dać innym klasom dostęp do tabeli, która zawiera na co wskazują uchwyty, bez ujawniania tego również reszcie świata). Czytałem to pytanie na tej stronie jakiś czas temu, kiedy badałem użycie klas znajomych i zastanawiam się, czy korzystanie z przyjaciół jest najlepszym sposobem. Jeśli ktoś ma jakieś sugestie, jak wykonać to zadanie bez użycia zaprzyjaźnionych klas w C++, lub jeśli korzystanie z zaprzyjaźnionych klas jest dobrą praktyką OOP, proszę o wszelkie sugestie. Dziękuję. EDYCJA: Myślę, że powinienem dodać trochę więcej informacji o moim problemie. Po pierwsze, staram się stworzyć API składające się z kilku klas, które ukrywają swoją funkcjonalność z zewnątrz i umożliwiają dostęp tylko do funkcji publicznych. Wewnątrz mam struktury danych (lub klasy, nie ma to większego znaczenia), które muszą być przekazywane do różnych klas z funkcjami publicznymi. Nie chcę, aby z zewnątrz miał dostęp do czegokolwiek wewnątrz tych struktur danych, poza możliwością przekazywania ich do funkcji API. Myślę o tym jak o Windows API, gdzie przekazujesz uchwyty do funkcji API, ale tak naprawdę nie możesz przeanalizować uchwytów we własnym kodzie. Cóż, chciałbym zrobić coś bardzo podobnego, ale pozostając zorientowanym obiektowo i NIE przekazywać tych prywatnych struktur danych według wartości, ponieważ będą one DUŻE. Dzięki jeszcze raz.


title: Błąd segmentacji z programem do obsługi plików c++

text: Uczę się obsługi plików c++. Ten program odczytuje słowa z pliku i wstawia je w wektorze alfabetycznie w miarę ich wprowadzania. Kiedy wykonuję ten program, otrzymuję błąd segmentacji. Czy ktoś może dostrzec błąd w programie? #include <iostream> #include <ciąg> #include <wektor> #include <algorytm> przy użyciu przestrzeni nazw std; int main(int argc,char *argv[]) { if(argc!=2) { cerr << "Niepoprawna liczba argumentów w użyciu" << endl; powrót 1; } ifstream fin(argv[1]); if(!fin) { cerr << "Plik " << argv[1] << " nie został znaleziony\n"; powrót 1; } wektor <string> v; słowo ciąg; wew; fin >> słowo; v.push_back(słowo); while(fin >> słowo ) { i=0; while( word.compare(v[i])<0 && i<v.size() ) i++; v.insert(v.początek()+i,słowo); } for(i=0;i!=v.size();i++) cout << v[i] << " " ; cout << endl; zwróć 0; }


title: Czy „leniwy” jest właściwym terminem dla pomijania na podstawie znacznika czasu?

text: (1) * Stara `make`narzędzie analizuje znaczniki czasu i jeśli dane wyjściowe są nowsze niż dane wejściowe, pomijają (bezcelową, czasochłonną) ponowną kompilację np. Pliki C. * To samo dotyczy wielu języków i kompilatorów. „Leniwe” generowanie miniatur w aplikacjach internetowych pomija te kciuki, które są nowsze niż obraz źródłowy. * „Inteligentne” narzędzia do synchronizacji plików robią to samo, patrząc na znaczniki czasu, aby zmniejszyć głośność transferu. Zwykłem określać to jako **„leniwy”**. Jednak patrząc na cytaty internetowe, termin „leniwy” w informatyce wydaje się w rzeczywistości oznaczać coś innego: „zrób coś tak późno, jak to możliwe”. * ładuj tę dodatkową część tylko wtedy, gdy jest to konieczne * inicjuj leniwie, czyli tak późno, jak to konieczne * oceniaj tylko tę część równania, kiedy do niej dojdziesz... Czy moje określenie jest błędne? A co byłoby bardziej poprawne, dla tych wszystkich optymalizacji pomijania „jest nowsza”?


title: Zapobieganie naruszeniom substytucji Liskov

text: Reimplementuję jakiś komponent i zauważyłem, że oryginalna wersja ma naruszenie Liskov Substitution. Nie jest to aż tak krytyczne, chociaż chciałbym się go pozbyć w nowej implementacji . Nie jest jednak dla mnie jasne, jak to zrobić. Mam komponent definiujący bardzo proste klasy wartości używane przez system. Ten składnik ma interfejs DataValue i kilkanaście implementacji, takich jak NumberValue i GeoCoordinateValue. Komponent, który przerabiam, jest warstwą pamięci masowej przeznaczoną do indeksowania danych, dzięki czemu można je łatwo zapytać. Ten składnik zawiera zestaw klas, które zapewniają informacje o pamięci dla określonej klasy implementującej DataValue. Te informacje to takie rzeczy, jak pola, które tabela musi zawierać, aby zawierać daną wartość DataValue, które pole powinno być używane do sortowania i jakie indeksy należy umieścić. Wszystkie te klasy implementują pewien interfejs DataValueHandler. Naruszenie LSP występuje w przypadku dwóch konkretnych metod w tym interfejsie DataValueHandler: getWhereConditions( DataValue $dataValue ) getInsertValues( DataValue $dataValue ) Interfejs definiujący te metody przyjmuje wartość DataValue. Implementacje oczekują jednak wartości DataValue, dla której dostarczają informacji. Na przykład NumberValueHandler oczekuje NumberValue i zgłosi wyjątek, jeśli otrzyma GeoCoordinateValue. Jak więc się tego pozbyć? (Zanim ktokolwiek to zasugeruje: umieszczenie informacji o jakimś konkretnym zapleczu pamięci masowej w DataValue nie nastąpi, ponieważ byłoby to gorsze pod względem projektowym niż obecne naruszenie LSP.)


title: Planowanie kilku zadań mocno obciążających procesor

text: Muszę zaplanować kilka zadań intensywnie korzystających z procesora, aby były uruchamiane co jakiś czas, odczytując dane współdzielone i zapisując do dedykowanych buforów. Niekoniecznie chcę tworzyć własne harmonogramy, ale nie jestem pewien, czy biblioteki takie jak Quartz są odpowiednie dla tej małej skali. Używam Javy 8 w środowisku serwerowym, ale z izolowanymi węzłami i nie ma znaczenia, że kilka iteracji jest traconych od czasu do czasu. **Szczegóły problemu:** Mam do przetworzenia 5 buforów danych binarnych. Przed przetworzeniem każdego bufora przydzielam puste miejsce docelowe, a funkcja zapisuje do tego miejsca docelowego. Każdy bufor musi być przetwarzany według innego harmonogramu z inną funkcją, chociaż wszystkie funkcje mogą poradzić sobie z brakiem iteracji i obliczeniem podwojenia w następnym kroku. Pierwszy bufor ma ok. 30 MB, a jego przetwarzanie zajmuje ok. 200 ms i musi być przetwarzany co 500 ms. Pozostałe mają około 6 MB, a ich przetworzenie zajmuje około 50 ms i należy je przetwarzać co 1000 ms. Funkcje przetwarzające muszą tylko pisać do bufora docelowego i są bezstanowe, ale mogą czytać dowolny z istniejących buforów. Cały proces będzie miał przynajmniej własny wątek i może mieć wiele wątków. Nic z tego nie jest krytyczne, nie będzie grupowane i będzie utrzymywane prawie wyłącznie w pamięci. **Przykład:** Dość głupią implementacją może być: for (warstwa w nadrzędnych.warstwach) { new thread(() => { while (true) { buffer = new int[layer.data.length] process(warstwa. data, buffer, parent) // pamiętaj, że może to uzyskać dostęp do innych warstw layer.data = buffer sleep(layer.increment) } } } Uruchamianie każdej warstwy w osobnym wątku sprawia, że przetwarzanie jest dość proste, o ile nic w środku nie jest zablokowana. Chwytanie każdej warstwy, o którą dba funkcja przetwarzania, kiedy zaczyna iterację, i zwalnianie ich na końcu powinno działać, ponieważ są one tylko do odczytu i nie martwię się, że inny wątek zastąpi odniesienie. **Pytanie:** 1 .Czy są jakieś problemy z Timerami dla tego rodzaju pracy?Czy zapewniają sposób na odrzucenie lub czekanie na poprzednią iterację?2.Czy Quartz jest realnym wyborem, czy po prostu absurdalnym?3.Czy coś tak prostego jak `System.nanoTime wystarczy przy tej precyzji?


title: Najczystszy sposób zgłaszania błędów w Haskell

text: Pracuję nad nauką Haskella i natknąłem się na trzy różne sposoby radzenia sobie z błędami w pisanych przeze mnie funkcjach: 1. Mogę po prostu napisać `błąd "Jakaś wiadomość o błędzie."`, który zgłasza wyjątek. 2. Mogę sprawić, by moja funkcja zwróciła `Maybe SomeType`, gdzie mogę, ale nie musi, zwrócić to, co chcę zwrócić. 3. Mogę sprawić, by moja funkcja zwróciła `Either String SomeType`, gdzie mogę zwrócić albo komunikat o błędzie, albo to, o co zostałem poproszony w pierwszej kolejności. Moje pytanie brzmi: **Jaką metodę radzenia sobie z błędami powinienem zastosować i dlaczego?** Może powinienem zastosować inne metody, w zależności od kontekstu? Moje obecne rozumienie jest następujące: * „Trudno” jest radzić sobie z wyjątkami w kodzie czysto funkcjonalnym, aw Haskell chce się, aby wszystko było tak czysto funkcjonalne, jak to tylko możliwe. * Zwrócenie `Maybe SomeType` jest właściwą rzeczą do zrobienia, jeśli funkcja albo się nie powiedzie, albo zawiedzie (tj. nie ma różnych _sposobów, w jakie może się to zawieść_ ). * Zwrócenie `Either String SomeType` jest właściwą rzeczą do zrobienia, jeśli funkcja może zawieść na jeden z różnych sposobów.


title: Wspólny instalator oprogramowania na licencji GPL i non GPL

text: Z mojego niejasnego zrozumienia tego tematu założyłem, że jeśli zrobię instalator dla mojego programu i zawiera on bibliotekę GPL, mój kod będzie musiał podlegać GPL. Jednak zauważyłem wczoraj podczas instalacji Ubuntu, że jego instalacja ma pola wyboru (domyślnie zaznaczone), aby zainstalować niewolne oprogramowanie. To pytanie określa zachowanie programistyczne i mówi, że mój program nie będzie objęty GPL, o ile biblioteka może wydawać się oddzielnymi programami, ale nie mówi nic o tworzeniu wspólnego instalatora dla pakietu. Widziałem tę odpowiedź mówiącą o typowych instalatorach w StackOverflow w języku portugalskim i mówi ona o typowym instalatorze, który sprawia, że kod jest objęty GPL. **Jeśli stworzę instalator dla biblioteki i umieszczę tam mój niewolny program, który używa tej biblioteki jako opcję, mój program nie będzie objęty GPL?**


title: Dodanie nowej funkcjonalności do wszystkich podklas shelve.Shelf w Pythonie

text: Aby uniknąć narzutu związanego z opcją `writeback` modułu shelve, jestem zainteresowany utworzeniem klasy półki, która akceptuje tylko wartości haszowalne, przy czym hashability jest proxy dla niezmienności. Więc chciałbym podklasę `shelve.Shelf` i przesłonić metodę `__set__`. Haczyk polega na tym, że `shelve.open` może zwrócić jedną z wielu różnych klas (np. `Dbfilenameshelf`) i chciałbym, aby mój kod pozwalał `shelve` na taką elastyczność. Idealnie rozwiązanie miałoby następujące właściwości: 1. Nie ma potrzeby zawijania wszystkich funkcji udostępnianych przez `Shelf`, jak w: `def keys(self): return self._shelf.keys()`` 2. Nie zepsuje się, jeśli Python doda nowe metody do `Shelf` lub nowe podklasy `Shelf` 3. Unikanie kruchości, przez co rozumiem robienie czegoś skomplikowanego, co mogłoby łatwo wpaść w pułapkę kogoś (możliwe, że mnie), który modyfikuje lub używa kodu kilka miesięcy lub lat później. Przykładem w tym kontekście byłoby ponowne przypisanie `Półka.__zestaw__`, jak w `Półka.__zestaw__ = moja_funkcja`. Dla mnie zdefiniowanie nowego `__getattr__`, jakie oferuje @Winston z wahaniem, wydaje się umiarkowanie kruche — rozumiem, dlatego sugeruje to tylko z wahaniem. Mniej ważne, ale wciąż pożądane byłoby: 1. Zgodność z zasadami projektowania obiektowego. Wydaje mi się, że nowa klasa tutaj _jest_ półką, a nie, że _ma_ półkę. I chyba nie jedno i drugie (to nie jest półka, która zawiera drugą półkę)


title: strategie radzenia sobie z maszyną epsilon

text: Załóżmy, że masz sytuację, w której dzielisz, a następnie mnożysz liczbę zmiennoprzecinkową i musisz zagwarantować, że przetrwa ona machepy (tzn. wynik mnożenia równa się wejściu dzielenia). Jakie są znane strategie gwarantujące to? Zaokrąglanie zadziała, ale cokolwiek innego?


title: Czy dopuszczalne jest, aby projekty przekraczały budżet?

text: To pytanie dręczyło mnie przez ostatnie 3 miesiące, odkąd zmieniłem się z freelancera na pracę w firmie zajmującej się projektowaniem stron internetowych. Nasi sprzedawcy często zadają nam coś podobnego do następującej serii pytań: * Ile kosztuje zaprogramowanie widgetu * Ile godzin zajmie konwersja tej witryny do tego oprogramowania. (Bez wiedzy o tym, co aktualnie działa na stronie) * etc * * * 1. Jak możemy podać wycenę bez żadnych informacji? ( **Nie, nie mogę prosić o więcej informacji!** ) Mam inne pytanie, jeśli projekt przekroczy budżet, to źle. Ostatnio brakowało mi całego menu przy obliczaniu kosztów przeniesienia strony internetowej na nową platformę, więc projekt przekroczył budżet. Mój szef wcale nie był zadowolony i uważam, że takich rzeczy nie da się uniknąć. 2\. Jaka jest ogólna praktyka radzenia sobie z przekraczaniem budżetu i czy projekty takie jak tworzenie stron internetowych często przekraczają budżet? Jeśli pracujesz w firmie zajmującej się tworzeniem/projektowaniem/podobną stroną internetową: 3\. Jak działa system rozliczanych godzin? Dla mnie mamy aplikację do śledzenia czasu, która rejestruje, ile godzin spędzamy na jakim projekcie i czy są one rozliczane, czy wewnętrzne (AKA nierozliczane). Jeśli nie dotrzymamy xx płatnych godzin tygodniowo, możemy w końcu wpaść w kłopoty/zwolnić. Praca, którą wykonujesz dla firmy lub klientów, która nie jest rozliczana, nie jest częścią tego systemu, a my często _musimy_ wykonywać prace wewnętrzne, więc zastanawiam się, czy istnieją jakieś alternatywne systemy. **EDYTUJ:** Ok, jestem programistą w tej firmie, a nie projektantem :) Po drugie, otrzymuję pensję, ale tak patrzy na to kierownictwo. Masz 35 godzin tygodniowo, które musisz przepracować. Możesz wykonywać pracę, którą wystawiają klientom rachunki w ciągu tych 35 godzin i powinieneś. Jeśli zorientują się, że projekt zajmie 50 godzin, a ja zajmę 55 godzin, te 5 godzin można było poświęcić na inny projekt, który nie przekraczał budżetu, więc po prostu „straciliśmy” pieniądze. Innym przykładem jest to, że jeśli mam tylko 1 projekt, to za dwa tygodnie i spędzam dzień na wewnętrznej pracy, trochę jak straciliśmy pieniądze, ponieważ nie pracowałem. Gdybym pracował tego dnia, skończyłbym dzień wcześniej i nadal nie miałbym pracy. Tak czy inaczej, praca jest kontraktem, więc dostaniemy taką samą kwotę niezależnie od tego, w które dni pracuję!


title: Piec — ograniczenie Mercurial i Git

text: Zgodnie z tym wpisem na blogu: Kiln obsługuje teraz repozytoria dostępne zarówno z Git, jak i Mercurial > Zdecydowaliśmy, że najlepszym sposobem byłoby uczynienie Kiln w pełni dwujęzycznym. Przechowuje każde repozytorium w obu formatach. Automatycznie konwertuje wszystko tam i z powrotem, zawsze. Tłumaczenie jest 1:1, odwracalne i w obie strony. > Cokolwiek zrobisz w repozytorium Kiln za pomocą Git, będzie natychmiast widoczne > dla użytkowników Mercurial i na odwrót. Nie wyobrażam sobie, żeby wszystko przebiegało sprawnie. Jakie to ma ograniczenia?


title: Dlaczego nie budujemy i nie używamy procesorów równoległych *przeznaczonych* do ogólnych obliczeń?

text: Wszyscy wiemy, że procesory graficzne są znacznie szybsze niż procesory w szerokim zakresie zastosowań. Kiedy ktoś pyta, dlaczego w ogóle nie programujemy tylko dla procesorów graficznych, jedną z najczęstszych odpowiedzi jest to, że procesory graficzne nie są dobre do wszystkiego – tj. Nie robią niektórych rzeczy, które łatwo robią procesory. Cóż, nic dziwnego: w końcu nie są one **przeznaczone do ogólnych obliczeń**. Procesory GPU są silnie związane z grami i aplikacjami graficznymi, nie tylko posiadają wyspecjalizowane funkcje dla nich, ale często są dla nich reklamowane. Moje pytanie brzmi: dlaczego w takim razie nie budujemy i nie używamy procesorów, które są **w rzeczywistości zaprojektowane dla programów równoległych**?


title: Jaka jest legalność tworzenia wersji aplikacji mobilnej istniejącej gry karcianej lub planszowej?

text: Widzę, że rynek jest pełen aplikacji mobilnych opartych na grach karcianych/planszowych. Na przykład, wyszukaj „taboo” i jest wiele wyników, które nie są publikowane przez Hasbro Inc. Czy jest to legalne? Górny wynik „Tabu” mówi w opisie, że nie są oni powiązani z Hasbro – czy to zwalnia ich z problemów związanych z naruszeniem? Przychodzi mi do głowy kilka gier, które mógłbym stworzyć w wersji mobilnej, które mogłyby odnieść sukces, ale obawiam się publikowania (i zarabiania) gry opartej na innej, zwłaszcza jeśli ma taką samą nazwę. Uwaga: zauważyłem ten przydatny wątek, który sugeruje, że tworzenie takich gier jest legalne, ale pierwotny właściciel może walczyć o usunięcie podobnych gier i może wygrać. Jeśli opracuję taką grę i będę musiał ją wycofać, czy będę w stanie przesłać ją ponownie po wprowadzeniu pewnych zmian?


title: jak wersjonowanie semantyczne ma zastosowanie do programów bez API?

text: Na stronie http://semver.org/ — która w moim odczuciu wydaje się być najczęściej stosowaną konwencją w wersjonowaniu — zaleca się zwiększenie głównego numeru wersji, gdy wprowadzana jest zmiana, która psuje/modyfikuje API. Istnieją dwa powiązane scenariusze, których nie widzę, jak zastosować te wytyczne: 1. Co zrobić, jeśli mój kod nie oferuje żadnego interfejsu API? Jak powinienem wersjonować swój kod? 2. Co się stanie, jeśli mój kod zacznie oferować API na późnym etapie rozwoju?


title: Nauka przez działanie (oraz programowanie metodą prób i błędów)

text: Jak nauczyć się nowej platformy/zestawu narzędzi podczas tworzenia działającego kodu i utrzymywania czystości bazy kodu? Kiedy wiem, co mogę zrobić z podstawową platformą i zestawem narzędzi, zwykle robię to: 1. Tworzę nową gałąź (w moim przypadku z GIT) 2. Piszę kilka testów jednostkowych (na przykład z JUnit) 3 .Piszę swój kod, dopóki nie przejdzie moich testów Jak dotąd, tak dobrze. Problem polega na tym, że bardzo często nie wiem, co mogę zrobić z zestawem narzędzi, ponieważ jest on dla mnie zupełnie nowy. Pracuję jako konsultant, więc nie mogę mieć preferowanego języka/platformy/zestawu narzędzi. Muszę radzić sobie z tym, czego klient używa do wykonania zadania. Najczęściej mam do czynienia (często w pośpiechu) z dużym zestawem narzędzi, o którym niewiele wiem, więc zmuszony jestem do „uczenia się przez działanie” (a właściwie programowania metodą „prób i błędów”) i to mnie niepokoi. Zwróć uwagę, że w pewnym momencie procesu uczenia się zwykle już: 1. przeczytałem jedną lub więcej pięciogwiazdkowych książek 2. skorzystałem z jednego lub więcej samouczków internetowych (pisząc działający kod wiersz po linijce) 3. utworzyłem parę małych projektów eksperymentalnych z moim IDE (w tej chwili IntelliJ IDEA. Używam również Eclipse, Netbeans i innych.) Pomimo wszystkich moich wysiłków, w tym momencie zwykle mogę po prostu mieć grubą wiedzę na temat platformy/zestawu narzędzi, które mam używać. Nie potrafię jeszcze uchwycić każdego szczegółu. Oznacza to, że każda nowa funkcja, która wymaga przygotowania danych i nietrywialnego algorytmu, jest uciążliwa do wdrożenia i wymaga wielu prób i błędów. Niestety praca metodą prób i błędów nie jest ani bezpieczna, ani łatwa. Właściwie jest to faza, która najbardziej mnie niepokoi: eksperymentowanie z nowym zestawem narzędzi przy jednoczesnym tworzeniu działającego kodu i utrzymywaniu czystości mojej bazy kodu. Zazwyczaj na tym etapie nie mogę korzystać ze Scrapbooka Eclipse, ponieważ kod, który muszę napisać, jest już zbyt duży i skomplikowany dla tego niewielkiego narzędzia. W ten sam sposób nie mogę już używać niezależnego małego projektu do moich eksperymentów, ponieważ muszę wypróbować nowy kod na miejscu. Mogę po prostu napisać swój kod na miejscu i polegać na GIT w celu bezpiecznego ratowania. To mnie niepokoi, ponieważ ten rodzaj splecionego, na wpół dojrzałego kodu może szybko stać się niezwykle trudny do zarządzania. Jak radzisz sobie z tą fazą procesu rozwoju? Jak uczysz się przez działanie bez robienia bałaganu w swoim kodzie? Jakieś wskazówki, najlepsze praktyki czy coś takiego?


title: Jak wysłać nowe polecenie za pomocą NSTask do pliku wykonywalnego uniksowego?

text: Próbuję dowiedzieć się, jak używać NSTask, NSPipe i NSFileHandler do korzystania z plików wykonywalnych unix w Xcode. Napisałem już program, który zarówno renderuje szachy, jak i gra przeciwko użytkownikowi, więc teraz chcę stworzyć szachowy GUI za pomocą Stockfisha, który umieściłem w moim projekcie Xcode jako plik wykonywalny unix. W tym celu napisałem następujący program, ale utknąłem w wysyłaniu nowych poleceń do Stockfisha; to znaczy, mogę wysłać mu polecenie po uruchomieniu NSTask, ale nie mogę wysłać poleceń, gdy zadanie jest uruchomione. Kiedy wysyłam te polecenia przez Terminal, Stockfish reaguje doskonale, ale z jakiegoś powodu ignoruje wszystkie polecenia, które wysyłam po uruchomieniu (tj. za pomocą [self sendCommandToStockfish]). Jeśli wyślę mu polecenie, po prostu je ignoruje i kontynuuje wykonywanie oryginalnego polecenia, podczas gdy potok wejściowy kontynuuje wykonywanie doskonale. Jak mogę nadal wysyłać polecenia za pomocą NSTask po uruchomieniu? Oto kod, który mam do tej pory: // // AppDelegate.m // CommandLineToolRunner // // Utworzony przez Thomasa Reddinga 28.08.14. // Prawa autorskie (c) 2014 Thomas Redding. Wszelkie prawa zastrzeżone. // #import "AppDelegate.h" @implementation AppDelegate - (void)applicationDidFinishLaunching:(NSNotification *)aNotification { // Wstaw tutaj kod, aby zainicjować aplikację self.myTimer = [NSTimer scheduleTimerWithTimeInterval:0.1f target:self selector:@selector (timerFired:) userInfo:nil powtórzeń:TAK]; // skonfiguruj zadanie self.task = [[NSTask alloc] init]; [self.task setLaunchPath:[[[NSBundle mainBundle] pathForResource:@"stockfish" ofType:@""] copy]]; [self.task setArguments:@[@"przejdź do nieskończoności"]]; // skonfiguruj wyjście-pipe [self.task setStandardOutput:[NSPipe new]]; NSNotificationCenter* notificaitonCenter = [NSNotificationCenter defaultCenter]; [notificaitonCenter addObserver:self selector:@selector(getReadData:) name:NSFileHandleHandleReadCompletionNotification obiekt:[[self.task standardOutput] fileHandleForReading]]; [[[self.task standardOutput] fileHandleForReading] readInBackgroundAndNotify]; // skonfiguruj input-pipe [self.task setStandardInput:[NSPipe new]]; [uruchomienie zadania własnego]; self.ramka = 0; } - (unieważnij) timerFired:(NSTimer *)timer { // wykonaj self.frame++; if(self.frame == 20) { // napisz NSLog(@"[[Wysyłanie poleceń]]"); [self sendCommandToStockfish:@"stop"]; [self sendCommandToStockfish:@"position fen rnbqkbnr/8/8/8/8/8/8/8/RNBQKBNR w KQkq - 0 1"]; [self sendCommandToStockfish:@"przejdź do nieskończoności"]; } } - (nieważne) getReadData:(NSNotification *)powiadomienie { NSData *data = [[powiadomienie o użytkowniku] objectForKey:@"NSFileHandleNotificationDataItem"]; NSString *response = [[przydział NSString] initWithData:kodowanie danych:NSUTF8StringEncoding]; [[obiekt powiadomienia] readInBackgroundAndNotify]; NSLog(@"%@", odpowiedź); } - (void)sendCommandToStockfish:(NSString *)ciąg { NSLog(@"[[%@]]", ciąg); NSString *strWithNewLine = [NSString stringWithFormat:@"%@\n", string]; NSData *myData = [strWithNewLine dataUsingEncoding:NSUTF8StringEncoding]; @spróbuj { NSLog(@"((ROZPOCZNIJ PRÓBĘ))"); [[self.task.standardInput fileHandleForWriting] writeData:myData]; NSLog(@"((END TRY))"); } @catch (NSException * e) { NSLog(@"((BŁĄD))"); if ([self.task isRunning]) { NSLog(@"^^^"); [zakończenie zadania własnego]; } inny { NSLog(@"***"); } } } @end Po uruchomieniu otrzymuję następujące dane wyjściowe (zamykam program samodzielnie): 2014-09-02 15:02:18.474 CommandLineToolRunner[49999:303] Stockfish 140714 64 SSE4.2 autorstwa Tord Romstad, Marco Costalba i Joona Kiiski 02.09.2014 15:02:18.713 CommandLineToolRunner[49999:303] info głębokość 1 seldepth 1 wynik cp 85 węzłów 27 nps 27000 czas 1 multipv 1 pv e2e4 2014-09-02 15:02: 18.714 CommandLineToolRunner[49999:303] info głębokość 2 seldepth 2 wynik cp 6 węzłów 155 nps 77500 czas 2 multipv 1 pv d2d4 d7d5 2014-09-02 15:02:18.715 CommandLineToolRunner[49999:303] info głębokość 3 seldepth 3 wynik cp 64 węzły 386 nps 128666 czas 3 multipv 1 pv d2d4 d7d5 g1f3 2014-09-02 15:02:18.717 CommandLineToolRunner[49999:303] info głębokość 4 seldepth 4 wynik cp 25 węzłów 1082 nps 216400 czas 5 multipv 1 pv e2e4 e7e5 d62d4 b8 -09-02 15:02:18.724 CommandLineToolRunner[49999:303] info głębokość 5 seldepth 5 wynik cp 53 węzły 3129 nps 284454 czas 11 multipv 1 pv b1c3 g8f6 d2d4 d7d5 g1f3 2014-09-02 15:02:18.729 CommandLineToolRunner[49999:303] info głębokość 6 seldepth 6 wynik cp 26 węzłów 4702 nps 313466 czas 15 multipv 1 pv e2e4 e7e5 d2d4 g--098f6 b1 2014c 02 15:02:18.732 CommandLineToolRunner[49999:303] info głębokość 7 seldepth 7 wynik cp 58 węzłów 6866 nps 343300 czas 20 multipv 1 pv e2e4 d7d5 e4e5 b8c6 d2d4 e7e6 f1b5 2014-09-02 15:02:18.754 CommandLineToolRunner[49999:303] 303] info głębokość 8 seldepth 8 wynik cp 12 węzłów 14656 nps 396108 czas 37 multipv 1 pv e2e4 d7d5 e4d5 g8f6 d2d4 d8d5 b1c3 d5a5 2014-09-02 15:02:18.791 CommandLineToolRunner[49999:303] info score cp 9 seldepth 11 33 węzły 24157 nps 402616 czas 60 multipv 1 pv e2e4 d7d5 e4e5 c7c5 d2d4 c5d4 d1d4 b8c6 f1b5 d8a5 b1c3 a5b5 c3b5 c6d4 b5d4 2014-09-02 15:02:138.807 głębokość CommandLineTool 14999 44269 nps 465989 czas 95 multipv 1 pv e2e4 e7e5 b1c3 b8c6 g1f3 f8c5 c3a4 d7d6 a4c5 d6c5 2014-09-02 15:02:18.839 Przecinek ndLineToolRunner[49999:303] info głębokość 11 seldepth 15 wynik cp 41 węzłów 75424 nps 593889 czas 127 multipv 1 pv e2e4 e7e5 b1c3 b8c6 g1f3 f8c5 f3e5 c5f2 e1f2 c6e5 d2d4Runner: 201430-09002-02 15:4902 info głębokość 12 seldepth 16 wynik cp 28 węzłów 254305 nps 879948 czas 289 multipv 1 pv g1f3 d7d5 e2e3 b8c6 d2d4 c8g4 f1b5 g8f6 e1g1 a7a6 b5c6 b7c6 2014-09-02 15:02:19.042 głębokość CommandLineToolRun wynik cp 34 węzły 309418 nps 937630 czas 330 multipv 1 pv g1f3 d7d5 e2e3 e7e6 d2d4 g8f6 f1d3 f8e7 e1g1 b8c6 c1d2 e8g8 b1c3 2014-09-02 15:02:19.224 cp 999:303] informacje o nodes[22] 524342 nps 1024105 czas 512 multipv 1 pv e2e4 e7e5 b1c3 b8c6 g1f3 g8f6 f1b5 f8b4 e1g1 e8g8 b5c6 d7c6 f3e5 d8e7 d2d4 b4c3 b2c03 2014-033 Polecenie 15699Sel info węzły 1002076 nps 1125928 czas 890 multipv 1 pv g1f3 d7d5 d2d4 g8f6 c1f4 b8c6 e2e3 c 8f5 f1d3 f5d3 d1d3 e7e6 d3b5 d8c8 b1c3 a7a6 b5a4 02.09.2014 15:02:19.769 CommandLineToolRunner[49999:303] info głębokość 16 seldepth 19 wynik cp 24 węzły 1213245 nps 1148906 czas 1056 multipv3 2c6 d7 g1 c8f5 f1d3 f5d3 d1d3 e7e6 d3b5 d8c8 b1c3 a7a6 b5a4 2014-09-02 15:02:20.311 CommandLineToolRunner[49999:303] info głębokość 17 samopogłębienie 20 wynik cp 22 węzły 1878116 nps 1174556 czas f6 d6 g1f7 1 p c7d6 b1c3 g8f6 e2e3 b8c6 f1d3 e8g8 e1g1 c8d7 a2a3 a7a6 2014-09-02 15:02:20.471 CommandLineToolRunner[49999:303] [[Wysyłanie poleceń]] 2014-09-02 15:02:20.471 CommandLineToolRunner:[49999 [stop]] 2014-09-02 15:02:20.472 CommandLineToolRunner[49999:303] ((START TRY)) 2014-09-02 15:02:20.472 CommandLineToolRunner[49999:303] ((END TRY)) 2014- 09-02 15:02:20.472 CommandLineToolRunner[49999:303] [[pozycja fen rnbqkbnr/8/8/8/8/8/8/RNBQKBNR w KQkq - 0 1]] 2014-09-02 15:02:20.472 CommandLineToolRunner[49999:303 ] ((START TRY)) 2014-09-02 15:02:20.473 CommandLineToolRunner[49999:303] ((END TRY)) 2014-09-02 15:02:20.473 CommandLineToolRunner[49999:303] [[przejdź do nieskończoności] ] 02.09.2014 15:02:20.473 CommandLineToolRunner[49999:303] ((START TRY)) 02.09.2014 15:02:20.473 CommandLineToolRunner[49999:303] ((END TRY)) 02.09.2014 15:02:20.823 CommandLineToolRunner[49999:303] info głębokość 18 seldepth 20 wynik cp 23 węzły 2495624 nps 1182760 czas 2110 multipv 1 pv g1f3 d7d5 d2d4 e7e6 c1f4 f8d6 e2e3 g8f6 f1e6 d f3e78 c2 -02 15:02:21.756 CommandLineToolRunner[49999:303] info głębokość 19 currmove d2d4 currmovennumer 5 2014-09-02 15:02:21.951 CommandLineToolRunner[49999:303] info głębokość 19 currmove d2d3 currmovennumer 6 2014-09-02 15: 02:21.960 CommandLineToolRunner[49999:303] info głębokość 19 currmove c2c3 currmovenumber 7 2014-09-02 15:02:21.966 CommandLineToolRunner[49999:303] info głębokość 19 currmove f2f3 currmovenumber 8 2014-09-02 15:0 2:22.010 CommandLineToolRunner[49999:303] info głębokość 19 currmove b2b4 currmovenumber 9 2014-09-02 15:02:22.015 CommandLineToolRunner[49999:303] info głębokość 19 currmove g1h3 currmovenumber 10 2014-09-02 15:02:22.022 CommandLineToolRunner [49999:303] info głębokość 19 curmove a2a3 curmovennumer 11 2014-09-02 15:02:22.029 CommandLineToolRunner[49999:303] info głębokość 19 curmove f2f4 curmovenumber 12 2014-09-02 15:02:22.036 CommandLineToolRunner[49999:303 ] info głębokość 19 currmove g2g4 currmovennumer 13 2014-09-02 15:02:22.037 CommandLineToolRunner[49999:303] info głębokość 19 currmove b2b3 currmovenumber 14 2014-09-02 15:02:22.044 CommandLineToolRunner[49999:303] info głębokość 19 currmove c2c4 currmovennumer 15 2014-09-02 15:02:22.086 CommandLineToolRunner[49999:303] info głębokość 19 currmove h2h3 currmovennumer 16 2014-09-02 15:02:22.091 CommandLineToolRunner[49999:303] info głębokość 19 currmove g2g3 currmovennumer 17 2014-09-02 15:02:22.095 CommandLineToolRunner[49999:3 03] info głębokość 19 currmove a2a4 currmovenumber 18 2014-09-02 15:02:22.098 CommandLineToolRunner[49999:303] info głębokość 19 currmove b1a3 currmovenumber 19 2014-09-02 15:02:22.101 CommandLineToolRunner[49999:303] info głębokość 19 currmove h2h4 currmovenumber 20 2014-09-02 15:02:22.107 CommandLineToolRunner[49999:303] info głębokość 19 seldepth 23 wynik cp 17 odgórne węzły 4113455 nps 1211621 czas 3395 multipv 1 pv g1f3 d7d5 d2d4 g8f6 c1f4 fed6 c8f 5e 7 b8c6 e1g1 f8d6 f4d6 c7d6 b1c3 info głębokość 19 currmove g1f3 currmovennumer 1 2014-09-02 15:02:22.410 CommandLineToolRunner[49999:303] info głębokość 19 currmove e2e4 currmovennumer 2 2014-09-02 15:02:23.133 CommandLineToolRunner 303] info głębokość 19 curmove b1c3 curmove numer 3 info głębokość 19 curmove d2d4 curmove numer 4 info depth 19 curmove e2e3 curmove numer 5 info depth 19 curmove d2d3 curmove 6 info głębokość 19 curmove c2c3 curmove numer 7 info głębokość 19 currmove rmovenumber 8 info głębokość 19 currmove c2c4 currmovenumber 9 2014-09-02 15:02:23.158 CommandLineToolRunner[49999:303] info głębokość 19 currmove b2b4 currmovenumber 10 info głębokość 19 currmove f2f3 currmovenumber 11 info głębokość 19 currmove g2g4 currmove 12 2014-09 02 15:02:23.159 CommandLineToolRunner[49999:303] info głębokość 19 currmove h2h3 currmovenumber 13 info depth 19 currmove a2a4 currmovenumber 14 info depth 19 currmove g1h3 currmovenumber 15 info głębokość 19 currmove b1a3 currmovenumber 16 infovenumber 19 currmove 192 currmove f2f4 currmovenumber 18 info głębokość 19 currmove g2g3 currmovenumber 19 info depth 19 currmove h2h4 currmovenumber 20 2014-09-02 15:02:23.160 CommandLineToolRunner[49999:303] info głębokość 19 seldepth 23 score cp 27 węzłów 5442993 nps 12239v 1 czas 4447 multip pv e2e4 e7e5 b1c3 b8c6 g1f3 g8f6 f1c4 f8c5 d2d3 a7a6 e1g1 e8g8 a2a3 d7d6 b2b4 c5a7 c1e3 a7e3 f2e3 info głębokość 20 curmove e2e 4 dniliczba 1


title: Dlaczego społeczność Perla ma tak złą reputację?

text: Nadal jestem całkiem nowy w programowaniu. Większość czasu spędzam w Ruby i odkrywam pewien sentyment do zabawy z wyrażeniami regularnymi. Biorąc to pod uwagę, rozważam przyjrzenie się Perlowi jako hobby. Jednak dużo słyszałem o społeczności Perla i nic dobrego. Słyszałem, że społeczność jest określana jako niezwykle elitarna i odporna na niedoświadczonych programistów. Czy to prawda? Jeśli tak, dlaczego tak jest?


title: Czy łatwiej jest napisać solidny kod w skompilowanych, ściśle typowanych językach?

text: Chciałbym przeczytać opinię ekspertów na temat tego, czy skompilowane, ściśle typowane języki pomagają programistom pisać solidny kod, mając ich plecy, sprawdzając niezgodności typów i ogólnie wyłapując błędy w czasie kompilacji, które w przeciwnym razie zostałyby wykryte w czasie wykonywania ? Czy testy jednostkowe w luźno typowanych, interpretowanych językach muszą być bardziej dokładne, ponieważ przypadki testowe muszą oceniać rzeczy, które w językach skompilowanych po prostu by się nie skompilowały? Potrzebujesz programisty w skompilowanej, ściśle określonej konieczności pisania mniej kodu, ponieważ nie musi on stale sprawdzać poprawnych typów (instancji operatora ), ponieważ kompilator wychwytuje te rzeczy (to samo dotyczy błędnie napisanych nazw zmiennych lub zmiennych niezainicjowanych ) ? **UWAGA: przez ściśle typowany język mam na myśli języki, które wymuszają deklarowanie zmiennych i przypisywanie im typu, aby móc z nich korzystać, a po zadeklarowaniu zmiennej nie można zmienić jej typu ani przypisać niezgodnych wartości typów. ** int mojeInt = 0; String myString = ""; myInt = myString; // to nie będzie latać w ściśle określonym języku myInte = 10; // to też nie będzie ( zmienna myInte nie istnieje )


title: Rozpoczęcie nowego projektu z TDD

text: Studiuję TDD i czytam, że pomaga to również zdefiniować projekt aplikacji, prawda? Postanowiłem więc zacząć tworzyć nowy projekt, aby lepiej go zrozumieć. Chcę stworzyć prosty system rejestracji użytkownika, który poprosi o jego imię i nazwisko, adres e-mail, kraj (wybierze jednego z listy) i numer telefonu. Pytanie brzmi... Stworzyłem nowe rozwiązanie w VS 2010, dodałem nowy projekt Test i po prostu nie wiem jakie testy pisać! Skoro pomoże mi to zdefiniować projekt, jakie testy mógłbym tutaj napisać? Dzięki za wszelką pomoc!


title: Czy dobrym pomysłem jest projektowanie architektury z myślą, że klasy interfejsu użytkownika można zastąpić interfejsem wiersza poleceń?

text: W Code Complete na stronie 25 powiedziano, że dobrym pomysłem jest możliwość łatwego zastąpienia zwykłych klas interfejsu użytkownika klasami wiersza poleceń. Znając jego zalety w testowaniu, jakie problemy może powodować? Czy ta dodatkowa praca naprawdę opłaci się w przypadku projektów internetowych i mobilnych? A co z małymi i średnimi projektami; czy obowiązują te same zasady? A co, jeśli sprawi to, że Twój projekt stanie się bardziej złożony?


title: Korzystanie z biblioteki GPLv3 w modelu biznesowym freemium

text: Przeczytałem kilka powiązanych pytań dotyczących używania GPLv3 w aplikacji komercyjnej, ale nie mówią one nic o aplikacji freemium. Chciałbym korzystać z biblioteki GPLv3 w dwóch aplikacjach, darmowej (z ograniczonymi funkcjami) i płatnej. W zasadzie bezpłatna aplikacja pozwoli na korzystanie z biblioteki bez ograniczeń, a płatna będzie zawierała ją i inne niezwiązane z nią funkcje. Wydam darmową aplikację na licencji GPLv3, ale czy muszę wydać płatną na tej samej licencji? Nie chcę udostępniać całego kodu źródłowego mojej płatnej aplikacji (z oczywistych powodów), ponieważ inne funkcje w żaden sposób nie korzystają z biblioteki. Dla użytkowników, którzy kupili pełną wersję, wygodniej byłoby mieć wszystkie funkcje w jednej aplikacji, zamiast umieszczać bibliotekę w osobnej.


title: Jak stać się bardziej autonomicznym i samowystarczalnym programistą?

text: Największym czynnikiem, który powstrzymuje mnie przed byciem wybitnym programistą, jest moje poleganie na innych. Czuję, że zadaję zbyt wiele pytań, ponieważ boję się konsekwencji zepsucia wszystkiego i powstrzymania wszystkich. Więc jestem zbyt ostrożny, zadając tyle pytań, że w zasadzie otrzymuję odpowiedzi po wystarczającej liczbie pytań. Uznałem, że to źle, ale chcę to powstrzymać. Częściowo chodzi o to, że są chwile, w których po prostu nie znam kodu (albo jest to gałąź, z którą nigdy nie pracowałem, albo jest to zupełnie nowy produkt), ale chcę mniej polegać na innych. Na wstępie tego rodzaju pytania nie dotyczą ogólnych wzorców ani języków: zwykle moje pytania dotyczą tego, jak robimy kod w naszej firmie i jak sprawić, by rzeczy działały w naszym ekosystemie. Chcę móc korzystać ze specyfikacji i jeździć z nimi bez poczucia, że potrzebuję pomocy na każdym kroku. Czy to normalne? Czy przechodziłeś przez to, a jeśli tak, to jak przez to przeszłeś?


title: Czy nie jest mile widziane wydawanie prac w toku na github/sourceforge/bitbucket/etc?

text: Krótko mówiąc, ostatnie dwa lata spędziłem na zupełnie nowej karierze, przechodząc ze środowiska akademickiego do roli analityka danych (pracując w kierunku naukowca danych). Zanim rozpocząłem pracę w mojej obecnej firmie, nie wiedziałem prawie nic o kodowaniu, z wyjątkiem uczenia się SQL przez kilka godzin tygodniowo przez kilka miesięcy. Poza SQL, od tego czasu zaznajomiłem się z Perlem, używałem trochę PHP tu i ówdzie i poczyniłem pewne postępy w nauce innych języków (głównie Java i C). Tak więc wciąż mam dużo do zrobienia. Aby się czegoś nauczyć, zbudowałem kilka projektów pobocznych — dużo bardziej wyrafinowanych niż „Hello World, mam na imię $name”.”, ale nie tak skomplikowanych, jak, powiedzmy, Minecraft czy sterownik urządzenia. Chciałbym udostępnić im kod, aby uczyć się na konstruktywnych informacjach zwrotnych i zbudować portfolio, które będzie pasować do mojego CV. Jednak wiele z tych rzeczy jest w toku i, szczerze mówiąc, czuję pewien niepokój przed udostępnieniem kodu, aby wszyscy zobaczyli, że nie jest do końca, w 100% „skończony” i dopracowany. Czy o nic się nie martwię? Jeśli nie, to czy istnieje jakiś minimalny próg polski, jaki projekt powinien mieć przed wydaniem go jako open source?


title: Dobre praktyki dotyczące odwoływania się do JavaScript

text: Walczę o optymalizację skryptów aplikacji webowych. Mam aplikację sieci web ASP.NET, która odwołuje się do jQuery na stronie wzorcowej, a na każdej stronie podrzędnej może odwoływać się do innej biblioteki lub rozszerzenia JavaScript. Chciałbym zoptymalizować aplikację z YUI dla .NET. Pytanie brzmi, czy powinienem umieścić wszystkie odniesienia do bibliotek na stronie wzorcowej lub skompresować cały kod JavaScript w jednym pliku, czy też powinienem utworzyć plik dla każdej strony, który zawiera tylko kod przydatny dla strony? Czy są jakieś wskazówki, których należy przestrzegać?


title: Czy powinienem używać gramatyki formalnej dla mojego interpretowanego języka skryptowego?

text: Mam silnik skryptowy, który właśnie opublikowałem jako projekt open source. Czeka na moim twardym dysku od około roku. Mój silnik oczywiście nie jest w żaden sposób kompletny, ale działa z prostymi skryptami. Ma w sobie coś z javascriptu, ale nie chcę przestrzegać specyfikacji ECMA ani nic takiego. Teraz najważniejszą rzeczą, nad którą pracuję, jest poprawa jakości kodu przy jednoczesnym pozostawieniu działającego języka (który mam kilka testów regresji do "udowodnienia"). W ogóle nie ma formalnej gramatyki i działa tak: 1. Preprocess/Tokenize. W tym momencie usuwa białe znaki i tnie wszystko na „tokeny”, które są po prostu strukturą zawierającą ciąg znaków i przybliżoną „wskazówkę” dotyczącą tego, czym jest token (numer, identyfikator, operacja itp.) oraz pewne informacje dotyczące debugowania, takie jak numer linii 2. Klasa ScriptingEngine, która pobiera listę tokenów i faktycznie je analizuje i wykonuje 3. Klasa „ExpressionEvaluator”, która weźmie podzbiór listy tokenów i zbuduje określone drzewo operacji, wartości, a następnie wykona operacje i tak i zwinąć drzewo w jedną wartość Mój silnik ma na celu bycie przenośnym (działa wszędzie, gdzie działa .Net) i samowystarczalny. Jak na razie to "działa", ale kod jest okropny i jestem prawie pewien, że podchodzę do tego w niewłaściwy sposób. Zastanawiam się, czy gramatyka formalna i wszystko, co się z nią wiąże, może pomóc. Niektóre korzyści, jakie słyszałem z bycia bardziej formalnym w gramatyce * Jednoznaczna specyfikacja języka * Łatwiejsza konserwacja/zmiana * Bardziej tradycyjne/większe wsparcie społeczności? I niektóre wady * Niektóre języki mogą być bardzo trudne do zredukowania do gramatyki formalnej, np. Perl. * Krzywa uczenia się dla kogoś, kto się nie zna (tj. Ja) * Generalnie polegaj na narzędziach takich jak yacc i ANTLR, które wprowadzają kolejny krok w przepływie pracy i/lub dodają zależności (czego chciałbym uniknąć) Chociaż ten projekt jest w .Net, może równie dobrze dotyczyć dowolnego innego języka implementacyjnego. Czy powinienem używać gramatyki formalnej? Czy ktoś może omówić wady i zalety obu stron?