title: Oszacowanie perspektyw każdej lokalizacji w Mac App Store

text: Piszę programy użytkowe (konwertery, narzędzia do kompresji itp.) za pomocą prostych interfejsów użytkownika, które wystawiam na sprzedaż do bezpłatnego pobrania w Mac App Store. Piszę te programy po angielsku i zazwyczaj dodaję francuską lokalizację (co robię sam). Porównując rozkład sprzedaży na kraj między aplikacją zlokalizowaną i nielokalizowaną, mogę oszacować, jak bardzo francuska lokalizacja zwiększa moją sprzedaż. (Same aplikacje są dość ogólne i nie są specyficzne dla danego kraju, co umożliwia porównanie). Na przykład w niezlokalizowanej aplikacji A moja sprzedaż we Francji stanowi 2,5% całej sprzedaży, podczas gdy w zlokalizowanej aplikacji B sprzedaż we Francji wynosi 10%. Oznacza to, że _lokalizacja zwiększyła moje całkowite przychody o 8,4%_.[1] Moje pytanie brzmi: **czy ktoś ma szacunkową wartość lokalizacji dla każdego języka?** (według tego wskaźnika, tj. potencjalnego dodatkowego przychodu) Byłoby to bardzo pomocne w ustaleniu priorytetów dla nowych lokalizacji (czego sam nie mogę zrobić ). * * * [1] I nie, to nie jest 8,5%.


title: Czy „tagi” powinny być polem nvarchar w tabeli, czy też powinno to być zupełnie inną tabelą?

text: Tworzę stronę fotograficzną i chcę umożliwić użytkownikowi umieszczanie tagów na swoich zdjęciach w celu łatwego wyszukiwania. Ale nie jestem pewien, czy chcę, aby tagi były polami nvarchar na każdym obrazie, a następnie szukałem tego tagu w każdym rekordzie, czy też chcę je wyciągnąć i utworzyć osobną tabelę tagów i identyfikatorów tagów, a następnie spójrz w górę tabeli, więc mogę po prostu przeszukać bazę danych w celu znalezienia tego identyfikatora. Więc pytam, co byłoby lepsze pod względem wydajności i skalowalności. Baza będzie zawierać ponad 3-4000 zdjęć.


title: Po co walidować XML?

text: Szukam wyjaśnienia, dlaczego należy sprawdzić poprawność XML. Testowałem DTD i schematy przez ostatni miesiąc i ostatnio próbowałem dowiedzieć się, dlaczego to robię. Wiem, że dzięki temu XML jest lepszy i bardziej semantyczny, ale jakie są ogólne korzyści z walidacji XML?


title: Jak znaleźć lokalne maksima w macierzach?

text: Muszę opracować algorytm znajdowania wszystkich lokalnych maksimów w **dwuwymiarowej tablicy** : jak najefektywniej szukać lokalnych maksimów? Czy są na to algorytmy? Ponadto algorytm powinien być w stanie obsłużyć nawet „płaskie” piki, to znaczy powinien znaleźć centralne współrzędne każdego piku. Oto przykład z tablicą jednowymiarową: niektóre kolejne elementy mają tę samą wartość szczytową, więc algorytm powinien zwrócić położenie centralne. | płaski szczyt | |---------------------------| tablica = [... 0,8 0,9 1,0 1,0 1,0 1,0 1,0 0,9 0,8 ...] | pożądany rezultat Jak poradzić sobie z problemem płaskich pików w dwuwymiarowej tablicy? W pikach płaskich sąsiednie elementy są sobie równe i tworzą pojedyncze lokalne maksimum, więc chciałbym uzyskać współrzędne centralne tego sąsiedztwa.


title: Dlaczego finalizacja specyfikacji HTML 5 trwa tak długo?

text: Czytałem to i jedno zdanie przykuło moją uwagę (podkreślenie moje): > Więc Ian Hickson, największy krytyk XHTML, był ojcem HTML 5, zorientowanej na działanie > specyfikacji dla małych dzieci, która _nie osiągnie dorosłości do 2022_, chociaż > niektóre z nich mogą być używany dzisiaj. Czy to prawda? Czy to naprawdę cykl rozwoju HTML 5? Dlaczego to trwa tak długo? Co sprawia, że tak trudno jest to naprawić, że nie będzie to ostateczne za 11 lat?


title: Stawanie się lepszym naprawiaczem błędów

text: Uwielbiam być programistą. Powiedziałem to. Jednakże, mając to na uwadze, zdałem sobie ostatnio sprawę, że naprawdę nie mogę _znieść_ naprawiania błędów. W ogóle. W rzeczywistości, kiedy coś opracowuję, moja produktywność jest niezwykle wysoka. Nawet kiedy piszę testy jednostkowe i przeprowadzam samotestowanie mojego rozwoju, generalnie jestem bardzo produktywny. Potrafię się dobrze skoncentrować i wykonywać zadania. Jednak, gdy nadchodzi czas kontroli jakości i pracuję nad poprawą błędów, moja inspiracja gwałtownie spada. Muszę zmusić się dość ekstremalnymi środkami (wiesz, muzyka o wysokim BPM, nadmierna ilość kofeiny itp.), aby zrobić _cokolwiek_. Moja praca polega zwykle na wkraczaniu do istniejącego ogromnego projektu i dodawaniu nowych funkcji lub naprawianiu błędów, więc nie mogę dokładnie powiedzieć mojemu pracodawcy, że potrzebuję kilku tygodni na napisanie testów jednostkowych dla całego ich kodu :) Ponadto, technologia serwerowa, której często używamy, jest bardzo przeszkodą zarówno w testowaniu jednostkowym, jak i integracyjnym, ponieważ ma sporo problemów z ładowaniem klas Java. Nie jestem całkowicie przeciwny naprawianiu błędów, czasami może być fajnie, ale _wcale nie jest fajnie_, kiedy trzeba wprowadzić drobne zmiany i poczekać od 30 sekund do 3 minut, aby zobaczyć, czy zadziałały, czy nie (ze względu na sposób działania systemu). Jak mogę poprawić swoją produktywność i motywację podczas naprawiania błędów? Czy to jest coś, czym zajmuje się większość programistów?


title: Wskazówki dotyczące projektowania programu z graficznym interfejsem użytkownika dla użytkowników podstawowych, średniozaawansowanych, zaawansowanych i ekspertów

text: Zostałem poproszony o opracowanie programu z czterema wymiennymi graficznymi interfejsami użytkownika, aby użytkownicy mogli płynnie i dowolnie przełączać się z trybu podstawowego przez średniozaawansowany do zaawansowanego i eksperta. Dobrze rozumiem, jak oddzielić GUI od logiki biznesowej. To załatwione. Moje pytanie dotyczy wyłącznie tego, jak zorganizować, zaprojektować, zaimplementować część GUI dla tego konkretnego wymagania. Jeśli ktoś z Was może pomóc z informacjami z języków/frameworków innych niż C#/NET, zostanie to docenione.


title: Wyodrębnij wszystkie powiązane aliasy typu klasy i wylicz do jednego pliku lub nie

text: W moim projekcie mam wiele modeli, a niektóre inne klasy potrzebują tylko **deklaracji klasy** i aliasingu typu wskaźnika. Nie musi znać **definicji klasy** , więc nie chcę dołączać pliku nagłówka modelu. Wyodrębniam wszystkie deklaracje modelu do jednego pliku, aby każda klasa odwoływała się do jednego pliku. model_forward.h klasa Kot; typedef std::shared_ptr<Cat> CatPointerType; typedef std::shared_ptr<const Cat> CatConstPointerType; klasa Pies; typedef std::shared_ptr<Pies> DogPointerType; typedef std::shared_ptr<stały pies> DogConstPointerType; klasa Ryby; typedef std::shared_ptr<Ryba> FishPointerType; typedef std::shared_ptr<const Fish> FishConstPointerType; enum CatType{RED_CAT, YELLOW_CAT, GREEN_CAT, PURPLE_CAT} enum DogType{HATE_CAT_DOG, HUSKY, GOLDEN_RETRIEVER} enum FishType{SHARK, OCTOPUS, SALMON} Czy jest to dopuszczalna praktyka? Czy powinienem sprawić, by każda jednostka, która wymaga **deklaracji klasy** , była zależna od jednego pliku? Czy to powoduje wysokie sprzężenie? Czy też powinienem umieścić te aliasy typu `wskaźnika` i definicję `enum` wewnątrz klasy z powrotem? `cat.h` class Cat { typedef std::shared_ptr<Cat> PointerType; typedef std::shared_ptr<const Cat> ConstPointerType; wyliczenie Typ {RED_CAT, YELLOW_CAT, GREEN_CAT, PURPLE_CAT} ... }; `dog.h` class Pies { typedef std::shared_ptr<Pies> PointerType; typedef std::shared_ptr<stały pies> ConstPointerType; wyliczenie Typ{HATE_CAT_DOG, HUSKY, GOLDEN_RETRIEVER} ... } fish.h class Ryba { ... }; Wszelkie sugestie będą pomocne.


title: Czy ktoś rozpoznaje ten problem z planowaniem? Czy jest na to algorytm?

text: Rozważmy następujący problem: * * * **Opis** : Istnieje n zadań J1...Jn z czasami cyklu C1....Cn. Znajdź _kwant czasu_ i tabelę harmonogramu, biorąc pod uwagę, że: * dowolny element tabeli zawiera co najwyżej jedno zadanie * obsługa zadania będzie przetwarzać element na raz, tj. wykona zadanie (jeśli istnieje), a następnie, po przejściu _ilości czasu_, przeniesie się do następnego elementu. * funkcja obsługi zadania wykona pętlę zwrotną, tj. po ostatnim elemencie będzie kontynuowała pracę z pierwszym. * cykliczność musi być zachowana, tj. odległość między dowolnymi dwoma kolejnymi (w tym pętlami zwrotnymi) wystąpieniami zadania Jk (k = 1,n) musi być równa Ck / _kwanty czasu_. * tabela musi być jak najkrótsza. **Przykład** : * J1 \- 4 sekundy cyklika * J2 \- 6 sekund cyklika * J3 \- 8 sekund cyklika **Przykładowe rozwiązanie** : kwant czasu = 1s 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 sekundy +--+--+--+--+--+--+--+--+--+--+--+-- +--+--+--+--+--+--+--+--+--+--+--+--+ |J1|J2|J3| |J1| | |J2|J1| |J3| |J1|J2| | |J1| |J3|J2|J1| | | | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+- -+--+--+--+--+--+--+--+ * * * Mam wrażenie, że należy to do rodziny problemów planowania i że może to być szczególny przypadek bardziej ogólnego problem. **Czy tak jest?** Próbowałem wyszukać go w internecie, ale nie znalazłem niczego podobnego. Ponieważ nie mam żadnego doświadczenia z problemami z harmonogramem, nie jestem nawet pewien, czego szukać. Z tego co widzę: * całkowity czas trwania tabeli harmonogramowania powinien być najmniejszą wspólną wielokrotnością C1...Cn. * kwant czasu powinien wynosić co najmniej GCD(C1,...,Cn) / n. - To niekoniecznie jest optymalne rozwiązanie. To prowadzi mnie do przekonania, że istnieje proste rozwiązanie, a nie takie, które wymaga programowania dynamicznego. **Czy tak jest?** Czy ktoś może wskazać mi jakieś zasoby, może nawet algorytm, na ten problem? Ciekawią mnie również warianty, w których zadania mogą być rozdzielone między więcej niż jedną tabelę harmonogramowania. * * * GCD = Greatest Common Divider **Edytuj** : Nie pytam, jak zaplanować N zadań z podanymi czasami cyklu; Jestem pewien, że są na to bardziej dynamiczne sposoby, jak niektórzy sugerują. Mój problem to " _Znajdź kwant czasu i tabelę planowania, biorąc pod uwagę, że:[...]_ ". Możliwe nawet, że ma to korzenie w niektórych dziedzinach matematyki.


title: Jak obsługiwać strefę czasową dla dat?

text: Z datą RRRR-MM-DD GG:MM:SS zawsze przechowuję czas UTC. Kiedy przeciągam do wyświetlacza, tłumaczę strefy czasowe za pomocą wbudowanych funkcji i klas PHP. Uważam, że jest to właściwy sposób na zrobienie tego i ma to dla mnie sens. Czy mogę obsługiwać RRRR-MM-DD w ten sam sposób?


title: Czy wersję modułu półki Pythona, która wie, kiedy jego wpisy zostały zmodyfikowane, można napisać w dowolnym języku programowania?

text: `shelve` to moduł Pythona, który ułatwia utrwalanie słownika Pythona na dysku (w odpowiednich warunkach). Dokumentacja shelve podaje ten przykład, aby zademonstrować jedną z pułapek używania półki: import shelve d = shelve.open(filename) # ...snip... # jako d został otwarty BEZ writeback=True, strzeż się: d[ 'xx'] = range(4) # to działa zgodnie z oczekiwaniami, ale... d['xx'].append(5) # *nie działa!* -- d['xx'] to nadal zakres( 4)! Dokumentacja wyjaśnia: > Ze względu na semantykę Pythona, półka nie może wiedzieć, kiedy modyfikowany jest wpis słownika zmienny, > trwały-. Domyślnie zmodyfikowane obiekty są zapisywane tylko > po przypisaniu do półki (patrz Przykład). Stwierdzenie, że półki zachowują się w ten sposób "ze względu na semantykę Pythona" wydaje mi się mierzeniem Pythona za pomocą wysokiej poprzeczki! Na półce trudno byłoby stwierdzić, czy jakikolwiek przedmiot znajdujący się na półce ma odniesienie do czegoś, co zostało zmutowane (lub odniesienie do czegoś, co ma odniesienie do czegoś, co zostało zmutowane). Czy można to zrobić w dowolnym języku programowania?


title: Wzór dla aplikacji internetowej

text: Zajmuję się tworzeniem aplikacji internetowej dla projektu uniwersyteckiego. Mój profesor chce, abyśmy używali architektury wielowarstwowej (warstwy klienta, sieci, biznesu i danych) z EJB. W przypadku sieci i biznesu zdecydowałem się na użycie wzorca MVC. W każdym razie krok po kroku buduję warstwy w ten sposób: Widok (JSP i Servlet) ZAWSZE przekazuje każde żądanie od klienta do Kontrolera (Beans sesji), który sprawdza, czy użytkownik widzi stronę i czy może wysyła do Servletu odpowiednie dane (pobrane od Podmiotów). Ponieważ wzorzec MVC zapewnia interakcję między modelem a widokiem, myślę, że go nie używam (mój widok współdziała tylko z kontrolerem). Pytam więc: jak nazywa się wzór, którego używam? Czy to nadal MVC?


title: Kto jest odpowiedzialny za przełącznik główny/podrzędny?

text: W naszej aplikacji internetowej wprowadzamy schemat replikacji master/slave. W niektórych scenariuszach wolelibyśmy wprost kierować odczyty do slave'a, a zapisy do mastera, co jest dla mnie oczywistą zaletą schematu. Instynktownie wolałbym, aby zmiana nastąpiła gdzieś w ORM, używamy Doctrine i oferuje zgrabne rozwiązanie. Ale to nie jest dla nas rozwiązanie, ponieważ nie mamy bardzo praktycznego sposobu na rozróżnienie, kiedy odczyt jest w rzeczywistości zapisem (tak jak w scenariuszach aktualizacji). Następną najlepszą rzeczą byłoby przekazanie odpowiedzialności za przełącznik kontrolerowi i/lub niektórym niestandardowym bibliotekom, które w stereotypowym podejściu MVC można uznać za modele z doładowaniem. Chociaż jest to bardzo praktyczne rozwiązanie i prawdopodobnie takie, które wymagałoby mniej czasu, jakoś obawiam się, że brakuje mi czegoś bardzo ważnego, a to wróci i mocno mnie ugryzie. Istnieją niejasne ograniczenia czasowe i wsparcie kierownictwa w gorączkowej refaktoryzacji, ale w tym konkretnym scenariuszu w większości zgadzamy się, że powinniśmy zastosować praktyczne podejście, nawet jeśli oznacza to ograniczenie się tylko tam, gdzie zidentyfikowaliśmy bazę danych jako główne wąskie gardło. Aby zwiększyć zamieszanie, nie mogę powiedzieć, że mam doświadczenie w schematach replikacji, kiedy po raz pierwszy omawiano ten problem, pomyślałem, że lepszym rozwiązaniem byłoby przyjęcie schematu z wieloma wzorcami, ale kiedy zacząłem badać, jak łatwo te zawodzą i jak solidna powinna być ich implementacja, przestało się to wydawać rozsądne. Pomoc?


title: Jak radzić sobie z dużymi liczbami?

text: Cóż, dopiero zacząłem układać łamigłówki i denerwuje mnie widok łamigłówek, które są łatwe do wykonania, ale również wymagają obsługi bardzo dużych liczb. To jest problem. Powiedzmy, że mam do czynienia z liczbami takimi jak 10 ^ 6 / 2147483647 / itd. Trzeba wykonać operacje arytmetyczne dalej! Uważam jednak, że nie należy ich traktować w sposób brutalny, ale twierdzenia/stwierdzenia matematyczne po prostu czasami nie wchodzą mi do głowy. Jak mógłbym poradzić sobie z takimi zagadkami (nie powinienem używać zewnętrznej biblioteki)


title: Kontynuacje, współprogramy i optymalizacja tailcall

text: Staram się uczyć kontynuacji i używać ich do implementacji współprogramów w Scheme. Mam dwie procedury (współprogramy) „a” i „b”, a przełączam się między nimi w następujący sposób: ;; c jest kontynuacją. (define (a c) ... ;; Przełącz na inny współprogram. (call/cc c) ... (define (b c) ... ;; Przełącz na inny współprogram. (call/cc c) ... Rozpoczynam wykonanie od (a b) Przetestowałem mały przykład i rzeczywiście, wykonanie przełącza się tam iz powrotem między dwiema procedurami, aż jedna z dwóch zakończy się bez wywołania kontynuacji, którą podano jako argument.Mam dwa pytania: 1. Czy mój przykład jest odpowiednią / idiomatyczną implementacją współprogramów używających kontynuacji? 2. Czy optymalizacja wywołania końcowego jest obowiązkowa dla implementacji współprogramów z kontynuacją?W moim rozwiązaniu zbyt częste przełączanie się między dwoma współprogramami może spowodować przepełnienie stosu, jeśli Scheme nie zapewnia TCO.Czy istnieją inne rozwiązania, które nie wymagają TCO?**EDYTUJ** Komentarz Basile'a wydaje się być wystarczający, aby odpowiedzieć na moje pytanie.Tłem pytania jest to, że chciałbym, aby takie podejście wdrożyło outines w Pythonie, gdzie nie mam TCO.


title: Czy orientacja obiektowa naprawdę wpływa na wydajność algorytmu?

text: Orientacja obiektowa bardzo mi pomogła we wdrożeniu wielu algorytmów. Jednak języki zorientowane obiektowo czasami prowadzą cię w „prostym” podejściu i wątpię, czy takie podejście jest zawsze dobre. OO jest bardzo pomocne w szybkim i łatwym kodowaniu algorytmów. Ale czy to OOP może być wadą oprogramowania opartego na wydajności, tj. Jak szybko wykonuje się program? Na przykład przechowywanie węzłów grafu w strukturze danych wydaje się przede wszystkim „proste”, ale jeśli obiekty Node zawierają wiele atrybutów i metod, czy może to prowadzić do powolnego algorytmu? Innymi słowy, czy wiele odwołań między wieloma różnymi obiektami lub użycie wielu metod z wielu klas może skutkować "ciężką" implementacją?


title: Programista-Tester-Współczynnik

text: Czy istnieją jakieś uzasadnione zalecenia, ilu testerów powinien mieć zespół na programistę? Bardziej interesują mnie opinie odnoszące się do oldschoolowego podejścia rozwojowego (bez zwinnych rzeczy) i większych projektów. Źródła są mile widziane.


title: Program obliczeniowy nie działa przy 100% wykorzystaniu procesora

text: Mam program, który ma GUI i wykonuje bardzo ciężkie obliczenia matematyczne przez kilka minut, a następnie wyświetla wynik. Kiedy próbuję bezpośrednio połączyć go z bibliotekami DLL, działa dobrze, ale nie działa przy 100% wykorzystaniu procesora, tak jak robi to GUI. Dlaczego to? Rozumiem, że ciężki program obliczeniowy może nie działać w 100% z powodu operacji we/wy, które może wykonywać, ale ten program nie robi żadnego, nawet pojedynczego printf(). Pliki są generowane pod koniec wykonywania zarówno w wersji GUI, jak i DLL programu. Program interfejsu wykonuje również wiele wywołań do biblioteki DLL podczas wykonywania. Jest napisany w C, skompilowany przy użyciu kompilatora CL VS2008 działającego w trybie wydania. Działa na procesorze Intel i5 z 4 GB pamięci RAM (średnia wykorzystania 60%, nigdy powyżej 70%). Kiedy ustawię koligację procesu do jednego procesora (w tym przypadku 1/4 "CPU", 2 rdzenie po 2 wątki każdy), GUI używa 100% tego dedykowanego procesora przez około 2 minuty. Moja aplikacja interfejsu wykorzystuje od 60 do 80% procesora przez około 5 minut. Używam zakładki Windows Performance po wykonaniu `CTRL`+`SHFT`+`ESC`. \---EDYTUJ--- Odkryłem, że wywołania bazy danych (jest kilka konkretnych) są często wywłaszczane przez dłuższy czas (zwykle 5 razy wolniej). Korzystając z Process Explorer udało mi się dowiedzieć, że każdy program zużywa dokładnie taką samą ilość czasu procesora -> prowadząc do mojego wniosku o wywłaszczaniu. Dla każdego, kto nie wie o tym narzędziu, pobierz Process Explorer z SysInternals, bardzo przydatne. \---EDYTUJ--- Odkryłem, że GUI otwiera pojedyncze statyczne połączenie z bazą danych. Mój interfejs tego nie robi, co prowadzi do otwierania i zamykania połączenia tysiące razy. Otwarcie go raz na całe życie sprowadziło procesor do 100%.


title: Jakie są problemy z wprowadzeniem const w stylu C++ do języka?

text: Interesuje mnie idea „const” w stylu C++, a nie tego konkretnego wykonania (jak odrzucenie „const”). Weźmy na przykład C# -- brakuje w nim const podobnego do C++, a powodem tego są zwykłe -- ludzie i czas. Tutaj dodatkowo wydaje się, że zespół C# przyjrzał się wykonaniu `const` w C++, marketingu CLR i miał już dość w tym momencie (zobacz dlaczego nie ma metody składowej const w c# i parametru const ; dziękuję Svick). Czy jeśli **my** pójdziemy dalej, czy jest coś jeszcze? Czy jest coś głębszego? Weźmy na przykład multi-dziedziczenie – jest zwykle postrzegane jako trudne do uchwycenia (dla użytkownika) i dlatego nie jest dodane do języka (jak problem z diamentami). Czy w **NATURZE** słowa „const” jest coś, co sprawia, że język lepiej tego unikać? Coś w rodzaju decydowania, czy `const` powinien być głęboki czy płytki (posiadanie kontenera `const` oznacza, że nie mogę dodać nowego elementu lub zmienić również istniejących elementów; co jeśli elementy są typu referencyjnego)? **UPDATE** : wspominając o C#, a tym samym tworząc perspektywę historyczną, interesuje mnie natura potencjalnych problemów `const` dla języka. _To nie jest wyzwanie języków. Proszę zignorować takie czynniki jak aktualne trendy czy popularność – interesują mnie tylko kwestie techniczne – dziękuję._


title: Czy kompilator Microsoft C (cl.exe) jest sterownikiem kompilatora czy kompilatorem?

text: `gcc` i `clang` są znane jako sterowniki kompilatora. Jako taki, plik wykonywalny `gcc` sam niczego nie kompiluje. Raczej wywołuje kompilator (`cc1`), assembler (`as`) i linker (`ld`) z odpowiednimi flagami, jeśli to konieczne. Czy ta konfiguracja jest prawdziwa również dla kompilatora Microsoft C, `cl.exe`? Czy rzeczywiście istnieje jakiś inny plik wykonywalny, który wykonuje kompilację? Zakładam, że przynajmniej asemblacja i linkowanie są wykonywane przez oddzielne pliki wykonywalne, ponieważ wiem, że `ml.exe` (znany jako MASM) i `link.exe` istnieją jako oddzielne pliki wykonywalne, więc prawdopodobnie `cl.exe` je nazywa.


title: Najlepsze praktyki odzyskiwania nazw użytkowników

text: Widziałem wiele informacji na temat najlepszych praktyk dotyczących radzenia sobie z utraconym hasłem na stronach internetowych, ale co z nazwami użytkowników? Czy istnieje standardowy sposób radzenia sobie z tym? Moim podstawowym pomysłem jest poprosić o e-mail użytkownika i wysłać nazwę użytkownika na ten e-mail. Zastanawiam się, czy coś bezpieczniejszego na wzór odzyskiwania hasła (pytania o wskazówki itp.) jest w porządku.


title: Obsługa dużych procesów internetowych

text: Pracuję nad nową funkcją dla witryny ASP.NET MVC. Czas realizacji jest obecnie dość długi, więc rozważam opcje. Funkcja pobiera arkusz kalkulacyjny Excela, przesyła go na serwer WWW. Następnie musi wybrać wszystkie wiersze i za pomocą Entity Framework wstawić wiersze do bazy danych. Każdy wiersz pasuje do wymaganego modelu encji. Obecnie przy zaledwie 50000 wierszy proces ten zajmuje trochę czasu i zakładam, że liczba wierszy wzrośnie w przyszłości. Mam tutaj kilka opcji przetwarzania i zastanawiam się, czy istnieje lepszy sposób na radzenie sobie z tym. Dwa pomysły, które mam przed chwilą, to 1) Przekazanie pracy do serwisu, który po zakończeniu wyśle użytkownikowi e-maila. Oczywistą zaletą jest to, że użytkownik nie musi otwierać tego okna przeglądarki. 2) Dodaj pasek postępu i przekaż aktualizacje usługi z powrotem do jquery/javacript, aby wykonać aktualizacje wizualne. Spróbuję skrócić czas, prawdopodobnie odsuwając zapytania od polegania na Entity Framework. Czasami procedury składowane są znacznie szybsze niż Linq To Entities, ale pomijając to, proces może nadal trwać dłużej niż kilka sekund, czego tak naprawdę nie chcę obciążać użytkownika. Czy ktoś może pomyśleć o innych/lepszych sposobach obsługi długotrwałych procesów w aplikacji internetowej? Czy istnieją jakieś najlepsze szkoły myślenia dotyczące radzenia sobie z takimi sytuacjami?


title: javascript – czy uważasz, że „prototyp” to to samo co „rodzic”

text: Uczę się JavaScript. Widzę, że z obiektem mogę użyć .prototype, czy można uczciwie powiedzieć, że w hierarchii klas/drzewa efektywnie używam „rodzica” (lub „przodka”), robiąc to? Czy klasa może mieć tylko 1 prototyp na raz, tak jak w Ruby? Nazwij to osobistą pracą domową, którą sam sobie zadałem.


title: Jakie konwencje lub frameworki istnieją dla MVVM w Perlu?

text: Używamy Catalyst do renderowania wielu formularzy internetowych w dużej aplikacji. Nie podoba mi się sposób, w jaki wszystkie dane formularza są myląco w dużym hashu w kontrolerze, zanim zostaną przekazane do szablonu. Wydaje się, że szablon jest pomieszany i niechlujny. Jestem pewien, że są prawdziwe wady, których nie opisałem właściwie... Czy są? Jednym z rozwiązań jest po prostu wybór konwencji dla hasha, np.: { defaults => { type => ['a', 'b', 'c'] }, input => { type => 'a' }, output => { message => "Znaleziono 2 widgety typu a", widgets => [ 'foo', 'bar' ] } } Innym sposobem jest przechowywanie danych strony/formularza jako atrybutów w klasie (ViewModel?) , i przekazać cały obiekt do szablonu, którego mógłby użyć w następujący sposób: <p class="message">[% model.message %]<p> [% FOREACH widget IN model.widgets %] Który sposób jest bardziej elastyczny do dużych aplikacji? Czy istnieją inne rozwiązania lub istniejące frameworki kompatybilne z Catalyst?


title: Czy można używać Pythona jako zamiennika powłoki?

text: Ostatnio przyglądałem się `shutil` i `podprocesom` w Pythonie... I zacząłem się zastanawiać: czy nie byłoby w porządku używać Pythona zamiast np. grzmotnąć? czego mi brakuje?


title: W jaki sposób umiejętności wykorzystywane w typowych pytaniach na rozmowie kwalifikacyjnej są stosowane w prawdziwej pracy?

text: W przypadku zadań deweloperskich aplikacji SQL i C# ankieterzy zwykle zadają pytania dotyczące przechodzenia drzew, wykresów i list połączonych przy użyciu czystego języka C i wskaźników. W ciągu 3 lat spędzonych w mojej pracy nigdy nie musiałem > znaleźć ścieżki do pierwszego węzła na prawo od danego węzła, który jest > wielokrotnością danego węzła, na przykład widzę, że te umiejętności mogą być wykorzystane w zadaniach, w których musisz pisać kompilatory, sterowniki i pracować nad jądrem systemu operacyjnego. Poza tymi, gdzie jeszcze są używane te umiejętności?


title: wzorzec mvc - podział modelu na warstwy dostępu do danych i logiki biznesowej

text: Miałam okazję go wypróbować i bardzo mi się podoba. Myślę o wykorzystaniu go we wszystkich moich przyszłych projektach. Chciałbym usłyszeć krytykę i opinie na ten temat. Zrobiłem trochę badań na ten temat i nie jestem pewien, czy widziałem takie podejście, ale jestem prawie pewien, że musiało to być wypróbowane przez bardziej doświadczonych ludzi i chciałbym uniknąć wszelkich pułapek co się z tym wiąże Idea jest taka, że model jest podzielony na: 1\. warstwa dostępu db (dal) 2\. warstwa logiki biznesowej (bll) 1. więc warstwa dostępu do bazy danych (idealnie) nie zawiera żadnej logiki innej niż logika dostępu do bazy danych - przygotowane zapytania, które po wywołaniu są dostarczane z parametrami, a które w razie potrzeby zwracają wyniki z bazy (w przypadku WYBIERZ zapytania). klasy te nie są testowane (jeśli nie jest do nich wstawiona logika), ponieważ nie zawierają żadnych poleceń if/for/while/throw... 2. warstwa logiki biznesowej zawierająca rzeczywistą logikę aplikacji. kontrolery nie widzą dal i dzwonią tylko do bll, który z kolei wywołuje dal w razie potrzeby. bl musi zostać przetestowany (używam testów jednostkowych), a ponieważ jest trzymany oddzielnie od dostępu do bazy danych, gdy testowana jest funkcjonalność tylko do odczytu, dostęp do bazy danych może być zaszyty za pomocą iniekcji zależności (utwórz alternatywę dla każdej klasy dal ze wszystkimi te same metody, ładuj je za pomocą metody fabrycznej na żądanie z bll i w zależności od tego, czy wywołanie pochodzi ze środowiska testowego, czy nie ładuje klasy mock lub 'rzeczywistej' oczywiście w przypadku funkcji zapisu (DELETE, INSERT) testowanie muszą zawierać wywołania db, więc w takim przypadku byłaby wywoływana klasa 'prawdziwa', a nie mock, ale może to być bardzo przydatne, jeśli system ma więcej odczytów niż pisz Twoja logika biznesowa jest oczyszczona z kodu dostępu do bazy danych, co poprawia czytelność, szczególnie w dużych metodach, które wymagają kilku wywołań do bazy danych. Ułatwia to utrzymanie kodu, a także pozwala na hermetyzację logiki dostępu do bazy danych, która może być wywołana z wielu dzwonki, które ch ułatwia również utrzymanie 2. ułatwia przełączanie baz danych w dowolnym momencie, co nie zdarza się często, ale jeśli tak się stanie, nie jest to łatwe, każdy, kto kiedyś musiał to zrobić punkt wiedzieć, o czym mówię 3. podczas testowania bll z klasami próbnymi, testy działają szybciej, ponieważ nie są wykonywane żadne wywołania do db. nie jest to zbyt znaczące, ale może pomóc, gdy intensywnie modyfikujesz niektóre funkcje i testujesz je po drodze. jednocześnie znacznie ułatwia testowanie wydajności „czystej logiki” oderwanej od wywołań db wady: 1. większe zaśmiecanie z powodu dodania do systemu całej nowej warstwy klas 2. nieco niższa wydajność z powodu dodanego wstrzykiwania zależności, które wymaga czasu, aby rozwiązać 3. podczas gdy pozorne klasy wykonują dobrą robotę, muszą być tworzone i utrzymywane, aby cały system był biurokratyczny. Czy czegoś mi brakuje? Wolisz system, który opisałem, czy stary, dobry, 3-warstwowy mvc i dlaczego? Nie jestem guru, wciąż odkrywam różne architektury, ale bardzo lubię tę i chciałbym usłyszeć, co mają do powiedzenia moi bardziej doświadczeni koledzy


title: Zapisywanie mapy danych w formacie XML zgodnie z formatem zdefiniowanym przez użytkownika

text: Muszę napisać mapę danych ciągu do dokumentu XML. Dokument XML ma określony format. Klucz wejścia określa, gdzie w dokumencie XML zostanie zapisana wartość. Poniżej znajduje się przykład (pseudokod, jeśli dotyczy); mapa = {"document_id": "123"; "document_type": "type_A"} Tworzy taki plik XML; <document> <document_id>123</document_id> <document_type>type_A</document_type> </document> Potrzebuję, aby format docelowego dokumentu XML (i miejsca, w którym zapisywane są w nim dane mapy) był konfigurowalny przez użytkownika. Na przykład; <node name="document"> <node name="document_id">${document_id}</node> <node name="document_type">${document_type}</node> </node> Czuję, że proponowane przeze mnie rozwiązanie byłoby skomplikowane i ponowne wynalezienie koła. Myślę, że musi być jakiś ustalony sposób, aby to zrobić, ale po przeszukaniu Internetu nie mogę go znaleźć. Czy ktoś może zaproponować, jak mogę osiągnąć to, co chcę zrobić?


title: Dostęp do zdalnego serwera z aplikacji komputerowej

text: Aplikacje internetowe (.jsp / Java) mają tę zaletę, że można je uruchamiać z dowolnej przeglądarki klienta, umieszczając pojedynczy adres URL w pasku adresu i gotowe. Jednak przeciętna aplikacja internetowa jest powolna, nieporęczna, a utrzymanie kodu za nią to piekło na ziemi. I odwrotnie, typowa aplikacja komputerowa (Java / c#) może mieć zgrabny interfejs, szybką reakcję, a kod za nią jest często bardziej uporządkowany, podzielony na sekcje i często przyjemnie się z nim pracuje. Czy istnieje sposób lub technika łączenia się ze zdalnym serwerem za pośrednictwem aplikacji komputerowej Java / c#, którą można dystrybuować na dowolny komputer z systemem Windows, która nie wymaga najpierw połączenia komputera ze zdalnym serwerem za pośrednictwem sieci VPN, jako oddzielnego procedura użytkownika? (Nazwy użytkowników / hasła / szczegóły połączenia będą oczywiście musiały być przechowywane w pliku konfiguracyjnym powiązanym z aplikacją). Zdalny serwer będzie hostował "wspólną" (?) bazę danych SQLServer i przypuszczam, że prawdopodobnie jakieś pliki.


title: Programowanie pytania do rozmowy kwalifikacyjnej na Drzewach

text: Ostatnio zadano mi to pytanie z wywiadu w jednej z czołowych firm zajmujących się tworzeniem witryn internetowych. Niektóre puste szklanki wody są ułożone w następującej kolejności ![wpisz tutaj opis obrazka](http://i.stack.imgur.com/g0TS4.jpg) > Kiedy wlejesz płyn do pierwszej szklanki, jeśli jest pełna, wtedy dodatkowa ciecz > byłaby wlewana do szklanek 2 i 3 w równych ilościach. Gdy szklanka 2 jest > pełna, dodatkowa ciecz zostanie przelana do 4 i 5 i tak dalej. Biorąc pod uwagę N > litrów płynu i maksymalna pojemność każdej szklanki to 1 litr, podaj > ilość płynu obecną w dowolnej szklance, jeśli opróżnisz N litrów płynu > wlewając do szklanki przez wypełnienie funkcji getWaterInBucket(int N, int > X), gdzie X jest liczbą szyb. Na przykład, jeśli chcę mieć 4 litry > na początku i chcę znaleźć wodę w szklance 3, funkcja to > getWaterInBucket(4, 3) Jak mam to rozwiązać programowo? Zasadniczo próbowałem znaleźć rozwiązanie matematyczne (np. Trójkąt Pascala). Prowadzący wywiad powiedział, że nie, bo szybko będzie ciężko (cholera). Więc powiedziałem, że uznam to za drzewo, więc mogę dodać parametr taki jak ten getWaterInBucket(BTree root, int N, int X), a następnie wypróbować jakieś rekurencyjne rozwiązanie dla każdego poziomu, powiedział, że nie możesz dodawać parametrów ( cholera). Wszystko to doprowadziło mnie do wniosku, że przegapiłem coś oczywistego, jakąś sztuczkę, prawda? Wyglądało na to, że był bardziej zdezorientowany tym, jak go rozwiązać, niż ja, co nigdy nie jest dobre w wywiadzie.


title: Co mogę zrobić, aby poszerzyć swoją wiedzę jako uzupełnienie kursu Inżynieria oprogramowania?

text: Studiowałem w technikum i uczyłem się programowania m.in. przedmiotów związanych z informatyką i uzyskałem tytuł Technika IT. Zdecydowałem się na programowanie jako moją karierę zawodową i rozpocząłem etap w lokalnej firmie, aby dowiedzieć się więcej i rozpocząć karierę programisty. Na tym etapie programowałem więc w C#, VB.NET i VB6, ale programowałem głównie w VB.NET. Ten etap zakończyłem rok później i chociaż technicznie byłem lepszy, to czułem się trochę zagubiony w podstawach programowania i teorii. Mogłem zaprogramować proste rzeczy, zrobić kilka stron i uczyć się sam, ale nadal czułem, że to, co znałem, było słabo poparte brakiem niektórych algorytmów. Dostałem pracę w firmie konsultingowej i zajmuję się tworzeniem aplikacji webowych w ASP.NET MVC 1. Czuję, że dużo się tutaj nauczyłem, ale chciałbym nauczyć się dużo więcej we właściwych sposobach programowania i zwiększyć swoje możliwości opracowywanie algorytmów. Będę studiował Inżynierię Oprogramowania, ale mogę uczęszczać na kurs tylko w ciągu następnego roku. W tym roku chciałbym zrobić coś w domu, na przykład zrobić kilka projektów, które mogłyby mnie poprawić w programowaniu i logice oraz poczytać dobre książki na ten temat. Jakie ćwiczenia, projekty i/lub książki polecacie? Czekam na dobrą radę.


title: Próbuję wymyślić konwencję mapowania dla obiektów C#

text: _więc jest to C#, ale może mieć zastosowanie do dowolnego języka OO, w którym różne zestawy obiektów istnieją w różnych warstwach aplikacji._ Próbowaliśmy wypracować w zespole konwencję, w której umieścić kod podczas mapowania obiektów w jednym warstwy do obiektów w innej warstwie. Na przykład; mapowanie obiektu transferu danych na obiekt usługi używany przez usługę WCF lub coś podobnego. Mam następujące metody, które widziałem w użyciu i próbuję zdecydować, która byłaby preferowana przez kogoś nowego, kto patrzy na kod i która z nich najlepiej pasuje do naturalnych idiomów C#. Te przykłady używają AutoMappera do mapowania obiektu **Foo** na obiekt **Bar** , ale dotyczy to dowolnej struktury mapowania lub po prostu ręcznego tworzenia Bar z Foo za pomocą inicjatora obiektu. Oba te obiekty reprezentują te same dane, ale znajdują się w różnych zestawach: 1) Konstruktor na **Bar** public class Bar { public Bar(Foo foo) { Mapper.Map(foo, this); } } 2) Metoda fabryczna na **Bar** public class Bar { public static Bar CreateFrom(Foo foo) { return Mapper.Map<Bar>(foo); } } 3) Metoda na **Foo** zwracająca **Bar** public class Foo { public Bar GetBar() { return Mapper.Map<Bar>(this); } } 4) Jawny operator konwersji typu na **Foo**, aby można go było rzutować na **Bar** public class Foo { publiczny statyczny operator jawny Bar(Foo foo) { return Mapper.Map<Bar>(foo); } } 5) Niektóre implementacje wzorca fabryki public class BarFactory : IFactory<Bar> { public Bar Create(Foo foo) { return Mapper.Map<Bar>(foo); } } 6) Po prostu robisz to w kawałku kodu, którego potrzebujesz w public void SomeMethod() { Foo foo = fooRepository.GetFoo(); //Potrzebuję, żeby był to bar... Bar bar = Mapper.Map<Bar>(foo); } **Zastrzeżenie:** Szkoda, że nie użyłem AutoMappera w tym przykładzie. Wyobraź sobie, że "AutoMapper" tutaj brzmi "IMappingProvider" lub "IObjectConverter" lub coś takiego


title: Algorytm mapowania oparty na wadze

text: Piszę automatyczne przydzielanie zadań użytkownikom. Każdy użytkownik ma wagę (liczbę całkowitą), a zadania powinny być rozdzielone między użytkowników zgodnie z ich wagami. Na przykład mam 10 zadań i Użytkownika A o wadze 5, Użytkownika B o wadze 3 i Użytkownika C o wadze 2. Funkcja mapowania powinna przypisywać Użytkownikowi A 5 zadań, B 3 zadania, C 2. Ten przykład jest bardzo prosty, ale nie jest to takie proste, jeśli chodzi np. o 34 użytkowników i 230 zadań. Czy jest jakiś znany algorytm, którego powinienem szukać?


title: Jakie błędy programistyczne popełniają najczęściej programiści PHP w Javie?

text: Jestem bardziej praktykowany w PHP niż w Javie, a kiedy używam Javy, patrzę na to z perspektywy PHP. Może to powodować kłopoty, więc chciałbym wiedzieć, jakie są najczęstsze błędy programistyczne, które programiści PHP popełniają w Javie?


title: MS-Access do konwersji SharePoint?

text: Od czasu do czasu pracuję jako wolontariusz z organizacją non-profit. Moim głównym obszarem specjalizacji są ASP.NET, C# i SQL. Obecnie w swoich codziennych operacjach w dużym stopniu polegają na bazie danych programu Access. Jeden z ich specjalistów od technologii szukał SharePoint jako punktu migracji dla swojej bazy danych Access, aby lepiej obsługiwać wiele lokalizacji. Niestety, w większości nie znam Sharepointa. Chociaż to, co słyszałem, nie wydaje się promować wykorzystania Sharepointa jako bazy danych. Podstawą mojego pytania jest to, jakie są wyzwania związane z migracją lub nawet współistnieniem tych dwóch systemów? A czy to w ogóle dobry pomysł?


title: Jaki wpływ mają języki skryptowe na młodszych programistów?

text: Niedawno rozmawiałem z jednym z moich nauczycieli. Dyskutowaliśmy o wpływie prostszych **języków skryptowych** (takich jak Python czy Ruby) na młodszych programistów. Twierdził, że języki skryptowe powodują niechlujne techniki kodowania, ponieważ początkujący nie rozumieją, co dzieje się „pod maską”. Przytoczył również inne przykłady tego, jak języki skryptowe często powodują, że programista zaniedbuje obawy dotyczące wydajności, zarządzania pamięcią, złożoności operacyjnej itp. Twierdziłem, że języki niższego poziomu mogą być dla niektórych za dużo i mogą się poddać, zanim rozwiną pasję do programowania. Kiedy zacząłem uczyć się mojego pierwszego języka programowania (C), dotarłem do wskaźników i zrezygnowałem, ponieważ pojęcia były zbyt trudne (na moją obronę miałem tylko 14 lat). Gdyby nie Java, być może nie zostałbym programistą! Gdybym zaczął od prostszego języka, a potem kopał głęboko, czuję, że bym się nie poddał i nauczyłbym się tyle, ile zacząłem od C. Zajęcia kończyły się, zanim którakolwiek ze stron została w pełni zbadana. * * * Do tego momentu nauczałem, że początkujący powinni zacząć od języków skryptowych, a następnie kopać głęboko; ale po tej dyskusji zacząłem się zastanawiać, czy to błędne myślenie. > Jaki wpływ mają więc języki skryptowe na młodszych programistów?


title: Jaka technologia jest potrzebna do stworzenia usługi przesyłania strumieniowego wideo na żywo?

text: Jestem ciekaw, jaka technologia jest potrzebna do stworzenia serwisu takiego jak stageit.com i livestream.com. Jaki sprzęt i oprogramowanie, poza kamerą i mikrofonem, łączy komputer nadawcy z komputerem widza?


title: Podejście do porządkowania danych produkcyjnych

text: Jeśli zamierzasz napisać zestaw programów do przechowywania danych produkcyjnych, w jaki sposób możesz zapewnić prawidłowe działanie programu? Nie możemy przechowywać danych na podstawie czasu ich utworzenia. Usuniemy dane tylko wtedy, gdy ich data generacji jest starsza niż 6 miesięcy. Ale data wygenerowania nie jest równa znacznikowi czasu pliku, zamiast tego pytamy bazę danych o datę wygenerowania relavent. Jeśli zaimplementujemy logikę, aby porównać datę wygenerowania i datę dzisiejszą, kto może być pewien, że logika nie zawiedzie przy jakiejś szczególnej okazji? Może za bardzo się tym przejmuję, ale jeśli chodzi o usuwanie danych produkcyjnych, trzeba być ostrożnym.


title: Standardowy sposób generowania prototypów HTML?

text: Kiedyś pobierałem pliki PSD i generowałem z nich prototypy HTML, które mają być dokładną repliką tych PSD. Proces, który podążam, jest najprostszy, polegający na generowaniu **zwykłych stron HTML** dla każdego pliku PSD. Ale widziałem kilka prototypów generowanych z **załączeń po stronie serwera** (takich jak strony PHP). Zaletą korzystania z dołączania po stronie serwera jest to, że nie musisz powtarzać nagłówka, stopki i paneli bocznych dla każdej strony. Ale w tym przypadku każdy, kto chce uruchamiać strony, musi skonfigurować serwer, a następnie uruchomić te strony na serwerze. Chcę wiedzieć, jakie są zalecane praktyki generowania prototypów? A jakie są generalnie kroki podejmowane w przypadku dużych projektów?


title: Indeksowanie bazy danych

text: Nie znam się na bazach danych, a teraz próbuję zrozumieć mechanizm indeksowania. Z tego, co wiem, w RDBMS indeksowanie kolumny przyspiesza wyszukiwanie według tej kolumny. Odnosi się to również do potrójnych sklepów, tylko tam indeksy zakładają, że będziesz szukać (na przykład) głównie według tematu, potem według obiektu i tak dalej. Nie jestem pewien co do RDBMS, ale w potrójnych sklepach można zdefiniować więcej niż jeden indeks, pozwalając sklepowi wybrać najlepszy indeks dla każdego zapytania (mam nadzieję, że dobrze to zrozumiałem). Naturalnie pojawia się pytanie: dlaczego nie dodać wszystkich możliwych indeksów do potrójnego sklepu, a rozszerzając na RDBMS, dlaczego nie robić indeksów na każdej kolumnie (zakładając, że nie jestem zbyt leniwy)?


title: Jaka jest właściwa struktura testowania pakietów zawierających pakiety w Pythonie?

text: Jaka jest preferowana struktura pakietu testowego dla pakietów zawierających podpakiety: ### Testy w podpakietach? a/ __init__.py b.py c/ __init__.py cc.py test/ __init__.py test_cc.py d.py test/ __init__.py test_b.py test_d.py Ta struktura sugeruje, że każdy podpakiet jest spójną jednostką, która może być samodzielnie przetestowany (i być może później wydany). ### Podpakiety w testach? a/ __init__.py b.py c/ __init__.py cc.py d.py test/ __init__.py test_b.py test_c/ __init__.py test_cc.py test_d.py Ta struktura lepiej trzyma testy w jednym miejsce, ale nieco utrudnia przeprowadzenie testów dla konkretnego podpakietu. ### Coś innego?


title: Pozyskiwanie zdarzeń za pomocą magazynu do odczytu — także normalne tabele relacyjne?

text: Będę wdrażać Event Sourcing po raz pierwszy w projekcie hobbystycznym i mam naprawdę proste pytanie: czy magazyn zdarzeń powinien być jedynym miejscem do przechowywania, jeśli masz zdenormalizowany magazyn do odczytu? Czy też wiele systemów zachowuje swoją normalną relacyjną strukturę tabeli _oprócz_ magazynu zdarzeń (i magazynu do odczytu)? Rozumiem, że w aplikacji na tereny zdegradowane mogą być hybrydy.. ale co z terenami zielonymi? Pytam, ponieważ wszystkie artykuły / pytania dotyczące sourcingu wydarzeń odnoszą się bezpośrednio do sklepu z wydarzeniami. Ani jeden nie odnosi się do żadnej relacyjnej struktury tabeli. Obawiam się, że spójność ostateczna ma teraz wpływ na magazyn do odczytu i połowę magazynu do zapisu, jeśli mam uruchamiać komunikaty, aby dane zdarzeń były utrwalane w tabelach relacyjnych po zapisaniu do magazynu zdarzeń. Zakłada się, że miałem pozwolić na dystrybucję komunikatów w punkcie, w którym zapisano magazyn zdarzeń i zaktualizowano tabele relacyjne. Czy ktoś może mi to wyjaśnić? Przeczytałem to pytanie, ale nie do końca odpowiada to, o co proszę.


title: Jak przetestować funkcję generowania szablonu czkawki?

text: Jak mogę przetestować funkcję, która pobiera listę map i zwraca tabelę HTML z tymi samymi danymi w Clojure/Hiccup?


title: Wysyłanie e-maili ze strony serwera

text: Muszę przeczytać kilka twoich opinii. Zajmuję się tworzeniem aplikacji komputerowej (.net/winform) do przechowywania danych w jednym miejscu. Jest to używane przez kilku klientów, a dane są przechowywane w MS SQL Server (archiwum klient-serwer). Jedną z funkcji jest możliwość wysyłania powiadomień pocztą elektroniczną po spełnieniu warunków. Nigdy nie robiłem czegoś takiego, więc nie mogę znaleźć najlepszego sposobu na wdrożenie tego. Maile wysyłane są codziennie. Nie mają załączników ani ciężkiej zawartości. Tylko zwykły tekst. * Wysyłać maile bezpośrednio z SQL? Procedura składowana? * Zrobić osobną aplikację do obsługi tego? (Działa po stronie serwera). * Użyj harmonogramu zadania? (Windows Server) * Korzystasz z aplikacji innej firmy? Mam nadzieję, że ktoś wie, jaki jest najlepszy sposób, aby to zrobić. Dziękuję za czas i odpowiedzi.


title: Pytanie dotyczące licencji Dalvik + Java

text: To jest pytanie licencyjne dotyczące podstawowych bibliotek Dalvik i J2SE. W szczególności licencja dotycząca `java.util.concurrent.SynchronousQueue`. Nagłówek licencji klasy w źródle JDK stwierdza, że jest to tylko GPLv2 (patrz grepcode). Jednak ten sam plik w podstawowych bibliotekach Dalvik wydaje się podlegać wyłącznie licencji Apache 2 (patrz źródło Androida). Jak to jest możliwe? Nie sądziłem, że możesz wziąć źródło GPLv2 i zmienić licencję jako Apache 2. (To oczywiste, że zrobili: komentarz nad Java Doc mówi nawet „usunięto link do dokumentacji frameworka kolekcji”!) Pytam, ponieważ mam projekt GPLv3 i chciałby dołączyć pracę pochodną jakiegoś źródła z podstawowych bibliotek (albo Dalvik lub J2SE), ale opublikować go na GPLv3. Pomyślałem, że mógłbym to zrobić z Apache 2, ale nie z GPLv2. Wiem, że źródło klasy J2SE jest samo w sobie pochodną pracy ze źródła w domenie publicznej, ale zmiany w stosunku do oryginału są znaczne. (Oryginał jest dostępny na stronie gee.cs.oswego.edu, jeśli jesteś zainteresowany). Dlatego też źródło Androida jest tak naprawdę tylko kopią źródła J2SE, ale opublikowane na Apache 2 zamiast na GPLv2. Czy Google naprawdę może to robić?


title: Czy generowanie identyfikatorów klienta za pomocą generatora liczb losowych jest bezpieczne?

text: Wykonuję wywołania HTTP po stronie klienta, a serwer oczekuje, że podam klienta jednorazową. Musi mieć długość 4 bajtów. Planuję użyć tej kombinacji: base64(części adresu MAC + losowe bity generowane przez RNG) Biorąc pod uwagę, że protokół jest tworzony przez ekspertów (a więc jego bezpieczeństwo nie może być kwestionowane), czy moim zdaniem moje obliczenia nonce są akceptowalne?


title: W jaki sposób napięte terminy i presja planowania wpływają na całkowity koszt posiadania i czas dostawy?

text: Ojciec przyjaciela, który jest menedżerem ds. inżynierii oprogramowania, powiedział z naciskiem: „Najważniejszą przyczyną przekroczenia harmonogramu jest presja planowania”. Gdzie stoją badania? Czy umiarkowana presja planowania jest ożywcza, czy też menedżer, o którym wspomniałem, ma rację, czy się nie myli, czy też jest to kwestia „im większa presja w zakresie planowania, tym dłuższy czas dostawy i wyższy całkowity koszt posiadania?” Czy jest to jedna z tych rzeczy, w których idealnie inżynieria oprogramowania działałaby bez presji planowania, ale praktycznie musimy pracować z ograniczeniami rzeczywistych sytuacji? Wszelkie linki do literatury inżynierii oprogramowania byłyby mile widziane.


Jestem SDET na poziomie od średniego do wyższego szczebla i obecnie nie mam doświadczenia na stanowisku kierowniczym (chociaż mam nadzieję, że zdobędę je za około 5 lat). W pewnym momencie w odległej przyszłości (powiedzmy za 10-15 lat) chciałbym założyć własny startup technologiczny. Ze względu na wiele osobistych zobowiązań, nie mogę tak naprawdę poświęcić swojego wolnego czasu na planowanie, dlatego jest to bardziej cel długoterminowy, gdy mam więcej czasu, elastyczności i stabilności finansowej. Jak budować umiejętności, aby być odnoszącym sukcesy przedsiębiorcą oprogramowania? Jakimi rodzajami programów edukacyjnych powinienem się zająć?


title: Określ, w jaki sposób dwa obrazy powinny zostać połączone, aby uzyskać oryginalny obraz

text: Załóżmy, że mam dwa podobne obrazy w następujący sposób Obraz 1 (podstawa) ![img1](http://i.imgur.com/aOj6zjnl.png) Obraz 2 (docelowy) ![img2](http://i.imgur. com/Dsr2Qvc.png) Drugi obraz jest zasadniczo odmianą pierwszego obrazu, z wyjątkiem zielonego owalu na górze (w rzeczywistości użyłem image1 jako podstawy do stworzenia image2). Aby zaoszczędzić miejsce, zdaję sobie sprawę, że zamiast przechowywać dwa oddzielne obrazy, wystarczy zapisać różnicę, a następnie zapisać przesunięcie w, powiedzmy, pliku tekstowym. Więc poszedłbym arbitralnie wyciąć ten owal, który chcę, i skutecznie ogoliłem w sumie 2 KB, ponieważ moje obrazy są jednolitymi kolorami, więc są ładnie skompresowane. ![img3](http://i.imgur.com/MHF4sAl.png) Jest to (lub była?) powszechna technika używana w różnych aplikacjach, takich jak gry, do zmniejszania rozmiaru pliku, zwłaszcza jeśli masz jeden obraz z dziesiątkami wariacji, ale te wariacje pokrywają może 10% całego obrazu, więc jest dużo zbędnych danych. A jeśli pracujesz z pełnym 32bpp z dużą ilością kolorów wszędzie, może to dość szybko się sumować. **Problem** Problem, który mnie interesuje, jest następujący: biorąc pod uwagę obraz bazowy (zdjęcie 1) i przyciętą odmianę, połącz je ze sobą w taki sposób, aby uzyskać oryginalny obraz (zdjęcie 2) **Pomysły ** Jeśli przycięta odmiana zachowała swoją pozycję, po prostu usuwając wszystkie zbędne piksele, problem został już rozwiązany. Jednak nie zawsze tak jest. Moje podejście opiera się w dużej mierze na fakcie, że obraz docelowy pochodzi z obrazu bazowego. W powyższych przykładach różnica polega na pojedynczym zielonym owalu. Ponieważ niechlujnie wykadrowałem owal, nie starając się wyizolować go z tła, udało mi się ustalić, czy wykadrowany obraz „pasuje” na swoim miejscu. Na przykład, gdybym losowo umieścił przycięty obraz gdzieś pośrodku, mógłbym otrzymać coś takiego ![pic4](http://i.imgur.com/KlqU5Az.png) Teraz, gdy porównasz go z obraz bazowy, widać, że czerwone i niebieskie prostokąty są nieco odsunięte od siebie i jest to oczywiście niepoprawne wizualnie. Gdybym nie wiedział nic o otaczających pikselach (na przykład, gdyby wykadrowana odmiana była po prostu zielonym owalem), nie dałoby się odtworzyć docelowego obrazu bez ręcznego wchodzenia w niego. Mogę pośrednio określić ilościowo, jak "blisko" jest mój kandydujący obraz do obrazu docelowego, biorąc sumę różnic między wszystkimi pikselami między obrazem kandydującym a obrazem bazowym: jedyne piksele, które powinny być różne, to te, które składają się na odmianę ; pozostałe otaczające piksele, które akurat znalazły się w prostokącie, powinny być dokładnie takie same jak obraz bazowy i powinny wnosić różnicę 0. **Rozwiązanie podstawowe** Metoda brutalnej siły zasadniczo obliczyłaby sumę wszystkich pikseli różnice każdej możliwej pozycji, w której można umieścić przycięty obraz, a następnie zwróć wszystkie pozycje, które minimalizują tę sumę. W przypadku wystarczająco złożonych obrazów prawdopodobieństwo wystąpienia wielu wyników jest dość małe w porównaniu z prostymi obrazami. W pewnym momencie zdałem sobie sprawę, że muszę brać pod uwagę tylko piksele wewnątrz prostokąta przyciętego obrazu, ponieważ są to jedyne piksele w obrazie kandydującym, które zmieniają się w porównaniu z obrazem podstawowym, więc pozwala to uniknąć niepotrzebnych obliczeń. **Ulepszenia?** Mój pomysł wydaje się powolny. Cóż, prawdopodobnie zajmie to mniej niż minutę w przypadku obrazów o rozmiarze 1280x960 lub 1920x1080p, a nadal jest to o wiele szybsze niż robienie tego ręcznie. Czy moje podejście można ulepszyć? Na przykład, czy naprawdę muszę wypróbować każdą możliwą kombinację? Byłoby interesujące zobaczyć, czy istnieją również inne sposoby podejścia do problemu.


title: Wstrzykiwanie zależności dla zmiennych żądania w aplikacji internetowej

text: Pracuję aplikacji sieci web PHP 5.5/MySQL. Jeśli klasa zależy częściowo od jakichś globalnych zmiennych GET i POST dla swoich członków, czy powinienem odwoływać się do nich bezpośrednio z poziomu klasy, czy też powinienem mieć je jako argumenty w konstruktorze lub innej funkcji inicjującej? class mojaklasa { chronione $id; funkcja publiczna __construct() { $this->id = (int)$_GET['id']; } } $mojaklasa = nowa mojaklasa(); Lub class myclass { protected $id; funkcja publiczna __construct($id) { $this->id = (int)$id; } } $mojaklasa = nowa mojaklasa($_GET['id']); Jak frameworki MVC radzą sobie z tym problemem?


title: Wskazówki dotyczące własności wskaźnika

text: W niektórych bibliotekach, które widziałem, duży nacisk kładzie się na zmianę własności wskaźników, jak na przykład metoda klasy, która przydziela i zwraca wskaźnik do obiektu, jednocześnie zrzekając się jego własności wywołującym. Moje pytanie brzmi: jak byś zaprojektował, gdybyś musiał coś zakodować z ograniczeniem, że nigdy nie zostanie przeniesiona żadna własność wskaźnika?


title: zarządzanie projektami dla początkujących

text: Jestem nowy na kierunku programowanie i zdecydowałem się uczyć go na Uniwersytecie, ale mam pewne problemy z zarządzaniem projektami, zwykle zanim napiszę jakikolwiek kod, zabieram się za planowanie na papierze, a kiedy skończę Zacząłem kodować, ale zrozumiałem, że zwykle piszę tylko 20-30 procent od mojego planowania i dużo zmieniam swój kod, czy ktoś może mi polecić dobrą książkę lub blog o częstych pułapkach i kłopotach z planowaniem i zarządzaniem oprogramowaniem.


title: Sortowanie tablicy liczb z miejscami dziesiętnymi

text: Załóżmy, że mam tablicę wartości zmiennoprzecinkowych w następującym formacie: { 1.34, 1.15, 1.1, 1.2, 1.26, 1.10, 1.20, 1.17 } Załóżmy, że zostały one dostarczone przez dane wejściowe użytkownika (lub jakiś inny mechanizm), w którym użytkownik pobiera " 1.1” faktycznie oznacza „1.01” - co oznacza, że jest oddzielona od „1.10”. Użycie standardowego algorytmu sortowania (sortowanie bąbelkowe, sortowanie szybkie lub sortowanie specyficzne dla frameworka) da w wyniku tablicę, która powinna wyglądać podobnie do następującej: { 1.1, 1.10, 1.15, 1.17, 1.2, 1.20, 1.26, 1.34 } Jednak wymagana tablica wyjściowa byłaby następująca: { 1.1, 1.2, 1.10, 1.15, 1.17, 1.20, 1.26, 1.34 } Myślę, że sposobem na to będzie iteracja po tablicy przed sortowaniem i: * sprawdź, czy wartość ma N miejsc po przecinku * jeśli tak, podnieś do M (N + 1) miejsc po przecinku - dodaj wiodące 0? Doprowadziłoby to do powstania dwóch tablic, jednej zawierającej wartości z liczbą N lub M miejsc dziesiętnych (nieprzetworzone dane wejściowe użytkownika) i drugiej zawierającej wszystkie wartości z liczbą M miejsc dziesiętnych (dane wejściowe użytkownika „oczyszczone”). Co oznaczałoby, że posortowanie tablicy zawierającej wartości z M miejscami po przecinku dałoby wymagany wynik. Czy są na to inne sposoby? Szukam algorytmów szybszych lub z mniejszymi kosztami. Uważam to za typową domenę problemów i domyślam się, że istnieje wiele sposobów na rozwiązanie tego problemu. Jakie są inne algorytmy, które można wykorzystać do osiągnięcia wymaganego wyniku.


title: Czy warto uczyć się C++ dogłębnie TYLKO dla kariery w handlu z niskimi opóźnieniami?

text: Interesuję się handlem o bardzo wysokiej częstotliwości, a Java to język, który znam najlepiej. Zawsze miałem wrażenie, że będę musiał doskonalić swoje umiejętności C++, aby pracować w domenie ultrawysokiej częstotliwości (gra słów nie zamierzona), ponieważ wiele specyfikacji zawodowych wydawało się o to prosić. W innym miejscu w Internecie widziałem, jak ludzie komentują, że Java jest faktycznie preferowana, ponieważ znacznie łatwiej można znaleźć programistów Java. Jednak uznałem to za zły argument, ponieważ jeśli chodzi o ultra wysoką częstotliwość, musisz jak najszybciej odebrać zamówienie, a projektowanie systemu w oparciu o łatwość znalezienia programistów nie osiągnie tego, czego potrzebujesz pod względem opóźnień . Czy powiedziałbyś, że najlepiej byłoby skoncentrować się na Javie, czy też nieuniknione jest specjalizowanie się w C++, aby dostać się do tej kariery?


title: Czy niezależność platformy i różne paradygmaty odstraszają nowicjuszy?

text: Mam tylko 18 lat i jako takie moje początkowe przedsięwzięcia związane z programowaniem były typowymi, dominującymi w latach 2000. sprawami wysokiego poziomu, nasyconymi paradygmatem, z obsesją na punkcie niezależności platformy i „dobrych” wzorców projektowych. Jednak bawiłem się też innymi rzeczami. Rzeczy takie jak emulator BBC Micro, język asemblera GAS i NASM oraz całkowicie skoncentrowany na UNIX-ie nieprzenośny kod C. Po zabawie z nimi doszedłem do wniosku, że większość z tych nowoczesnych wzorców projektowych, „czystych” paradygmatów i obsesji na punkcie niezależności platformy jest prawdziwym odwróceniem uwagi od rzeczywistego pisania zabawnego kodu. Jasne, te rzeczy są bez wątpienia ważne podczas pisania prawdziwych systemów. Tak, kodowanie, które jest „zabawne” jest prawdopodobnie niewielkim problemem w przypadku garniturów, ale czy to nie „zabawny” czynnik kodowania kierował najlepszymi programistami, z których niektórzy zarobili wtedy dużo pieniędzy, bez wątpienia zadowalając garnitury? Będąc w moim wieku, nie mogę komentować lat 80-tych. Mimo to, domyślam się, że w tamtych czasach było znacznie mniej debat na temat wyboru języka, wyboru platformy i paradygmatów programowania na komputerach PC. Wiem, że możesz uzyskać ROMy językowe dla rzeczy takich jak BBC Micro, ale czy nie wszyscy po prostu kodowali w BASIC i ASM? Domyślam się, że były też wojny o „Spectrum vs C64”, ale domyślam się też, że ludzie w rzeczywistości dostawali tyle, na ile pozwalał im ich budżet. Na marginesie, dlatego nie sądzę, aby Raspberry Pi wystartowało. To nie brak sprzętu stanowi dziś problem młodych ludzi; to chwiejny stos złożoności, aby robić podstawowe rzeczy, które były o wiele prostsze w dawnych czasach. Naprawdę nie tęskniłem za dynamiczną stertą i OOP na poziomie języka, kiedy bawiłem się emulatorem BBC, czułem się trochę wolny. Oczywiście to uczucie nie byłoby skalowalne dla programu o nowoczesnych proporcjach, ale dla małej gry jest bardziej satysfakcjonujące. **Too Long to Read:** W każdym razie to właśnie uosabia mój punkt widzenia: z tego, co pamiętam, możesz narysować linię na BBC Micro jedną, może dwiema liniami kodu. Zrobienie tego samego za pomocą C++ z WinAPI i DirectX to żart, to samo dotyczy OpenGL i dowolnego przenośnego API okienkowego, choć w mniejszym stopniu. Nawet na takich rzeczach jak XNA jest sporo elementów frameworka do przesiania, aby zrobić trywialne rzeczy. Opakowanie też jest trudniejsze; z tego, co zbieram na starych komputerach, po prostu skopiowałeś swój wynik końcowy na taśmę i pozwoliłeś komuś innemu uruchomić go na tej samej platformie. Teraz musisz grzebać w niekończących się niezgodnościach DLL, instalowaniu brakujących środowisk wykonawczych, radzeniu sobie z abstrakcjami, które nie są wystarczająco szybkie w niektórych konfiguracjach itp. Czy współczesny pociąg myśli w zakresie programowania stworzył nieprzeniknioną barierę wejścia dla początkujących?


title: Scala - nauka przez działanie

text: pochodzący z symfony PHP-framework (z Apache/MySQL) Chciałbym zagłębić się w język programowania Scala. Prześledziłem już kilka samouczków i rzuciłem okiem na Lift and Play. Java też nie jest mi obca. Jednak przeszłość pokazała, że najłatwiej nauczyć się rzeczy po prostu je wykonując. Obecnie w mojej firmie mamy małą - głównie opartą na ajaxie - aplikację zbudowaną na symfony. Moim pomysłem jest zbudowanie małego projektu podobnego do tego, który może trafić do produkcji w przyszłości. Aplikacja powinna cechować się: * wysoką skalowalnością i wydajnością * serwerem zaplecza * interfejsem sieciowym * i klientem GUI. Gdy myślę o tym, pojawia się wiele pytań. Po pierwsze: Jaki jest najlepszy sposób na stworzenie łatwej w utrzymaniu, ustrukturyzowanej podstawy? Czy najlepiej byłoby nawiązać komunikację opartą na gniazdach między serwerem/klientem pure-scala i uzyskiwać dostęp do tych danych przez Lift, czy też zbudować aplikację Lift służącą jako serwer i łączącą klienta gui (przez REST?) w lepszy sposób? Ponadto zastanawiam się, którą bazę danych wybrać. Jestem zaznajomiony z (My)SQL, ale czuję się jak głupiec w obliczu tych wszystkich rzeczy, takich jak NoSQL, MongoDB i wiele innych. Z góry dziękuję!


title: Minimalny zestaw krytycznych operacji na bazach danych

text: Projektując kod warstwy danych dla aplikacji, staram się określić, czy istnieje minimalny zestaw operacji na bazie danych (zarówno pojedynczych, jak i połączonych), które są niezbędne do prawidłowego działania aplikacji (tj. baza danych pozostaje w oczekiwanym stanie po każdym połączenie dostępu do danych). Czy istnieje sposób na określenie minimalnego zestawu operacji bazy danych (funkcji, transakcji itp.), które są krytyczne dla poprawnego działania aplikacji? Jak to znaleźć? Dziękuję bardzo!


title: Synchronizuj plik csv za pomocą nodejs

text: Istnieje zdalny plik csv, który jest aktualizowany co sekundę. Muszę go pobrać (na komputerze z systemem Windows) _ONCE_ i zawsze synchronizować plik lokalny ze zdalnym. Oczywiście pobieranie całego pliku za każdym razem nie wchodzi w grę. Muszę pobrać tylko zmiany.(coś w rodzaju rsync, rdiff-backup) Szukałem trochę, ale nie mogłem znaleźć sposobu, w jaki mogę to zrobić. Jestem nowy w nodejs i używam tej aplikacji jako okazji do poszerzenia moich umiejętności nodejs. Planuję również użyć nodejs i spakować go za pomocą node-webkit (https://github.com/rogerwang/node-webkit)


title: reprezentacja wyrażenia s dla c

text: Eksperymentując ostatnio z różnymi lispami (zwłaszcza clojure), zastanawiałem się, czy istnieją jakieś reprezentacje (podzbiorów) c oparte na wyrażeniach s, więc można użyć lisp/closure do napisania makr, a następnie przekonwertować drzewo s-expression c na czyste c. Nie proszę o kompilatory to-c lisp/scheme/clojure, ale więcej o używanie lisps do przekształcenia drzewa składni c. Niewiele tła, dlaczego zadaję to pytanie: naprawdę lubię niektóre makra clojure, takie jak makra wątków `->` `doto` itp. I czuję, że byłyby świetne również w środowisku innym niż FP.


title: Zamieszanie wstrzykiwania zależności

text: Myślę, że dobrze rozumiem, czym jest zasada odwrócenia zależności (DIP), moje zamieszanie dotyczy raczej wstrzykiwania zależności. Rozumiem, że celem DI jest oddzielenie części aplikacji, aby umożliwić zmiany w jednej części bez wpływu na inną, zakładając, że interfejs się nie zmienia. Dla przykładu mamy tę public class MojaKlasa(IMyInterface interface) { public MojaKlasa { interface.DoSomething(); } } interfejs publiczny IMyInterface { void DoCoś(); } Jak to jest var iocContainer = new UnityContainer(); iocContainer.Resolve<MojaKlasa>(); lepsza praktyka niż robienie tego //jeśli możliwe jest wiele implementacji, można tutaj użyć fabryki. Interfejs IMyInterface = new InterfaceImplementation(); var mojaKlasa = nowa MojaKlasa(interfejs); Być może brakuje mi bardzo ważnego punktu, ale nie widzę, co osiągnęliśmy. Zdaję sobie sprawę, że używając kontenera IOC mogę z łatwością obsłużyć cykl życia obiektów, który jest +1, ale nie sądzę, że jest to rdzeń tego, o co chodzi w IOC. _Edytuj_ Oto rozszerzony przykład: void Main() { IRepository repository = new AddRepository(); var maths = new PointlessMaths(repozytorium,5); Konsola.WriteLine(maths.Result); } publiczny interfejs IRepository { int DoSomething(int id); } public class AddRepository : IRepository { public int DoSomething (int id) { return id + 1; } } public class SubtractRepository : IRepository { public int DoSomething(int id) { return id - 1; } } public class PointlessMaths { public int Wynik {get;set;} public PointlessMaths(IRepository repozytorium, int id) { Wynik = repository.DoSomething(id); } }


title: Jak mogę dowiedzieć się, czy programiści w firmie są pasjonatami?

text: Przeczytałem pytanie "Jak mogę stwierdzić w wywiadzie, czy programista jest pasjonatem programowania?". Teraz zmagam się z odwrotnością: będę miał rozmowę kwalifikacyjną w firmie. Jak mogę się dowiedzieć, czy moi (prawdopodobnie) przyszli koledzy są pasjonatami, czy nie?


title: Jak sprawić, by moje programy komunikowały się ze sobą?

text: W zasadzie dopiero zaczynam programować. Problem, jaki mam z postępami polega na tym, że trudno mi się uczyć różnych rzeczy tylko ze względu na ich poznanie – lepiej radzę sobie, gdy jest problem do rozwiązania lub zadanie do wykonania, abym mógł uczyć się „w pracy”. Więc jestem zainteresowany rozpoczęciem jakiegoś ciekawego projektu. Znam podstawy Pythona, Javy, Matlaba i trochę C++, a także wiem wystarczająco dużo o mikrokontrolerach, aby diody LED mrugały itp. Rodzajem rzeczy, których szukam, jest na przykład skrobanie strony z prognozą pogody (za pomocą Pythona) i wyprowadzanie szansa na deszcz na wyświetlacz LCD lub program, który otwiera chrome i loguje się do facebooka, jeśli powiem "HAL, czas na facebooka", lub ogólniej program, który odczytuje wejście szeregowe/USB, szuka określonych sekwencji i wysyła instrukcje do innego programu, jeśli go znajdzie. Czy otwierasz jakiś wspólny strumień, w którym jeden program czyta, a drugi pisze? Co muszę przeczytać, aby zrobić to sam? Nie mam doświadczenia z linuksem ani terminalem linuksowym, ale patrzenie przez ramię sprawia, że podejrzewam, że ludzie tego właśnie używają. Czy to jest poprawne?


title: Metody testowania jednostkowego z logicznymi zależnościami od innych klas

text: Załóżmy, że mam interfejs deklarujący następującą sygnaturę metody: SearchResults SearchProducts(string type, string filter, string anotherFilter); Wewnątrz konkretnej implementacji tego, tworzę instancję klasy pomocniczej (nazywam ją `QueryBuilder`), zbudowaną w celu ułatwienia budowy silnie typizowanych zapytań wyszukiwania dla _specyficznej_ biblioteki wyszukiwania, której używam. Chcę przeprowadzić test jednostkowy `SearchProducts` (najlepiej przez szydzenie z konstruktora zapytań), co oznacza, że muszę oddzielić metodę od `QueryBuilder`. Jak właściwie to zrobić, gdy te dwie rzeczy są _logicznie powiązane_? To znaczy: * Nie jest właściwe przekazywanie `IQueryBuilder` do metody, ponieważ implementacja `IQueryBuilder` jest ściśle powiązana z implementatorem `ISearchProducts`, tj. typami wartości zwracanych przez metody `QueryBuilder` są specyficzne dla biblioteki używanej w konkretnym `SearchService`. * Nie jest właściwe przekazywanie instancji `IQueryBuilder` do konstruktora `SearchService` (przez DI lub bezpośrednio), ponieważ zakres _logiczny_ instancji konstruktora zapytań jest lokalny dla wywołania metody `SearchProducts` - jest on tworzony w metodzie, jego stan jest manipulowany przez dodawanie podzapytań, a pełne "zapytanie" jest wyodrębniane _dla tego wywołania `SearchProducts`_). Zatem biorąc pod uwagę powyższe, jaki jest właściwy sposób radzenia sobie z tym? Brzmi jak sprawa dla fabryki; jednak implementacja tej fabryki byłaby trywialna i wydaje się, że zdefiniowanie interfejsu fabryki i dodanie parametru konstruktora tylko ze względu na testowalność wydaje się nieco wymyślne. Czy to wskazuje na zasadniczą wadę w projekcie mojego interfejsu wyszukiwania? Jak właściwie oddzielić te rzeczy, aby można było testować zarówno usługę wyszukiwania, jak i implementacje konstruktora zapytań w izolacji?


title: Czy programiści powinni być wykwalifikowani w projektowaniu oprogramowania?

text: Istnieje faza analizy i projektowania cyklu życia oprogramowania. Czy programiści powinni być wystarczająco wykwalifikowani do wykonywania prac wykonywanych w tej fazie, takich jak rysowanie diagramów przepływu pracy, diagramów przepływu danych, ERD, UML i innych modeli? Widziałem kilka przypadków, w których programiści mogą bardzo dobrze kodować, mając jasne zrozumienie tego, co jest wymagane. Jednak gdy prosi się ich o zaprojektowanie systemu, czasami się zataczają.


title: Kiedy funkcja jest uważana za „obywatel pierwszej klasy” w języku programowania/platformie?

text: Widziałem wiele razy stwierdzenia typu: „Proszę, aby ta funkcja była obywatelem pierwszej klasy w takim a takim języku/platformie”. Na przykład mówi się o wyliczeniach w C#/.net. Kiedy więc funkcja jest uważana za „obywatel pierwszej klasy” w języku programowania/platformie?


title: Zaleta używania __attribute__((aligned())))

text: Znalazłem w więcej niż jednym programie SIMD instrukcję `__attribute__((aligned(16)))` . Kiedy szukałem wyjaśnienia, znalazłem > Słowo kluczowe **atrybut** pozwala określić specjalne atrybuty > zmiennych lub pól struktury. Podobno zmienne mają atrybuty. Czy te atrybuty są specyficzne dla języka? jakie atrybuty może mieć zmienna? gdzie są przechowywane te atrybuty? Odnośnie tematu wyrównanego (16), znalazłem to > powoduje, że kompilator alokuje [zmienną] na granicy 16-bajtowej Ale czy jest to obowiązkowe dla zmiennych SIMD (na przykład ** m128i) do wyrównania na 16 bajtach ? Jeśli tak, przypuszczam, że jest to powód, dla którego używamy __attribute** ((aligned(16))) w ten sposób: int a[16] __attribute__((aligned(16))) = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 }; __wektor ze znakiem int *va = (__wektor ze znakiem int *) a;


Jaka powinna być maksymalna długość funkcji? A czy są przypadki, które są od tego wyjątkiem?


title: jak pracować z web designerem?

text: Niedawno rozpocząłem swój pierwszy profesjonalny projekt i zatrudniłem projektanta stron internetowych do wykonania layoutu. Moje pytanie brzmi, jak mogę zsynchronizować pracę z projektantem? Obecnie nasz proces wygląda następująco: 1. projektant tworzy szablon 2. wysyła go do mnie pocztą 3. przeglądam, edytuję i zgadzam się 4. projektant koduje html i odsyła go do mnie pocztą i tak dalej dla każdego Problem polega na tym, że czasami otrzymuję bardzo rozczarowujący kod html i jestem zmuszony, aby projektant przerobił dużo pracy. Czy istnieje sposób na stworzenie sieci, dzięki której będę mógł monitorować jego pracę i komentować w trakcie pracy? Wiem, że to głupie pytanie, ale jestem pewien, że musi istnieć do tego mechanizm. :D


title: Czy powinniśmy upierać się przy pracowniku, który po wielu latach nadal pisze zły kod?

text: Zadaję to pytanie programistom C++, ponieważ: a) Tylko programista C++ może ocenić techniczne zalety przykładów; b) Tylko programista wyczuje temperament innego programisty, który pisze taki kod. HR i dyrektorzy zdają sobie sprawę, że istnieje problem po prostu dlatego, że widzą dowody w terenie. To moje wezwanie, czy damy programiście więcej czasu. Wiele błędów jest na bardzo podstawowym poziomie - moje pytanie (do programistów) brzmi, czy ktoś, kto twierdzi, że jest starszym programistą C++, powinien mieć wątpliwości na podstawie próbek ich obecnego kodu. Nie-programiści - nawet ludzie spoza programowania w C++ - nie mogą tego osądzić. Na początku przydzielono mi zadanie zarządzania programistami w dobrze ugruntowanej firmie. Mają jednego programistę, który specjalizuje się w całym ich kodowaniu C++ (od zawsze), ale jakość pracy jest fatalna. Przeglądy i testy kodu ujawniły wiele problemów, z których jednym z najgorszych są wycieki pamięci. Deweloper _nigdy_ nie testował swojego kodu pod kątem wycieków i odkryłem, że aplikacje mogą przeciekać wiele MB w ciągu zaledwie minuty użytkowania. Użytkownicy zgłaszali ogromne spowolnienia, a jego zdaniem „to nie ma ze mną nic wspólnego – jeśli zamkną i zrestartują, wszystko będzie dobrze”. Dałem mu narzędzia do wykrywania i śledzenia wycieków i siedziałem z nim przez wiele godzin, aby zademonstrować, w jaki sposób używane są narzędzia, gdzie występują problemy i co zrobić, aby je naprawić. Jesteśmy 6 miesięcy na torze i przydzieliłem mu napisanie nowego modułu. Sprawdziłem go, zanim został zintegrowany z naszą większą bazą kodu i byłem przerażony odkryciem tego samego złego kodowania, co wcześniej. Część, którą uważam za niezrozumiałą, to to, że niektóre kodowanie jest gorsze niż amatorskie. Na przykład chciał mieć klasę (Foo), która mogłaby zapełnić obiekt innej klasy (Bar). Zdecydował, że Foo będzie zawierało odniesienie do Bar, np.: class Foo { public: Foo(Bar& bar) : m_bar(bar) {} private: Bar& m_bar; }; Ale (z innych powodów) potrzebował również domyślnego konstruktora dla Foo i zamiast kwestionować swój początkowy projekt, napisał ten klejnot: Foo::Foo() : m_bar(*(new Bar)) {} Więc za każdym razem, gdy domyślny konstruktora, wyciekł Bar. Co gorsza, Foo przydziela pamięć ze sterty dla 2 innych obiektów, ale nie napisał destruktora ani konstruktora kopiującego. Tak więc każda alokacja Foo faktycznie powoduje wyciek 3 różnych obiektów i możesz sobie wyobrazić, co się stało, gdy Foo zostało skopiowane. I – jest tylko coraz lepiej – powtórzył ten sam schemat na trzech innych zajęciach, więc nie jest to jednorazowa wpadka. Cała koncepcja jest błędna na tak wielu poziomach. Czułbym się bardziej wyrozumiały, gdyby pochodziło od totalnego nowicjusza. Ale ten facet robił to od wielu lat i przez ostatnie kilka miesięcy miał bardzo skoncentrowane szkolenia i porady. Zdaję sobie sprawę, że przez większość czasu pracował bez mentoringu i wzajemnej oceny, ale zaczynam czuć, że nie może się zmienić. Więc moje pytanie brzmi, czy nie chciałbyś się upierać przy kimś, kto pisze tak ewidentnie zły kod?


title: Jak oszczędzać podczas współpracy w czasie rzeczywistym

text: Chcę, aby wielu użytkowników edytowało ten sam dokument. Problem, z którym się spotykam, polega na tym, że gdy dołącza nowy użytkownik, może zobaczyć nieaktualny dokument. Jak mogę się upewnić, że nowi użytkownicy otrzymają najnowsze zmiany? Kilka rozwiązań, o których pomyślałem: * Oszczędzaj na każdej zmianie. Nie podoba mi się to rozwiązanie, ponieważ spowalnia działanie interfejsu użytkownika i obciąża db. * Gdy dołącza nowy użytkownik, wyzwalaj zapisywanie na wszystkich innych klientach. Po zapisaniu innych klientów wczytaj dokument. Przy tym wciąż może być niespójność. Wszelkie inne sugestie byłyby pomocne. **AKTUALIZACJA:** Po zapoznaniu się z sugerowanym rozwiązaniem, Google Realtime API, dowiedziałem się, że: 1. Użytkownicy Twojej aplikacji muszą mieć Dysk Google i dać Ci dostęp do swojego dysku. Może to w najlepszym razie przedstawiać niezręczny przepływ interfejsu użytkownika lub uniemożliwić użytkownikom, którzy nie mają Dysku Google, korzystanie z funkcji czasu rzeczywistego. 2. Wszystkie ustawienia udostępniania, które są wykonywane po Twojej stronie, muszą zostać zreplikowane dla dokumentu Google.


title: Koszt własności intelektualnej

text: Jeśli część oprogramowania na zamówienie została opracowana przez firmę, a własność intelektualna została zachowana przez firmę, która je napisała, ale teraz klient firmy programistycznej chce uzyskać ten kod źródłowy (i jego adres IP), ile powinien go to kosztować? Jak obliczyć uczciwy koszt zakupu tego źródła i IP? **AKTUALIZACJA** : Dodajmy, że oprogramowanie, o którym mowa, nie jest nikomu przydatne (w uzasadnionym celu), ponieważ jest bezpośrednio powiązane z procesami biznesowymi jednej firmy. Nie jest to coś, co może być później sublicencjonowane lub instalowane poza daną firmą. Istnieją linki do usług stron trzecich (ale były to istniejące usługi, z którymi oprogramowanie na zamówienie musiało zostać zintegrowane w pierwszej kolejności).


title: Jeśli opublikuję swój kod źródłowy w witrynie publicznej, czy automatycznie stanie się to open source, czy też zachowam swoje prawa?

text: To dziwne pytanie, ale oto dlaczego: Jeśli napiszę jakąś aplikację JavaScript lub skrypt cli Perl/Python/PHP, każdy może zobaczyć kod źródłowy. Mogę nawet hostować swój kod na publicznej stronie hostingowej, takiej jak na przykład github. Będzie tak samo: każdy może zobaczyć kod. Ale czy to sprawi, że mój kod stanie się otwartym źródłem?


title: Zmienne sesji i właściwa implementacja

text: Czy jest jakiś inny powód do używania zmiennych sesji poza przechowywaniem wartości dłużej niż bieżące żądanie? Na przykład, czy zaleca się używanie danych sesji podczas przechowywania informacji w pliku w systemie plików, aby uniemożliwić jednemu użytkownikowi zapisywanie danych w pliku innego użytkownika? Rozumiem, co to jest zmienna sesji, ale nie jestem pewien, jak ją poprawnie zaimplementować.


title: Jaki jest limit poziomów zasobów REST API

text: Jak głębokie powinny być poziomy zasobów przy projektowaniu REST API? Na przykład; Jeśli mam następujące tabele bazy danych: * Firmy: ID, Nazwa * Pracownicy: ID, Nazwa, ID firmy * Zadania: ID, Nazwa, IDPracownika Gdy udostępniasz je za pomocą interfejsu API REST, może to wyglądać mniej więcej tak (identyfikator jest opcjonalny): * Firmy: GET /api/companies/{id} * Pracownicy: GET /api/employees/{id} * Zadania: GET /api/tasks/{id} Powiedzmy, że chcę pobrać wszystkich pracowników pracujących w firmie 1. Mógłbym zrobić coś takiego: GET /api/companies/1/employees, prawda? Wykonanie GET na /api/employees byłoby bezużyteczne, ponieważ nie chcesz zwracać wszystkich pracowników przechowywanych w bazie danych. Czy w tym przypadku zasób /api/employees powinien być używany tylko do pobierania indywidualnych danych o konkretnym pracowniku? Co jeśli chcę otrzymać zadania związane z pracownikiem? Adres URL powinien mieć postać: GET /api/companies/1/employees/123/tasks lub GET /api/employees/123/tasks. Jeśli nie chcesz, aby klienci mieli dostęp do pewnych zasobów, nie znając ich rodzica, jak zaprojektujesz swoje zasoby? Jeśli nie mówię wystarczająco jasno lub mam zbyt wiele pytań, daj mi znać.


title: Zalety aplikacji HTML w intranecie Windows

text: Przygotowuję prezentację dla mojego zespołu, w której wymieniono różne technologie, które możemy dziś wykorzystać w naszych aplikacjach biznesowych. Historycznie budowaliśmy aplikacje HTML (ASP i ASP.net) przez ostatnią dekadę i jako część wstępu chciałem wyjaśnić, dlaczego przeszliśmy z aplikacji Windows na HTML. Nasze środowisko to: * Aplikacje biznesowe (głównie OLTP) * Intranet * Tylko klienci Windows * Pełna kontrola nad konfiguracją klientów (wersja systemu operacyjnego/wersja przeglądarki/wdrażanie wtyczek...) Jedynym powodem, dla którego udało mi się znaleźć, jest to, że w późnych Lata 90., wdrożenie aplikacji klienckiej dla systemu Windows może skończyć się bałaganem (wiele różnych wdrożonych wersji, dll piekło...). Serwery WWW umożliwiały jednorazowe wdrożenie aplikacji i jednoczesne aktualizowanie wszystkich klientów. Ceną do zapłacenia była duża strata w łatwości obsługi, szybkości reakcji i złożoności dodanej do pracy programistycznej. Istnieją dziś alternatywy (ClickOnce, Silverlight...), ale wielu moich kolegów jest teraz całkowicie zaangażowanych w HTML i nowe technologie (Javascript/Ajax/Jquery/Css...). Jestem całkowicie przekonany, że HTML świetnie nadaje się do aplikacji internetowych. Moje pytanie brzmi: czy w tamtym czasie (późne lata 90.) istniały inne powody, aby przejść na HTML w intranetowym środowisku Windows niż tylko naprawianie problemów z wdrażaniem? (ponieważ było modne, to nie jest prawidłowa odpowiedź...) Z góry dziękuję


title: Najbliżej dopasowany plik?

text: Szukam sposobu na porównanie zestawu plików z danym plikiem, przy czym każde porównanie daje mi metrykę „zbliżenia”. Powinienem wtedy móc uporządkować na podstawie metryki, aby znaleźć najbliższy plik. Rozważałem użycie diff, ale afaik zapewnia to tylko tak lub nie, czy konkretna linia pasuje, co jest zbyt dużą skalą dla moich celów, ponieważ dla moich celów zmiana słowa w linii tekstu jest bliższa niż zupełnie inna linia, podczas gdy diff zwraca brak dopasowania w obu przypadkach. Czy byłbym w stanie efektywnie wykorzystać soundex w pliku zawierającym 100 lub więcej wierszy, czy jest lepszy algorytm? Czy istnieje również wskaźnik, który zapewniłby pozytywne dopasowanie, gdyby linie, które były podobne, miały drastycznie różne numery linii? Dziękuję


title: Jaka jest najgorsza książka o programowaniu, jaką kiedykolwiek przeczytałeś?

text: Jaka jest najgorsza książka związana z programowaniem lub techniczna, jaką kiedykolwiek przeczytałeś? Może to być dowolna książka, która w taki czy inny sposób może być połączona z programowaniem, o ile nie jest fikcją.


title: Jakie są alternatywy dla umów o stałej cenie lub umów na czas i materiały na rozwój oprogramowania?

text: Zwolennicy metodologii zwinnych sugerują podejścia, takie jak umowy wieloetapowe, umowy z docelowymi kosztami, umowy z harmonogramem docelowym, umowy o dzielonych świadczeniach i umowy o zmiennym zakresie. Czy dostępne są inne opcje i czy są jakieś studia przypadków lub świadome dyskusje na temat tych różnych podejść?


title: Rzeczy, które programiści robią przed fazą kodowania

text: Jestem nowym programistą, a podczas stażu mój szef poprosił mnie o stworzenie aplikacji, która pozwoli mu zarządzać zapasami. Coś małego, ale dla mnie bardzo wzbogacającego. Aplikacja działa, znalazł kilka błędów i problemów, ale je naprawiłem. To nie jest problem. Mój problem polega na tym, że kiedy pracowałem nad aplikacją, nie wiedziałem, co robię, więc wszystko było w nieładzie. Projekt zajął mi 2 miesiące, a inny programista powiedział, że może to zrobić w miesiąc lub mniej. To mnie zaskoczyło, więc chcę wiedzieć: **Jak profesjonalny programista planuje projekt przed rozpoczęciem rozwoju?**


title: Jak zaplanować zasoby i budżety o dużym zasięgu, korzystając z metodologii Agile?

text: Agile nie zachęca do projektowania z góry. Jest to dobre z punktu widzenia zarządzania wymaganiami i rozwoju oprogramowania oraz pozwala dostosować projekt do zmieniających się potrzeb biznesowych. Jak jednak można planować zasoby na daleką odległość, jeśli tak naprawdę nie wiesz, co zamierzasz zbudować, kiedy zaczynasz? Oczywiście, masz model koncepcyjny tego, co zamierzasz zbudować, ale nie masz żadnych mierzalnych szczegółów, na podstawie których można by określić, ile zasobów będziesz potrzebować do ukończenia projektu lub ile będzie to kosztować. Czy ktoś ma jakieś sugestie dotyczące planowania dalekiego zasięgu w zwinnym środowisku?


title: Czy yobibit naprawdę ma znaczenie?

text: Wikipedia wyjaśnia: > Yobibit to wielokrotność bitu, jednostka przechowywania informacji cyfrowych > poprzedzona standardowym mnożnikiem yobi (symbol Yi), przedrostkiem binarnym > oznaczającym 2^80. Symbol jednostki yobibit to Yibit lub Yib.1[2] 1 yobibit > = 2^80 bitów = 1208925819614629174706176 bitów = 1024 zebibitów[3] Prefiksy zebi i > yobi pierwotnie nie były częścią systemu prefiksów binarnych, ale > zostały dodane przez Międzynarodową Komisję Elektrotechniczną w sierpniu > 2005 r.[4] Teraz, co na świecie faktycznie zajmuje 1 208 925 819 614 629 174 706 176 bitów? Zawartość informacyjna znanego wszechświata? Myślę, że to myślenie przyszłościowe – może astrofia lub nanotechnologia, a nawet analiza DNA naprawdę będą wymagać tych rzędów wielkości. Jak myślisz, jak daleko to wszystko jest? Czy to naprawdę znaczące jednostki?


title: Pytania do recenzji kodu partnerskiego

text: Jestem w trakcie tworzenia krótkiej listy kontrolnej do recenzji kodu partnerskiego. Do tej pory wymyśliłem następujące... 1. Czy jest test jednostkowy? 2. Czy jest test integracyjny? 3. Czy rozumiesz kod, który przeglądasz? 4. Czy jest łatwy w utrzymaniu (prosty, solidny)? 5. Czy kod nie powiela istniejącej funkcjonalności? (Nie wymyślaj koła na nowo) 6. Czy kod jest zgodny z konwencją nazewnictwa (mojej firmy)? (nazwy zmiennych, nazwy klas testowych itp.) 7. Czy wszystkie funkcje, metody i klasy są udokumentowane? (Podsumowanie, parametry, komentarze itp.) Co myślisz o tej liście? Przegapiłem coś? Czy istnieje jakiś standard?


title: Korzystanie z różnych połączeń DB dla różnych grup użytkowników w ramach webowych

text: Projektanci baz danych budujący systemy korporacyjne zwykle przypisują różne zestawy uprawnień różnym użytkownikom DBMS. Mogą być tak ziarniste, jak to konieczne. Jednak z mojego doświadczenia wynika, że frameworki internetowe zwykle używają pojedynczego połączenia z DBMS, a uprawnienia są przydzielane i egzekwowane na poziomie frameworka, poprzez pewien rodzaj schematu kontroli dostępu. Połączenie z bazą danych używane przez framework ma pełne uprawnienia do bazy danych, ponieważ może wymagać tworzenia lub usuwania tabel, na przykład podczas instalowania lub usuwania rozszerzeń. Czasami istnieją podatne na ataki rozszerzenia frameworka, które mogą umożliwiać ataki SQL Injection. Rozszerzenia te są często tworzone przez strony trzecie, a nie przez twórców frameworka. Moje pytanie brzmi: **Jaka jest skuteczność zapewniania wielu połączeń DB z różnymi uprawnieniami dla różnych grup użytkowników frameworka webowego - jako środek bezpieczeństwa?** Na przykład połączenie dla administratora systemu może umożliwiać tworzenie i usuwanie tabel , ale połączenie dla użytkownika publicznego może umożliwiać tylko odczytywanie niektórych tabel. Nie byłby to zamiennik schematu kontroli dostępu we frameworku, ale jako dodatkowy środek przeciwko wstrzykiwaniu SQL. Czy to dobry pomysł, czy zupełnie niepotrzebny? Proszę wytłumacz.


title: Biorąc pod uwagę zestaw chipów VLSI, jak określić, które są dobre?

text: Mam następujący problem: > Biorąc pod uwagę chipy `n` [uwaga: to są chipy VLSI], z których większość jest dobrych >, musimy znaleźć jeden dobry chip. Jedyny test, który możemy zastosować, to > na parze żetonów, który odpowiada, czy oba żetony są dobre, czy oba są złe. Drugą częścią jest znalezienie dobrego chipa, jeśli niektóre testy mogą dać błędny > wynik. Ponadto wyniki są systematyczne, co oznacza, że jeśli para daje zły > wynik, zawsze da zły wynik. Pierwszy problem rozwiązałem za pomocą metody dziel i rządź, w której za każdym razem zmniejszam zestaw zadań do co najmniej połowy. Można to zrobić po prostu wykonując testy na n/2 różnych parach za każdym razem i utrzymując te pary, które odpowiadają TAK (tj. zarówno dobre, jak i złe). Nie jestem w stanie rozwiązać drugiej części problemu. Błędny wynik oznacza, że nawet jeśli dwa żetony są dobre lub złe, test może odpowiedzieć NIE. Należy również pamiętać, że odsetek błędnych testów jest bardzo niski. Jak mogę rozwiązać ten problem?


title: Projektowanie architektury opartej na wtyczkach - co usługa protokołu ma dostarczać wtyczce?

text: Zaczynam projekt hobbystyczny i jestem w trakcie projektowania jego architektury. Chciałbym, aby mój program był oparty na wtyczkach (nigdy wcześniej czegoś takiego nie robiłem), aby był rozszerzalny. Teraz staram się uchwycić konceptualnie, jak taka architektura jest tworzona. Ten artykuł w Wikipedii o wtyczkach mówi, że aplikacja hosta ma zapewnić usługę protokołu (między innymi) w celu ustalenia, w jaki sposób dane są wymieniane z wtyczką. Naprawdę nie rozumiem tego ciekawostki, co to znaczy? Jakie dane faktycznie wymagają wymiany? **EDYTUJ:** Żeby było jasne, nie szukam szczegółów implementacji, ale jasnego wyjaśnienia mechanizmu, który przedstawia artykuł w Wikipedii. W obecnej sytuacji nie mam pojęcia, jaki jest cel protokołu w aplikacji opartej na wtyczkach. Pomyślałem, że wtyczka może po prostu samodzielnie pobrać odpowiednie dane spoza aplikacji i zaprezentować je użytkownikowi, bez bezpośredniego angażowania aplikacji. Jaki byłby cel ustanowienia protokołu wymiany danych? Jest to aplikacja desktopowa, napisana głównie w Javie, a więc zorientowana obiektowo. Aplikacja w swoim rdzeniu zapewnia głównie interfejs dla wtyczek do rejestracji w aplikacji oraz menedżera wtyczek, który współdziała z wtyczką.


title: Używasz C++, ale nie używasz specyficznych funkcji języka, czy powinieneś przełączyć się na C?

text: W wolnym czasie rozwijam emulator NES jako hobby. Używam C++, ponieważ jest to język, którego najczęściej używam, najbardziej znam i najbardziej lubię. Ale teraz, kiedy zrobiłem pewne postępy w projekcie, zdaję sobie sprawę, że nie używam prawie żadnych specyficznych funkcji C++ i mogłem to zrobić w zwykłym C i uzyskać ten sam wynik. Nie używam szablonów, przeciążania operatorów, polimorfizmu, dziedziczenia. Więc co byś powiedział? powinienem zostać w C++, czy przepisać go w C? Nie zrobię tego, aby zwiększyć wydajność, może to być efektem ubocznym, ale pomysł jest taki, _dlaczego powinienem używać C++, jeśli go nie potrzebuję?_ Jedyne cechy C++, których używam, to klasy do enkapsulacji dane i metody, ale można to zrobić również za pomocą struktur i funkcji, używam new i delete, ale równie dobrze mogę używać malloc i free, a ja używam dziedziczenia tylko do wywołań zwrotnych, które można osiągnąć za pomocą wskaźników do Funkcje. Pamiętaj, to projekt hobbystyczny, nie mam terminów, więc nadgodziny i praca, która wymagałaby przepisania nie są problemem, mogą być również zabawne. Więc pytanie brzmi C czy C++?


title: Czy „kłusownictwo” jest akceptowalnym sposobem na pozyskanie wolontariuszy open source?

text: Powszechnie wiadomo, że firmy technologiczne często próbują rekrutować pracowników od konkurencji. Jednak czy powszechne jest, że projekty open source poszukują potencjalnych wolontariuszy z firm z podobnych branż? Załóżmy na przykład, że istnieje projekt edycji wideo typu open source, który naprawdę chce wystartować. Gdyby aktywnie poszukiwali wolontariuszy, wydawałoby się, że dobrym wyborem byłoby nawiązanie kontaktu z osobami z firm takich jak Adobe czy Sony. W obecnej pracy pracuję od prawie dwóch lat i często otrzymuję e-maile od rekruterów dla podobnych firm. Jednak ani ja, ani nikt inny, kogo znam, nie otrzymaliśmy zaproszeń do udziału w projekcie open source. To mówi mi, że taka praktyka jest rzadkością. Wiem, że istnieją kwestie prawne i etyczne, jeśli chodzi o „kłusowanie” pracowników, ale różnica polega na tym, że inżynier po prostu pisałby kod open source w swoim osobistym czasie, a nie odchodził z pracy. Moje pytania są następujące: 1. Czy koordynatorzy projektów open-source często rekrutują programistów z firm, które produkują podobne oprogramowanie? 2. Jeśli tak, czy są w tym jakieś problemy etyczne?


title: Czy robienie przerwy między zadaniami programistycznymi nie wygląda źle?

text: Od kilku lat pracuję na tym samym stanowisku programistycznym, ale kultura (lub brak odpowiedniej kultury) miejsca w końcu do mnie dotarła i dałem wypowiedzenie. Krótko mówiąc: szefowie stworzyli środowisko/kulturę, w której programiści nie mieli motywacji do tworzenia wysokiej jakości pracy. I nie tylko to, wszelkie próby poprawy rzeczy były aktywnie odrzucane przez kilka warstw zarządzania. W końcu stało się to bardzo stresujące. Czułem się, jakbym walczył z kimś na każdym kroku tylko po to, żeby wszystko zrobić dobrze, zamiast harować, jak zawsze to robiliśmy. Z tego powodu wydaje mi się, że od dawna nie nauczyłem się tam niczego nowego. A teraz martwię się, że moje umiejętności stają się coraz mniej istotne na rynku pracy. Tak więc, moim obecnym planem jest zrobienie sobie 3 miesięcy wolnego, aby otrząsnąć się ze stresu i zrobić kilka poważnych nerdingów. Chodzi o to, aby rozpocząć dwa lub trzy małe projekty, aby uczyć się i stosować nowe technologie/wzorce/narzędzia/itd. Zasadniczo, aby zrobić wszystko, czego nie miałem okazji robić w mojej poprzedniej pracy. **Pytanie:** Czy strzelam sobie w stopę, jeśli zrobię sobie 3 miesięczną przerwę między pracą? Czy zawsze jest źle mieć przerwę między pracami, nawet jeśli ten czas spędza się na doskonaleniu umiejętności? *** AKTUALIZACJA *** Skończyło się na 9 miesiącach przerwy. Znalezienie pracy w pobliżu domu okazało się trudniejsze niż się spodziewałem, ale chyba nikt nawet nie zauważył długiej przerwy w moim CV. Kiedy w końcu rozszerzyłem swoje poszukiwania również na pobliskie miasta, szybko znalazłem coś interesującego. Najlepsze jest to, że to nowe miejsce chętnie pozwala mi pracować z domu przez połowę czasu :)


title: JavaScript idiomy to, co kontra to ja

text: Od jakiegoś czasu piszę JavaScript i teraz widziałem kod używający idiomu var that = this; i var self = to; Służy do uzyskiwania dostępu do `this` poprzez zakres zamknięcia. W tym momencie `var self = this` wydaje się nieco bardziej powszechne. Moje pytanie brzmi, który z tych dwóch idiomów jest naprawdę konwencją? Skoro robią dokładnie to samo, czy są jakieś zalety/wady?


title: Algorytm Łowcy Małp - Pytanie do wywiadu

text: Pytanie zadane w wywiadzie: Jesteś myśliwym w lesie. Na drzewach jest małpa, ale nie wiesz gdzie i nie możesz jej zobaczyć. Możesz strzelać do drzew, masz nieograniczoną amunicję. Zaraz po strzeleniu w drzewo, jeśli małpa była na drzewie, upada i wygrywasz. Jeśli małpy nie było na drzewie, skacze (losowo) na sąsiednie drzewo (musi). Znajdź algorytm, aby uzyskać małpę w jak najmniejszej liczbie ujęć. **ROZWIĄZANIE:** Według mnie prawidłowa odpowiedź była w komentarzach, uznanie dla @rtperson: > Możesz wyeliminować tę możliwość, strzelając dwukrotnie do każdego drzewa > przesuwając się w lewo, co daje najgorszy przypadek O(2n). EDYCJA: ... czyli najgorszy przypadek > O(2n-1). Nie musisz dwukrotnie strzelać do ostatniego drzewa.


title: Jakie języki są najczęściej rozumiane „intuicyjnie” i mogą skorzystać na bardziej formalnym podejściu do nauki?

text: W prezentacji natknąłem się na Stwierdzenie „JavaScript to język, którego wszyscy używają, ale prawie nikt nie uważa za konieczne nauczenie się, jak to działa”. I rzeczywiście, niewielu ze znanych mi programistów potrafiłoby wyjaśnić koncepcję prototypu javascriptu lub dlaczego funkcje muszą być z tym „związane”. CSS wydaje się być kolejnym przykładem tego zachowania: każdy wie, jak umieścić „klasę” w elemencie i napisać styl `.myclass { ... }`, ale tylko nieliczni wiedzą nawet o zwinięciu marginesu. Moje pytanie brzmi: czy jest więcej tych języków, technologii, pojęć, które są tak powszechne, że nawet nie zauważamy ich jako czegoś, czego warto się nauczyć, kiedy ich używamy?


title: Czy istnieje zwinna technika zarządzania projektami do tworzenia innowacyjnych systemów oprogramowania?

text: Zajmuję się tworzeniem innowacyjnego oprogramowania. Rozwój jest innowacyjny, ponieważ nie wiemy, jak go rozwijać i jakiego algorytmu użyć do wdrożenia i nikt wcześniej tego nie zrobił. Proces składa się z kilku etapów studiowania książek/artykułów, proponowania algorytmów, pisania prototypów i porównywania wyników z rzeczywistymi danymi. Mamy nadzieję, że po kilku iteracjach dojdziemy do poprawnego systemu oprogramowania. Czy istnieje oprogramowanie do zarządzania projektami dla tego typu projektów?


title: Gdzie powinno odbywać się formatowanie daty we wzorcu MVC?

text: Załóżmy, że chcesz wyświetlić listę użytkowników w aplikacji internetowej, która musi obsługiwać niestandardowe formaty dat (w zależności od aktualnie wybranego języka interfejsu). Wydaje się, że możliwych jest kilka miejsc zastosowania formatu daty. Którego byś użył i dlaczego? * W modelu, na przykład wykonanie `DATE_FORMAT(user.birthdate, '%d/%m/%Y')` dla pól daty (przypuśćmy, że mamy bazę danych MySQL). * Na przykład na poziomie kontrolera (zakładając, że używamy PHP): $users = UserModel::getUsers(); // przegląda wyniki przed wyświetleniem, aby sformatować daty. // w strukturze $users musimy wiedzieć, które pola są datami, a które nie $users = MagicFunctionFormattingDates($users); $view = new View('jakiśSzablon'); $view->assign('users', $users); * Na poziomie widoku, na przykład (przypuśćmy, że używamy języka szablonowego takiego jak Smarty): {foreach key=keyitem item=row from=$users} <tr> {foreach key=keyfield item=field from=$row.fields} {* Tutaj $field powinno być obiektem lub tablicą asocjacyjną przechowującą jego „typ” (czy jest to data czy coś innego) *} <td>{MagicFunctionFormatting field=$field}</td> {/foreach} </tr> {/endforeach} Podobne i powiązane pytanie dotyczy terminów składania wniosków (np. w formularzu rejestracyjnym użytkownika). Gdzie powinna nastąpić konwersja dat: * W kontrolerze przetwarzającym i walidującym formularz, przed wywołaniem modelu? * W modelu?


title: Czy formularz zrzutu ekranu z prawnym dowodem kliknięcia jednego z pól wyboru?

text: Dostaliśmy prośbę od jednego z naszych klientów, a ponieważ nigdy wcześniej nie spotkałem się z taką prośbą, to nawet nie wiem od czego zacząć. Naszym klientem jest sieć uczelni, a my budujemy dla nich witrynę. Na tej stronie będzie m.in. formularz, który potencjalni kandydaci będą mogli wypełnić, aby uzyskać więcej informacji o studiach w jednej z uczelni. Gdy użytkownik wypełni ten formularz – w tym poda swój adres e-mail i/lub numer telefonu – odpowiednia uczelnia skontaktuje się z nim, podając odpowiednie informacje. Teraz, ze względów prawnych, klient prosi, aby ten formularz zawierał również pole wyboru, które potencjalny kandydat zaznacza, aby wskazać, że zgadza się na otrzymanie materiałów promocyjnych od tych uczelni. To oczywiście żaden problem. Ale tu pojawia się dziwna część prośby: szczegóły każdego wypełnionego formularza muszą być zapisane w niezawodny sposób. Najwyraźniej zapisanie wartości formularza w bazie danych - kolumna wskazująca, czy użytkownik się zgodził, czy nie - nie wystarczy, ponieważ DB można zmienić po wysłaniu formularza przez użytkowników. Nasz klient twierdzi, że inne portale uniwersyteckie tworzą zrzut ekranu wypełnionego formularza i zapisują go gdzieś w dedykowanym folderze, w sposób łatwy do znalezienia, na przykład nadając plikowi nazwę zawierającą imię i nazwisko użytkownika oraz datę i czas. Moje pytanie brzmi: czy słyszałeś o używaniu zrzutów ekranu jako metody udowodnienia, że użytkownik rzeczywiście wypełnił formularz? Czy istnieją inne metody, które są uważane za wiarygodne?


title: Czy licencja gifmerge jest zgodna z GPLv3?

text: Moje wątpliwości wynikają z tego zdania w warunkach dystrybucji GIFmerge: „To oprogramowanie może być swobodnie kopiowane, modyfikowane i rozpowszechniane bez opłat pod warunkiem, że niniejsza informacja o prawach autorskich zostanie zachowana w stanie nienaruszonym na wszystkich kopiach i zmodyfikowanych kopiach”. Zwłaszcza część "bez opłaty" jest tym, co mnie zastanawia. Czy jakiś ekspert może rozwiać moje wątpliwości? http://www.the-labs.com/GIFMerge/


title: Prywatne aplikacje na iOS i Android

text: Czy można tworzyć _prywatne aplikacje_ na iOS (iPhone/iPad) i Android? Przez „prywatne aplikacje” mam na myśli aplikacje, które _nie_ pojawiają się w publicznym sklepie z aplikacjami, ale mogą być pobierane i używane tylko przez wybranych klientów.


title: Jakie pytania należy sobie zadać podczas zbierania od klienta wstępnych wymagań aplikacji mobilnej?

text: Mówiąc ogólnie o **rozwoju aplikacji mobilnych**, szukam listy odpowiednich pytań, które należy zadać podczas wizyty u klienta, aby uzyskać wstępne wymagania, czyli to, co według nich będzie na końcu aplikacji. Załóżmy, że pomysł na aplikację mobilną jest dla (naszych) klientów czymś zupełnie nowym i nie bardzo zastanawiają się nad tym, co może i jak to robi, jedyne, co wiedzą, to to, że chcą mieć aplikację mobilną zainstalowaną na swoich telefonach, i powinni robić, co chcą. Załóżmy, że jestem niezależnym programistą aplikacji mobilnych i chcę poznać, co myśli klient i uzyskać wszystkie możliwe aspekty, które mogą mieć wpływ na ceny. To, czego naprawdę chcę, to lista pytań, takich jak: * Jakie są platformy. * Jak długo oczekujesz od nas realizacji projektu. * etc Oczywiście lista nie powinna/ nie musi być długa. Ponieważ aplikacje, które rozwija niezależny programista, nie są tak skomplikowane, a ludzie, którzy je zamawiają, nie przechodzą przez wiele szczegółów (ponieważ nie są wystarczająco techniczne).


title: Dlaczego większość funkcjonalnych języków programowania to także języki interpretowane?

text: Funkcjonalne/niefunkcjonalne i interpretowane/kompilowane to dwie różne kategorie, ale wydaje się, że języki programowania, które należą do tych kategorii, nakładają się na siebie. Czy to przypadek?


title: Dlaczego łączenie ma znaczenie (Python i SQLite3)?

text: Dlaczego kursor = connection.cursor() cursor.execute("...zwróć kursor.fetchall())zwróci oczekiwany niepusty wynik, podczas gdy connection.cursor().execute("...zwróć connection.cursor(). fetchall() zwraca pustą listę, a polecenie SQLite3 jest identyczne w obu przypadkach?EDIT 2014-02-19: Dodano ostatnią linię "...fetchall()" do próbek kodu.


title: Jeśli używam obrazów na licencji LGPL w moim projekcie oprogramowania typu open source, czy muszę używać licencji LGPL dla całego projektu?

text: ...albo czy mogę osobno licencjonować rzeczy w ramach projektu (np. images=LGPL, code=GPL). Od jakiegoś czasu jestem zdezorientowany i nie mogę znaleźć jasnej odpowiedzi.