title: Wersjonowanie milionów plików za pomocą rozproszonego SCM

text: Szukam możliwości wykorzystania gotowych rozproszonych SCM, takich jak Git lub Mercurial, do zarządzania milionami plików XML. Każdy plik byłby transakcją handlową, taką jak zamówienie zakupu, która byłaby aktualizowana około 10 razy w trakcie cyklu życia transakcji, dopóki nie zostanie „zrealizowana” i nie będzie więcej zmian. A przez „zarządzanie” mam na myśli, że SCM byłby używany nie tylko do wersjonowania plików, ale także do replikowania ich na inne maszyny w celu redundancji i transferu IP. Załóżmy, dla przykładu, że celem jest zapewnienie dobrej wydajności, gdyby obsługiwał wolumen zamówień, które Amazon.com twierdził, że osiągnął szczyt w grudniu 2010 r.: około 150 000 zamówień na minutę. Spodziewamy się, że system będzie rozłożony na wiele serwerów, aby uzyskać rozsądną wydajność. Planujemy również używać wyłącznie dysków SSD. Istnieje powód, dla którego nie chcemy używać RDBMS jako podstawowej pamięci masowej, ale jest to nieco poza zakresem tego pytania. Czy ktoś ma doświadczenie z pierwszej ręki z wydajnością rozproszonych SCM przy takim obciążeniu i jakie strategie zastosowano? Preferowane jest oprogramowanie typu open source, ponieważ produktem końcowym ma być również firma FOSS.


title: Jak mogę rozpocząć kod wysyłkowy?

text: Właśnie zacząłem uczyć się programowania przy użyciu LPTHW i wraz z rozwojem mojego poziomu umiejętności chciałbym rozpocząć wysyłkę kodu, niezależnie od tego, czy jest gotowy do wysyłki, aby wyrobić sobie nawyk ciągłego wysyłania kodu i nie obawiać się kod wysyłkowy. Czy istnieje przyjazny dla początkujących przewodnik po kodzie wysyłkowym?


title: Kto wynalazł schemat otpauth:// URI?

text: Wydaje się to naprawdę proste, ale kto wynalazł powszechnie używany schemat `otpauth://` (używany przez Google Authenticator i inne miękkie tokeny TOTP poprzez skanowanie kodów QR)? Gdy?


title: Dlaczego programista potrzebuje „natywnego” dostępu do Internetu?

text: ## Konfiguracja Mamy sytuację, w której programiści łączą się ze swoimi urządzeniami rozwojowymi za pośrednictwem terminali Citrix (zainstalowanych na ich laptopach), co przenosi ich do sesji Gnome (np. Linux), gdzie wykonują całe kodowanie. ## Problem Do tej pory programiści mieli dostęp do Internetu z tych środowisk Citrix + zainstalowaną przeglądarkę Firefox. Od teraz dostęp do Internetu [z tego środowiska] jest odbierany. Programiści nadal jednak mają dostęp za pośrednictwem przeglądarki IE9 (ściśle IE9) ze swoich laptopów. To oczywiście sprawia, że cały proces rozwoju jest znacznie mniej produktywny. Jednocześnie _niezwykle_ trudno jest wymyślić solidne wyjaśnienie, dlaczego produktywność cierpi z powodu przełączania środowisk (na tym samym laptopie) w celu korzystania z Internetu. ## Pytanie Zwracam się do społeczności SO, aby pomogła nam znaleźć te powody, które mogą przekonać decydentów do oddania dostępu do Internetu programistom [z systemu, na którym rozwijają].


title: Jak prawidłowo używać Redisa na dużym obiekcie?

text: Mam stosunkowo duży obiekt, który jest opakowaniem HashMap, który ma 200 wpisów K. To opakowanie HashMap po serializacji zajęłoby 67 megabajtów. Ponieważ ten duży obiekt jest wynikiem kosztownego parsowania z dysku, chciałbym przechowywać go w bazie danych w pamięci (czytaj Redis). Moje pierwsze podejście polega na serializacji tego obiektu do sekwencji bajtów, przechowywaniu tego jako pojedynczego wpisu o dużej wartości w Redis. Kiedy potrzebuję, przeczytam ten wpis, zdeserializuję go do oryginalnego dużego obiektu, aby przekazać go w moim programie Java. Ale samo przekształcenie tablicy bajtów w oryginalny duży obiekt zajęłoby 30 sekund. Uważam to za powolne. Co polecasz, aby to przyspieszyć? Oto kod do konwersji bajtu na obiekt public static <T> T deserialize(byte[] bytes, Class<T> clz) { try { ByteArrayInputStream bos = new ByteArrayInputStream(bytes); ObjectINputStream in = new ObjectInputStream(bos); return clz.cast(w.readObject()); } catch (Wyjątek e) e.printStrackTrace(); zwróć null; }


title: Czy mogę „po prostu” stworzyć własny typ mediów dla zastrzeżonej komunikacji internetowej/aplikacyjnej?

text: Przeczytałem to pytanie, ale nie odpowiada ono w pełni na moje. W powiązanym pytaniu OP pyta, co musi zrobić, aby zarejestrować swój niestandardowy typ nośnika. Nie potrzebuję tego. Jedyne, o co proszę, to to, że jeśli mam rację, zakładając, że technicznie, wszystko, co muszę zrobić, aby stworzyć niestandardowy typ mediów, to… no cóż… po prostu użyć go w mojej komunikacji? Zasadniczo chcę zrobić, aby moja strona internetowa oferowała pobranie pliku opisanego jako `application/x-my-custom-thing`. Na kliencie użytkownik ma pliki kończące się na `.my-custom-thing` ustawione jako otwierane z aplikacją, którą dostarczam. Tak więc powinno się zdarzyć, że kiedy użytkownik kliknie łącze, moja aplikacja otworzy się i odczyta plik oraz zrobi z nim różne rzeczy. Czy typy mediów są nawet odpowiednim przypadkiem użycia? A może powinienem "utworzyć" własny protokół w sensie `mojecustoming://example.com/plik-do-uzycia`? Czy to zadziała z każdą (dość nowoczesną) przeglądarką?


title: Czy używanie interfejsu tylko do kategoryzacji jest złą praktyką?

text: Na przykład: Załóżmy, że mam klasy „A”, „B”, „C”. Mam dwa interfejsy, nazwijmy je `IAnimal` i `IDog`. „IDog” dziedziczy po „IAnimal”. „A” i „B” to „IDog”, podczas gdy „C” nie, ale jest to „IZwierzę”. Ważną częścią jest to, że `IDog` nie dostarcza żadnych dodatkowych funkcji. Jest używany tylko po to, aby umożliwić przekazywanie „A” i „B”, ale nie „C”, jako argumentu do niektórych metod. Czy to zła praktyka?


title: Czym jest „plan wdrożenia”?

text: Niedawno otrzymałem zadanie stworzenia dokumentu planu wdrożenia. Kiedy poprosiłem o przykład takiego, na który mógłbym się przyjrzeć, powiedziano mi, żebym spojrzał na Plan Projektu, który już został stworzony, aby wykorzystać go jako podstawę. Nadal jestem trochę zdezorientowany tym, co powinienem tworzyć. Czy ktoś może wskazać mi dobry przykład lub coś, co wyjaśnia, co to jest, a co ważniejsze, szczegóły dotyczące tego, co powinno zawierać.


title: Jaki jest najlepszy sposób, w jaki programista poradzi sobie z recenzowaniem kodu?

text: Jestem całkiem nowy w recenzowaniu kodu, ale kodowałem od lat podczas mojego doktoratu - co nie zawsze czyni cię dobrym programistą! Jeśli recenzent zmieni Twój kod i przejdzie z Tobą linijka po linijce, co zrobisz, jeśli się nie zgadzasz? Czasami dokonałeś wyboru X, a recenzent zmienia go na Y i miałeś na myśli Y, ale zdecydowałeś się tego nie robić z powodu wad, ale recenzent twierdzi, że te wady nie są ważne. Czy powinieneś werbalizować swój sprzeciw, czy po prostu nie i słuchać ich? Jest to trudne, jeśli nie jesteś dobry w przyjmowaniu krytyki, a recenzent jest osobą starszą w organizacji. Nie byłoby dobrze, gdybym był zbyt defensywny.


title: Projekt dla klasy szablonów

text: Mam klasę abstrakcyjną `klasa abstrakcyjna MathFunc`, która służy do implementacji funkcji matematycznych Rastrigin, Griewangk i Rosenbrock w ich określonych klasach `final class Rastrigin extends MathFunc`, `final class Griewangk extends MathFunc` i `final class Rosenbrock extends MatjFunc` . Ta hierarchia klas i dotychczasowe ich definiowanie działa bez zarzutu, więc myślę, że nie ma potrzeby szukania ulepszeń w tym obszarze. Teraz muszę zaimplementować inną klasę `Generation`, która będzie zawierała kilka `ArrayLists`, ale rzecz w tym, że potrzebuję implementacji Generation dla każdej opisanej powyżej funkcji matematycznej. Tak, że potrzebuję czegoś takiego: ArrayList<Rastrigin> rast = new ArrayList<>(); ArrayList<Griewangk> grie = new ArrayList<>(); ArrayList<Rosenbrock> rose = new ArrayList<>(); Wewnątrz tych list mam kilka obiektów Rastrigin/Griewangk/Rosenbrock, które muszę utworzyć. Z poprzednich projektów w C++ wiem, że mogę użyć szablonów do określenia ogólnego typu danych i myślę, że to jest moje rozwiązanie. Moja dotychczasowa implementacja wygląda tak: public class Generation <MathFunc> { private final ArrayList<MathFunc> pop = new ArrayList<>(); private final ArrayList<MathFunc> nextpop = new ArrayList<>(); private final ArrayList<MathFunc> Crossover = new ArrayList<>(); Generation(MathFunc tp) { for(int i = 0; i < PopSize; i++) { pop.add(tp); } } } Ale problem polega na tym: czy mogę użyć klasy abstrakcyjnej do tworzenia instancji obiektów, które się na niej opierają? Czy jest na to inny sposób? Jestem dość zdezorientowany co do korzystania z szablonów. Ale robienie `Generation(Mathfunc tp)` wydaje mi się trochę dziwne, ponieważ klasy abstrakcyjne nie są tworzone.


title: Dlaczego miałby mnie obchodzić asymptotyczny wzrost dolnej granicy najgorszego przypadku czasu/przestrzeni?

text: W matematyce istnieją zapisy dla asymptotycznych granic dolnych, granic górnych i granic ścisłych (w ramach współczynnika stałego). Opisując ogólnie wzrost funkcji, ma sens, że wszystkie trzy mogą mieć znaczenie dla takiej lub innej funkcji. W analizie algorytmów do opisu wzrostu wymagań czasowych lub przestrzennych stosuje się zwykle notację asymptotyczną. Wydaje mi się logiczne, że mogą mnie interesować maksymalne, minimalne lub oczekiwane wymagania. Ignorując oczekiwane wymagania, może mnie zainteresować dolna granica najlepszego przypadku (minimalna przestrzeń/czas) lub górna granica najgorszego przypadku (maksymalna przestrzeń/czas). Nie wyobrażam sobie, dlaczego miałbym kiedykolwiek interesować się dolną granicą najgorszego przypadku lub górną granicą najlepszego przypadku. Ponieważ dolna granica jest rodzajem najlepszego przypadku, a górna rodzajem najgorszego przypadku, wydaje mi się, że „najlepszy przypadek najgorszego przypadku” i „najgorszy przypadek najlepszego przypadku” są dla mnie rozbieżne. Ale kilka razy otrzymałem odpowiedzi na odpowiedzi/komentarze, które sugerują, że może to być porażka wyobraźni z mojej strony. Więc – czego nie potrafię sobie wyobrazić? Nie będę brała pod uwagę stwierdzenia w stylu „dosyć często mówi się, że dolną granicą najgorszego przypadku algorytmu blah jest blah”, aby odpowiedzieć na to pytanie, chyba że mówi również, dlaczego ludzi to obchodzi.


title: Co zrobić, jeśli nie mam dobrych pomysłów na zaimplementowanie funkcji?

text: Pracuję nad własną aplikacją i utknąłem. Muszę zaimplementować funkcję, ale nie mogę znaleźć dobrego podejścia do implementacji tej funkcji. Myślałem o tym przez kilka dni i nie nadeszły żadne dobre myśli. Wyszukiwanie w Internecie nie dało mi żadnej inspiracji. Muszę iść dalej, ale chcę wiedzieć, co jest najlepsze: * Myśl więcej, czekaj więcej i dalej szukaj najlepszego podejścia * Przestań marnować czas i zacznij od słabego projektu, obejmującego wszystko testami Co o tym myślisz? Jak powiedziałem wcześniej, pracuję nad własną aplikacją. Nie mam żadnych terminów, ale chcę też jak najszybciej dokończyć kodowanie aplikacji.


title: Więcej informacji o popularnym języku pochodzącym z Xerox Parc

text: Peter Weinberger w wywiadzie wspomniał o języku o nazwie Poplar > Co ciekawe, w tym samym czasie, kiedy robiliśmy AWK, w Xerox PARC istniał projekt o nazwie Poplar… może o nazwie Poplar. W każdym razie, > jakkolwiek to się nazywało, był taki projekt w Xerox PARC, który miał > dość podobne cele. To znaczy, że zamierzali wziąć te pliki składające się z wielu znaków, a ty rozbijasz je na różne sposoby, przetwarzasz je w jakimś języku i przekazujesz dalej. I wkładają dużo pracy > w sprytne pomysły. Był to funkcjonalny język programowania. ... A to > miało być przyjazne dla użytkownika i w dodatku napisałeś program sort > tutaj i potem pracowałeś na przykładzie na drugiej stronie i kompilator > sprawdził czy program działa w ten sam sposób miałeś. > Abyś miał wyczucie tego, co robi program. Czy jest więcej informacji o tym języku? A może to tylko wewnętrzny projekt Parc, który nigdy nie opuścił ich laboratoriów?


title: Jak najlepiej scalić/sortować/stronicować tony tablic JSON?

text: Oto scenariusz: załóżmy, że masz miliony dokumentów JSON przechowywanych jako pliki tekstowe. Każdy dokument JSON to tablica obiektów „activity”, z których każdy zawiera atrybut „created_datetime”. Jaki jest najlepszy sposób na scalanie/sortowanie/filtrowanie/stronę przez te działania za pomocą internetowego interfejsu użytkownika? Na przykład, powiedzmy, że chcemy wziąć kilka tysięcy dokumentów, połączyć je w gigantyczną tablicę, posortować tablicę według atrybutu „created_datetime” malejąco, a następnie przekartkować 10 czynności na raz. Należy również pamiętać, że około 25% tych dokumentów JSON jest aktualizowanych codziennie, a aktualizacje muszą pojawić się w widoku w ciągu 5 minut. Moją pierwszą myślą jest przeanalizowanie wszystkich dokumentów do tabeli RDBMS, a następnie będzie to proste zapytanie, takie jak „wybierz 10 najlepszych nazw, created_datetime z Activity gdzie user_id=12345 order by created_datetime desc”. Niektórzy sugerowali, że zamiast tego używam technik NoSQL, takich jak hadoop lub map/reduce. Jak dokładnie to działa? Aby uzyskać więcej informacji, zobacz: Dlaczego NoSQL jest lepszy w tym scenariuszu?


title: Jak dynamicznie dodawać nowe posty po ich utworzeniu

text: Staram się zaprojektować aplikację, w której użytkownicy mogą tworzyć posty za pomocą Django na backendzie. W tej chwili muszę odświeżyć stronę za pomocą JavaScript co 20 lub 30 sekund, aby sprawdzić nowe posty, które mogą być dostępne dla tej strony. Zastanawiałem się, czy są na to bardziej skuteczne sposoby? Może z odpowiedzią JSON? Szukam rozwiązania takiego jak Twitter, gdzie pokazują, ile nowych postów jest dostępnych, których nie ma na stronie lub nawet na Facebooku, gdzie automatycznie aktualizują posty na ścianie. Czy jest jakaś konkretna technologia, którą powinienem badać, aby aktualizacje były bardziej wydajne?


title: Różnica między najlepszymi praktykami a zdrowym rozsądkiem?

text: Toczy się wiele rozmów na temat najlepszych praktyk1 w tworzeniu oprogramowania. Widziałem co najmniej trzy główne punkty, które są przedmiotem wielu dyskusji zarówno na SE, jak i gdzie indziej: * Co kwalifikuje się jako najlepsza praktyka i dlaczego? * Czy w ogóle warto omówić najlepsze praktyki, ponieważ uzasadnione jest twierdzenie, że żadna praktyka nie jest „najlepszą” praktyką? * Kiedy powinieneś zrezygnować z najlepszych praktyk – lub być może większości najlepszych praktyk – ponieważ wydaje się, że nie mają zastosowania lub z powodu ograniczeń zewnętrznych (czasu, pieniędzy itp.), które sprawiają, że kompromis jest niepraktyczny? Coś, co wydaje się pojawiać znacznie rzadziej, ale częściej niż nigdy, to pojęcie **zdrowego rozsądku** w tworzeniu oprogramowania. Ostatnie doświadczenia sprawiły, że to pojęcie ponownie pojawiło się w moim umyśle. Moje początkowe wrażenie jest takie, że jest to inna dyskusja niż najlepsze praktyki, ale może z pewnym zapyleniem krzyżowym. Kiedy myślę o zdrowym rozsądku w ogóle, myślę o zbiorze zasad, które albo przyswoiłeś, albo których nauczono cię, które dają ci podstawę do rozumowania i podejmowania decyzji. Kierowanie się zdrowym rozsądkiem to dobry sposób na uniknięcie odstrzelenia całej nogi. Ale poza dość niskim poziomem bazowym zdrowy rozsądek ustępuje miejsca potrzebie podejmowania świadomych decyzji, a świadome decyzje mogą nawet zastąpić zdrowy rozsądek, gdy dowody wydają się wystarczająco przekonujące. Być może poluzowałem się z definicją tutaj, ale myślę, że jest ona wystarczająco bliska, aby przebić mój przykład. Kiedy myślę o zdrowym rozsądku w tworzeniu oprogramowania, myślę o wszystkich zasadach podstawowej higieny, aby zapobiec szybkiemu rozpadowi kodu w niezrozumiały bałagan. Na przykład, rzeczy takie jak: nie używanie pojedynczej globalnej struktury do utrzymywania i komunikowania stanu w nietrywialnym programie; nie używanie zmiennych/metod/nazw klas, które są po prostu przypadkowym bełkotem; rzeczy, które prawdopodobnie bardzo przypominają to, co nazywamy antywzorcami. Tam, gdzie stosowanie najlepszych praktyk jest praktycznym odpowiednikiem wzorców uczenia się, stosowanie zdrowego rozsądku może być postrzegane jako praktyczny odpowiednik uczenia się anty-wzorców. Mając to na uwadze, chciałbym zadać kilka pytań, które widząc odpowiedzi innych osób, mogą pomóc mi zrozumieć, jak przez to przejść. **Czy inni uważają, że w tworzeniu oprogramowania istnieje pojęcie zdrowego rozsądku? Byłby zainteresowany poznaniem rozumowania tak czy inaczej. ** **Jeśli tak, to czy jest to pojęcie warte dyskusji? Czy jest to coś, do czego powinniśmy naciskać tak bardzo, jak czasami robimy to z najlepszymi praktykami? Czy jest to coś, na co warto naciskać jeszcze mocniej?** Jeśli analogia do antywzorców wydaje się rozsądna, ogólna zasada jest taka, że antywzorce stosuje się tylko wtedy, gdy nie ma innego sposobu, a nawet wtedy, gdy jest to bardzo ograniczone. **Jak elastyczny powinien być pozwalanie, aby baza kodu odbiegała od zdrowego rozsądku?** Wydaje się nierozsądne, że odpowiedź brzmi „wcale”, ponieważ czasami celowość wymaga odchyleń. Wydaje się jednak, że jest to inny rodzaj argumentacji niż zastosowanie „najlepszej praktyki”. Może nie jest; jeśli tak nie sądzisz, chciałbym się dowiedzieć dlaczego. Jest to o wiele bardziej otwarte i może warte odpowiedzi na własne pytanie, **jaki rodzaj zaleceń byś wskazał, które wydają się być kwestią zdrowego rozsądku?** Inne myśli są również mile widziane. * * * 1Być może lepiej nazwałbym je „powszechnie powtarzającymi się wzorcami domen”, ale nazwa „najlepsze praktyki” jest na tyle powszechna, że wszyscy wiedzą, czym one są, nawet jeśli się z tym nie zgadzają. Jeśli przeszkadza ci „najlepsza” część, wyobraź sobie, że zastąpiłem „najlepsze praktyki” czymś mniej autorytatywnym.


title: Czy zagnieżdżone pętle są zawsze O(n^k)?

text: Jeśli mam pętlę w innej pętli, ale wiem, że wewnętrzna pętla zostanie uruchomiona tylko raz, czy ten algorytm nadal będzie O (n^2)? Dla i = 1 do n do Dla j = 1 do i do If (i==j) do Dla k = 1 do n {Zrób rzeczy} Wewnętrzna pętla uruchomi się najwyżej 1 raz, ponieważ `i` będzie równe `j` raz na iterację drugiej pętli. Czy to wciąż n^3?


title: Co to są „aplikacje Metro”?

text: Chociaż jest to stosunkowo nowe (2011/09/15), czy są jakieś źródła wyjaśnień dotyczących aplikacji Metro dla Windows8? W tej chwili nie widziałem niczego, co podsumowałoby dla nich „boisko w windzie”.


title: używanie dbus na Androidzie

text: Chciałbym wiedzieć, czy można używać DBUS na Androidzie za pomocą Javy. Z tego, czego szukałem do tej pory, wygląda na to, że nie ma obsługi programowania DBUS na Androidzie. Ale wtedy bluetooth na Androidzie używa DBUS. Chciałbym potwierdzić, czy rzeczywiście tak jest. Jeśli tak, czy istnieje możliwość, że DBUS będzie obsługiwany w przyszłości.


title: Jaka jest różnica między Agile Modeling a Agile Manifesto?

text: Szukając różnych metod tworzenia oprogramowania odkryłem, że są dwie AM: * Modelowanie Agile * Manifest Agile Problem w tym, że nie potrafię rozróżnić między nimi. Jeśli jedno jest częścią drugiego? czy aktualizacja drugiego?


title: Jakie są bezpieczne klucze do zmiany mapowania w vimie?

text: Do tej pory próbowałem używać Vima w tak waniliowej konfiguracji, jak to tylko możliwe, aby oszczędzić sobie kłopotów podczas przemieszczania się między maszynami. Jest jednak kilka rzeczy, które naprawdę chciałbym przypisać klawiszom, na przykład skrócić `"_diwP`, których często używam do usunięcia słowa pod kursorem i zastąpienia go jednym ze schowka. Czy są jakieś szczególne klawisze, które są konwencjonalnie zarezerwowane dla mapowań zdefiniowanych przez użytkownika?Zadaniem tego pytania jest głównie to, że chciałbym uniknąć późniejszych kłopotów, gdy zdecyduję się zainstalować jakąś wtyczkę lub zabrać moje pliki konfiguracyjne do vima na innym systemie operacyjnym i stwierdzę, że moje mapowania klawiszy kolidują z coś innego.


title: Czy system Windows Server 2008 R2 x64 może być używany jako system operacyjny stacji roboczej dewelopera?

text: Aktualizujemy pamięć RAM na naszych stacjach roboczych dla programistów i zamierzamy przejść na 64-bitowy system operacyjny. Używaliśmy Windows 7 x86, ale zastanawiam się, czy użyć Server 2008 R2 x64, aby programiści mogli używać Hyper-V do wirtualizacji różnych konfiguracji. Czy ktoś używa Server 2008 R2 x64 jako systemu operacyjnego swojej stacji roboczej? Jeśli tak, czy są jakieś problemy z działaniem programu Visual Studio 2010, Expression Blend 4 i tak dalej?


title: Sposób na inspekcję modelu danych Java po wyeksportowaniu do pliku

text: Dokonałem refaktoryzacji programu, aby usunąć jego zależność od bazy danych sql, przechowując cały stan w modelu pamięci. Jednak menedżerowi spodobała się możliwość łatwego sprawdzania stanu domeny po prostu przez wykonanie połączenia/filtrowania sql w bazie danych w dowolnym momencie; i chce zachować podobne możliwości kontroli domen. Rozmawialiśmy o wywołaniu, które zrzuca stan modelu do pliku, który można sprawdzić. Nie ma zbyt wiele stanu — wszystko może zmieścić się w pamięci — ale stan jest na tyle duży, że potrzebujemy jakiegoś mechanizmu, który pozwoli nam „pobrać” dziecko, jeśli dany rodzic lepiej niż ręczna inspekcja plików. Potrzebuję najlepszego narzędzia, aby to zrobić. Myślą o wyeksportowaniu wszystkiego do CSV w celu odczytania do bazy danych, co może działać, ale wydaje się, że używa bazy danych tylko do robienia złączeń na typach danych. Ponadto ich stare podejście wykorzystywało ciągi do sprzężeń, które nie były gwarantowane jako unikatowe, a po dodaniu przeze mnie dodatkowych obiektów, trzeba by pomyśleć, jak rozmieścić pola bazy danych, aby reprezentować nowe obiekty modelu (szczególnie obiekty podrzędne rodziców). Bawiłem się innymi pomysłami na to. Jednym z pomysłów było użycie pliku CSV i posiadanie innego programu odczytanego w pliku CSV i wykonanie złączeń typu "sql", ale nie znalazłem programu, który zrobi to z łatwością. Bawiłem się także interaktywnym interpreterem java, dzięki czemu możemy wczytywać rzeczy do naszego modelu i wykonywać wywołania przeciwko modelowi, nawet używając poleceń bazowych linuxa do pisania 'joins' z awk lub podobnym. Nie jestem jednak pewien, czy podoba mi się jakakolwiek opcja. Czy ktoś ma sugestie, jak to zrobić? p.s. Możemy SSH do utrzymywanych systemów w dowolnym momencie, ale nie możemy kopiować plików do nich lub z nich bez pozwolenia podczas utrzymywania aktywnych systemów. Każde narzędzie używane do sprawdzania pamięci musi być spakowane wraz z naszym wydaniem jako osobny słoik z uzasadnieniem, dlaczego je uwzględniamy.


title: Wzorzec MVP - Sposoby ograniczania działań użytkownika w oparciu o uprawnienia bezpieczeństwa

text: W aplikacji MVP, jaki powinien być najbardziej odpowiedni sposób zaimplementowania ograniczenia niektórych działań interfejsu użytkownika w oparciu o uprawnienia bieżącego użytkownika? Na przykład w zabezpieczeniach opartych na rolach różne role będą miały inny dostęp do niektórych interakcji interfejsu użytkownika w tym samym widoku. Jeśli na przykład mamy sklep internetowy, na stronie z listą produktów klienci mogą jedynie przeglądać szczegóły i dodawać produkty do koszyka, ale administratorowi należy również przedstawić przyciski „Dodaj produkt” i przycisk „Usuń” na każdym z nich. przedmiot. Podobne pytanie zadano już tutaj, ale OP prosi o interfejs użytkownika, który sprawdza uprawnienia. Jestem pewien, że interfejs użytkownika (widok) nie powinien być odpowiedzialny za weryfikację uprawnień, ale nadal musi wiedzieć, czy wizualizować niektóre składniki interfejsu użytkownika. Czy istnieje więc jakiś dobrze zdefiniowany lub powszechnie przyjęty wzorzec, który mówi widokowi, które interakcje interfejsu użytkownika powinny być niedozwolone? Przychodzi mi do głowy kilka rozwiązań, ale jeśli istnieje standardowe i sprawdzone, to wolę się tego trzymać, niż wymyślać koło na nowo. * * * **Aktualizacja** Aby nieco dokładniej wyjaśnić, jak zasugerowano w poniższych odpowiedziach, rozważam podejście polegające na akceptowaniu przez widok informacji o uprawnieniach od prezentera. To forma tej informacji mnie niepokoi - jeśli użyję flag jako masek bitowych lub jakiejś zbyt ogólnej reprezentacji, to: 1. (+) Zyskam spójność w przekazywaniu uprawnień do widoku 2. (-) Połącz widok z logiką za rozwiązanie flag. Inną rzeczą, o której mam na myśli, jest to, że widok udostępnia wszystkie flagi, których potrzebuje jako właściwości ustawialne dla prezentera (takie jak `view.IsDeleteItemAllowed`). Tak więc: 1. (+) Nie będę miał dodatkowej logiki dla uprawnień w widoku 2. (-) Zwiększy złożoność prezentera, aby dostosować flagi uprawnień do właściwości widoku. * * * Zastanawiam się więc nad zastosowaniem późniejszego podejścia, ponieważ w ten sposób mogę ponownie wykorzystać prezenter z różnymi implementacjami widoku; i nie będzie polegać na widoku w celu zrozumienia systemu uprawnień (który może podlegać zmianom). Czy jest coś, o co powinienem się martwić?


title: Używanie przemysłowych nauszników podczas programowania w celu odfiltrowania rozmów

text: Niestety muszę pracować w pokoju pełnym gadających kolegów. Aby się skoncentrować, noszę słuchawki z muzyką na najwyższym poziomie, ale pod koniec dnia robi mi się niedobrze. Wolałbym ciszę, ale nie ma szans na prywatne biuro. Mógłbym spróbować znaleźć jakieś ukryte miejsce w budynku i popracować na laptopie, ale mój szef nie byłby z tego zadowolony. I mógłbym odejść z firmy, ale nie chcę - bardzo lubię swoją pracę tutaj. Pracownicy przemysłowi pracujący w hałaśliwym otoczeniu zwykle noszą specjalne nauszniki. Rozważam zakup pary takich, ale mam dwa problemy: 1. Nie wiem, czy przemysłowe nauszniki rzeczywiście tłumią hałas rozmów. Może mają one na celu izolowanie _bardzo_ głośnych dźwięków. Mówienie tutaj nie jest głośne, to po prostu irytujące. 2. Te nauszniki mają zwykle wagę ok. 250g. Nie wiem, czy ten ciężar na głowie jest znośny przez powiedzmy 8-10 godzin kodowania. Czy ktoś kiedykolwiek próbował nosić przemysłowe nauszniki podczas programowania? Z góry dziękuję. **=== AKTUALIZACJA ===** Zamiast przemysłowych nauszników zdecydowałem się wypróbować specjalnie formowane zatyczki do uszu. Moje zatyczki do uszu są wykonane z silikonu medycznego. Całkowicie wypełniają moje uszy i wystarczająco dobrze tłumią gadaninę. Ich usuwanie jest stosunkowo powolne, co jest zaletą: osoby, które chciałyby mi przeszkadzać podczas programowania, muszą poczekać. Może zrozumieją, czego chcę i po prostu zostawią mnie w pracy. W każdym razie spróbowałem też SimplyNoise. Brązowy dźwięk tłumi gadaninę lepiej niż moje zatyczki do uszu, ale to naprawdę męczące. Dźwięk deszczu jest pod tym względem znacznie lepszy. Uważam też, że jest to mniej męczące niż słuchanie muzyki.


title: Czy powinienem wybrać Doctrine 2 czy Propel 1.5/1.6 i dlaczego?

text: Chciałbym usłyszeć od tych, którzy używali Doctrine 2 (lub nowszego) i Propel 1.5 (lub nowszego). Większość porównań między tymi dwoma mapowaniami obiektowo-relacyjnymi opiera się na starych wersjach — Doctrine 1 kontra Propel 1.3/1.4, a oba ORM przeszły znaczące zmiany w swoich ostatnich wersjach. Na przykład większość krytyki Propela wydaje się skupiać wokół klas "ModelName **Peer**", które i tak są przestarzałe w wersji 1.5. Oto co zgromadziłem do tej pory (i starałem się, aby ta lista była jak najbardziej wyważona...): * Propel * Plusy * Niezwykle przyjazny dla IDE, ponieważ rzeczywisty kod jest generowany, zamiast polegać na magicznych metodach PHP. Oznacza to, że funkcje IDE, takie jak uzupełnianie kodu, są rzeczywiście pomocne. * Szybki (pod względem użycia bazy danych - nie wykonuje się introspekcji środowiska wykonawczego w bazie danych) * Czysta migracja między wersjami schematu (przynajmniej w wersji 1.6 beta) * Może generować modele PHP 5.3 (np. przestrzenie nazw) * Łatwe do łączenia wielu w jedno zapytanie do bazy danych za pomocą metod typu `useXxx`. (Zobacz film "uzupełnianie kodu" powyżej) * Wady * Wymaga dodatkowego kroku budowania, a mianowicie budowania klas modelu. * Wygenerowany kod wymaga przebudowy za każdym razem, gdy zmienia się wersja Propela, zmienia się ustawienie lub zmienia się schemat. ~~ Może to być nieintuicyjne dla niektórych i niestandardowe metody zastosowane do modelu zostaną utracone. (myślę?)~~ \-- Nieprawda; niestandardowe metody nie są tracone, ponieważ wygenerowana klasa jest klasą bazową; Propel zapewnia klasę encji specjalnie do rozszerzenia. * Niektóre przydatne funkcje (np. zachowanie wersji, migracje schematów) są w stanie beta. * Doctrine * Plusy * Bardziej popularny * Doctrine Query Language może wyrażać potencjalnie bardziej skomplikowane relacje między danymi niż jest to łatwo możliwe dzięki strategii ActiveRecord firmy Propel. * Łatwiejsze dodawanie zachowań wielokrotnego użytku w porównaniu z Propelem. * Komentowanie oparte na DocBlock do budowania schematu jest osadzone w rzeczywistym PHP zamiast w oddzielnym pliku XML. * Używa wszędzie przestrzeni nazw PHP 5.3 * Wady * Wymaga uczenia się całkowicie nowego języka programowania (Doctrine Query Language) * Zaimplementowany w kilku miejscach jako "magiczne metody", co sprawia, że autouzupełnianie IDE jest bezwartościowe. * Wymaga introspekcji bazy danych i dlatego jest domyślnie nieco wolniejszy niż Propel; buforowanie może to usunąć, ale buforowanie dodaje znaczną złożoność. * Mniej zachowań jest zawartych w podstawowej bazie kodu. Kilka funkcji, które Propel dostarcza po wyjęciu z pudełka (takich jak zestaw zagnieżdżony) jest dostępnych tylko poprzez rozszerzenia. * Freakin' OGROMNY :) Doszedłem do tego tylko poprzez przeczytanie dokumentacji dostępnej dla obu narzędzi - właściwie jeszcze niczego nie zbudowałem. Chciałbym jednak usłyszeć od tych, którzy korzystali z obu narzędzi, aby podzielić się swoimi doświadczeniami na temat zalet / wad każdej biblioteki i jakie są ich zalecenia w tym momencie :)


title: pliki płaskie a baza danych RDBMS, mało odczytu/zapisu, kilka zmian

text: Mam do czynienia z danymi z długoterminowych (lat, dekad) stacji monitoringu klimatu. Przepływ danych zwykle rozpoczyna się od danych surowych (napięcia itp.) oraz informacji dotyczących kontroli jakości (ciśnienie, temperatura, natężenie przepływu itp.) zwykle rejestrowanych przy 1 Hz. Następnie do danych przypisywana jest flaga jakości (człowiek i/lub program), przetwarzana (zastosowanie krzywych kalibracyjnych) i oznaczana flagą. Tak więc zasadniczo otrzymujemy 2 zestawy danych: dane surowe i przetworzone. Nowe dane są zazwyczaj dodawane raz dziennie (~500Ko/dzień/instrument). Jednoczesne zapytania prawdopodobnie nigdy się nie pojawią. Chciałem sięgnąć po RDBMS (mamy serwer MySQL) i mieć pewne doświadczenie w projektowaniu baz danych, ale informatyk ciągle mi powtarza, że płaskie pliki równie dobrze sprawdzą się w pracy. Podejrzewam, że próbował ułatwić sobie życie, jeśli chodzi o tworzenie kopii zapasowych/aktualizację MySQL. Nie ma zbyt wielu powiązań między danymi, niewiele się one zmieniają, ale zmienią się flagi jakości. RDBMS ułatwia porównywanie danych z różnych instrumentów w skali „wielu dni” w porównaniu z codziennymi plikami tekstowymi. Cóż, co byś doradził? Dziękuję.


title: jak pracować z ludźmi, którzy myślą proceduralnie w projekcie obiektowym

text: Pracuję nad projektem, który mocno wykorzystuje zasady projektowania OOP. Ale jeden z moich kolegów robi wszystko w sposób zorientowany na procedurę. Irytuje mnie widok kodu zorientowanego na procedury opakowane w klasę i tracę panowanie nad sobą. Ale utrata panowania nad sobą niczego nie poprawi. Potrzebuję pomysłów, rad i wskazówek, jak sprawić, by ludzie myśleli przedmiotami.


title: Refaktoryzacja istniejącej klasy abstrakcyjnej i jej parametrów

text: Mam „abstrakcyjną klasę A”, która deklaruje abstrakcyjną metodę „doStuff”. Obecnie istnieje wiele klas dziedziczących po `A` i implementujących `doStuff`. Instancje klasy są inicjowane w czasie wykonywania przez „AFactory” na podstawie danych wprowadzonych przez użytkownika. Pierwotnie wszystkie klasy miały ten sam pojedynczy parametr (dane wejściowe użytkownika). Ale teraz mam dodatkowy parametr, którego potrzebuje tylko nowa klasa dziedzicząca „A”. Rozpatrując to, pomyślałem o następującej logice: * Klasa interpretera, która generuje instancje na podstawie danych wejściowych użytkownika (oczywiście przy użyciu `AFactory`) nie była świadoma istnienia tego dodatkowego parametru. * Próba wepchnięcia go do klasy interpretera klasowego byłaby naprawdę niezręczna, ponieważ wtedy musiałbym wiedzieć, kiedy przekazać go do fabryki, co niweczy cały cel posiadania fabryki w pierwszej kolejności. * Wysyłanie go na ślepo do Fabryki z nadzieją, że _może_ coś z nim zrobić, również wydaje się dość brzydkie. * **Moje obecne rozwiązanie:** W międzyczasie zdecydowałem się na refaktoryzację `A.doStuff(Param param)` na `A.doStuff(AParams params)`. `AParams` może przechowywać wszystkie potrzebne parametry, a `doStuff` może je ignorować, jeśli nie są nimi zainteresowane. Wydaje mi się to również trochę niezręczne i przypomina mi o wysyłaniu struktur w WIN32API, które mogą przechowywać wiele brzydkich, bezużytecznych parametrów i nie przepadam za tym. Czy istnieje bardziej elegancki sposób podejścia do tego problemu? Lub jakiś wzorzec projektowy, który przeoczyłem i rozwiązuje ten problem? **Uwagi** : * Używamy Javy 1.7 * Nazwy klas są głupie, aby podkreślić teoretyczny problem projektowy. W rzeczywistości mają normalne, orientacyjne, znaczące nazwy :) * Dużo szukałem, ale zorientowałem się że dość trudno jest przeszukiwać sieć pod kątem konkretnych abstrakcyjnych zagadnień teoretycznych (w przeciwieństwie do tego, dlaczego `X` rzuca `Exception` w tym kodzie) i tak postanowiłem zapytać, więc przepraszam, czy to jest duplikat. **Edytuj 1** : * **Wyjaśnienie:** Muszę przekazać argument specyficzny dla podklasy do metody `doStuff`. **EDYTUJ 2** : * Nie w pełni zrozumiałem intencje Kiliana Fotha, więc napisałem trochę pseudo-kodu Java, aby pomóc mi lepiej wyjaśnić problem/zrozumieć twoje rozwiązanie. A więc: to szkielet mojego problemu. To szkielet mojego rozwiązania. Myślę, że to może być rozwiązanie Kiliana Fotha, ale nie jestem pewien.


title: dlaczego getMonth() zaczyna się od 0

text: Kodowałem funkcję usuwającą dzień z wartości daty w javascript i byłem zaskoczony, że getMonth() javascript zaczyna się od 0 w styczniu do 11 w grudniu. Dlaczego getMonth() w javascript zaczyna się od 0?


Czy istnieje sposób na uzyskanie wersji Ubuntu, której Google używa do programowania? Jeszcze lepszy byłby pełny obraz VMWare lub Virtual Box Virtual Machine, który może również zawierać pełny zestaw preinstalowanych narzędzi.


title: Projektowanie klas i separacja obaw

text: Pracuję nad aplikacją MVC i zastanawiam się, jak najlepiej zaprojektować jeden z moich modeli. Mam klasę o nazwie RightLeftPersonToggle, która reprezentuje dwa pola listy wyboru na stronie. Użytkownik może przenosić „osoby” pomiędzy lewym i prawym polem za pomocą przycisków pomiędzy nimi. Ta klasa może reprezentować zarówno kierowcę, jak i kierownika pojazdu, więc kod ładowania i zapisywania jest inny dla każdego typu. Klasa jest poniżej. public class RightLeftPersonToggle { public RightLeftPersonToggle() { LeftList = new List<Person>(); RightList = nowa lista<osoba>(); } public List<Osoba> LeftList { get; ustawić; } public List<Osoba> RightList { get; ustawić; } ciąg publiczny LeftListTitle { get; ustawić; } ciąg publiczny RightListTitle { get; ustawić; } ciąg publiczny NazwaWłaściwości { get; ustawić; } } Zastanawiam się, jaki jest najlepszy sposób obsługi ładowania i zapisywania list. Wymyśliłem dwa rozwiązania, ale nie jestem pewien, które z nich jest najlepsze. 1) Kontroler (lub model nadrzędny) jest odpowiedzialny za ładowanie i zapisywanie zarówno LeftList, jak i RightList. Klasa RightLeftPersonToggle nie ma wiedzy o tym kodzie i pozostaje dokładnie taka sama jak powyższy kod. 2) RightLeftPersonToggle otrzymuje dwie metody (jedną do zapisywania i jedną do ładowania), które przyjmują funkcje jako parametry, aby poinformować go, jak wykonać swoją pracę. public void LoadAndFilterLists(Func<List<Osoba>> leftListFilter, Func<List<Osoba>> rightListFilter) public void LoadSaveLists(Func<List<Osoba>> leftListSave, Func<List<Osoba>> rightListSave) Rozwiązanie numer jeden zachowuje kod prostsze moim zdaniem, podczas gdy rozwiązanie numer dwa wydaje się zapewniać lepszą separację obaw, ponieważ RightLeftPersonToggle powinien wiedzieć, jak się załadować i zapisać. Mając na uwadze fakt, że RightLeftPersonToggle nie zawsze wczytuje i zapisuje dane w ten sam sposób, które z proponowanych przeze mnie rozwiązań uznałbym za najlepszą praktykę? Czy masz jakieś inne zalecenia dotyczące poprawy?


title: Wdrażanie testów jednostkowych w firmie, która tego nie robi

text: Szef działu rozwoju oprogramowania mojej firmy właśnie „zrezygnował” (tj. został zwolniony) i teraz pracujemy nad ulepszeniem praktyk programistycznych w naszej firmie. Chcemy wdrożyć testy jednostkowe we wszystkich tworzonych od tego czasu oprogramowaniu. Informacje zwrotne od programistów są następujące: * Wiemy, że testowanie jest cenne * Ale zawsze zmieniasz specyfikacje, więc byłaby to strata czasu * A twoje terminy są tak napięte, że i tak nie mamy wystarczająco dużo czasu na testowanie od CEO jest to: * Chciałbym, aby nasza firma miała automatyczne testy, ale nie wiem jak to zrobić * Nie mamy czasu na pisanie dużych dokumentów specyfikacji Jak programiści uzyskują teraz specyfikacje? Word of mouth lub slajd PowerPoint. Oczywiście to duży problem. Moja sugestia jest taka: * Dajmy również programistom zestaw danych testowych i testów jednostkowych * To jest specyfikacja. To od kierownictwa zależy, czy jasno i ilościowo określi, czego chce. * Deweloperzy mogą umieścić dowolną inną funkcjonalność, która według nich jest potrzebna i nie musi być objęta testami Cóż, jeśli kiedykolwiek byłeś w firmie, która była w takiej sytuacji, jak rozwiązałeś problem? Czy takie podejście wydaje się rozsądne?


title: czy istnieje elegancki sposób na analizę procesu inżynierskiego?

text: Istnieje wiele odczuć, że mierzenie zatwierdzeń jest niewłaściwe. Czy przeprowadzono jakiekolwiek badania, które próbują czerpać więcej źródeł niż zatwierdzeń - takie jak: * wzorce przeglądania * praca IDE (przed zatwierdzeniem) * czas bezczynności * wielozadaniowość Nie mogę wymyślić łatwego sposobu na wykonanie tych pomiarów, ale zastanawiam się, czy przeprowadzono jakieś badanie. * * * Osobiście wierzę, że refleksja nad własnymi „metrykami” może być wartościowa niezależnie od (lub w przypadku braku) wykorzystania ich do oceny wyników. TJ. bezstronny sposób na refleksję nad swoimi nawykami. Ale to kwestia dyskusji wykraczająca poza pytania i odpowiedzi.


title: Wzorce projektowe często spotykane w programowaniu systemów wbudowanych

text: Nie mam żadnych pytań związanych z kodowaniem. Moje obawy dotyczą programowania systemów wbudowanych niezależnie od konkretnego języka programowania. Ponieważ jestem nowy w dziedzinie programowania systemów wbudowanych, byłbym wdzięczny za odpowiedzi od tych, którzy uważają się za doświadczonych programistów systemów wbudowanych. Zasadniczo mam 2 pytania. 1. Czy spośród wymienionych poniżej wzorców projektowych są one często spotykane w programowaniu systemów wbudowanych? * Wzorzec Abstrakcja-Wystąpienie * Wzorzec ogólnej hierarchii * Wzorzec - rola gracza * Wzorzec Singleton * Wzorzec obserwatora * Wzorzec delegacji * Wzorzec karty * Wzorzec fasady * Wzorzec niezmienny * Wzorzec interfejsu tylko do odczytu * Wzorzec proxy 2. Jako doświadczony programista osadzony, co wzorce projektowe spotkałeś się indywidualnie? Nie ma potrzeby opisywania szczegółów. Wystarczyłyby tylko nazwy wzorów. Podziel się własnym doświadczeniem. Uważam, że odpowiedzi na powyższe pytania byłyby dobrym punktem wyjścia dla każdego początkującego programisty w świecie systemów wbudowanych.


title: korzystanie z blokujących interfejsów API z serwerem nieblokującym

text: Używamy Tornado dla naszego systemu (za nginx) - i wszystko działa dobrze. Teraz musimy zintegrować bibliotekę klienta (dla Neo4j Graph DB) z naszym systemem. Problem polega na tym, że się blokuje. Moje pytanie brzmi: * czy można używać bibliotek blokujących w środowisku nieblokującym * jakie są możliwe konsekwencje, jeśli to zrobimy * ile pracy będzie wymagało, jeśli zdecydujemy się rzucić własną bibliotekę asynchroniczną Wiem, że jest Node, który robi wszystko w sposób nieblokujący. Ale nie możemy tam iść, ponieważ nasz rdzeń jest napisany w Pythonie.


title: Zatwierdzić cały projekt czy zatwierdzić pliki?

text: Kiedyś zatwierdzałem pliki, które chcę pogrupować. Ale jeden z moich kolegów powiedział, że zatwierdzenie całego działającego projektu jest lepsze niż zatwierdzenie plików. Myślę, że ma to sens, ale jeśli tak się zaangażuję, to czasami muszę wykonać kilka różnych prac na raz. Jaka jest najlepsza praktyka do popełnienia?


title: Jaki jest dobry sposób na poznanie programowania wielordzeniowego na poziomie jądra w systemie Linux?

text: Interesuje mnie programowanie wielordzeniowe na poziomie jądra. Spodziewam się, że dotyczy to wielu obszarów i jest prawdopodobnie inne dla każdej architektury. Jakie muszą przeczytać sekcje jądra? Gdybym chciał porównać i skontrastować kod dla Intel I7 i ARM Cortex-A9 MPCore, gdzie mógłbym znaleźć różnice?


title: Odzwierciedlaj zwirtualizowane środowisko programistyczne

text: Pracuję sam w niektórych projektach iOS w środowisku lokalnym. Myślałem w taki sposób, aby móc dzielić środowisko programistyczne między komputerem Mac Mini i MacBookiem. Pracuję głównie w domu w Mini, ale czasami muszę zrobić demo lub pracować na zewnątrz i chciałbym, aby środowisko programistyczne było odzwierciedlone w obu. Myślałem o korzystaniu z maszyny wirtualnej (poprzez VirtualBox) z zainstalowanymi tylko moimi narzędziami programistycznymi. Następnie mógłbym zsynchronizować tę maszynę wirtualną z jakimś oprogramowaniem między obydwoma komputerami, dzięki czemu zawsze będę miał dokładne środowisko, bez względu na to, z jakiego komputera korzystam. Czy jest jakiś dobry powód, żeby nie robić tego w ten sposób? Nie korzystałem za bardzo z wirtualizacji, więc nie mam na ten temat żadnego tła. ¿A co z licencjami? ¿Czy trzeba mieć zduplikowane licencje na obu maszynach wirtualnych? Oto moje wymagania: -Nie trzeba konfigurować dwóch środowisk. Po prostu skonfiguruj jeden i wykonaj zadanie w drugim (instalacja lub aktualizacja aplikacji, zmiana ustawień itp.). - Nie polegaj na posiadaniu połączenia podczas pracy poza domem. Moja podstawowa konfiguracja to: * Mac Mini: dwurdzeniowy procesor i7, 8 Gb. OSX Mountain Lion Host OS: * MacBook: 2.4 Core 2 Duo. 4 GB. OSX Lion Host OS. * Virtual Box z systemem gościa Mountain Lion na obu komputerach. * XCode5, Symulator, Texwrangler, MAMP itp.


title: Mac lub Linux na dodatkową maszynę roboczą?

text: Jestem niezależnym web developerem nastawionym na Ruby on Rails. Główne elementy mojego obecnego środowiska pracy to 27-calowy **iMac** , **Textmate** i **git** /github (który nie zmieni się w najbliższym czasie). ładny mały/przenośny laptop, który pozwoli mi wykonać szybki taniec `wejdź/napraw-coś/test/push/get-out` gdy nie ma mnie w domu (z domu jest miejsce, z którego pracuję).Jestem dość zaznajomiony z Linuksem i Vim i myślę, że mogę bez problemu pracować z obydwoma środowiskami (OSX i Linux).Przyznaję, że laptop będzie używany tylko okazjonalnie i w pośpiechu, **czy jest coś, o co powinienem się martwić podczas pracy z OSX i Linuxem na w tym samym czasie?** (pamiętaj, że laptop będzie służył wyłącznie do pracy i dlatego nie ma wymogu, aby mógł zarządzać moją biblioteką zdjęć) **Ktoś miał doświadczenie z odpowiednią konfiguracją?** * * * **EDYTUJ:** Chciałbym to trochę bardziej podkreślić, ponieważ niektóre odpowiedzi odbiegają od tego. **To, czego szukam, to pomoc dla maszyny pomocniczej dla RoR, a nie podstawowej** Tak więc: * batt Żywotność nie jest problemem - myślę, że 2-3 godziny to wszystko, czego będę od niego wymagał, więc wyraźna przewaga sprzętowa Maca wyparowuje * Nie kompiluję żadnego kodu - nie potrzebuję szybkiego procesora (tak naprawdę nie jestem zaznajomiony z tym, co jest potrzebne do kompilacji)


title: System dzielący hasła na dwa serwery

text: Natknąłem się na ten artykuł w BBC, * RSA dzieli hasła na dwie części, aby udaremnić ataki hakerów **tl;dr** \- (losowe) hasło jest dzielone na pół i jest przechowywane na dwóch oddzielnych serwerach, aby udaremnić ataki hakerów uzyskał dostęp do dowolnego serwera po naruszeniu bezpieczeństwa. Teraz głównym pytaniem jest, jak powstałby tego rodzaju system... _codespeaking_ , dla PHP, który zwykle rozwijam w moich aplikacjach internetowych, hasło do bazy danych jest zwykle przechowywane w pliku konfiguracyjnym, tj. config.php z nazwą użytkownika i hasło, w takim przypadku zrozumiałe jest, że hasła mogą zostać skradzione, jeśli bezpieczeństwo zostało naruszone. Jednak przy dzieleniu i wysyłaniu drugiej połowy na inny serwer, jak by to wyglądało podczas komunikacji z innym serwerem (pamiętając o PHP), skoro hasło drugiego serwera byłoby przechowywane w pliku konfiguracyjnym, czyż nie ? Jeśli chodzi o bezpieczeństwo, to trzymanie hasła drugiego serwera z dala od głównego, dokładnie tak, jak komunikowałby się serwer główny, bez ujawniania żadnego innego hasła poza pierwszym serwerem. To z pewnością skłania mnie do myślenia...


title: C++ : Brak standaryzacji na poziomie binarnym

text: Dlaczego ISO/ANSI nie standaryzowało C++ na poziomie binarnym? Istnieje wiele problemów z przenośnością C++, co wynika tylko z braku jego standaryzacji na poziomie binarnym. Don Box pisze (cytując ze swojej książki Essential COM, rozdział _COM jako lepszy C++_ ) > # C++ i przenośność > > > Po podjęciu decyzji o dystrybucji klasy C++ jako DLL, staje się > **podstawowych słabości C++**, czyli **braku > standaryzacji na poziomie binarnym**. Chociaż ISO/ANSI C++ Draft > Working Paper próbuje skodyfikować, które programy będą się kompilować i jakie będą > semantyczne skutki ich uruchamiania, nie podejmuje on próby standaryzacji > binarnego modelu wykonawczego C++. Po raz pierwszy ten problem stanie się > oczywisty, gdy klient spróbuje połączyć się z biblioteką DLL importu FastString > ze środowiska programistycznego C++ _innego niż_ używane do > kompilowania biblioteki DLL FastString. Czy jest więcej korzyści lub utraty tego braku binarnej standaryzacji?


title: Licencja aktualnego JDK

text: Zastanawiam się, jakiej licencji używa obecny JDK 7 (**NIE** OpenJDK), bo wiem, że kiedyś było na GNU GPL, ale wraz ze zmianą Licencji Dystrybutora dla Javy chciałbym wiedzieć, czy zmienili licencję allover , także.


title: Co robisz, gdy napotykasz idiotyczne pytanie podczas rozmowy kwalifikacyjnej?

text: Rozmawiałem z osobą o wyglądzie "zbyt dumnym z moich umiejętności Javy". 1. Zapytał mnie " _Jaka jest twoja wiedza na temat klas Java IO... powiedzmy... mapy hash?_ " 2. Poprosił mnie o napisanie kawałka kodu java na papierze - utworzenie instancji klasy i wywołanie jednej z metod instancji. Kiedy skończyłem, powiedział, że mój program się nie uruchomi. Po 5 minutach poważnego myślenia poddałem się i zapytałem dlaczego. Powiedział, że nie napisałem głównej funkcji, żeby nie działała. NA PAPIERZE. 3. [Jestem zbyt wściekły, aby kontynuować tę głupotę...] Uwierz mi, że to nie były podchwytliwe pytania, czy też sprawa oceny psychicznej lub radzenia sobie z gniewem. Po jego twarzy widzę, że był dumny z tych pytań. Ten „deweloper” miał „oceniać” kandydatów. Przychodzi mi do głowy kilka rzeczy: 1. Uderz go krzesłem (o co tak bardzo chciałem) i wyjdź. 2. Po prostu wyjdź. 3. Ośmiesz go, mówiąc, że nie ma sensu. 4. Uprzejmie daj mu znać, że nie ma sensu i spróbuj odpowiedzieć na pytania. 5. Nic mu nie mów, po prostu spróbuj odpowiedzieć na pytania. Do tej pory próbowałem tylko 4 i 5. To nie pomogło. Niestety wydaje się, że wielu kandydatów robi to samo i pozostaje uprzejmych, ale to pozwala tym rodzajom „programistów” po prostu wspinać się po drabinie korporacyjnej, stopniowo zdobywając zdolność do odkuwania coraz większej liczby osób. **Jak radzisz sobie z tymi ankieterami bez pękania żył? Jak właściwie sobie z tym poradzić, jednocześnie zachowując swoją reputację, gdyby inni potencjalni pracodawcy kiedykolwiek dowiedzieli się, co się tutaj wydarzyło? Czy jest coś, co możesz zrobić, a może nawet powinieneś spróbować _naprawić_ to?** **PS** Pozwolę sobie przyznać, że mój gniew był wielokrotnie wzmacniany przez fakty: 1. Uśmiechał się tak, jakbyś nie uwierzył. 2. Dzień wcześniej otrzymałem tyle (20 lub więcej) telefonów z tej firmy z prośbą o przybycie na rozmowę, że nie mogłem tego dnia wykonywać żadnej pracy. 3. Zmarnowałem płatny dzień wolny.


title: Programowanie OpenGL a oprogramowanie Blender, które jest lepsze do tworzenia niestandardowych filmów?

text: Uczę się API OpenGL krok po kroku, a także rozwijam własną bibliotekę frameworka C++, aby efektywnie z nich korzystać. Niedawno natknąłem się na oprogramowanie Blender, które służy do tworzenia grafiki i jest z kolei napisane w samym OpenGL. W moim hobby w niepełnym wymiarze godzin, jakim jest nauka grafiki, chcę po prostu tworzyć małe segmenty filmowe lub wideo; np. związane z inżynierią budowlaną, epickimi historiami i tak dalej. W przypadku tych filmów interakcja myszy i klawiatury może być minimalna lub zerowa, w przeciwieństwie do gier wideo, które są wysoce interaktywne. Zastanawiałem się, czy warto uczyć się OpenGL od podstaw, czy powinienem zainwestować swój czas w naukę oprogramowania Blendera? Istnieje wiele dobrych przykładów filmów stworzonych za pomocą Blendera i pokazanych na jego stronie internetowej. Mile widziane są również inne takie alternatywy opensource międzyplatformowe, które mogą służyć mojemu wyżej wymienionemu celowi.


title: Czy posiadanie dwóch warunków w instrukcji IF jest szybsze niż posiadanie dwóch oddzielnych instrukcji IF?

text: Zastanawiam się tylko, czy posiadanie dwóch warunków w instrukcji IF jest wykonywane szybciej niż rozdzielenie ich na dwa w następujący sposób: ### Pojedyncza instrukcja, dwa warunki if ( (warunekA == prawda) && (warunekB == prawda) ) //Zrób coś ; ### Dwie instrukcje if ( warunekA == true ) if ( warunekB == true ) //Zrób coś Czy są po prostu takie same po skompilowaniu? Oba mają ten sam kod, tylko część instrukcji `if` jest inna. W drugim przykładzie (dwa wyrażenia) nie będzie żadnego innego kodu pod `warunkiemA`, tylko po `warunkuB`. Czy ma to wpływ na PHP i JavaScript?


title: Czy operatory to tylko „specjalne” metody?

text: Oto, co oznaczają operatory i metody. Próba utrzymania pytań tak prostych i otwartych, jak to tylko możliwe, ponieważ pytanie dotyczy bardziej konceptualnej natury operatorów i metod, a NIE sposobu, w jaki język zdecydował się je zaimplementować. **Proof of Concept:** ten przykład w Ruby jest bardziej dowodem koncepcji niż cokolwiek innego. PRZYKŁAD: W Rubim „`1+2`” jest równoważne „`1.+(2)`”, co oznacza, że obiekt „1” implementuje metodę o nazwie „+” z obiektem „2” jako argumentem metody.


title: Jaki jest najlepszy sposób na wygenerowanie dokładnego dziennika zmian w wydaniu?

text: Pracuję nad kilkoma projektami, w których chciałbym dostarczać dokładny changelog z każdym wydaniem, ale nie znalazłem sposobu na zbieranie dziennika zmian, który działałby bez kłopotów. Problem pojawia się głównie wtedy, gdy czas między wersjami jest długi, a każda wersja jest dostarczana z wieloma funkcjami i poprawkami błędów, a oprogramowanie ma kilka gałęzi rozwijanych w tym samym czasie. Kilka opcji, które rozważałem: 1. Zbuduj changelog z komunikatów commit i wymagaj od programistów, aby pisali komunikaty tak, jakby pisali linię do changeloga (co faktycznie zrobiliby). * Może nie działać, gdy istnieje wiele gałęzi i łączy się między gałęziami (może być trudno stwierdzić, które zmiany ostatecznie znalazły się w wydaniu). 2. Wymagaj, aby dla każdej zmiany w kodzie znajdował się odpowiedni bilet w systemie śledzenia błędów. Changelog może być napisany na podstawie biletów. * Deweloperzy mogą uważać za frustrujące, aby zgłosić nawet drobne zmiany, zwłaszcza jeśli zgłoszenie trwa dłużej niż naprawienie błędu. 3. Wymagaj, aby programiści zawsze aktualizowali dziennik zmian (jako plik tekstowy w katalogu głównym projektu) w tym samym czasie, gdy wprowadzają zmiany w kodzie. * Czuje się jak praca ręczna, którą można zautomatyzować. 4. Niech kierownik projektu weźmie plik różnicowy bieżącej i poprzedniej wersji i napisze dziennik zmian w tym momencie w oparciu o to, co widzi, że zostało zmienione. * Dodatkowa praca dla osoby odpowiedzialnej za wydanie i może nie być oczywiste, jaki jest praktyczny efekt zmiany po prostu patrząc na kod. 5. Wysyłaj tylko te funkcje, które zostały zaplanowane do wydania; możesz napisać dziennik zmian jeszcze przed rozpoczęciem kodowania. * Nie jest to realna opcja, chyba że używasz modelu kaskadowego. Używałem każdego z nich lub ich odmiany w przeszłości, ale były zbyt zawodne, pracochłonne lub sztywne. Czy ktoś ma magiczną kulę lub dobre pomysły na rozwiązanie problemu?


title: Jak ważna jest inicjalizacja zmiennej?

text: Jak ważna jest inicjalizacja zmiennych? Czy prawidłowe inicjowanie pozwala uniknąć wycieków pamięci lub ma przewagę wydajności?


title: Sublinear Extra Space MergeSort

text: Przeglądam podstawowe algorytmy z książki Roberta Sedgewicka zatytułowanej Algorytmy i natknąłem się na problem w MergeSort, który, niestety, mam trudności z rozwiązaniem. Problem jest poniżej: > _Sublinear Extra Space_. Opracuj implementację scalania, która zmniejsza > wymaganą dodatkową przestrzeń do max(M, N/M), w oparciu o następujący pomysł: Podziel > tablicę na N/M bloki o rozmiarze M (dla uproszczenia tego opisu, > załóż, że N jest wielokrotnością M). Następnie (i) traktując bloki jako elementy > z ich pierwszym kluczem jako kluczem sortowania, sortuj je za pomocą sortowania przez wybór; oraz > (ii) przejść przez tablicę łączącą pierwszy blok z drugim, następnie > drugi blok z trzecim i tak dalej. Problem, jaki mam z tym problemem, polega na tym, że zgodnie z ideą zalecaną przez Sedgewicka następujący zestaw tablic nie zostanie posortowany: {0, 10, 12}, {3, 9, 11}, {5, 8, 13}. Algorytm, którego używam, jest następujący: 1. Podziel całą tablicę na podtablice o rozmiarze M. 2. Uruchom sortowanie przez wybór na każdej z podtablic. 3. Połącz każdą z podtablic przy użyciu metody zalecanej przez Sedgwick w (ii). (W tym miejscu napotykam problem, gdzie przechowywać wyniki po scaleniu). Prowadzi to do chęci zwiększenia rozmiaru przestrzeni pomocniczej potrzebnej do obsługi co najmniej dwóch podtablic naraz (w celu scalenia), ale w oparciu o specyfikację problemu, co jest niedozwolone. Rozważałem również użycie oryginalnej tablicy jako przestrzeni dla jednej podtablicy i użycie przestrzeni pomocniczej dla drugiej podtablicy. Nie wyobrażam sobie jednak rozwiązania, które nie skończy się nadpisywaniem wpisów pierwszej podtablicy. Jakieś pomysły na inne sposoby, w jakie można to zrobić? **UWAGA:** Jeśli to ma być na StackOverflow.com, daj mi znać, jak mogę to przenieść. Opublikowałem tutaj, ponieważ pytanie było akademickie.


title: Co to jest bezpieczeństwo wątków?

text: Co to jest? Czytałem Efektywny STL i natknąłem się na niego. Wygooglowałem to również, ale nie mogłem uzyskać żadnych przydatnych informacji.


title: Odwróć kolejkę za pomocą dodatkowej kolejki

text: Dostajesz 2 kolejki, Q1 i Q2. Q1 jest już wypełniony n elementami. Q2 jest puste Musisz odwrócić wszystkie elementy w Q1. Nie możesz używać żadnego innego pola poza Q2. dozwolone tylko operacje to Q.enqueue() i Q.dequeue() Złożoność czasowa - O(nlogn) znalazłem to pytanie na mniej popularnej stronie. http://www.questiondiscussion.com/questions/64/questiondiscussionchallenge-reverse-a-queue-using-an-extra-queue jest też kilka odpowiedzi. nie jestem w stanie zrozumieć rozwiązań, czy ktoś może mi pomóc z tym pytaniem?


title: „Niezmienne” interfejsy

text: Jestem zdezorientowany pojęciem niezmienności. Rozważ następującą strukturę uproszczonego kalkulatora: ![Diagram klas](http://i.stack.imgur.com/uKV21.jpg) Oto interfejsy: interface IOperationalInterface { int Sum(int a, int b); } interfejs IAuditInterface { int SumInvocations(); } Opcja `IOperationalInterface.Sum` powinna obliczyć sumę dwóch liczb całkowitych, a `IAuditInterface.SumInvocations` powinna zwracać całkowitą liczbę odebranych wywołań `Sum`. Oto prosta implementacja: class CalculatorImpl : IOperationalInterface, IAuditInterface { private int invocations = 0; public int Sum(int a, int b) { wywołania++; zwróć a + b; } public int SumInvocations() { return wywołań; } } Czy `CalculatorImpl` jest niezmienny? Oczywiście nie, ponieważ jego stan zmienia się z każdym wywołaniem metody `Sum`. Czy operacja „Sum” jest czysta? Według Wikipedii tak nie jest, ponieważ zmienia stan mutowalnego obiektu, a ten efekt uboczny można zaobserwować za pomocą `IAuditInterface`. Oczywiście operacja `SumInvocations` również nie jest czysta, ponieważ może zwracać różne wyniki. Podsumowując, `CalculatorImpl` jest zmienny i wszystkie jego metody są nieczyste. Jednak z punktu widzenia `CalculatorClient`, który komunikuje się z nim tylko przez `IOperationalInterface`, wydaje się on niezmienny, a operacja `Sum` wydaje się być czysta w tym sensie, że nie mogła zaobserwować żadnych skutków ubocznych _poprzez ten interfejs_ . Z drugiej strony, z perspektywy `AuditClient` jest zupełnie inaczej: oczywiste jest, że obiekt implementujący `AuditInterface` jest zmienny, a jego operacja `SumInvocations` jest nieczysta, a _wynika to bezpośrednio ze specyfikacji` Interfejs IAaudit`_. Tak więc możliwe jest podzielenie interfejsu/specyfikacji mutowalnej klasy w taki sposób, że niektóre jej części będą wyglądały na zmienne, a inne nie. W tym przypadku, biorąc pod uwagę tylko operację `Sum` i pomijając wymaganie, aby wywołania były liczone, otrzymujemy coś, co nie ma żadnych skutków ubocznych. Teraz implementując `CalculatorClient` można wziąć pod uwagę fakt, że obiekt za interfejsem _wydaje się_ być niezmienny. Przynajmniej nie można było odróżnić. Więc moje pytanie brzmi: czy ma sens mówienie o „niezmienności” interfejsów, czy jest to zły pomysł? Jak inaczej mogę zakomunikować fakt, że nie będzie obserwowalnych efektów ubocznych przez ten interfejs? A jeśli jest źle, co może pójść nie tak? **AKTUALIZACJA** Dziękujemy za odpowiedzi/komentarze! Teraz widzę, że nie można powiedzieć, że `IOperationalInterface` jest czysty; warunki czystości są zbyt surowe, aby można je było zastosować w tym przypadku. Pozostaje jednak pytanie, czy istnieje słabsze pojęcie (może „niezmienność”?), które ma zastosowanie.


title: Czy programowanie obiektowe ZAWSZE jest dobrym sposobem na duże projekty?

text: Czy programowanie obiektowe zawsze jest dobrym sposobem na wszelkiego rodzaju projekty? Czy ta metodologia najlepiej nadaje się do dużych projektów, takich jak kompilatory, interpretery i inne duże systemy? Większość kompilatorów jest napisana w C, więc nie widzę żadnych kompilatorów napisanych w metodzie obiektowej. Myślę, że OOP odnosi największe korzyści w miejscach takich jak LOB, symulacje, w których można traktować wszystko jako obiekt. Ale czy to naprawdę przydatne we wszystkich miejscach? Również OOP może prowadzić do nieefektywnego kodu niż kod proceduralny. Nie wspominając o tym, że wzorce projektowe czasami zwiększają złożoność projektu.


title: Czy przechowywanie typów w bazie danych jest wzorcem anty?

text: Trochę tła, skąd pochodzi to pytanie. W mojej obecnej aplikacji .NET pracuję nad kilkoma funkcjami związanymi z archiwizacją pewnego typu podmiotu gospodarczego o nazwie "Projekt". W zależności od sytuacji, co ma być zarchiwizowane i dokładne czynności związane z archiwizacją mogą się bardzo różnić. Moim podstawowym pomysłem jest stworzenie encji o nazwie ArchiveSchedule, która zasadniczo przechowuje dane mówiące, że tego rodzaju projekt powinien zostać zarchiwizowany po tym czasie. Chcę zawrzeć moje zapytania dotyczące wyboru wszystkich obiektów do zarchiwizowania oraz polecenia do faktycznej archiwizacji we własnych obiektach, które dziedziczą po niektórych typowych interfejsach. Będzie wiele zapytań archiwalnych (wybierz elementy na podstawie różnych właściwości lub czy zostały zarchiwizowane przed i później przywrócone itp.) oraz wiele poleceń archiwum (tj. poleceń, które wysyłają dane do różnych interfejsów, niektóre wykonują usuwanie itp. ). To, co rozważam, to uwzględnienie w ArchiveSchedule odwołań do rzeczywistego typu .NET odpowiadającego zapytaniu i poleceniu, którego chcę użyć dla tego harmonogramu. Następnie, gdy chcę faktycznie uruchomić zapytania i polecenia, używam odbicia do zbudowania obiektu i wykonania polecenia lub zapytania. Czy ta podstawowa strategia przechowywania informacji o typie w bazie danych, a następnie używania odbicia do tworzenia obiektów i wstrzykiwania zależności jest antywzorcem? A może jest na to lepszy sposób? Uwaga: Wiem, że istnieją pewne problemy z przechowywaniem nazwy typu lub przestrzeni nazw, ponieważ mogą się one zmienić podczas refaktoryzacji, ale uważam, że można je dość łatwo złagodzić za pomocą GuidAttribute w definicji klasy i zamiast tego przechowuję guid, więc jestem Ciekawe, czy poza tym są bardziej fundamentalne kwestie.


title: Programowanie funkcjonalne reaktywne/relacyjne – czy jest jakaś różnica?

text: Od jakiegoś czasu używam Reactive Cocoa (przez GitHub), funkcjonalnego _Reactive_ Programming API do użytku z bibliotekami Cocoa, ale właśnie przeczytałem "Out of the Tar Pit", artykuł, który rzekomo przedstawia koncepcje za nim, i jestem trochę zdezorientowany. W artykule przedstawiono (tak jak rozumiem) programowanie _relacyjne_ funkcjonalne, w którym relacje między danymi są tworzone z warunkami, które powinny być wymuszone przez system FRP, aby zmniejszyć ilość potrzebnej logiki „przypadkowej” i stanu. Moje pytanie brzmi, czy te dwie koncepcje - FR(eaktywny)P i FR(elastyczny)P są zasadniczo tym samym (przy czym ta pierwsza jest po prostu implementacją tego drugiego), czy jest między nimi zasadnicza różnica? Niestety w tej chwili moja wiedza o tym obszarze nie jest wystarczająco dobra, abym je wystarczająco rozróżnić. Jeśli jest różnica, wydaje się, że ma to związek, jak sama nazwa wskazuje, z reagowaniem na zmiany danych. Z pewnością Reactive Cocoa (i Rx w C#) mają koncepcję tworzenia _sygnałów_, które są wyzwalane przy zmianach danych i mogą być używane do ciągłego modyfikowania wartości w czasie. Czy to jest różnica? Jeśli nie, co to jest? (Proszę wybaczyć słabe tagowanie, nie mogę znaleźć odpowiednich tagów i nie mogę ich jeszcze utworzyć – w miarę możliwości zaktualizuj tagi do bardziej odpowiednich).


title: Prosty algorytm znajdowania duplikatów pływaków

text: Mamy N liczb (liczby rzeczywiste (zmiennoprzecinkowe)). Mogą być dodatnie lub ujemne lub cokolwiek, czego nie znamy, z wyjątkiem tego, że jest dokładnie jedna liczba, która ma duplikat, a wszystkie pozostałe są różne. Chciałbym wiedzieć, który najszybciej znajdzie duplikaty. Czy ktoś może pomóc? Dziękuję


title: Przeciwko czemu testerzy białej skrzynki tworzą przypadki testowe?

text: Zastanawiam się, czego używają testerzy białej skrzynki do tworzenia przypadków testowych? Rzeczywisty kod? Jakieś diagramy? Chodzi mi o to, że jeśli otrzymam zadanie stworzenia przypadków testowych dla pełnego pokrycia gałęzi, czy jest możliwe, że dadzą mi kod? Bo widziałem coś takiego: Reader r=null; if(warunek) { r=nowy Czytnik(); } r.toString(); Istnieje oczywisty błąd, ponieważ ostatnia instrukcja powinna znajdować się w treści instrukcji If. Będzie to łatwo ujawnione przez przypadek testowy dotyczący fałszywej decyzji. Ale czy nie jest to bardziej jak testy jednostkowe? Jaki jest zatem cel testowania białych skrzynek testerów? Artykuł Wikipedii o testowaniu białoskrzynkowym stwierdza: > Tester wybiera dane wejściowe, aby przećwiczyć ścieżki w kodzie i określić > odpowiednie dane wyjściowe. Rozumiem to, gdy wybierasz dane wejściowe, aby dotrzeć do zasięgu i ujawnić możliwe błędy. Ale czy nie jest to proste testowanie jednostkowe wykonywane przez programistów?


title: Czy nieograniczona ilość urlopów może w praktyce oznaczać tyle samo co 0 urlopów?

text: Programiści czasami trochę się wypalają i małe wakacje mogą pomóc. Kiedyś wiele firm hi-tech dawało 10 dni urlopu i 10 dni chorobowych rocznie. Ale w ostatnich latach widziałem, jak dni urlopowe i chorobowe stały się płatnym czasem wolnym (PTO). Każdy rok może trwać 15 dni lub 12 dni. (plus 1 ruchome i 9 stałych świąt, takich jak Święto Dziękczynienia, Boże Narodzenie i Nowy Rok) ( **Aktualizacja**: Kalifornia nie wymaga żadnego dnia chorobowego dla żadnej firmy, więc firmy, aby zachować konkurencyjność, mogą nie chcą mieć dni chorobowe i przegrywają z innymi firmami) A potem wiem, że niektóre firmy mają nieograniczone urlopy, takie jak Netflix lub Zynga, ale potem doświadczony programista powiedział mi, że wielu wiceprezesów w firmach hi-tech również ma nieograniczone urlopy, ale bo są tak zajęci, praktycznie za rok, w ogóle nie biorą urlopu. Jest też trochę dziwne, że jeśli polityka jest nieograniczona, to co jeśli Piotr chce od 1 grudnia do 1 stycznia na świąteczne wakacje, a Jan chce od 20 listopada do 1 stycznia? Jak ludzie decydują, co jest sprawiedliwe, jeśli mogą decydować o długości, gdy jest ona nieograniczona? Przypomina trochę program taki jak FTP, gdzie jeśli przepustowość jest ustawiona na 300k/s, to jest to 300k/s, ale gdy jest ustawione na 0, oznacza to, że jest nieograniczona. Tak więc „nieograniczony” w tym przypadku jest też tym samym, co „zero”. Chciałbym się dowiedzieć jak to jest w różnych firmach? Czy Twoja firma lub Twój post lub co słyszysz o nieograniczonych wakacjach i jak to jest w praktyce?


title: Prosty przykład PHP OOP ze świata rzeczywistego?

text: Próbuję nauczyć się PHP OOP, ale kiedy korzystałem z samouczków, wszystkie przykłady wydają się obejmować takie rzeczy jak: class Human { $_sex; funkcja publiczna setSex($sex) { $this->_sex = $sex; } public function getSex() { return $this->sex; } } (Bezsensowny przykład, ale mam nadzieję, że rozumiesz, o co mi chodzi - obiekt ma właściwości, które są w nim przechowywane.) Nigdy nie natknąłem się na aplikację internetową, w której musiałem tworzyć obiekty o ludziach, psach, samochodach , lub jakikolwiek inny dziwny przykład, który można znaleźć czytając samouczki o OOP... Więc próbuję znaleźć podobnie prosty, ale bardziej realistyczny projekt, za pomocą którego można nauczyć się OOP. Wybrałem stronę internetową na komiks internetowy (np. XKCD.com). (Umożliwiłoby to ludziom oglądanie komiksu, ale także autorowi na jego edycję i aktualizację.) Więc jak to przełoży się na rzeczywisty PHP OOP? Moim początkowym instynktem byłoby rozbicie obiektów w następujący sposób: * Katalog * Odcinek Gdzie klasa `Katalog` zawierałaby metody odnoszące się do wszystkich odcinków komiksu, np. `getMostRecentEpisodeID()`, `deleteEpisode($episodeID)`, `addNewEpisode($newEpisode)` itd. itd. `getEpisodeComments($episodeID)` (jeśli witryna pozwalała ludziom na komentowanie poszczególnych odcinków), `editEpisode($episodeID)`, `getEpisode($episodeID)` itd. Czy to prawda, czy zrobiłem absolutny hash do czego służy OOP? **Edytuj:** zamiast podawać mi listę przykładów, bardzo przydałoby się, gdyby Twoja odpowiedź zawierała konkretne odniesienie do problemu, który próbuję rozwiązać. Dziękuję.


title: Dlaczego baza danych jako kolejka jest tak zła?

text: Właśnie przeczytałem ten artykuł i jestem zdezorientowany. Wyobraźmy sobie, że 1 aplikacja internetowa i 1 odrębna aplikacja działają jako „pracownik”, oba **współdzielą tę samą bazę danych**. Och, powiedziałem „udostępnianie”..ale przed czym ostrzega artykuł? : > Po czwarte, współdzielenie bazy danych pomiędzy aplikacjami (lub usługami) jest złą rzeczą. To po prostu zbyt kuszące, aby umieścić tam amorficzny wspólny stan i > zanim się zorientujesz, będziesz mieć bardzo połączonego potwora. => nie zgadzam się. W niektórych przypadkach różne aplikacje nadal stanowią część tej samej jednostki, a zatem pojęcie „problemu sprzężenia” nie ma w tym przypadku sensu. Kontynuujmy: aplikacja internetowa obsługuje żądania HTTP klienta i może w dowolnym momencie aktualizować niektóre agregaty (termin DDD), generując odpowiednie zdarzenia domeny. Celem pracownika byłoby obsłużenie tych zdarzeń domeny przez przetwarzanie potrzebnych zadań. Chodzi o to: **Jak dane o zdarzeniach powinny być przekazywane pracownikowi?** Pierwszym rozwiązaniem, jak promuje przeczytany artykuł, byłoby użycie RabbitMQ, będącego świetnym oprogramowaniem pośredniczącym zorientowanym na komunikaty. Przepływ pracy byłby prosty: za każdym razem, gdy hamownia internetowa generuje zdarzenie, publikuje je za pośrednictwem RabbitMQ, który zasila pracownika. Wadą byłoby to, że nic nie gwarantuje **natychmiastowej spójności** między zatwierdzeniem zagregowanej aktualizacji a publikacją zdarzenia, bez zajmowania się potencjalnymi błędami wysyłania... lub problemami ze sprzętem; to kolejny główny problem. Przykład: jest możliwe, że zdarzenie zostało opublikowane bez powodzenia aktualizacji agregującej... powodującej zdarzenie reprezentujące fałszywą reprezentację modelu domeny. Można argumentować, że istnieje globalne XA (zatwierdzenie dwufazowe), ale nie jest to rozwiązanie, które pasuje do wszystkich baz danych lub oprogramowania pośredniczącego. Więc jakie może być dobre rozwiązanie, aby zapewnić tę natychmiastową spójność? : IMO, przechowujący zdarzenie w bazie danych, w tej samej transakcji lokalnej, co aktualizacja zbiorcza. Stworzony zostałby prosty asynchroniczny harmonogram, który odpowiadałby za odpytywanie bieżących, niepublikowanych zdarzeń z bazy danych i wysyłanie ich do RabbitMQ, który z kolei wypełnia proces roboczy. Ale po co dodatkowy scheduler po stronie webaplikacji, a przy okazji: po co w tym przypadku RabbitMQ? Przy takim rozwiązaniu logicznie wydaje się, że RabbitMQ może być niepotrzebny, zwłaszcza że baza danych jest współdzielona. Rzeczywiście, niezależnie od przypadku, widzieliśmy, że natychmiastowa spójność **zawiera** odpytywanie z bazy danych. Dlaczego zatem pracownik nie miałby być bezpośrednio odpowiedzialny za to badanie? Dlatego zastanawiam się, dlaczego tak wiele artykułów w sieci prawie nie krytykuje kolejkowania baz danych, a promuje oprogramowanie pośredniczące zorientowane na wiadomości. Fragment artykułu: > Proste, użyj odpowiedniego narzędzia do pracy: ten scenariusz wymaga > systemu przesyłania wiadomości. Rozwiązuje wszystkie opisane powyżej problemy; nie więcej > odpytywania, wydajne dostarczanie wiadomości, nie ma potrzeby usuwania zakończonych wiadomości > z kolejek i brak współdzielonego stanu. **I natychmiastowa spójność, ignorowana ???** Podsumowując, wydaje się, że niezależnie od tego, czy baza jest współdzielona czy nie, potrzebujemy **odpytywania bazy danych**. Czy przegapiłem kilka krytycznych pojęć? Dziękuję


title: Największe przeszkody w pracy nad projektem grupowym

text: Robię swój pierwszy projekt grupowy w klasie, w której większość ćwierć 40% uczniów oblało. Uważam, że powodem tego jest słaba jakość nauczania w klasie. Na przykład instruktor nie wiedział, że skrypty w JSP to zła praktyka. (Uczyłem się JSP w tym tygodniu i wiem o tym.) Nie wiedział, że GUI Swinga miały być włączone do EDT. Nie wiedział, że statyczne importy to zła praktyka. Mogę iść dalej. Projekt polega na zaprojektowaniu aplikacji internetowej na stronę quizową. Dostępnych jest wiele dodatkowych kredytów i możliwe jest uzyskanie 200%. To mój pierwszy projekt grupowy. Martwię się porażką większości moich rówieśników i chcę tego uniknąć. **Jakie przeszkody mogę napotkać podczas pracy nad takim projektem i jak mogę je pokonać?**


title: Jak zatrzymać / uniknąć nadgodzin w zespole Scrumowym?

text: Właściwie to pomagam małemu sklepowi z oprogramowaniem w implementacji Scrum. Ostatnio Scrum Master zgłosił mi, że ma problem, ponieważ Zespół pracuje **Nad czasem**, aby osiągnąć Zakres (Committed Backlog). Więc mają **Unreal Velocity**. Moje formalne pytanie (pytania) to: 1. Oprócz mówienia o spotkaniu retrospektywnym; czy uważasz, że dobrym pomysłem jest zaimplementowanie pewnych twardych blokad, aby uniknąć z biegiem czasu? 2. Jeśli tak, jakie techniki/narzędzia proponujesz? * System kontroli wersji (SVN, GIT, HG, itp.), bloki według godzin (8 do 5) * Bloki stanowisk pracy według godzin (8 do 5) lub godzin skumulowanych (do 8 godzin dziennie)? * Inne... 3. A może nie blokuj tego typu rzeczy na stałe; ale wdrożyć jakiś **"System kar"** za **Nieuzasadnione dodatkowe godziny**? * * * Po pierwsze: dziękujemy za szybkie odpowiedzi. @Baqueta (i inni z podobnymi pytaniami): Nie, nie otrzymują wynagrodzenia za dodatkowe godziny. Moją pierwszą radą dla nich było przejrzenie swoich szacunków, ponieważ być może nie doszacowali. To była moja ulubiona rada: > **Jeśli są zainteresowani pracą w nadgodzinach, usuń ją.** Rozwój > nie jest czymś, co można robić przez 60 godzin tygodniowo i pozostać produktywnym, oraz > istnieje wiele badań, które udowodnić to. Jeśli problemem jest wynagrodzenie za nadgodziny, pozbądź się go i popraw ich podstawową płacę, aby otrzymywali tyle, ile są warte. Uważam również, że główny problem (dla tego zespołu) jest kombinacją następujących elementów: > 1. Deweloperzy są informowani, co muszą osiągnąć w sprincie/nie są > są konsultowani w sprawie tego, co jest osiągalne/ są ignorowane kiedy mówią, że jest > za dużo pracy. > 2. Deweloperzy konsekwentnie nie doceniają, ile czasu zajmą zadania > / ile jednostek pracy jest zaangażowanych w każde zadanie. > **Podsumowanie:** porozmawiam z zespołem, aby przejrzeć jego szacunki, i z numerem P.O. ponieważ czuję, że _nie są konsultowani_ w sprawie zakresu, jak wspomniałeś.


title: W jakich jednostkach szacowane są punkty fabularne?

text: Czytam o studium przypadku dotyczącym zespołu, który szacuje zadania lub „punkty historii”, jak je nazywają, na podstawie wysiłku potrzebnego do ich wykonania. W jakich jednostkach szacowane są te „punkty historii”? Uważam, że to pojęcie „punktów historii” wywodzi się z procesu zwanego „rozwojem zwinnym”.


title: Przygotuj plan przekazania kodu źródłowego

text: Nasza firma ma zamiar pozyskać kod źródłowy ogromnego produktu. Co należy wziąć pod uwagę, gdy rozpocznie się przekazanie, aby upewnić się, że mamy wszystko i będziemy w stanie utrzymać ten produkt w przyszłości?


title: Jak firmy ukrywają strony internetowe, gdy są w fazie rozwoju?

text: Jestem w tym nowy, a także nowy 19-letni programista PHP, który właśnie został zatrudniony, więc nie jestem pewien, jak to działa. Wiele firm, tworząc swoje witryny internetowe, ukrywa swoje witryny przed indeksowaniem. W jaki sposób działanie html5/css, a następnie php/mysql jest ukryte przed wyszukiwarkami? Jeśli się nie mylę, oto techniki: 1. Programowanie offline: używanie pamięci lokalnej do renderowania html/css; nie jestem pewien, jak PHP/mysql by z tym działał. 2. Korzystanie z .htaccess w celu uniemożliwienia dostępu 3. Korzystanie z VPN w celu uniemożliwienia dostępu.


title: Czy praca w „witrynie dla dorosłych” zaszkodzi mojej przyszłej szansie na zatrudnienie?

text: Rozważam podjęcie pracy inżyniera oprogramowania w serwisie pornograficznym. Chociaż nie mam żadnych zastrzeżeń moralnych do branży, czy będzie to czerwona flaga na moim CV?


title: Kiedy przestać, a kiedy usunąć w Javie

text: W ramach refaktoryzacji lub po prostu ciągłego rozwoju, konkretna metoda lub może cała klasa może stać się w pewnym sensie przestarzała. Java obsługuje adnotację `@Deprecated`, aby wskazać, że prawdopodobnie istnieje lepszy sposób obsługi danej funkcjonalności. Wyobrażam sobie, że jest to szczególnie przydatne w publicznych API, gdzie skutki usunięcia części API mogą nie być znane. W przypadku niepublicznego interfejsu API i projektu, który korzysta z systemów kontroli wersji (a więc usunięcie można w pewnym sensie cofnąć), kiedy należy wycofać zamiast usuwać przestarzałe elementy?


title: Rozdzielanie słów w ciągu

text: Jak oddzielić słowa w ciągu? Poniżej mam losową próbkę słów w ciągu wydobytym z pliku tekstowego zawierającego ponad milion słów. Oto ciąg: „interweniować Kieszonki Jerozolima i tkanki potężne dni gadżety oceniają wynalazki podgrzewają Stewarti znajdują wspólne działy pracujące wewnętrzne Spowodowały hałas oferują goi duże skoki straciły galaktyki All Mall narodziny dziecka wirowanie świata zabite wyprodukowały świetne centrum Nie udawaj Afryka czas rozwiązania kursor dobranoc problem zawodowy uchodźcy rozmawiają”. Jak widać, trzecie słowo to „Jerozolima”. Moim celem jest oddzielenie „Jerozolimy” od „i” i zrobienie tego samego z innymi słowami, które są ze sobą sklejone. Jedyną rzeczą, o której mogę teraz pomyśleć, jest porównanie każdego słowa w ciągu ze słownikiem (może SCOWL?), a jeśli segment słowa pasuje do słowa w słowniku, będę musiał podzielić słowa na uczynić je niezależnymi. Jako przykład, dla „Jerusalemand” będę przechodzić przez każdy znak, aż w słowniku znajdzie się odpowiednik „Jerusalem”, wtedy mogę oddzielić to od „i”, co z kolei zakończy separację. Czy nie powinno być lepszego sposobu na zrobienie tego?


title: Zwirtualizowane środowiska programistyczne w sieciach korporacyjnych

text: Próbujemy wdrożyć środowisko programistyczne z wykorzystaniem wirtualizacji dla małego zespołu 4 programistów w ramach organizacji korporacyjnej. Umożliwiłoby nam to utworzenie oddzielnych środowisk programistycznych, testowych i pomostowych, a także umożliwienie dostępu do nowych systemów operacyjnych, które są wymaganiami dla ocenianych przez nas systemów lub narzędzi. Zmieniliśmy przeznaczenie istniejącej maszyny klasy stacji roboczej, dodaliśmy 24 GB pamięci RAM i RAID-10 i radziliśmy sobie dobrze, dopóki nie spróbowaliśmy dodać maszyny do domeny. Teraz rozpoczynamy wojnę, którą od początku musieli toczyć wszyscy deweloperzy korporacyjni – walkę o lokalną kontrolę środowiska programistycznego i testowego. Administratorzy sieci i IT zgłosili obawy, od „Serwer ESX jest standardem korporacyjnym” przez „serwery nie są dozwolone w sieciach VLAN klienta” po „[wypełnij puste miejsce] nie jest zestawem umiejętności aktualnie posiadanych w lokalnym lub korporacyjna organizacja IT". Moglibyśmy uzasadnić sprzęt klasy produkcyjnej i formalne wsparcie IT, gdybyśmy musieli, ale zajęłoby to czas i wiązałoby się z ogromnym bólem głowy. Nawet wtedy formalne przydzielenie zasobów IT może zająć miesiące, traktując to jako system produkcyjny – a nawet gdybyśmy to zrobili, prawdopodobnie stracilibyśmy potrzebną nam kontrolę lokalną. Wyobrażam sobie, że wielu z was borykało się z podobnymi zmaganiami o kontrolę deweloperów nad środowiskami nieprodukcyjnymi – a w szczególności wirtualizacją – więc moje pytania są następujące: 1. Jakie strategie i argumenty pomogły Wam zdobyć przewagę nad ludźmi zajmującymi się infrastrukturą (IT & Network) pozwolić na istnienie tego typu silosów w przedsiębiorstwach, które mają standardowe zasady dotyczące sieci i bezpieczeństwa, które generalnie (i co zrozumiałe) wykluczają ten rodzaj infrastruktury nie zarządzanej (centralnie)? 2. Czy uważasz, że jest to kwestia technicznego uzasadnienia – czy bardziej politycznej walki o kontrolę i własność? 3. Jeśli skończyłeś ze środowiskiem programistycznym zarządzanym przez dział IT, jak dużą przeszkodą było codzienne tworzenie i testowanie? 4. Czy ktoś przeniósł swoje środowisko programistyczne do odłączonej sieci VLAN lub całkowicie oddzielnej sieci, aby uniknąć problemów z dostępem do sieci? Ponadto nie jest to święta wojna między Hyper-V a ESX (bylibyśmy w porządku z jednym i drugim – ale wybrano Hyper-V, ponieważ jest „bezpłatny” z MSDN do tych celów [tak, VMWare również ma darmowe narzędzia – ale dobre narzędzia do zarządzania generalnie nie są] i byłyby łatwiejsze do zarządzania przez lokalnych programistów w „Sklepie Microsoft”) – więc argumenty za lub przeciw nie są objęte zakresem tego pytania. Jest to również mniej wirtualizacji w porównaniu z fizycznym sprzętem - przypuszczam, że to samo pytanie można zadać bez komponentu wirtualizacji do równania. Załóżmy również, że zespół programistów zapewnił już, że będzie zarządzał zarządzaniem poprawkami i oprogramowaniem antywirusowym lub zintegrował się z istniejącymi systemami korporacyjnymi, jeśli będą to wspierać. Ten scenariusz, z różnymi pytaniami, jest również publikowany na SF, aby, miejmy nadzieję, wydobyć przeciwny punkt widzenia.


title: Jak poprawnie rozpocząć budowanie klas baz danych w c#?

text: Jestem nowy w programowaniu C# i OOP. Muszę zagłębić się w aplikacje internetowe dla mojej firmy i muszę to zrobić szybko i poprawnie. Więc nawet jeśli wiem, że ASP.NET MVC jest drogą do zrobienia, chcę zacząć od kilku prostych aplikacji z formularzami sieci Web ASP.NET, a następnie przejść do logiki MVC. Również w odniesieniu do moich klas baz danych: planuję stworzyć wspólne klasy baz danych, aby móc z nich korzystać zarówno z aplikacji WinForms, jak i ASP.NET. Wiem też, że najlepszą drogą jest poznanie ORM i EF. ALE chcę też zacząć od miejsca, w którym czuję się komfortowo i to jest tradycyjny sposób ADO.NET. A więc o moich klasach warstwy dostępu do danych: * Czy powinienem zwracać wyniki w zestawach danych lub tablicach/listach? * Czy moje metody powinny samodzielnie łączyć/rozłączać się z bazą danych, czy też powinny mieć oddzielne metody i pozwolić aplikacji utrzymywać połączenie?


title: Implementacja FUSE do deduplikacji

text: Jestem nowy w FUSE i używam python-fuse do pisania systemu plików do deduplikacji danych. Powiedzmy, że mam katalog o nazwie "metadata" iw tym katalogu znajduje się plik foo i katalog "data". Dane zawierają porcje danych o unikalnych nazwach. Te fragmenty są uzyskiwane w procesie deduplikacji danych. foo zawiera listę nazw plików znajdujących się w katalogu danych. Biorę katalog metadanych i wystawiam go pod napędem punktu montowania. Do tej pory zaimplementowałem metodę `readdir()` taką, że jeśli polecenie ls zostanie wywołane na dysku, wyświetli tylko foo. Teraz chcę zrobić następującą rzecz. Kiedy plik foo jest odczytywany, powinien wyświetlić wszystkie dane (połączone) z każdego pliku, którego nazwa jest w foo. Jak zaimplementować metodę `read()`? Mam następujący pomysł: Metoda ma sygnaturę `def read(self, path, length, offset, fh)`. Otwórz plik i przeczytaj listę. zainicjować pusty bufor. Dla każdego elementu na liście dołącz zawartość pliku o nazwie everyItem do bufora powrotu bufora. Czy zmierzam w dobrym kierunku? Skoro chcę napisać bezpiecznik tylko do odczytu, czy zaimplementowanie tylko metody `read()` jest wystarczające?


title: Uzyskaj dostęp do obiektu JSON w różnych językach

text: Mam kod Java, który zapisuje niektóre dane w formacie ciągu do kolejki Messaging. Teraz każdy może zapisać się do tej kolejki i pobrać te dane. Tutaj klient pobierający te dane może być napisany w dowolnym języku programowania. Planowałem ujawnić te dane w formacie JSON, ale zgodnie z moim zrozumieniem muszę ujawnić mój obiekt Bean, ponieważ obiekt jest potrzebny do przeanalizowania tego ciągu JSON. I w tym przypadku ograniczam klienta tylko do Javy. Nie chcę mieć żadnych takich ograniczeń, więc teraz szukam ujawnienia tych danych jako XML. W jakikolwiek inny sposób, abym nadal mógł tutaj używać JSON?


title: Jak połączyć wyszukiwane słowa? AND czy OR?

text: Mam na swojej stronie podstawowe wyszukiwanie. Kiedy go projektowałem, zdecydowałem się połączyć dane wejściowe pola wyszukiwania z OR. Na przykład: wyszukiwanie `foo bar` zostanie przetłumaczone na `foo OR bar`, więc każdy wpis zawierający foo lub bar zostanie wyświetlony. Zrobiłem to, ponieważ pomyślałem, że wyszukiwanie powinno zwracać jak najwięcej i pozostawić użytkownikowi wyszukiwanie za pomocą AND (wyszukiwanie `foo i bar` zwróci tylko wpisy zawierające oba). Kiedy klient go przetestował, bardzo się starał wyszukać „foo bar” i nie był w stanie znaleźć właściwego wpisu, ponieważ wyszukiwanie powróciło za dużo. Wydaje mu się mylące, że wyszukiwanie „foo bar” może zwrócić wpisy, w których uwzględniono jedno z danych wejściowych wyszukiwania, a nie oba. Jaki jest najlepszy sposób łączenia wyszukiwanych słów (gdy użytkownik nie podaje żadnych informacji o łączeniu)? Czy powinienem używać argumentu „foo AND bar” czy „foo OR bar”?


title: Algorytm rozmieszczania obiektów tak, aby całkowita długość krawędzi między nimi była jak najmniejsza?

text: Otrzymaliśmy listę krawędzi pomiędzy zbiorem N wierzchołków. Wierzchołek łączy co najwyżej trzy krawędzie. Musimy ułożyć wszystkie wierzchołki na linii prostej z pozycjami ponumerowanymi od 1 do N tak, aby suma długości wszystkich krawędzi była jak najmniejsza. Długość krawędzi a,b to różnica między położeniami wierzchołków „a” i „b” na linii. Jest maksymalnie 12 wierzchołków. Algorytm powinien działać w ciągu 1 sekundy. To jest prawdziwy problem. Próbowałem rozwiązać ten problem, próbując wszystkich permutacji i ustalając całkowity koszt każdej krawędzi. Ale to działa tylko dla 8 z 12 przypadków testowych problemu. Ponieważ w najgorszym przypadku całkowita liczba operacji jest proporcjonalna do 12! * 18. Rozmiar N jest bardzo mały, więc myślę, że rozwiązanie może być podobne do wypróbowania wszystkich możliwości. Nie potrzebuję kompletnego rozwiązania tego problemu, ponieważ chcę spróbować sam go wymyślić, ale tylko podpowiedź, jak mogę zoptymalizować mój algorytm, aby działał w limicie czasu. Dziękuję.


title: Czy mogę wdrożyć aplikację Google App Engine na własnym serwerze?

text: Zaczynam tworzyć aplikacje internetowe i rozważam użycie Google App Engine. Wspaniale, że mogę wdrożyć aplikację internetową na serwerach Google, ale czy to moja jedyna opcja? Czy mogę używać innego systemu uwierzytelniania niż usługi Google?


title: Pracodawca przyznaje, że jego deweloperzy są słabo opłacani i niedoceniani. Czas się rozstać?

text: Mój pracodawca niedawno opublikował ofertę pracy dla programisty C# z 3-5 letnim doświadczeniem. Wymagania i oczekiwania dotyczące stanowiska były uczciwe, aż do kryteriów ustalania wynagrodzenia. Wyraźnie stwierdzono, że wynagrodzenie będzie zależeć TYLKO od doświadczenia z C#, a lata doświadczenia w programowaniu z innymi językami i frameworkami będą uważane za nieistotne i nieuwzględnione. flaga i odejdź. Próbowałem wyjaśnić, że tworzenie oprogramowania to znacznie więcej niż tylko konkretne języki i że płacenie komuś za jego doświadczenie w jednym języku jest bardzo krótkowzrocznym podejściem do zatrudniania dobrych programistów (mówię to działowi HR firmy programistycznej) . Odpowiedź: „Jesteśmy zmęczeni marnowaniem czasu na rozmowy kwalifikacyjne z programistami, którzy oczekują „dużych zarobków”, ponieważ mają dużo dodatkowego doświadczenia w programowaniu w językach innych niż te, których potrzebujemy”. Problemem nr 1 jest to, że „duże pensje” = kurs rynkowy. Po poważnej dyskusji przyznali w zasadzie, że nikt w firmie nie otrzymuje wynagrodzenia za swoje umiejętności zbliżone do stawki rynkowej i nic na to nie można poradzić. W zarządzie panuje taka mentalność, że pracownicy powinni być opłacani tylko za umiejętności sprawdzone przez lata pod ich okiem. Programiści na poziomie podstawowym są wybierani za mniej niż 38 000 USD i mogą osiągnąć 50 000 po 3 latach, co, jak zakładam, dotyczy tego, co planują zaoferować kandydatom na stanowisko C#. Kolejne ciekawe odkrycie (nie tak istotne) – osoby „awansowane” do wyższych obowiązków nie dostają podwyżek. „Awans” jest uważany za dostosowanie ról jednostek, aby lepiej pasowały do ich „mocnych stron”, za co już im płacą. Po usłyszeniu tych trudnych prawd prosto z HR, zakładam, że większość osób, które dbają o siebie, szybko zacznie szukać nowego pracodawcy, który ma lepsze pojęcie o tym, co robią w branży (ta firma zawodzi w wielu innych sposobów, ale nie chcę pisać książki). Oto jednak mój dylemat: To pierwsze oficjalne stanowisko programistyczne, które piastuję, zaledwie od 1 roku. Moje poprzednie stanowisko przez 3 lata było w bardzo małej firmie, w której wykonywałem wiele obowiązków, w tym tworzenie oprogramowania (nie w moim oficjalnym opisie stanowiska, ale bardzo się starałem, aby tak było). Zidentyfikowałem lokalne oferty pracy, do których obecnie się kwalifikuję, większość z nich płaci co najmniej 50% więcej niż teraz. Pytanie brzmi, czy jest za wcześnie na skok? Zdobywam cenne doświadczenie na moim obecnym stanowisku, nie brakuje ciekawych projektów. Środowisko pracy jest bardzo wygodne i wielu mówi mi, że jestem w centrum uwagi chłopaków z poziomu C dzięki rzeczom, które udało mi się osiągnąć w ciągu mojego krótkiego czasu (za ile to jest warte). Jednakże, istnieje wyraźny koszt alternatywny pozostania, wiedząc teraz z całą pewnością, że będę musiał poczekać 3-5 lat tylko po to, aby zostać ograniczonym do tego, co potencjalnie mógłbym zarobić gdzie indziej w tym roku. Zdaję sobie również sprawę z tego, że „zbiornik pracy” jest niebezpieczną etykietą, niezależnie od powodów. AKTUALIZACJA: Właśnie przyjąłem ofertę w innej firmie, płacąc znacznie więcej i przy jeszcze fajniejszych projektach. Dziękuję wszystkim za wnikliwe odpowiedzi.


title: Czy zwyczajowo zapisuje się obiekty domeny Java / obiekty transferu danych z publicznymi zmiennymi członków na platformach mobilnych?

text: Przeprowadziliśmy ostatnio przegląd kodu aplikacji mobilnej w języku Java, który został opracowany przez zewnętrznego wykonawcę i zauważyliśmy, że wszystkie obiekty domeny / obiekty transferu danych są napisane w następującym stylu: public class Category { public String name; publiczny int id; publiczny opis ciągu; public int parentId; } public class EmergencyContact { public long id; public RelationshipType typ relacji; public String medicalProviderType; publiczny kontakt kontaktowy; publiczne Ciąg innyTelefon; publiczne notatki strunowe; public PersonName personName; } Oczywiście dostęp do tych członków uzyskuje się bezpośrednio w każdym innym miejscu kodu. Kiedy zapytaliśmy o to, programiści powiedzieli nam, że jest to zwyczajowy wzorzec projektowania zwiększania wydajności, który jest używany na platformach mobilnych, ponieważ urządzenia mobilne są środowiskami o ograniczonych zasobach. To nie ma sensu; dostęp do prywatnych członków za pośrednictwem publicznych programów pobierających/ustawiających nie wydaje się, aby zwiększał obciążenie. A dodatkowe korzyści enkapsulacji wydają się przewyższać korzyści płynące z tego stylu kodowania. Czy to generalnie prawda? Czy jest to coś, co zwykle robi się na platformach mobilnych z powodów podanych powyżej? Wszystkie opinie mile widziane i doceniane -


title: Czy ASP.NET MVC jest powolny w porównaniu z tradycyjnym podejściem?

text: Tworzę trzy foldery w Eksploratorze projektów dowolnego IDE, którego używam. Nazywam je: warstwa aplikacji, warstwa biznesowa i warstwa danych. Warstwa aplikacji zawiera wszystkie elementy interfejsu użytkownika, warstwa biznesowa zawiera wszystkie klasy zajmujące się logiką biznesową, a warstwa danych zawiera klasy łączności i zapytań bazy danych. Jestem nowy w wzorcu MVC i kiedy próbowałem go na VS2010 z ASP.NET, okazało się, że jest to znacznie bardziej skomplikowane z wszelkiego rodzaju utworzonymi folderami zagnieżdżonymi. Oddzieliłem już logikę i interfejs użytkownika w moim starym stylu. Różnicą w MVC jest to, że możesz użyć Routingu do bezpośredniego wywoływania metod przez adres URL (popraw mnie, jeśli się mylę), ale w takim przypadku zakładam, że wydajność aplikacji MVC spada. Wywołanie metody za pośrednictwem adresu URL, a następnie wykonanie zapytania do bazy danych, jest tylko obciążeniem. Czy wydajność ASP.NET MVC nie jest nieco powolna? Nawet jeśli zarządzanie jest dobre, ale krzywa uczenia się jest również bardzo stroma?


title: Czy powinienem ściśle przestrzegać każdego standardu HTML i CSS?

text: Kilka lat temu uważałem się za programistę stron internetowych, znając podstawowe 3 języki (HTML, CSS, JS) i dużo PHP. Przejście od prostego tekstu do rzeczywistych stron internetowych było uciążliwe ze względu na tak zwane „standardy”, które w tamtym czasie były dla mnie śmiesznie skomplikowane. Sprowadzało się to do tego (bez rzeczy związanych z IE): ![Tworzenie stron internetowych na wykresie kołowym](http://i.stack.imgur.com/aVD7a.gif) Standardy mają zastąpić stare sposoby działania rzeczy w prostszy sposób. Jednak próbując faktycznie zaimplementować niektóre rzeczy (na przykład układ całkowicie oparty na CSS), zajęło mi to 10 razy dłużej, niż gdybym zrobił prostsze i nadal działające rozwiązanie. Skoro wyrenderował to samo, dlaczego miałbym używać bardziej skomplikowanego przykładu, który trwa 10 razy dłużej i psuje się po zmianie przeglądarki? Wywołało to wiele długich debat religijnych w ##php, ##css i ##js na Freenode IRC i faktycznie zbanowało mnie z ##css, ponieważ zamieszałem w ich małym świecie. Moje pytanie: Czy powinienem przestrzegać każdego standardu i konwencji kodowania, nawet jeśli zabierają mi to 10 razy dłużej, ale dają mi taki sam wynik, jak ten prosty? * * * W przypadku tagu ankiety, ci z was, którzy mają strony dowolnej wielkości (duże lub małe), czy **wy** przestrzegacie wszystkich standardów?


title: Jak przekazać bezpłatną kopię mojej aplikacji na iPhone'a?

text: Właśnie kończę pisać aplikację na iPhone'a i przesyłam ją do App Store do zatwierdzenia. Zamierzam sprzedać aplikację za odpowiednią cenę, ale chciałbym móc od czasu do czasu rozdać kilka darmowych kopii, coś w rodzaju oferty promocyjnej. Wiem, że kiedy idziesz do jednej konkretnej kawiarni, mają dostępne karty podarunkowe dla różnych artystów. Wpisujesz kod i natychmiast "kupuje" i pobiera piosenkę dla Ciebie. Chciałbym móc zrobić coś podobnego do mojej własnej aplikacji. czy to możliwe?


title: Dynamiczny algorytm programowania do znajdowania minimalnego drzewa rozpinającego

text: Znam fajne zachłanne algorytmy, takie jak brokuva, kruskal i prim's do znajdowania minimalnego drzewa opinającego, ale jestem ciekaw dynamicznego algorytmu programowania do znajdowania minimalnego drzewa opinającego. Nie jestem w stanie wymyślić takiego algorytmu. Jeśli ktoś już to ma, proszę o wyjaśnienie swojego algorytmu wraz z kodem. Albo może ktoś argumentować na odwrót, dlaczego taki dynamiczny algorytm programowania nie może istnieć.


title: W jaki sposób akumulacja dużych ilości logiki biznesowej w obiektach modelowych utrudnia budowanie silnych kontraktów serwisowych?

text: Kilka razy słyszałem, że umieszczanie logiki biznesowej w modelach baz danych jest złe. Właśnie przeczytałem to na blogu pracownika Rackspace: _ORM Django miał również tendencję do gromadzenia dużej ilości logiki biznesowej na obiektach modelowych, co jeszcze bardziej utrudniało budowanie silnych kontraktów serwisowych._ Ale wydaje mi się logiczne, że jeśli masz model „Faktura”, który zawiera wiele logiki fakturowania. Wydaje się bardzo podobne do tego, czego nas uczono w OOP. Czy możesz mi pokazać, jak to jest źle? Jeśli to możliwe, podaj praktyczny przykład. **Zaleta „umieszczania logiki w modelach”** Uważam, że dużą zaletą umieszczania logiki w modelach jest to, że użytkownicy modeli nie muszą się martwić o to, jak mogą używać rzeczy, po prostu z nich korzystają i to działa , nie może niczego złamać. Pozwólcie, że rozwinę przykład: więc jeśli nie umieszczasz logiki w modelach, to prawdopodobnie masz ten kod gdzie indziej, powiedzmy, że jest w `api`. Jeśli chcesz zmienić stan „Faktury”, co robisz? Czy robisz `invoice.state = new_state` czy czytasz kod `api`, aby sprawdzić, czy jest tam jakaś metoda, która zmienia stan? Jest to mylące i podatne na błędy. Jak w takim razie rozwiązać ten problem?


title: Jak zorganizować większy projekt z kilkoma podprojektami i ich zależnościami?

text: Jako programista do tej pory pracowałem głównie nad projektami, które były dość "monolityczne" prawie bez zależności od innych projektów, bez automatyzacji budynku (bez Make, Ant, Maven itp.) i trzymałem się prostego systemu kontroli wersji (głównie Subversion) z kilkoma łatwymi do zarządzania gałęziami wersji. Teraz wraz z kilkoma przyjaciółmi planuję projekt, który ma działać na wielu platformach (głównie mobilnych: Android, iOS, Kindle, Windows itp.), a więc napisany w kilku językach i na różnych platformach programistycznych. Doprowadzi to do wielu zależności: Wszystkie projekty współdzielące te same zasoby (np. obrazy) lub projekty zależne od siebie (np. podstawowy projekt biblioteki Java używany przez Androida i inne implementacje oparte na Javie). Potrzebuję więc podstawowych informacji, jak odpowiadać na takie pytania, jak: Jak byłby zorganizowany VCS? Czy baza klientów czy zdecentralizowany system VCS byłyby lepsze? Jak zdecydować o zastosowaniu systemu(ów) automatyki budynkowej? Ponieważ to dość otwarte pytanie, myślę, że na razie byłoby wspaniale, gdybyś mógł wskazać mi jakiekolwiek książki lub zasoby internetowe, które możesz polecić na ten temat.


title: Analiza wymagań Komunikacja

text: Kiedyś rozmawialiśmy o obecnym projekcie i nagle sir i mój senior zaczęli rozmawiać o nowej funkcji do dodania w projekcie, a ja się zgubiłem :). nie byłem w stanie znaleźć sposobu, w jaki powinienem podać swój wkład do nowej funkcji. Więc chcę wiedzieć, co należy omówić przy opracowywaniu nowej funkcji w projekcie i jak możemy przyczynić się do rozmowy o nowych funkcjach. Proszę zasugeruj.


title: Czy są jakieś wady w podejmowaniu pracy, w której będę używał unikalnego języka programowania?

text: Właśnie ukończyłem studia z dyplomem CS, więc chciałbym znaleźć pracę, w której mógłbym dowiedzieć się więcej o tej dziedzinie i zdobyć doświadczenie zawodowe. Rozmawiałem z firmą, która używa własnego, wewnętrznego języka programowania i nie sądzę, by ktokolwiek inny go używał. Nie wspomnieli o używaniu innych języków ani tego, czego używają w środowisku programistycznym. O co powinienem się martwić podejmując taką pracę? Gdybym miał zmienić pracę później, czy musiałbym ponownie zacząć szukać pozycji na poziomie podstawowym, ponieważ nie zdobyłem żadnego doświadczenia językowego?


title: Przechowuj historię w kolumnie bazy danych SQL

text: Posiadamy bazę danych przechowującą proces/historię poszczególnych maszyn. Mam na myśli to, że „rozpoczęliśmy”, „zaktualizowaliśmy”, „zamknęliśmy” i tak dalej dla wszystkich komputerów w firmie. Warunkiem jest, aby historia była dostępna w odpowiedniej kolejności. Wystarczająco proste. Moje podejście polegało na stworzeniu prostej tabeli bazy danych, takiej jak ta: licznik | maszyna | czas | proces | ... 1 | PC1 | ... | rozpoczęte 2 | PC2 | ... | aktualizacja 1 | PC1 | ... | aktualizacja Zapytanie będzie bardzo proste, ponieważ mogę po prostu sortować według licznika. Moi koledzy zaproponowali zupełnie inne podejście. Moje przeczucie mówi, że to jest złe, ale nie mam wystarczających argumentów przeciwko temu. Czy możesz pomóc określić, co jest z nim nie tak? Zamiast używać wielu wierszy dla procesu maszyny, chcą zapisać je kolejno w tym samym polu. To samo dotyczy pola czasu. Ich głównym argumentem jest to, że oszczędzamy licznik pamięci | maszyna | czas | proces | ... 1 | PC1 | ... ... ... | rozpoczął aktualizację zamknięcia 2 | PC2 | ... ... ... | rozpoczął aktualizację


title: Użycie # w odpowiedziach/dokumentacji przy odwoływaniu się do metod klasy

text: Przeglądając dokumentację Java lub odpowiedzi na pytania dotyczące przepełnienia stosu / forum programowania, często widzę ludzi odwołujących się do metod takich jak `String#format`, `Object#clone` itp., a nie `String.format`. Czy to ma coś wspólnego z tym, że jest to metoda niestatyczna, czy to tylko jakaś konwencja? Jest to dość trudne do wyszukania, ponieważ większość wyszukiwarek ignoruje symbol „#”, więc przepraszam, jeśli jest to zduplikowane pytanie.