title: Możliwa poprawa Damerau-Levenshteina?

text: Niedawno zaimplementowałem algorytm odległości Damerau-Levenshteina z pseudokodu na Wikipedii. Nie mogłem znaleźć żadnego wyjaśnienia, jak to działa, a pseudokod używa zupełnie nieinformacyjnych nazw zmiennych, takich jak `DA`, `DB`, `i1` i `j1`, przez co drapiłam się w głowę. Oto moja implementacja w Pythonie: https://gist.github.com/badocelot/5327337 Implementacja w Pythonie pomogła mi przejść przez program i dowiedzieć się, co się dzieje, zmieniając nazwy zmiennych na bardziej przydatne. Znałem na tyle podejście Wagnera-Fischera do obliczania odległości Levenshteina, że miałem układ odniesienia. Ryzykując, że będę zbyt długi, oto jak rozumiem Damerau- Levenshtein: **Tajemnicze zmienne:** * `DA` (`last_row` w moim kodzie) to rodzaj mapy przechowującej ostatni wiersz, w którym każdy element był widziany ; w moim kodzie jest to rzeczywisty słownik Pythona * `DB` (`last_match_col`) zawiera ostatnią kolumnę, w której litera w `b` odpowiadała literze w `a` dla bieżącego wiersza * `i1` (`last_matching_row`) to numer wiersza z `DA` dla bieżącej litery w `b` * `j1` jest tylko kopią wartości `DB`/`last_match_col` przed potencjalną aktualizacją; w moim kodzie właśnie przeniosłem się, gdzie `last_match_col` jest aktualizowany i wyeliminowałem tę zmienną **Koszt transpozycji:** H[i1][j1] + (i-i1-1) + 1 + (j-j1-1) to obliczanie kosztu zamiany bieżącego znaku w „b” na ostatni znak w „b”, o którym wiadomo, że znajduje się w „a” (ostatnie dopasowanie), traktując wszystkie znaki pomiędzy nimi jako dodawanie lub usuwanie. _Składniki kosztu:_ * `H[i1][j1]` przywraca koszt bazowy do punktu w obliczeniach przed transpozycją, ponieważ znalezienie transpozycji unieważnia poprzednią pracę * `(i-i1-1)` to odległość między bieżącym wierszem a ostatnim wierszem pasującym do bieżącego znaku, który jest wymaganą liczbą usunięć * `(j-j1-1)` to odległość między bieżącą kolumną a ostatnią kolumną z dopasowaniem, czyli liczba uzupełnień * Dodatkowe `+1` to tylko koszt samej transpozycji Jeśli ta analiza jest niepoprawna, chciałbym wiedzieć, gdzie popełniłem błąd. Jak powiedziałem, nie mogłem znaleźć _żadnego_ szczegółowego wyjaśnienia działania algorytmu w sieci. **Wersja ulepszona?** Po zrozumieniu tego uderzyło mnie, że obliczanie kosztu _zarówno_ dodawania, jak i usuwania między transponowanymi literami wydawało się wadliwe: jedno dodanie i jedno usunięcie jest równoważne podstawieniu, czego to nie sprawdza dla. Jeśli wszystko się zgadza, rozwiązanie powinno być trywialne: koszt liter między przeniesionymi literami powinien być _wyższy_ niż dodawania i skreślenia: zamień jak najwięcej na podstawienia i dodaj wszelkie pozostałe dodatki lub skreślenia. Czyli koszt byłby następujący: H[i1][j1] + max((i-i1-1), (j-j1-1)) + 1 Oto mój kod dla tej wersji: https://gist.github.com /badocelot/5327427 Z niektórych prostych testów wynika, że wydaje się to poprawne. Na przykład "abcdef" -> "abcfad" daje odległość edycji 2 (transponuj "d" i "f", zmień "e" na "a"), podczas gdy oryginalny algorytm daje odległość 3 (ostatnie trzy litery są podstawieniami lub 1 transpozycja + 1 dodanie + 1 usunięcie). Teraz **nie mogę** być pierwszą osobą, która o tym pomyślała. Więc dlaczego nie natknąłem się na to? Czy po prostu nie szukałem wystarczająco długo? A może jest jakaś subtelna wada, która uniemożliwia to faktyczne działanie?


title: jak mogę przeprowadzić rozmowę kwalifikacyjną na stanowisko C#, jeśli opanuję Javę?

text: > **Możliwy duplikat:** > Rozmowa z programistą, który zna język, którego nie znasz. Pracuję nad stroną java projektu i całkiem nieźle ją opanowuję. Kiedy przeprowadzam rozmowę kwalifikacyjną na stanowisko java, zadaję kilka pytań technicznych/problemów z programowaniem, aby upewnić się, że kandydat ma solidne umiejętności, a nie tylko „5 lat doświadczenia”. Ale w ogóle nie znam C#. Mógłbym poszukać niektórych pytań w Internecie (i ich odpowiedzi), ale jeśli zadam im te pytania, mogę nie być w stanie wyraźnie zobaczyć, czy ich odpowiedź jest dobra, czy zła, może mają rację w jakiś sposób itp. Również wygrałem nie będę w stanie kontynuować żadnej dyskusji pobocznej itp. Więc zasadniczo pytam, czy ktoś z wiedzą java/C# może wymyślić pytania, które: 1. są wystarczająco głębokie, aby pokazać, że facet jest solidny 2. Ja (z javą wiedza, ale zero C#) może rozpoznać, że ich odpowiedź jest dobra / rozsądna / dobrze przemyślana, czy nie.


title: Czy istnieje sposób na walkę z ciągłym nadmiernym zaangażowaniem w sprzedaż?

text: Wydaje mi się, że wielokrotnie utknąłem w sytuacji, w której daty wydania nie są ustalane na podstawie niczego technicznego, ale dlatego, że ktoś z działu sprzedaży już wtedy zobowiązał się do klienta. Opierając się na rozmowach z przyjaciółmi o rozwoju w innych firmach, wydaje się, że dzieje się to samo. „Oto zestaw funkcji, a tu data premiery” i trudno się spierać, ponieważ w tym momencie krążą po nim pieniądze, a to wszystko przebija. **Ogólnie rzecz biorąc, czy jest jakiś sposób, aby to odepchnąć?** Jeśli nie ta wersja, co będzie w przyszłości? Problem, jaki mam, polega na tym, że jedynym sposobem, aby to zrobić, jest robienie wszystkiego, co w mojej mocy, ale wydanie oprogramowania „tak jak jest”, że tak powiem. Nie chcę wydawać oprogramowania obarczonego błędami, ponieważ jest to moje imię, ale robienie 80 godzin tygodniowo przez miesiące po prostu potwierdza arbitralnie ustaloną datę wydania. edit: dla przypomnienia, nie pracuję teraz 80 godzin tygodniowo, tylko to przychodzi mi do głowy, co byłoby wymagane do pokrycia oczekiwanej funkcji ustawionej przed datą premiery.


title: Jakiego języka skryptowego użyć do przesyłania dużych plików na komputerach klienckich z systemem Windows XP

text: Jestem programistą java, którego zadaniem jest tworzenie skryptów, które będą obsługiwać duże transfery plików dokumentów xml, uderzając w niektóre interfejsy API usług internetowych z komputerów klienckich z systemem Windows XP. Mogą istnieć inne formaty dokumentów, takie jak .pdf, .doc, .xls lub .txt, ale w tym momencie nie jestem pewien. Zajrzałem do powershell, groovy, perl, ale nie jestem pewien, który z nich byłby najlepszy, ponieważ nie pracowałem z żadnym z nich i może istnieć lepsza alternatywa niż te trzy, które wymieniłem . Więc jeśli chodzi o bezpieczeństwo, łatwość wdrożenia i konserwację skryptu (niezbyt skomplikowane ani duże), co najlepiej spełni te wymagania?


title: Czy sieci neuronowe to najlepsze podejście do sztucznej inteligencji i uczenia maszynowego?

text: Lubię uczyć się o technikach sztucznej inteligencji Jakie inne techniki niż sieci neuronowe są przydatne dla sztucznej inteligencji i uczenia maszynowego?


title: Czy wiele klas „pomocników” koliduje z przyjętym schematem projektowania Apple?

text: Mam aplikację opartą na lokalizacji społecznościowej i jestem w pewnym konflikcie projektowym, którego nie mogę rozwiązać ani znaleźć dobrych informacji. Zdając sobie sprawę, że mam wiele kontrolerów, które w podobny sposób uzyskują dostęp do lokalizacji użytkownika i ładują tablicę miejsc, które mają być wyświetlane w widoku tabeli, stworzyłem klasę, która ma metody klasy, aby zapewnić lokalizację użytkownika (współrzędne i/lub odwrotne geokodowanie adres) i wypełnić NSArray o zmiennej wielkości lokalizacji oraz inne metody, których będą używać różni kontrolerzy do tworzenia swoich danych. Nazwij to „SpotsManager”. Przewidując przyszłą złożoność, rozdzieliłem obowiązki `SpotManager'a na 2 oddzielne klasy, `SpotLocationManager` do pakowania `CLLocationManager` i `SpotNetworkManager` do pakowania AFNetworking. Czy wszyscy ci menedżerowie wydzielają zapach kodu? Wydaje się to nadmierne, zwłaszcza w porównaniu z większością przykładowych aplikacji Apple, ale jednocześnie wydaje się, że jest to korzystna, ścisła organizacja. Aby kontrastować z moim poprzednim podejściem, rozgałęziłem się i stworzyłem klasę `SpotsList`, która wie, jak wypełnić swoje instancje lokalizacjami. Ale kwestionuję rozszerzenie tej klasy bez tworzenia jakiejś boskiej klasy. (A „[SpotList currentCoordinate]” nie brzmi dobrze.) Zdaję sobie sprawę, że pytania dotyczące projektowania wysokiego poziomu dają możliwość wyrażenia opinii, więc szczególnie proszę o odpowiedzi, które zapewnią obiektywność i wgląd w projekt zatwierdzony przez Apple.


title: Dlaczego jest znacznie więcej wsparcia dla zamkniętego formatu xls w railach (i ruby) niż dla otwartego formatu ods?

text: To trochę przygnębiające, ale wydaje mi się, że jest znacznie więcej wsparcia dla manipulowania brzydkim, zastrzeżonym formatem zamkniętym, takim jak xls w szynach (i ruby) w ogóle, niż w przypadku udokumentowanego otwartego formatu Open Document. Dlaczego tak jest? (Wiem, że to trochę filozoficzne, ale po prostu nie rozumiem, że opensource nie jest bardziej skłonny do pisania SW dla otwartych formatów). Na przykład ruby jest klejnotem arkusza kalkulacyjnego.


title: Wpływ ReSharpera na kodowanie rozmów kwalifikacyjnych

text: Każdy, kto używał R# lub CodeRush, wie, jak szybko można składać proste konstrukcje (i refaktoryzować złożone) za pomocą prostego skrótu klawiaturowego. Jednak **czy te wtyczki zwiększające produktywność powodują fałszywą ocenę umiejętności podczas rozmowy kwalifikacyjnej?** Częścią bycia produktywnym koderem (i robienia dobrego pierwszego wrażenia podczas rozmowy kwalifikacyjnej) jest pisanie dobrego kodu – szybko. Gdybym miał dwóch kandydatów: 1. Nie używa wtyczek. Zastanawia się nad problemem, siada przy standardowym IDE na komputerze do przeprowadzania wywiadów, który wygląda dokładnie jak jej, i jak zwykle wpisuje kod za minutę lub dwie. Gotowe. Podawać. 2. Używa wtyczek. Rozmyśla o problemie, siada przy standardowym IDE na komputerze wywiadu i uświadamia sobie, że „fe + tab” nie zapisuje już automatycznie pętli foreach, a wszystkie skróty zniknęły. Potem bełkocze po klawiaturze, uderzając w swoje normalne skróty klawiszowe, wyskakując dziwne okna i denerwując się. Napisanie tego, co normalnie zajęłoby mu 30 sekund, zajmuje mu 3 minuty. Gotowe. Wyglądało na to, że czasami nie znali IDE. Musi być nowy w tym IDE i dlatego nie miał z nim dużego doświadczenia, a może języka. Zdać, ale obok ich nazwy znajduje się znak „meh”. Z twojego doświadczenia, jak radzisz sobie z wtyczkami podczas wywiadów jako ankieter lub rozmówca? Jakie są najlepsze praktyki, aby uzyskać to, co naprawdę wie kandydat? Mogą istnieć kandydaci, którzy nie rozumieją kodu i używają R# jako podpory. Mogą również istnieć kandydaci, którzy znają kod i używają R#, ponieważ jest po prostu szybszy niż wbudowane szablony VS lub Eclipse. Czy najlepiej w ogóle nie używać IDE? Niech przyniosą własny komputer? Inni?


title: Jak powinien być zorganizowany kod testu jednostkowego C++, aby uzyskać maksymalną wydajność testu jednostkowego?

text: * To pytanie _nie_ dotyczy ram testów jednostkowych. * To pytanie _nie_ dotyczy pisania testów jednostkowych. * To pytanie dotyczy _gdzie_ umieścić napisany kod UT oraz jak/kiedy/gdzie go skompilować i uruchomić. Pracując efektywnie z Legacy Code, Michael Feathers twierdzi, że > dobre testy jednostkowe ... działają szybko i że > Test jednostkowy, który trwa 1/10 sekundy, jest powolnym testem jednostkowym. Myślę, że te definicje mają sens. Myślę też, że sugerują one, że musisz osobno przechowywać zestaw _Testy jednostkowe_ i zestaw _Testy kodu, które trwają dłużej_, ale myślę, że to cena, jaką płacisz za nazywanie czegoś testem jednostkowym, jeśli działa (bardzo) szybko . Oczywiście **problem** w C++ polega na tym, że aby "uruchomić" swój test jednostkowy( **s** ), musisz: 1. Edytuj swój kod (produkcyjny lub test jednostkowy, w zależności od tego, w którym "cyklu" in) 2. Kompiluj 3. Link 4. Uruchom plik wykonywalny testu jednostkowego ( **s** ) * * * Edytuj (po dziwnym głosowaniu na zamknięcie): Zanim przejdziemy do szczegółów, spróbuję podsumować punkt tutaj: Jak można C++ Kod testu jednostkowego powinien być efektywnie zorganizowany, tak aby zarówno edytowanie kodu (testowego) jak i uruchamianie kodu testowego było wydajne? * * * **Pierwszy** problem polega na tym, aby zdecydować _gdzie_ umieścić kod testu jednostkowego tak, aby: * „naturalne” było edytowanie go i przeglądanie w połączeniu z powiązanym kodem produkcyjnym. * łatwo/szybko można rozpocząć cykl kompilacji _jednostki_, którą aktualnie się zmieniasz **Drugim** powiązanym problemem jest _co_ skompilować, aby informacja zwrotna była natychmiastowa. Ekstremalne opcje: * Każda jednostka testu jednostkowego znajduje się w osobnym pliku cpp, a ten plik cpp jest kompilowany + łączony osobno (wraz z testowanym plikiem jednostki kodu źródłowego) z pojedynczym plikiem wykonywalnym, który następnie uruchamia ten jeden test jednostkowy. * (+) Minimalizuje to czas uruchamiania (kompilacja+link!) dla pojedynczej jednostki testowej. * (+) Test przebiega bardzo szybko, ponieważ testuje tylko jedną jednostkę. * (-) Wykonanie całego pakietu będzie wymagało uruchomienia bazylionów procesów. Może być problemem w zarządzaniu. * (-) Narzut związany z uruchamianiem procesów stanie się widoczny * Druga strona to — nadal — jeden plik cpp na test, ale wszystkie testowe pliki cpp (wraz z testowanym kodem!) są połączone w jeden wykonywalny (na moduł / na projekt / wybierz swój wybór). * (+) Czas kompilacji nadal byłby w porządku, ponieważ skompilowany zostanie tylko zmieniony kod. * (+) Wykonywanie całego pakietu jest łatwe, ponieważ do uruchomienia jest tylko jeden plik exe. * (-) Łączenie pakietu zajmie wieki, ponieważ każda ponowna kompilacja dowolnego obiektu spowoduje ponowne połączenie. * (-)(?) Wykonanie kombinezonu zajmie więcej czasu, _chociaż_ jeśli wszystkie testy jednostkowe są szybkie, czas powinien być w porządku. Jak więc obsługiwane są **testy jednostkowe** C++ w prawdziwym świecie? Jeśli uruchamiam to tylko co noc/co godzinę, druga część tak naprawdę nie ma znaczenia, ale pierwsza część, a mianowicie jak „powiązać” kod UT z kodem produkcyjnym, aby deweloperzy mieli „naturalne” zachowanie obu myślę, że zawsze liczy się skupienie. (A jeśli programiści skupią się na kodzie UT, będą chcieli go uruchomić, co sprowadza nas z powrotem do części drugiej.) _Doceniane historie i doświadczenie ze świata rzeczywistego!_ Uwagi: * To pytanie celowo pozostawia nieokreśloną platformę i system tworzenia/projektowania . * Questions Tagged UT & C++ to świetne miejsce do rozpoczęcia, ale niestety zbyt wiele pytań, a zwłaszcza odpowiedzi, jest zbyt mocno skoncentrowanych na szczegółach lub na konkretnych frameworkach. * Jakiś czas temu odpowiedziałem na podobne pytanie dotyczące struktury testów jednostek doładowania. Uważam, że tej struktury brakuje „prawdziwych”, szybkich testów jednostkowych. Drugie pytanie jest dla mnie zbyt wąskie, stąd to nowe pytanie.


title: Licencjonowanie oprogramowania

text: Mam aplikację i jestem gotowa, aby ją wypuścić w dziki świat Internetu. Jednak jestem zdezorientowany kilkoma rzeczami. Mając na uwadze, że nie udostępniam kodu źródłowego, czy muszę dołączyć licencję, jeśli nie chcę, aby mój program został skopiowany i przejęty przez kogoś innego? Jeśli tak, to który? Należy również pamiętać, że jest to niekomercyjna aplikacja niezależnego programisty.


title: Nazywanie usługi internetowej REST

text: Mam serwis webowy z resztą z punktem końcowym `www.foobar.com/service.svc/MAC` (kod autoryzacji migracji). Wysyłanie i dotarcie do tego dodaje i otrzymuje odpowiednio jeden MAC. Teraz muszę zaimplementować nowy punkt dla wszystkich MAC. Co by to było? „www.foobar.com/service.svc/MAC/All” wydaje się błędny. Co byłoby poprawne i dlaczego?


title: Czy prywatne metody statyczne w C# coś szkodzą?

text: Stworzyłem prywatną metodę walidacji dla pewnej walidacji, która zdarza się wielokrotnie w mojej klasie (nie mogę przechowywać zweryfikowanych danych z różnych powodów). Teraz ReSharper sugeruje, że funkcja może być statyczna. Trochę niechętnie to robię ze względu na znane problemy z metodami statycznymi. Byłaby to _prywatna_ metoda statyczna. Moje pytanie brzmi, czy prywatne metody statyczne mogą powodować podobne problemy z łączeniem i testowaniem, jak publiczne metody statyczne? Czy to zła praktyka? Chyba nie, ale nie jestem pewien, czy jest tu jakaś pułapka.


title: TDD: Czy robię to dobrze?

text: Jestem nowym programistą (uczę się dopiero od około roku) iw moim celu, aby stać się w tym lepszym, niedawno dowiedziałem się o TDD. Chciałem wyrobić w sobie nawyk używania go, ponieważ wydaje się bardzo pomocny. Chciałem sprawdzić i upewnić się, że używam go poprawnie. Co robię: 1. Pomyśl o nowej metodzie, której potrzebuję. 2. Utwórz test dla tej metody. 3. Test nie powiódł się. 4. Napisz metodę. 5. Zdać test. 6. Metoda refaktoryzacji. 7. Powtórz. Robię to dla KAŻDEJ metody, którą piszę, czy są jakieś, którymi nie powinienem zawracać sobie głowy? Później zwykle myślę o tym, jak przetestować moje już istniejące metody w inny sposób lub w innej sytuacji. Czy powinienem zrobić te nowe testy, o których myślę, czy skoro każda metoda ma już własny test, czy nie powinienem się tym przejmować? Czy mogę być PONAD testowaniem mojego kodu, myślę, że jest to moja główna troska o to pytanie. **EDYTUJ** Poza tym to było coś, nad czym właśnie się zastanawiałem. Czy robiąc coś takiego jak tworzenie GUI, TDD byłoby konieczne w takiej sytuacji? Osobiście nie wyobrażam sobie, jak pisałbym na to testy.


title: Czy radzę sobie z wyjątkami w rozsądny sposób?

text: Nadal restrukturyzuję kod, który otrzymałem do aktualizacji w moim bieżącym projekcie roboczym, i doszedłem do punktu, w którym patrzę, jak kod obsługuje „wyjątkowe” dane wejściowe, które nie są zgodne z logika biznesowa. Zasadniczo kod łączy ze sobą różne arkusze kalkulacyjne programu Excel, uruchamia je i pozwala użytkownikowi „pobrać” je do swojego obszaru roboczego w celu późniejszej analizy. Oto, co ustawiłem w kodzie: Jeśli kod kończy się (w dowolnym miejscu), próbując na przykład zaimportować pusty arkusz kalkulacyjny do końcowego skoroszytu (coś, co nigdy nie powinno się zdarzyć, zgodnie z logiką biznesową), napisz do Zmienna LinkedList (ErrorList) w klasie statycznej (MyVariables), błąd: MyVariables.ErrorList.add("My Specific Error Text"); Następnie wrzucam wyjątek taki jak: wrzuć nowy PICNICException(); Następnie w ramce, która wywołała ślad metod, wyjątek zostaje w końcu przechwycony i mogę napisać coś takiego: catch(PICNICException Pe){ JOption.showMessageDialog(This, MyVariables.ErrorList.getLast(), "Title Relevant to what Kod działa", JOption.ERROR_DIALOG) Pe.printStackTrace(); } ~~Mam~~ czuję, że muszę to zrobić, ponieważ nie mam możliwości wyświetlenia okna dialogowego wiadomości (co jest pożądanym zachowaniem w przypadku błędów) z poziomu metody, która jest zgłaszana przez ten wyjątek. Bez _całkowitej_ refaktoryzacji całej bazy kodu i stworzenia singletona, do którego można uzyskać dostęp z dowolnego miejsca, aby obsłużyć te dialogi komunikatów, nie widzę innego sposobu na zrobienie tego. Nie mogę oprzeć się wrażeniu, że to gigantyczny hack i jest na to lepsza metoda. Czy radzę sobie z moimi wyjątkami w najlepszy możliwy sposób, _biorąc pod uwagę moją sytuację_? Jaka byłaby najlepsza praktyka?


title: Zmiana witryny zorientowanej na serwer na bardziej zorientowaną na JS

text: Przede wszystkim nie jestem facetem od Javascriptu, ale bardziej w kierunku PHP. Jednak chcę przejść na wyższy poziom, czyli odciążyć serwer i pozwolić klientowi na przetwarzanie. Mam nadzieję, że będę bardziej facetem od JS. Moją pierwszą myślą jest żądanie danych z serwera, a to po prostu zwraca klucz-wartość, którą klient wygeneruje HTML i wstawi wartości. Generalnie są 3 problemy: 1. Uważam, że o wiele łatwiej jest wygenerować HTML w PHP, ponieważ wymiana danych między serwerem a HTML jest płynna. W przeciwieństwie do zwracania danych w JSON, które następnie muszę wybrać DOM, który chcę i wpisać wartości np. `$('.personRecord').html(data['name'])`. Uważam też, że pętla przez tablice i generowanie HTML jest łatwiejsze niż JS? 2. Używam tak dużo selektora jQuery, aby wybrać element, którym chcę manipulować, i nie jestem pewien, czy jest to właściwa praktyka (w przyszłości będę ninja JS). Ale robię to, bo na pewno ratuje to wiele postaci. 3. Aby łatwo wybrać elementy, staram się nadawać im unikalne nazwy klas jako identyfikatory. Ponownie, nie jestem pewien, czy to właśnie zrobi Ninja JS. Idąc dalej (tendencja internetowa), chciałbym wiedzieć, czy powinienem włożyć więcej pracy w JS? Jakieś pomysły lub przemyślenia na temat tego, jak mogę przezwyciężyć moje 3 problemy wymienione powyżej? Czy grzechem jest zwracanie sformatowanego kodu HTML jako części wartości JSON? A może HTML powinien być generowany w JS i odczytywać wartości ze zwróconego JSON tylko wtedy, gdy jest to potrzebne? Odkładając na bok frameworki (wiem, że są Backbone, Angular, Can.JS i wiele innych), czy ktoś naprawdę robi skrypty w surowym JS? To znaczy, jest to możliwe, ale wydaje się niezwykle rozwlekłe. Na koniec, proszę o radę, jak przekonwertować witrynę zorientowaną na serwer na witrynę zorientowaną na JS? Jeśli to, co napisałem, nie ma sensu, miejmy nadzieję, że możesz wskazać niektóre witryny skoncentrowane na JS i wyjaśnić, jakiego podejścia używają jako przykładu. Witryny, które są w pełni funkcjonalne (np. Może facebook, twitter, stackoverflow), a nie tylko aplikacja internetowa TODO.


title: Czy użytkownik nie może manipulować elementami HTML, które są wyłączone dla nieuprawnionego użytkownika?

text: Czy przy dzisiejszych rozszerzeniach/narzędziach przeglądarki nie jest łatwo użytkownikowi edytować ustawienia html/css witryny, a tym samym włączyć niektóre wyłączone przyciski itp., Aby uzyskać dostęp do niedozwolonych obszarów?


title: Czy JRuby jest podobny do RubyMRI, ale lepszy, czy może brakuje mu pewnych rzeczy?

text: Rozważam użycie JRuby w projekcie, który musiałby porozmawiać z jakąś Javą. Z tego, co czytam o JRuby nie zauważam, że brakuje mu niczego, co ma standardowy Ruby. Czy to prawda? Czy JRuby ma wszystko, co ma oryginalne Ruby, a także JVM? A może czegoś brakuje w JRuby i korzystanie z niego wymaga do pewnego stopnia kompromisu? Dziękuję! Alex


title: Czy framework Fork/Join nie pasuje do interfejsu Java 8 Streams API?

text: Dzisiaj znalazłem artykuł o Fork/Join-Framework Javy8 i jego wykorzystaniu do implementacji strumieni równoległych. Chociaż rozumiem ten artykuł, nie jestem do końca pewien, co powinienem o nim myśleć. Zasadniczo to, co mówi, że F/J w połączeniu ze strumieniami jest prawie bezużyteczne, a zwłaszcza w kontekście aplikacji JEE. Wymieniono kilka konkretnych argumentów, takich jak: > * potrzebuje ogromnej ilości łatwo rozdzielonych danych (zagregowanych), > * tworzy obfite wątki bez względu na innych, > * ma duży potencjał do przepełnienia stosu, > * ma wysoki potencjał ogromnego wykorzystania pamięci, > * ma bardzo, bardzo wąskie okno wydajności, > * jest przeznaczony tylko dla jednego żądania na raz. > Co więcej, daje te argumenty przeciwko podejściu F/J do dekompozycji rekurencyjnej: > Dekompozycja rekurencyjna ma jeszcze węższe okno wydajności. Ponadto > do powyższej dynamicznej dekompozycji, dekompozycja rekurencyjna zoptymalizowana dla > rekurencyjnego podziału rekurencyjnego działa dobrze tylko: > > * na zrównoważonych strukturach drzewiastych (Directed Acyclic Graphs) > * gdzie nie ma zależności cyklicznych > * gdzie czas trwania obliczeń nie jest zbyt krótki ani za długi > * gdzie nie ma blokowania. > Ponieważ jest to jedyne źródło, jakie udało mi się znaleźć, które narzeka na FJ, nie jestem pewien, czy można to potraktować poważnie. Czy powyższe lub inne podobne punkty są uzasadnione? Dokładniej, czy Oracle ma oficjalne stanowisko dotyczące ograniczeń F/J Framework w odniesieniu do zrównoleglania przetwarzania strumieni? Jeśli tak, czy planuje coś z nimi zrobić?


title: Czym tak naprawdę jest MVC?

text: Jako poważny programista, jak odpowiedzieć na pytanie **Co to jest MVC?** Moim zdaniem MVC jest dość mglistym tematem – i dlatego, jeśli Twoi odbiorcy są uczącymi się, możesz swobodnie opisz to w kategoriach ogólnych, które raczej nie będą kontrowersyjne. Jednakże, jeśli rozmawiasz z dobrze poinformowaną publicznością, zwłaszcza z ankieterem, trudno mi wymyślić kierunek, w którym mógłbym obrać, który nie groziłby reakcją „no cóż, to nie w porządku!...”. Wszyscy mamy inne doświadczenia w świecie rzeczywistym i tak naprawdę nie spotkałem się dwa razy z tym samym wzorcem implementacji MVC. W szczególności wydaje się, że istnieją spory dotyczące ścisłości, definicji komponentów, separacji części (która część pasuje gdzie) itp. Więc **jak mam wyjaśnić MVC** w sposób, który jest poprawny, zwięzły i niekontrowersyjny?


title: Jak naprawdę działają złączenia MySQL?

text: W moim przypadku łączenie tabeli wewnątrz podzapytania lub na zewnątrz podzapytania daje bardzo małą różnicę w stosunku do `COUNT` **CASE 1:** około 6202 wierszy. W tym przypadku `table_c` jest łączony wewnątrz podzapytania, ale jest tylko łączony (Żadne inne działania dla tabeli, nie zaznaczanie żadnych danych lub filtrowanie całego zapytania z tą tabelą). **PRZYPADEK 2:** około 6235 rzędów. W tym przypadku ta tabela jest łączona poza podzapytaniem, ale klucz łączący (`groupCol`) jest taki sam. Oto moja oczywista kwerenda MySQL: SELECT COUNT(*) FROM ( SELECT a.* , b.some # brak kolumn c # tabela główna FROM table_a AS a # nie wspominaj o tym LEWY JOIN table_b AS b ON a.col = b .bcol #### CASE 1 ### # to jest pozostawione połączone, to ma znaczenie # to jest tylko połączone, nic więcej LEFT JOIN table_c AS c ON c.col = a.groupCol #### CASE 1 ## # WHERE *** NIEKTÓRE instrukcje *** # c tabela nie uczestnicząca w klauzuli WHERE lub klauzula GROUP-ing GROUP BY a.groupCol ORDER BY a.dateCol ) AS subSelect #### PRZYPADEK 2 : table_c jest dołączona poza podzapytaniem # ## LEFT JOIN table_c AS c ON c.col = subSelect.groupCol #### CASE 2 ### WHERE *** NIEKTÓRE instrukcje *** # table_c nadal nie uczestniczą w kursie Wiem też jak działa MySQL `LEFT JOI N` działa: jeśli dane nie zostały znalezione w drugiej tabeli, odpowiednie pola z tej tabeli są ustawione na null. Co się tu właściwie dzieje, nie mogę rozgryźć. Również przypadek 1 jest szybszy niż przypadek 2. Dlaczego? Również na pewno, że łączenie w przypadku 1 zawiera co najmniej podwójną liczbę wierszy. W przypadku 2 jest najpierw filtrowany, a następnie dołączany. Pomyślałem, że to powinno być szybsze...


title: Jak obsługiwać wyjątki dla zwolnionych słuchaczy

text: To jest bardziej pytanie projektowe i miałem nadzieję, że zdobędę profesjonalistów i opinie na temat tego, co ma sens. TŁO Wyobraź sobie coś, co zawiera jeden lub więcej detektorów zdarzeń. Co jakiś czas ta rzecz odpala wydarzenia dla swoich słuchaczy. PROBLEM Problem polega oczywiście na tym, że słuchacze podążający za słuchaczem, który rzuca, nigdy nie dowiadują się o zdarzeniu. Oznacza to, że kolejność słuchaczy jest więc problemem. ROZWIĄZANIE #1 Wykonaj wszystkie detektory przechwytujące wszelkie zgłoszone wyjątki. Oznacza to, że wszyscy słuchacze zostają zwolnieni, ale samo w sobie powoduje inne problemy. Co zrobić z wykrytymi wyjątkami? * Jedną z opcji jest złapanie ich wszystkich i po odpaleniu wszystkich zdarzeń wyrzucenie kolejnego wyjątku, który zawiera wszystkie problemy. ++ * Inną opcją jest logowanie ~~ * Ostatnia to po prostu ignorowanie tych wyjątków. -- * Słuchacze są wykonywane w izolacji, co jest dobre. ++ ROZWIĄZANIE #2 Ta opcja jest uproszczoną listą i pozwala po prostu na ucieczkę każdego wyrzuconego wyjątku z odbiornika, co skutkuje tym, że pozostali słuchacze nigdy nie zostaną zwolnieni. Problemy z tym podejściem oznaczają, że * kolejność słuchaczy jest znacząca(-) * prosta do wdrożenia(+). * zanim słuchacze będą mogli wpłynąć na rozmówcę P Jakie podejście ma sens i powoduje najmniej problemów. Czy naprawdę ma sens izolowanie detektorów, aby odbierały zdarzenia, ale nie mogą spowodować przerwania uruchomionej operacji, jeśli wyrzucą?


title: Wczytuję dane dla pozycji w koszyku

text: Obecnie próbuję pokryć nasz koszyk testami jednostkowymi. Klasa `ShoppingCartItem` ma właściwość `Term`. Wczytuje również dostępne warunki dla tego elementu podczas tworzenia obiektu. Obecnie odbywa się to za pomocą wywołania klasy statycznej w konstruktorze. **Obecny stan:** public class ShoppingCartItem { private Dictionary<Guid, ShoppingCartTerm> terminy; public ShoppingCartItem(int productID) { warunki = SKUInfoGopasProvider.LoadAllTerms(productID); }      }      Moje pytanie brzmi. Jak sprawić, by źródło danych było wymienne? Czy powinienem wprowadzić klasę fabryczną? Oczywistą odpowiedzią jest użycie wstrzykiwania konstruktora, ale to nie wydaje mi się trochę właściwe. Zastanawiam się nad zrobieniem czegoś w tym stylu. public class ShoppingCartData { private readonly ShoppingCartItemFactory _factory; public ShoppingCartData(ShoppingCartItemFactory fabryka) { _factory = fabryka; } public void AddItem(int productId) { var item = _factory.CreateCartItem(productId); _elementy.Dodaj(element); } }


title: Jakie trendy widzisz w swoim zawodzie za 30 lat?

text: Pomyśl o zawodzie sprzed 30 lat. Kiedy jeden facet był w stanie sam zakodować całą grę komputerową! Czy offshoring w końcu przejmie kontrolę? Czy języki będą na tak wysokim poziomie, że nasza wartość dodana zostanie zredukowana do zera? Czy będzie to zawód jak prawnik czy lekarz? Czy nadal będziesz programistą? Proszę ekstrapolować i przewidywać na podstawie historycznych i aktualnych trendów.


title: Zarządzanie projektami oprogramowania - potrzebne porady

text: Pracuję dla dużego departamentu rządowego jako część zespołu IT, który zarządza i rozwija strony internetowe oraz samodzielne aplikacje internetowe. Wpadamy na problemy gdzieś w SDLC, które nie wychowują swojej brzydkiej głowy, dopóki czas i budżet nie zaczną się kończyć. Staramy się być „zwinni” (specyfikacje oprogramowania nie są tak dokładne, jak to tylko możliwe, klienci mają bezpośredni dostęp do programistów, kiedy tylko chcą), a także znajdujemy się w dość szczególnej sytuacji, w której nie wolno nam czerpać zysków z usług Zapewniamy. Obsługujemy tylko działy w naszym departamencie rządowym i możemy pobierać opłaty tylko za czas i wysiłek, które faktycznie włożyliśmy w projekt. Jeśli więc dostarczymy projekt, na który wyceniliśmy zawyżone ceny, wystawimy fakturę tylko za faktycznie poświęcony czas. Nasze specyfikacje oprogramowania nie są tak dokładne, jak mogłyby być, ale zawsze zawierają co najmniej: * Makiety szkieletowe dla każdego widoku formularza * Słownik danych wszystkich pól wejściowych * Opisy wszelkich reguł biznesowych, które mają wpływ na system * Opisy danych wyjściowych Jestem nowy w zarządzaniu oprogramowaniem, ale nadzorowałem już wystarczająco dużo projektów oprogramowania, aby wiedzieć, że gdy tylko użytkownicy zaczną obserwować demonstracje systemu, zaczynają wysyłać ogromną liczbę próśb, takich jak „Czy możemy dodać do tego jeszcze kilka pól raport... czy możemy przeprojektować wygląd tego interfejsu... czy możemy wysłać e-mail w tej części przepływu pracy... czy możemy usunąć ten przycisk z tego widoku... czy możemy przekierować tę funkcję na inny ekran... zmienić tekst na tym ekranie… czy możemy utworzyć specjalne konto, na którym ktoś może się zalogować i uzyskać dostęp do X… ten raport trwa zbyt długo, czy można go zoptymalizować… czy możemy usunąć ten krok z przepływu pracy… musi być lepszy obraz, który możemy tu umieścić…” itd. itd. S niektóre zmiany są niewielkie i można je zaimplementować dość szybko, ale w trakcie SDLC może pojawić się do 50-100 takich żądań. Inne żądania zmian to te, które klienci twierdzą, że „właśnie założyli, że będą częścią systemu”, nawet jeśli nie są wyraźnie określone w specyfikacji. Mamy duże trudności z zarządzaniem tym procesem. Ponieważ w naszym zespole nie ma doświadczonych kierowników projektów oprogramowania, musimy znaleźć lepszy sposób, aby zarówno wewnętrznie określić, czy wymagana praca jest „niespecyficzna”, jak i być w stanie przekazać to klientowi w taki sposób, aby mógł on zrozumieć, dlaczego proszą o „dodatkową” pracę. Potrzebujemy sposobu na śledzenie tej pracy i zachowanie przejrzystości. W duchu rozwoju Agile, w którym nie określamy systemów oprogramowania od podstaw i z powrotem przed rozpoczęciem rozwoju, a mając na uwadze, że klienci mają dostęp do dowolnego programisty w dowolnym momencie, szukam kilku wskazówek i wskazówki od doświadczonych kierowników projektów oprogramowania na temat tego, jak radzić sobie z tego rodzaju problemem „pełzania zakresu”, śledząc go, zachowując przejrzystość i komunikując go klientom tak, aby go zrozumieli. Chętnie wyjaśnię wszystko w razie potrzeby. Naprawdę doceniam każdego, kto poświęca czas na udzielenie porady. Dziękuję.


title: Jak udostępnić plik w wielu projektach

text: Aby zmienić projekt C# używam programu Visual Studio 2010. Część aplikacji wymaga, aby użytkownik mógł zapisać i odczytać plik ustawień (1 Projekt wczytuje je (jako tylko do odczytu) z pliku. Drugi projekt wczytuje je z pliku, który ma być pokazany w GUI i po zapisaniu , plik ma zostać nadpisany). Gdyby oba te pliki znajdowały się w 1 projekcie, mógłbym je łatwo udostępnić (używając na przykład Resources.resx lub dowolnego innego podejścia). Problem, który mam, polega na tym, że projekt, który odczytuje plik ustawień, różni się od projektu, który zapisuje/zmienia plik ustawień. Te 2 projekty nie mogą być odnoszone do siebie (najwyraźniej muszą pozostać nieświadome istnienia siebie nawzajem), więc nie mogę dzielić między nimi STAŁYCH STRINGÓW. Teraz mogę za daleko posuwać się do zasady DRY, ale martwię się o pisanie kodu odniesienia do pojedynczego pliku w wielu projektach (następna zmiana systemu operacyjnego może złamać tę logikę itp.). Zakładam, że ta decyzja nie jest rzadkością i że istnieje już podejście do rozwiązania tego problemu? Czy to tylko kwestia posiadania odniesienia do tego samego pliku w 2 lokalizacjach (a jeśli ten plik się zmieni, trzeba zaktualizować każde odniesienie (wydaje się to niepożądane)) czy jest lepszy sposób?


title: Jak mam zająć się naprawą kodu od mniej doświadczonego programisty?

text: **Trochę tła:** Jestem jednym z dwóch programistów naszego działu 10 osób (reszta to artyści i management). We dwoje wykonujemy całe kodowanie wymagane, aby wszystko przebiegało sprawnie, i rozwijamy wszelkie pojawiające się projekty. Programuję od około 4 lat i jest to jego pierwsza "prawdziwa" praca (jak to ujął). Na ogół pracujemy nad różnymi projektami w dowolnym momencie. **Kilka miesięcy temu** opracowałem (w żadnym wypadku nie idealny) zestaw klas, które miały być wykorzystane w późniejszym projekcie. Duża część tego projektu została mu zlecona (ze względów rozliczeniowych) do zaprojektowania i zaprogramowania interfejsu GUI. Ponieważ był nowy, pomogłem trochę przy projektowaniu i powiedziałem, żeby poprosić o pomoc, jeśli będzie jej potrzebował z resztą. Skończył kilka tygodni temu interfejs, który zademonstrował, aby pokazać, że działa, choć trochę wolno. **Rozpoczęła się kolejna część tego projektu**, nad którym pracuję. Otworzyłem interfejs, aby zacząć od następnych kroków i od razu natrafiłem na problemy (trochę powolne było trochę niedopowiedzenia, błędy w typowych działaniach itp.). Zajrzałem do kodu pod kątem kilku problemów i znalazłem `O(n^n)` przy wywołaniach, które powinny być `O(n)`, wpisz założenia bez sprawdzania błędów (jest to w Pythonie), dodano odniesienia do GUI do oryginalnego kodu i tak dalej. Teraz na pewno chciałbym go nauczyć, co jest nie tak i jak to naprawić, ale już przeszedł do następnego projektu, a to było kilka tygodni temu. Obawiam się, że mówię "Wróć i zrób to dobrze!" (oczywiście z pomocą) jest zbyt surowe, a w międzyczasie mamy jeszcze inne projekty do wykonania. Czy powinienem po prostu sam naprawić kod na teraz i spróbować złapać rzeczy w przyszłości?


title: Dlaczego w praktyce quicksort jest lepszy od innych algorytmów sortowania?

text: To jest powtórzenie pytania Janomy na cs.SE. Pełne kredyty i łupy dla niego lub cs.SE. W standardowym kursie algorytmów uczymy się, że **szybkie sortowanie** wynosi średnio O(n log n), a O(n²) w najgorszym przypadku. Jednocześnie badane są inne algorytmy sortowania, które w najgorszym przypadku wynoszą O(n log n) (jak **mergesort** i **heapsort** ), a nawet liniowy czas w najlepszym przypadku (jak **bubblesort ** ), ale z dodatkowymi potrzebami pamięci. Po szybkim przyjrzeniu się kilku innym czasom działania, naturalne jest stwierdzenie, że szybkie sortowanie **nie powinno** być tak wydajne, jak inne. Należy również wziąć pod uwagę, że uczniowie uczą się na podstawowych kursach programowania, że rekurencja generalnie nie jest dobra, ponieważ może zużywać zbyt dużo pamięci itp. Dlatego (i chociaż nie jest to prawdziwy argument), daje to wrażenie, że szybkie sortowanie może nie być naprawdę dobry, ponieważ jest to algorytm rekurencyjny. **Dlaczego zatem quicksort przewyższa w praktyce inne algorytmy sortowania?** Czy ma to związek ze strukturą _rzeczywistych danych_? Czy ma to związek ze sposobem działania pamięci w komputerach? Wiem, że niektóre wspomnienia są znacznie szybsze niż inne, ale nie wiem, czy to jest prawdziwy powód tej sprzecznej z intuicją wydajności (w porównaniu z teoretycznymi szacunkami).


title: Zwróć losowy element „listy” według jego „wagi”

text: Mam na przykład taką tabelę +-----------------+ | owoce | waga | +-----------------+ | jabłko | 4 | | pomarańczowy | 2 | | cytryna | 1 | +-----------------+ Muszę zwrócić losowy owoc. Ale jabłko powinno być zrywane 4 razy częściej niż cytryna i 2 razy częściej niż pomarańcza. W bardziej ogólnym przypadku powinno być często razy `f(waga)`. Jaki jest ogólny algorytm implementujący to zachowanie? _A może na Ruby są jakieś gotowe perełki? :)_ **PS** Zaimplementowałem aktualny algorytm w Ruby https://github.com/fl00r/pickup


title: Z iloma językami programowania pracujesz na co dzień i jak skutecznie zarządzasz zadaniami specyficznymi dla języka

text: Edycja: **Jak zarządzasz poszczególnymi zadaniami podczas pracy w wielu językach** W codziennej obsłudze zadań, z iloma różnymi językami programowania pracujesz? * Czy podczas pracy nad każdym językiem dokonujesz zmiany mentalnej? * Czy nadajesz im priorytety i przechowujesz każde zadanie osobno dla każdego języka. * Czy kodujesz etapami w oparciu o postęp każdego zadania, płynnie przełączając się między językami/IDE/środowiskiem? * Czy stosujesz ten sam styl/konwencje kodowania we wszystkich językach (nie składni)? Powiązane: Czy to normalne, że programista pracuje jednocześnie nad wieloma projektami?


title: Czy możesz mieć „puste” abstrakty/klasy?

text: Oczywiście, że możesz, zastanawiam się tylko, czy takie projektowanie jest racjonalne. Tworzę klona breakouta i robiłem projekt klasy. Chciałem użyć dziedziczenia, chociaż nie muszę, aby zastosować to, czego nauczyłem się w C++. Myślałem o projektowaniu klas i wymyśliłem coś takiego: GameObject -> klasa bazowa (składa się z elementów składowych danych, takich jak przesunięcia x i y oraz wektor SDL_Surface* MovableObject : GameObject -> klasa abstrakcyjna + klasa pochodna GameObject (jeden method void move() = 0; ) NonMovableObject : GameObject -> pusta klasa...brak innych metod lub elementów danych poza konstruktorem i destruktorem (przynajmniej na razie?).Później planowałem wyprowadzić klasę z NonMovableObject, np. Tileset : NonMovableObject.Zastanawiałem się tylko, czy często używane są "puste" klasy abstrakcyjne lub po prostu puste klasy ... Zauważyłem, że sposób, w jaki to robię, po prostu tworzę klasę NonMovableObject tylko ze względu na kategoryzację.Wiem Zastanawiam się nad tym, aby stworzyć klona typu breakout, ale skupiam się mniej na grze, a bardziej na korzystaniu z dziedziczenia i projektowaniu pewnego rodzaju struktury gry.


title: Czy przypadki narożne i krawędziowe są zbyt często ignorowane lub lekceważone i dlaczego?

text: Mam wrażenie, że wielu programistów lekceważy przypadki narożników i krawędzi. Często po prostu je ignorują. Kiedyś pracowałem nad projektem logistycznym. W zarządzaniu zamówieniami aplikacji był przypadek, w którym około 5-10% zamówień musiało być specjalnie obsłużonych. Jeden z kolegów powiedział, że po prostu nie powinniśmy zajmować się tym przypadkiem automatycznie, co prowadziłoby do dużego obciążenia ręcznego użytkowników aplikacji. Myślę, że ma to jakiś związek ze złym nastawieniem. Innym przykładem, który wkrótce zauważyłem, był komentarz do jednej z moich odpowiedzi tutaj. Ponieważ był to tylko komentarz, myślę, że powodem było to, że komentator nie poświęcił mu zbyt wiele uwagi. Czy dokonałeś podobnych doświadczeń? Czy to jest coś, co widzisz bardzo często? Czy to tylko kwestia nastawienia, czy są inne powody? btw: Miałem problemy ze znalezieniem dobrych tagów dla tego pytania. Wszelkie sugestie będą mile widziane.


title: Jaki jest najłatwiejszy sposób na przestrzeganie licencji open source?

text: Jestem naprawdę zdezorientowany wszystkimi szczegółami licencjonowania open source, takimi jak _ „Napisałem aplikację internetową, która powinna działać na komputerze, którego nie jestem właścicielem. Moje oprogramowanie korzysta z biblioteki/języka xxx. Czy jest to uważane za redystrybucję oprogramowania xxx? „_. Patrząc na pierwsze cztery fragmenty używanego oprogramowania ujawniają się cztery różne licencje (MIT, BSD, Apache, Apache/Eclipse dual). Wygląda na to, że wszystkie wymagają mniej więcej tego samego, tj. Wymień je i podaj link do ich licencji. Pomyślałem więc, że mogę uprościć swoje życie, po prostu dobrowolnie wymieniając _wszystkie_ używane oprogramowanie. Lista nie jest tak długa i można by ją nazwać uczciwą. Ale istnieją przeszkody, takie jak nazwy chronione prawem autorskim, znaki towarowe i tym podobne. Próbowałem znaleźć przykład w Google, ale nie znalazłem niczego poza listą EPSON (która dotyczy sprzętu). Czy ktoś zna przykładową listę oprogramowania dla aplikacji internetowej? Jestem szczególnie ciekaw, jakie jest najlepsze rozwiązanie dla Javy (uruchamiane na komputerze, którego nie jestem właścicielem).


title: Czy ktoś zna dobry minimalny framework php mvc?

text: Zajmuję się programowaniem przy użyciu frameworków od zeszłego roku i prawdą jest, że te programy naprawdę mi pomagają i usprawniają mój rozwój, dopóki nie będziesz musiał spełnić marzeń klienta, takich jak aplikacja musi polecieć na księżyc i z powrotem i zbieraj informacje o słońcu. Albo ma aplikację, która potrzebuje podstawowej funkcjonalności, ale nie potrzebuje pozostałych 90% frameworka. Wiem, że poradzę sobie z zarządzaniem zależnościami za pomocą kompozytora, ale co, jeśli klient ma konkretną potrzebę kodowania w ramach wcześniej opracowanej aplikacji? Dlatego pytam tutaj, czy ktoś z was zna minimalny framework MVC?, który można poprawić w razie potrzeby. Potrzebuję tylko trochę bazy, aby rozpocząć nowe projekty, a najczystsze i minimalne, tym lepiej. Główne cechy, których szukam. \- Oczywiście projekt mvc. \- Integracja bazy danych. \- Wbudowany w podstawowe operacje Crud. \- Bezpieczeństwo. \- Czytelność kodu Chciałabym: \- Integracja z silnikiem szablonów (jak smarty). \- Klasy pomocnicze. Musi być również łatwo rozszerzalny. Przyjrzałem się yupp, ale nie uważam go za kompletny, a także trochę wadliwy do celów programistycznych. Dziękuję.


title: Od czego zacząć, gdy zagłębia się w istniejącą bazę kodu J2EE?

text: Pracuję dla firmy produkującej aplikacje dla przedsiębiorstw, które mają być wykorzystywane przez szkoły i okręgi do zarządzania wszystkimi danymi z testów i norm. Ich istniejąca aplikacja jest napisana w J2EE i jest bardzo duża. Osobiście jestem doświadczonym programistą PHP i Ruby = RoR i zostałem poproszony o próbę zaimplementowania łatwo dodanych, ale kluczowych funkcji do istniejącej bazy kodu J2EE. Bardzo dobrze znam Java SE i dobrze znam architekturę aplikacji webowej. Pytam o to, czy to wystarczy do nadchodzącego zadania i jakich wskazówek możesz mi udzielić, aby zagłębić się w bazę kodu i faktycznie skutecznie dodawać te nowe funkcje? Czy jest coś ważnego, co muszę wiedzieć przed rozpoczęciem i czego mogę się spodziewać, jeśli chodzi o problemy i problemy związane z Javą SE, PHP, RoR? Czas nie jest wielkim problemem, powinienem mieć dużo czasu na zapoznanie się z J2EE. Pamiętaj też, że składnia nie będzie tutaj problemem.


title: Który byłby lepszym sposobem ładowania danych przez ajax?

text: Korzystam z map google i zwracam html/lat/long z mojej bazy danych MySQL ## Obecnie 1. Użytkownik wybiera kategorię biznesową np.; "Produkcja wideo". 2. Wywołanie ajax jest wysyłane do kontrolera CodeIgniter 3. Kontroler następnie odpytuje bazę danych i zwraca następujące dane przez JSON 1. Szerokość/długość znacznika 2. HTML dla okienka popup 3. to około 34 wierszy w baza danych w dwóch tabelach na firmę 4. wywołanie ajax odbiera te dane, a następnie wykreśla znacznik wraz z kodem html na mapie. Dane zwracane z kontrolera to jeden duży obiekt json... Odbywa się to dla wszystkich firm, które istnieją w kategorii Video Production (obecnie ok. 40 firm). Jak widać, pobieranie tych danych dla wielu kategorii (setek firm) może bardzo obciążać serwer. ## Moje pytanie brzmi, czy korzystniej byłoby zmodyfikować przebieg procesu jako taki: 1. użytkownik wybiera kategorię biznesową, np.; "Produkcja wideo". 2. Wywołanie ajax jest wysyłane do kontrolera CodeIgniter 3. Kontroler następnie wysyła zapytanie do bazy danych o informacje o bazie lokalizacji 1. szerokość/długość 2. poziom (używany do zmiany koloru ikony znacznika) 3. Będzie to jeden wiersz na firmę z kilkoma kolumnami 4. wywołanie ajax odbiera te dane, a następnie kreśli znacznik na mapie 5. gdy użytkownik kliknie znacznik wywołanie ajax jest wysyłane do kontrolera CodeIgniter 6. kontroler odpytuje bazę danych o HTML i dodatkowe dane na podstawie na business_id, a jeśli nie, jakie są lepsze sugestie dotyczące tego problemu? **Podsumowując, oznacza to, że zamiast dołączać kod HTML i dodatkowe dane każdej firmy, należy przesyłać tylko minimalne informacje o lokalizacji, a następnie ponownie wysyłać zapytanie o te informacje po kliknięciu każdego znacznika firmy.** ## Potencjalne wady 1. dłuższe czasy ładowania gdy użytkownik kliknie ikonę znacznika 2. więcej kodu?? 3. więcej zapytań do bazy


title: Obsługujesz całą logikę uwierzytelniania w bazie danych lub kodzie?

text: Rozpoczynamy nowy (jaki) projekt w pracy, który został mi przekazany. Wiele elementów związanych z bazą danych zostało rozbudowanych, w tym niektóre procedury składowane. Na przykład jedna z procedur składowanych obsługuje tworzenie nowego użytkownika. Wszystkie dane są weryfikowane w procedurze składowanej (na przykład hasło musi mieć co najmniej 8 znaków, musi zawierać cyfry itp.), a inne rzeczy, takie jak haszowanie hasła, są również wykonywane w bazie danych. Czy to normalne/właściwe, aby wszystko było obsługiwane w procedurze składowanej, a nie w samej aplikacji? Fajnie, że każda aplikacja może korzystać z procedury składowanej i mieć taką samą walidację, ale aplikacja powinna mieć standardową strukturę/funkcję API, która rozwiązuje ten sam problem. Czuję też, że zabiera dane z aplikacji i będzie trudniej utrzymać/dodawać nowe funkcje.


title: Ile masz drugich szans w rozmowie kwalifikacyjnej?

text: Kilka dni temu miałem rozmowę kwalifikacyjną dla średniej firmy (130 osób) na stanowisko programisty i w pewnym momencie ankieter zadał mi dzikie pytania dotyczące TCP, przepływów sieciowych i wielu innych rzeczy, których nie miałem wyczyść w mojej pamięci. Nie trzeba dodawać, że oblałem rozmowę kwalifikacyjną, ponieważ według nich musiałem **szczegółowo** zrozumieć, jak działają protokoły sieciowe, aby zastosować je jako młodszy programista. Wstydziłem się swojej ignorancji i doszedłem do tego, w ciągu tygodnia udało mi się odświeżyć całą wiedzę o networkingach, którą posiadałem, a nawet ją poszerzyłem, moje pytanie brzmi, mając to na uwadze... Jak to jest możliwe _ponowne aplikowanie_ o pracę wywiad, ponieważ moim jedynym problemem w wywiadzie była ta część... Z góry dziękuję... **PS** : Myślę, że to dość trudne, ale chciałem tylko usłyszeć od innych ludzi z większym doświadczeniem...


title: Wcinanie/łamanie łańcuchów jquery w celu zapewnienia czytelności

text: Jestem ciekawy, jak inni ludzie wcinają/łamią długie łańcuchy jQuery, ponieważ nigdy nie mogę zdecydować, co jest bardziej czytelne (szczególnie, gdy używam .end() do "zamykania" bloku metod, np. $(this).not(" :has(.pointer)").append(pointerHtml) .end() .closest("li").toggleClass("wybrane") .siblings().removeClass("wybrane") .andSelf().removeClass(" pre-selected").animate({ left: 12 krycie: 0.5 }) .end().end() .filter(".selected").prev().addClass("pre-selected") .end() .children().load("/homepage.html", function() { //code }).end().end().addClass("przetworzone"); Jak byś to sformatował? *edit zawiera metodę z oddzwonieniem, aby było trochę ciekawiej


title: Alternatywy dla apletu Java dla interaktywnych stron internetowych

text: **W skrócie** Poszukuję alternatywy dla apletów Java do tworzenia interaktywnych części, takich jak minigry itp. na mojej stronie **Fakty:** Tworzę stronę e-learningową dla dzieci. Ta strona ma następujące główne funkcje: * część ćwiczeniowa, w której dzieci mogą wykonać test gramatyczny i otrzymać punkty za dobre odpowiedzi. * tamagotchi jak zwierzak, który się porusza, trzeba nakarmić i tak dalej * sklep, w którym można kupić gotchi stuff Jako framework używam Ruby on Rails. W tej chwili używam apletów Java jako „szybkiego i brudnego rozwiązania” dla prawie wszystkiego na stronie, ponieważ całkowicie przestraszyłem się Flasha po kilku latach nieużywania go i uczenia się Javy w międzyczasie ... (tak, używam również apletów dla praktyk, które są niewiele więcej niż niektóre pola tekstowe i dropboxy w jakimś tekście..) Teraz szukam czystszego rozwiązania, ponieważ aplety wydają mi się naprawdę wolne. Przeczytałem już kilka rzeczy w internecie, ale szukam opinii na temat mojego szczególnego problemu. **Moje odkrycia do tej pory:** 1. JavaScript wydaje się być miły, ale wielu użytkowników dezaktywuje go, więc czy mądrze byłoby go używać? 2. Flash naprawdę doprowadzał mnie do szału, ale jeśli ktoś może mi podać jakieś powody, to jeszcze raz wezmę to pod uwagę. Oto, co się stało, gdy próbowałem go użyć: nauczyłem się Flasha kilka lat temu i bardzo mi się podobał, ale teraz jestem jakoś zagubiony, ponieważ wydaje mi się, że nie jest to dobre programowanie i zawsze mieszam go z poleceniami Java i Brakowało mi uzupełniania kodu i tego typu rzeczy. Moim głównym problemem, kiedy całkowicie porzuciłem ideę Flasha, było to, że chciałem odczytać praktyki z jakiegoś pliku xml lub może z bazy danych (mając na uwadze stworzenie programu, w którym nauczyciele mogą tworzyć własne praktyki w późniejszej wersji) i to wydawało się prawie nie do rozwiązania, aby utworzyć pojedyncze przyciski w jakiejś pętli z tych zewnętrznych danych. również społeczność wydawała się być bardziej projektantem niż programistą i nie była zbyt pomocna w moich pytaniach (100 razy tak, wiem, że mogę przeciągnąć to z biblioteki, ale nie jest to możliwe w czasie wykonywania) 3. Aplety Java są dość wolne, ja nie nie wydaje mi się, że powinienem ich używać w kolejnych wersjach. Z zadowoleniem przyjmuję wszelkie wskazówki i pomysły, jak rozwiązać moje zadanie.


title: Używasz pustych podklas, aby dodać semantykę hierarchii klas?

text: Zastanawiałem się, czy używanie (prawie) pustych klas pochodnych do nadania dodatkowej semantyki hierarchii klas było dobrym pomysłem (lub praktyką)? Ponieważ (nie tak krótki) przykład jest zawsze lepszy niż długie przemówienie, załóżmy, że piszemy hierarchię klas do generowania kodu SQL. Chcesz reprezentować polecenie manipulacji danymi (INSERT, UPDATE lub DELETE), więc masz dwie alternatywy: **Pierwsza wersja, z instrukcją switch** enum CommandType { Insert, Update, Delete } class SqlCommand { String TableName { get; } Ciąg NazwaSchematu { get; } CommandType CommandType { get; } IEnumerable<string> Kolumny { get; } // ... i tak dalej } class SqlGenerator { string GenerateSQLFor(SqlCommand command) { switch (command.CommandType) { case CommandType.Insert: return generateInsertCommand(command); case CommandType.Update: return generateUpdateCommand(polecenie); case CommandType.Delete: return generateDeleteCommand(polecenie); domyślnie: wyrzuć nowy NotSupportedException(); } } } **Druga wersja z VisitorPattern** _(Zauważ, że pytanie NIE dotyczy tego, czy należy użyć wzorca Visitor, czy dodać nowe operacje)_ abstract class SqlCommand { String TableName { get; } Ciąg NazwaSchematu { get; } IEnumerable<string> Kolumny { get; } // ... i tak dalej abstract void Accept(SqlCommandVisitor goscie); } class InsertCommand : SqlCommand { overrides void Accept(SqlCommandVisitor gość) { visitor.VisitInsertCommand(this); } } class DeleteCommand : SqlCommand { zastępuje void Accept(SqlCommandVisitor gość) { visitor.VisitDeleteCommand(this); } } class SqlCommandVisitor { void InitStringBuffer() { ... } string GetStringBuffer() { ... } string GenerateSQLFor(polecenie SqlCommand) { InitStringBuffer(); polecenie.Akceptuj(to); return GetStringBuffer(); } void Visit(SqlCommand, polecenie) { ... } void VisitInsertCommand(InsertCommand,polecenie) { ... } void VisitDeleteCommand(DeleteCommand,polecenie) { ... } void VisitUpdateCommand(polecenie UpdateCommand) { ... } } osiągnąć ten sam wynik, ale: * W pierwszej wersji mój kod wydaje się bardziej SUCHY, mimo że polimorfizm jest generalnie lepszy niż instrukcja switch. * W drugiej wersji czuję, że niepotrzebnie wyprowadzam SqlCommand tylko po to, aby kod miał więcej znaczenia. Innym podobnym przypadkiem jest wyprowadzenie klasy z klasy generycznej, aby nadać kolekcji dodatkowe znaczenie, np. : class CustomerList : List<Customer> { } Zastanawiam się, czy to dobry pomysł. Czy są w tym jakieś pułapki? Osobiście wolę drugą wersję właśnie dlatego, że dodaje znaczenia kodowi i pomaga mi później, gdy czytam mój kod... Ale wyraźnie brakuje mi doświadczenia, aby zobaczyć jakiekolwiek wady tego wzorca.


title: Wektor dwuwymiarowy w C++ – nieefektywny z podwektorami o dynamicznych rozmiarach?

text: Wiem, że `std::vector` używa ciągłego bloku pamięci, ale często widzę, że ludzie używają wektorów wektorów, _nawet jeśli modyfikują liczbę elementów w tych wektorach zawartych w wektorze zewnętrznym_. Czy nie doprowadzi to do problemów z wydajnością, gdy trzeba będzie zmienić rozmiar wektora wewnętrznego, ponieważ wszystkie kolejne wektory będą musiały mieć również przesunięte elementy? Innymi słowy, w poniższym kodzie, czy rosnące `lists[0]` również nie spowodują przeniesienia elementów z 99 podwektorów, a nie tylko `lists[0]`? std::vector<std::vector<int>> listy; listy.zmień rozmiar(100); // używaj i rozwijaj podwektory // ...lists[0].push_back(88); // ← !


title: Scrum Master w organizacji

text: Zastanawiam się, jak założyć organizację ze Scrum Masterami. Wolałbym zobaczyć prawdziwe przykłady tego, gdzie w hierarchii organizacji znajdują się scrum masters i jak obsługiwane są kwestie raportowania/łańcucha poleceń. jesteśmy firmą usługową. Mamy jeden projekt zwinny wykonany dla klienta zwinnego, w którym kierownik zespołu programistów pełni rolę odpowiedzialnego za dostarczanie. Do tej pory mieliśmy organizację macierzową, w której scrum masters byli przypisani do zespołu zarządzającego projektami składającego się z osób pracujących przy innych projektach (nie zwinnych), ale to powodowało, że nie mieli zbyt dużego kontaktu z kulturą zwinną w swoim zespole PM, a cele nie były zawsze zgodne z projektem. Jak powinniśmy ustrukturyzować Scrum Masterów w naszej organizacji?


title: Jak obliczyć wielkość projektu w jednostce miary dni-osoba?

text: Od czasu do czasu czytałem tu i ówdzie wielkość projektu wyrażoną w kwestii „dni-osoby” lub „osobo-dni”. Może rozumiem, co to oznacza, ale nie wiem, na czym opierają się ludzie, aby to obliczyć. 1. Jakie zmienne są uwzględniane w tym obliczeniu? 2. W jaki sposób te zmienne są wykorzystywane we wzorze obliczeniowym? 3. Inaczej, jak oszacować to rażąco, gdy w zmiennych formuły czegoś brakuje?


title: Dla tych z Was, którzy są starszymi programistami, czego szukacie w nowej firmie i zespole programistycznym?

text: W miarę postępów w mojej karierze nowe prace stają się coraz trudniejsze do wyboru. Kiedy zaczynałem i przez pierwsze 8 lat mojej kariery, podejmowałem pracę, którą mogłem zdobyć, aby utrzymać programowanie na ogólnej ścieżce technologicznej, na której byłem. Jestem pracownikiem, pozostaję w firmie tylko od 2 do 3 lat. Myślę, że robię to, ponieważ po 2 latach zaczynam się nudzić i jeśli nie pojawiają się nowe projekty, które by mnie zajęły, nie uważam już pracy za interesującą. Teraz, gdy mam coraz większe doświadczenie, ważniejsze jest dla mnie aplikowanie tylko na interesujące stanowiska, które pokierują moją karierą i rozwiną moje umiejętności. Teraz mój problem polega na tym, że wciąż znajduję pracę, w której projekty wydają mi się interesujące podczas rozmowy kwalifikacyjnej, ale kiedy dostaję się do firmy, środowisko programistyczne jest poniżej normy, a zespół programistów jest podzielony. Czuję, że zadaję niewłaściwe pytania podczas rozmowy kwalifikacyjnej i nie wiem, na co zwrócić uwagę, aby upewnić się, że środowisko, w którym będę pracować, będzie dobre. Teraz moje pytanie: **Dla tych z Was, którzy są starszymi programistami, czego szukasz w nowej firmie i zespole programistycznym?** Szukam kluczowych cech w firmie i zespole programistycznym, których szukasz podczas rozmowy kwalifikacyjnej z firma. Te cechy są tymi, które dadzą Ci wskazówki, że firma będzie dobra do pracy. **Aktualizacja:** Oto lista pytań, które stworzyłem na podstawie pozostawionych tutaj komentarzy. Jest ich o wiele więcej, ale to będzie początek mojej listy. **Dobre cechy w nowej firmie:** * Umiejętność zaoferowania niezawodności i stabilności pracownikowi poszukującemu miejsca na pobyt na dłuższą metę. * Stabilna finansowo. **Środowisko programistyczne:** * SDLC * Jakie oprogramowanie i/lub narzędzia są używane? * Jaki system kontroli wersji jest używany? * Jaki rodzaj struktury zarządzania projektem jest używany i jakie narzędzia są używane do jej utrzymania? * Jak zapewniasz jakość swoich produktów? **Zespół deweloperski:** * Jak duży jest zespół? * Na jakim poziomie umiejętności są ludzie? * Gdzie pasowałbyś do zespołu? * Jaki był obrót w Twoim zespole i firmie w ciągu ostatniego roku? Dlaczego ludzie odeszli? * Jak często iz jakich powodów oczekuje się od osoby pracy w godzinach nadliczbowych? * Jakie środowisko programistyczne posiada firma? Elastyczny, sztywny, wyluzowany itp. * Czy moje osobiste praktyki w pracy będą akceptowalne, czy też będę musiał dostosować się do reszty zespołu? * Co robi zespół, aby nauczyć się nowych umiejętności? Trening? Edukacja? Przedstawia? Konferencje? * Jakie było ostatnie szkolenie, w które firma zainwestowała dla swoich programistów? * Jak rozwiązywany jest konflikt między programistami? * Jak rozwiązywany jest konflikt między programistami a użytkownikami biznesowymi? **Test Joela** : * Zadaj pytania i dowiedz się, do czego się przyznają. * Jeśli możesz znaleźć pracownika lub byłego pracownika, poproś go o wykonanie testu Joela dla firmy.


title: Narzędzia do zarządzania wydaniami z DVCS (Mercurial)

text: Mój zespół programistów migruje z SVN do Mercurial. Po zbadaniu najlepszych praktyk DVCS zasugerowano, że rozwijamy gałęzie funkcji z głównej linii repo, testujemy je osobno, a następnie wybieramy funkcje, które chcemy w każdym wydaniu, przed połączeniem wybranych gałęzi z główną linią i ostatecznym wydaniem. **Pytanie** : To, czego szukam, to rekomendacje dotyczące jakiegoś narzędzia programowego, które ułatwi moją rolę „menedżera wydań oprogramowania”, ponieważ pozwoli mi kontrolować (wybierać wiśnie), które gałęzie (funkcje) , poprawki błędów itp.) są scalane (za pomocą Git lub Mercurial), w którym są wydawane wersje oprogramowania (w każdym środowisku) i są w stanie wytworzyć artefakt wdrażania binarnego. Nasze aplikacje to głównie aplikacje internetowe Java, z kilkoma aplikacjami Java oraz projekty budowane przy użyciu Maven (v2). Rozglądałem się za narzędziami do zarządzania wydaniami, ale nic tak naprawdę nie pasuje do rachunku. **Uwaga** : Nie wszystkie zmiany są publikowane, gdy tylko zostaną ukończone i przejdą kontrolę jakości – niektóre mają zostać wydane w późniejszym terminie, jako część wydania tematycznego Rzeczy odrzucone do tej pory (na podstawie zaleceń w podobnych pytaniach, w inne wątki SE): 1. Trac (wydaje się, że to tylko rzeczy typu PM, które już mamy w ofercie Atlassian OnDemand) 2. Jenkins (plus inne narzędzia CI) - szukam czegoś do zarządzania moimi wydaniami, a nie CI narzędzie (w przeszłości używaliśmy Jenkinsa). 3. Mercurial Patch-Queues - być może potrzebuję tego, ale szukałem jakiegoś "ładniejszego" interfejsu, który pomógłby mi nim zarządzać. 4. Oferty ERP - TBH, nie przyglądałem się zbytnio tej opcji, ponieważ początkowo miałem wrażenie, że są zbyt ciężkie. 5. BuildMaster, autorstwa Inedo - To było jak dotąd najbliższe dopasowanie, ale nie było całkiem odpowiednie ze względu na brak funkcji wybierania/scalania gałęzi VCS. Powiedziałbym jednak, że jest to bardzo fajny program i poleciłbym go, jeśli pasuje do twojego przypadku użycia i ma rozsądną cenę, nawet do użytku Enterprise. Obecnie oceniam następujące narzędzia: 1. Zarządzanie gałęzią funkcji Bitbucket (ponieważ używamy Bitbucket w naszych projektach, wydaje się rozsądne, aby ocenić ich podejście) Ponieważ DVCS jest dla nas nowością, te rzeczy mogły zostać przedwcześnie odrzucone, więc zachęcamy do ponownego edukuj mnie. :)


title: Czy możemy wyciągnąć przyszłe historyjki użytkowników w bieżącym sprincie?

text: Załóżmy, że oszacowaliśmy 5 historyjek użytkownika do ukończenia w jednym sprincie i ukończyliśmy wszystkie z testowaniem, czasem buforowania i oczekiwanymi błędami. Zostały nam jeszcze 2-3 dni dla jednego z deweloperów. Czy możemy wyciągnąć przyszłą historyjkę użytkownika w bieżącym sprincie, wiedząc, że tylko rozwój lub jego część można ukończyć w bieżącym sprincie?


title: Pośrednictwo multitonów

text: Mam aplikację, która działa jak serwer TCP i akceptuje wiele połączeń. Każde połączenie jest nawiązywane przez odrębne urządzenie z unikalnym identyfikatorem (identyfikator jest zgłaszany przez urządzenie w dwóch różnych komunikatach zgodnie z jego protokołem, ale to mniej ważne). W tej chwili, za każdym razem, gdy połączenie jest nawiązywane, moja aplikacja tworzy nową listę parserów dla wielu wiadomości, które urządzenie może wysłać, ale w tym momencie nie wie jeszcze, które urządzenie zostało połączone. Problem polega na tym, że przed ustaleniem tożsamości urządzenia można przeanalizować kilka wiadomości. Ponieważ urządzenia mogą się rozłączać i ponownie łączyć w trakcie życia aplikacji, istnieją obiekty o długim czasie życia (statystyki urządzeń i różne inne dane), których nie należy odrzucać za każdym razem, gdy urządzenie się rozłącza, a zatem należy je ponownie podłączyć jako konsumenci potoku parsera po identyfikatorze urządzenia jest ustalony. Alternatywnie, jeśli urządzenie nigdy wcześniej nie było podłączone, jego nowe instancje staną się długowieczne. Czy ktoś ma ogólny pomysł na to, jak ta aplikacja powinna zostać przearanżowana? Na przykład jednym z pomysłów było zawinięcie długo żyjących obiektów w serwery proxy, a następnie umożliwienie zmiany podstawowej implementacji na inną instancję po podłączeniu nowego urządzenia. Aby było jaśniej, obiekty te nie są publicznymi obiektami typu singleton (multitons), ale oczywiście gdzieś w warstwie biznesowej znajduje się słownik (według identyfikatora) do śledzenia danych na urządzenie. To wszystko wydaje się niepotrzebnie skomplikowane, ale kod (jak zawsze) oczywiście ewoluował z czasem i teraz czuję, że nie widzę lasu przez drzewa.


title: Organizowanie aplikacji MVC z wirtualnym modelem za pomocą zewnętrznego API

text: Tworzę aplikację kolejową z następującymi ograniczeniami * Nie ma bazy danych * Używa internetowego interfejsu API do przechowywania i pobierania danych * Połączenie z internetowym interfejsem API odbywa się za pośrednictwem niestandardowego klejnotu. * Gem posiada podstawową funkcjonalność umożliwiającą wywołanie internetowego interfejsu API na podstawie podanych parametrów. * Mam 2-3 różne rodzaje obiektów, które potrafię wymyślić (a dokładniej wirtualny model) Jaka powinna być struktura mojego programu? * Czy powinienem włączyć wszystkie wywołania metod w gem ? * Czy powinienem utworzyć modele i umieścić tam wywołania związane z interfejsem API (a następnie za pomocą podstawowej metody gem) * Czy powinienem po prostu zignorować model i umieścić wszystko w kontrolerze . ? Druga metoda wydaje się najbardziej odpowiednia , ale wtedy wszystkie metody z modelu byłyby statyczne i wywoływałbym wszystkie metody w zasadzie bez żadnych obiektów.


title: Czy Node.js faktycznie zwiększa skalowalność?

text: Czytałem o problemie C10K, a na szczególną uwagę zasługuje część, która odnosi się do asynchronicznego serwera I/O. http://www.kegel.com/c10k.html#aio Uważam, że to właściwie podsumowuje to, co Node.js robi na serwerze, pozwalając wątkom na przetwarzanie żądań użytkowników, polegając na przerwaniach I/O (zdarzeniach) w celu powiadamiania wątków zadań, które zostały zakończone, a nie wątku odpowiedzialnego za pełne zadanie procesora. Wątek może zająć się innymi sprawami (bez blokowania) i otrzymywać powiadomienia o wykonaniu zadania (np. o znalezieniu pliku lub skompresowaniu filmu). To z kolei oznacza, że wątek jest bardziej „dostępny” dla gniazd, a tym samym dla użytkowników na serwerze. Potem znalazłem to: http://teddziuba.com/2011/10/straight-talk-on-event-loops.html Autor twierdzi, że chociaż framework sterowany zdarzeniami (przerwane wątki), może zwalniać wątki, nie w rzeczywistości nie zmniejsza ilości pracy, jaką musi wykonać procesor! Powodem tego jest to, że jeśli, powiedzmy, użytkownik zażąda skompresowania przesłanego wideo, procesor nadal musi faktycznie wykonać tę pracę i będzie blokował, gdy to robi (dla uproszczenia, zapomnijmy tutaj o równoległości - chyba że ty wiedzieć lepiej!). Jestem prostym programistą, a nie administratorem serwera ani kimś w tym rodzaju. Chciałbym tylko wiedzieć: czy Node.js jest darem od bogów „przetwarzania w chmurze”, czy to wszystko gorące powietrze i tak naprawdę nie zaoszczędzi firmom czasu i/lub pieniędzy poprzez poprawę skalowalności? Wielkie dzięki.


title: Czy powinienem uczyć moich uczniów alloca?

text: Jak szeroko stosowana jest „alloca” w prawdziwym świecie? Czy powinienem uczyć moich uczniów używania „allocy”, kiedy ma to sens? A może powinienem nauczyć ich, aby nigdy go nie używali? Wywodzący się z C++ RAII pomysł, aby nie musieć ręcznie wywoływać `free` brzmi obiecująco, szczególnie w funkcjach z wieloma punktami wyjścia.


title: Wdrożyć programowanie FBP/Dataflow w VBA?

text: Zaintrygowany programowaniem opartym na przepływach w stylu J Paul Morrison. Zastanawiam się, czy można wdrożyć FBP w Excelu/VBA. Sporo szukałem implementacji Basic-Lang FBP, ale bezskutecznie. Przyjrzałem się niektórym szczegółom implementacji FBP w Pythonie, ale nie mam ochoty na to. VBA jest tym, co najbardziej znam, ale podejrzewam, że VBA może w ogóle wykonywać FBP, bez współprogramów lub (?). Kod 2 prostych komponentów, Info-Packet Buffer Class i połączenie między nimi, a ja to otrzymam. Nie wiem, od czego zacząć. Konkretnie zastanawiam się: 1. Jak wyglądałyby krawędzie grafów In-Ports, Out-Ports, 'bounded-buffer' i kod łączący je? 2. Jak zrobić przekazywanie wiadomości? Używasz zgłoszonych zdarzeń aplikacji? 3. Nie ma mowy, aby powstała bestia była z natury równoległa lub asynchroniczna, prawda? 4. Jeśli po prostu nie da się tego zrobić w VBA, dlaczego nie?


title: Pomóż mi radzić sobie z językami wyższego poziomu

text: Próbuję nauczyć się Scali (wcześniej zerknąłem na Erlanga, Haskella, Ruby i miałem podobne problemy). Lubię to, ale czuję się źle z niektórymi rzeczami, które robi i zastanawiam się, czy to tylko z powodu całego czasu, który spędziłem z C++. **1\. Utrzymanie go w czystości** Zacznę od własnego problemu. Dzięki anonimowym funkcjom i pętlom ukrytym w foreach zachęcam do ułożenia wszystkiego w jednej linii. Szybko kończę z czymś ohydnym. Jeszcze gorzej jest w Rubim, gdzie nie trzeba deklarować zmiennych. To bałagan. Zastanawiam się, czy istnieją jakieś wytyczne, których można przestrzegać, aby poprawić czytelność, czy jest to coś, do czego po prostu trzeba się przyzwyczaić podczas programowania w zwięzłym języku? **2\. Podstawowe struktury kontrolne** Podczas gdy metody foreach, map itp. działają świetnie w prostych przypadkach, zawodzą w bardziej złożonych. Kontenery zachowują porządek obiektów iw pewnym sensie te metody ukrywają ten porządek przed mną. Powiedzmy, że chcę zbudować tablicę B z elementów tablicy A z indeksami głównymi. Mógłbym zrobić var i = 0 val B = A.filter( e => { i+=1; is_prime( i ) } ), ale to nie jest w porządku. Istnieje duplikacja liczników - jeden w filtrze i jeden mój. Nie widzę powodu, dla którego nie miałaby istnieć funkcja znająca położenie elementu, który przetwarza. Czy czegoś mi brakuje, czy jest za tym jakaś logika? Teraz po prostu czuję się zachęcony do używania zwykłych pętli w stylu C. **3\. Ukryta niespójność Scali** Scala wydaje się chwalić, że tak wiele z nich zostało zadeklarowanych w swoich bibliotekach. Przy wszystkich zasadach, których Scala potrzebuje, aby te biblioteki czuły się komfortowo, język staje się tak duży, jak każdy inny, co wydaje się nie mieć sensu, ale nie to mnie niepokoi. To, czego nie lubię, to krotka. Dzięki specjalnej składni działa jak konstrukcja językowa, a nie zwykła klasa. Wydaje się, że Scala zaprzecza, że wiele rzeczy jest w nią wbudowanych. Byłbym wdzięczny, gdyby ktoś mógł mi wyjaśnić, dlaczego taka synteza biblioteki i języka jest tak często wdrażana (nie tylko w Scali). **4\. Wydajność** Po pierwsze, rozumiem korzyści z posiadania niezmiennych obiektów w algorytmach równoległych, ale jak często faktycznie potrzebujesz współbieżności? Są z tym problemy inne niż współdzielone obiekty mutowalne. Chodzi mi o to, że współbieżne projektowanie ma swoje ograniczenia i używanie go wszędzie, tak jak wydają się to robić języki funkcjonalne, musi być strasznie nieefektywne. Po drugie, nawet jeśli uważamy, że niezmienny stan jest konieczny, niektóre algorytmy, które widziałem, są absurdalne. Myślę o tych, które pracują z listami jako head::tail. Trudno mi uwierzyć, że tak opisany algorytm może być skuteczny. Ponownie czuję się zachęcony do pisania bardziej imperatywnego kodu. Czy nie doceniam optymalizacji, czy wrażliwe algorytmy naprawdę powinny unikać niektórych koncepcji?


title: Rozkręć piłkę na TDD

text: Jestem częścią zespołu programistów, który współpracuje z wieloma innymi zespołami, aby utrzymywać i ulepszać aplikację, która jest używana od co najmniej 15 lat. Kiedy po raz pierwszy został zbudowany i zaprojektowany, TDD było niespotykane. Aplikacja jest dość stabilna i rzadko spotykamy się z błędem zatrzymującym pokaz, ale średnio robimy około jednego lub dwóch błędów tygodniowo, które poważnie obniżają jakość usług. Znalezienie i naprawienie tych błędów trwa wiecznie, głównie z powodu wskazywania palcem, a jedynym testem, jaki mamy, jest testowanie interfejsu. Ponieważ jest dużo straconego czasu na szukanie tego, gdzie jest błąd, zanim będzie można go naprawić, ja i inny programista planujemy zaproponować Test Driven Development. Wkrótce nadejdzie nowy przegląd i chcielibyśmy, aby nowe moduły były prawie całkowicie testowane. Planujemy również zasugerować tworzenie jednostek testowych dla każdego kodu, który musimy zmienić, który jest przestarzały (tj. naprawa błędów lub implementacja funkcji ), ale nie marnować czasu na opracowywanie przypadków testowych dla kodu, który nie spowodował problemów. Wydaje mi się to rozsądne. W tym miesiącu mieliśmy błąd, którego naprawienie zajęło ponad dwa tygodnie, ale mógł zostać zidentyfikowany przed wdrożeniem, gdyby przeprowadzono testy jednostkowe. Ale naszym menedżerom wygląda na to, że zamierzają wydać więcej pieniędzy. Jak przekonać naszych klientów, że chcą wydać pieniądze na testy jednostkowe i rozwój sterowany testami? Czy są jakieś badania, które pokazują zwrot z inwestycji w testowanie jednostkowe?


title: Jakie było twoje najtrudniejsze polowanie na robaki i jak go znalazłeś i zabiłeś?

text: To jest pytanie „Podziel się wiedzą”. Interesuje mnie nauka na Twoich sukcesach i/lub porażkach. Informacje, które mogą być pomocne... **Tło:** * Kontekst: język, aplikacja, środowisko itp. * Jak zidentyfikowano błąd? * Kto lub co zidentyfikowało błąd? * Jak skomplikowane było odtworzenie błędu? **Polowanie.** * Jaki był twój plan? * Jakie trudności napotkałeś? * Jak w końcu znaleziono obraźliwy kod? **Zabijanie.** * Jak skomplikowana była ta poprawka? * Jak określiłeś zakres poprawki? * Ile kodu było zaangażowane w poprawkę? **Postmortem.** * Jaka była technicznie główna przyczyna? _buffer overrun, itp._ * Jaka była główna przyczyna od 30 000 stóp? * Jak długo ostatecznie trwał proces? * Czy poprawka niekorzystnie wpłynęła na jakieś funkcje? * Jakie metody, narzędzia, motywacje szczególnie Ci pomogły? ...strasznie bezużyteczne? * Gdybyś mógł zrobić to wszystko jeszcze raz?........... Te przykłady są ogólne, nie mają zastosowania w każdej sytuacji i być może są bezużyteczne. Proszę sezonować według potrzeb.


title: Pędź do strony klienta w tworzeniu stron internetowych

text: W ciągu ostatnich kilku miesięcy zauważyłem duże zainteresowanie skryptami po stronie klienta w tworzeniu stron internetowych. Ale podczas gdy technologie po stronie serwera są dojrzałe, stabilne i dobrze akceptowane przez programistów zaplecza, technologie po stronie klienta są niedojrzałe (tj. w porównaniu z dużymi frameworkami po stronie serwera) i nie są lubiane przez wielu doświadczonych programistów. Niemniej jednak wszyscy zajmują się obecnie rozwojem po stronie klienta. Osobiście spodziewam się, że te duże frameworki po stronie serwera znikną za 2-5 lat, obserwując obecny trend. Dlaczego to jest takie? W jaki sposób nowy i "rozproszony" program po stronie klienta w HTML5/JS może być lepszy od dużych i dobrze przemyślanych rozwiązań po stronie serwera?


title: Czy niestandardowe łącza DSL są nadal opłacalne?

text: Czy niestandardowe łącza DSL w JavaScript są nadal opłacalne, w szczególności te napisane za pomocą Antler, Boo lub dawnego Microsoft Oslo? Czy w związku z rozpowszechnianiem się silników JavaScript/ECMAScript typu open source (V8, IronJS itp.) bardziej sensowne jest pisanie potrzebnych funkcji w jednym z nich, zamiast pisania całkowicie nowego języka?


title: Chcę stworzyć otwarty format danych ... ale tak naprawdę nie wiem, co to jest

text: Znalazłem potrzebę standaryzacji przechowywania i rejestrowania danych związanych z informacjami o cukrzycy (nie sądzę, że takie istnieją, ale mogłem to przegapić). W tym celu stworzyłem ten projekt na githubie, ponieważ chcę go stworzyć.. ale tak naprawdę nie wiem, jak się do tego zabrać, a nawet na pewno to, co chcę stworzyć, nazywa się. Czy muszę wybrać język (xml, json) lub typ bazy danych (mongo, sqlite, mysql) lub jak "niespecyficzny" jest możliwy z czymś takim. Czy format danych, jak tutaj opisuję, jest czymś? Czy istnieją inne nazwy tego, co chcę zrobić? To trochę dziwne zadanie do wykonania w porównaniu do tego, do czego jestem przyzwyczajony.


title: Podczas projektowania korporacyjnego API, jaki poziom jest odpowiedni do rozdzielania bibliotek?

text: Załóżmy, że opracowujemy system REST dla przedsiębiorstwa, aby udostępnić zasoby firmy w aplikacji opartej na Javie. Docelowo masz jedną aplikację internetową i biblioteki domen. Moje pytanie brzmi, gdzie komponenty i usługi powinny znajdować się w tych bibliotekach domen i co powinno istnieć w samej aplikacji. Dla hipotetycznej firmy możemy mieć kilka obszarów domen. * Relacje z klientami * Zamówienia sprzedaży klientów * Produkcja * Struktura produktu * Łańcuch dostaw * Magazynowanie Biorąc pod uwagę te domeny, mielibyśmy obiekty domeny i usługi obiektowe dla trwałości. Następnie moglibyśmy podzielić je na wdrożenia * Relacje z klientami * Relacje z klientami - JDBC Impl * Zamówienia sprzedaży klientów * Zamówienia sprzedaży klientów - JDBC Impl * Produkcja * Produkcja - JDBC Impl * Struktura produktu * Struktura produktu - JDBC Impl * Łańcuch dostaw * Łańcuch dostaw - JDBC Impl * Magazynowanie * Magazynowanie - JDBC Impl Teraz zaczyna to wyglądać na skomplikowane tylko ze względu na to, jak wieloma indywidualnymi bibliotekami zarządzamy. Zastanawiam się, czy musimy w ogóle rozdzielić się do takiego poziomu i po prostu mieć trzy. * Biznes - Interfejs * Biznes - JDBC Impl * Aplikacja REST Moja druga część pytania dotyczy tego, gdzie powinny mieszkać klasy usługowe i klasy zarządzania. Biorąc pod uwagę powyższe magazynowanie, potrzebujemy obiektów domeny do reprezentowania twarzy wyboru, klasy DAO do zarządzania obiektem typu pick-face i wreszcie komponentu usługi dla naszej aplikacji reszty. W tym celu mogliśmy zobaczyć następującą strukturę. * Magazynowanie * PickFace * PickFaceDAO * Magazynowanie - JDBC Impl * JdbcPickFaceDAO * Aplikacja ReST * PickFaceController Z jednej strony `PickFaceController` najlepiej sprawdza się wewnątrz aplikacji ReST, ponieważ aplikacja może następnie ręcznie zarządzać usługami dla tego kontrolera i może wymagać dostosowania konfiguracji. Ale z drugiej strony `PickFaceController` może być lepszy w projekcie Warehousing, ponieważ dotyczy tylko modułu magazynowania, jednak aplikacja ReST może teoretycznie używać lokalizatorów usług do wyszukiwania usług w innych bibliotekach. WIĘC jakie są stosowane skuteczne podejścia? Kiedy wiesz, że posunąłeś się za daleko w separacji lub nie zrobiłeś wystarczająco dużo? Skąd wiesz, gdzie najlepiej coś położyć?


title: Licencja Apache na oprogramowanie nie objęte licencją Apache; jak odróżnić?

text: Licencja Apache stanowi: „Należy przekazać innym odbiorcom Dzieła lub Dzieł Pochodnych kopię niniejszej Licencji;” Więc jeśli skopiowałeś kilka funkcji z jakiegoś kodu na licencji Apache (więc to nie jest tylko linkowanie, pożyczyłeś kod) do produktu _który sam nie jest licencjonowany na Apache_ , co jest dobrym sposobem na wskazanie, że licencja, którą posiadasz zawarte dotyczy tylko niektórych fragmentów kodu w Twoim produkcie, a nie produktu jako całości? (Aby uniknąć sugestii, że produkt jako całość można swobodnie kopiować.) Jeśli lista projektów, z których wypożyczyłeś i ich różne licencje, zostanie dołączona do ekranu „Informacje” produktu, _naleganie_, aby licencje dotyczyły tylko tych bity? Pytam, bo to ma sens, ale nigdzie nie przypominam sobie, żebym to widział.


title: Standardowe raportowanie błędów Java

text: Obecnie pracuję nad stworzeniem zestawu narzędzi do pracy i doszedłem do punktu, w którym zastanawiam się nad raportowaniem błędów. Zasadniczo wszystkie moje narzędzia, które składają się z grupowania klas, zostaną ostatecznie uruchomione z głównej metody. Wiele z tych narzędzi będzie wykonywać operacje na plikach, takie jak odczytywanie ich i konwertowanie na jakąś tablicę obiektów lub zapisywanie tablicy obiektów do pliku w określonym formacie. Ilekroć masz do czynienia z danymi, których Twój program nie utworzył, zawsze jest miejsce na błędy i te błędy muszą być znane. Mając to na uwadze, jaka byłaby dobra metoda na udokumentowanie wszystkich błędów występujących podczas przetwarzania i umożliwienie ich późniejszego odzyskania? Biorąc pod uwagę, że mogę chcieć wysłać te informacje o błędzie później, nie sądzę, aby Log4J był dobrym rozwiązaniem. Rozważałem użycie konstruktora ciągów w każdej z moich klas przetwarzania i dołączanie wszystkich błędów do tego konstruktora i pobieranie go później w wolnym czasie. Myślałem też o użyciu jakiejś tablicy arrayList lub czegoś, co zawierałoby różne typy błędów, ale jestem trochę zagubiony. Czy ktoś ma na to dobre metody?


title: Czy są jakieś informacje statystyczne o tym, jakimi rodzajami pracy zajmują się programiści?

text: Od jakiegoś czasu pracuję jako programista Java. Zwykle pracuję nad aplikacjami biznesowymi i ostatnio zdałem sobie sprawę, że moja praca polega głównie na * pisaniu niekończącego się strumienia klas _facade_ *, po którym następuje nieskończona tablica _zapytań jpa_ * połączonych z niezliczonymi godzinami wpisywania `mvn clean install -U` i czekania na budowa Czasami pracuję nad przyjemniejszymi rzeczami, ale to tylko 5-10% mojego czasu spędzanego w miejscu pracy. Myślę, że powinienem przejść do innego segmentu branży, ponieważ tworzenie aplikacji biznesowych zwykle nie ma wyzwań. Mój problem polega na tym, że po pewnym czasie googlowania nie mogłem znaleźć żadnego wyczerpującego źródła na temat dystrybucji zadań programistycznych ani informacji dotyczących podaży/popytu i/lub segmentacji branży. Czy ktoś wie o jakimś źródle informacji o tych sprawach? Nawet niektóre wskazówki wystarczą. Myślę, że są inni, którzy myślą o czymś takim. Nie ograniczaj się do Javy, jeśli odpowiadasz, ponieważ chcę uczyć się nowych technologii. **Nie chcę ogólnych informacji, ale pogrupowane statystyki w różnych segmentach branży.**


title: Dlaczego niektóre strony internetowe pozwalają na edycję wpisu/wpisu na blogu tylko przez ograniczony czas?

text: Istnieje wiele stron internetowych, które umożliwiają użytkownikom/odwiedzającym publikowanie treści (takich jak komentarze do postów na blogu lub wiadomości). Opublikowany post może być edytowany przez autora, ale tylko przez pewien czas (zazwyczaj w kolejności minut). Następnie przycisk „Edytuj” nie jest już wyświetlany i nie można edytować wpisu. Moje pytanie brzmi: jakie jest uzasadnienie takiego zachowania? Jeśli technicznie możliwe jest umożliwienie użytkownikom edytowania ich postów, dlaczego nie oferować tej funkcji w nieskończoność?


title: Nazywanie klas staje się wyniszczające

text: Nie jestem pewien, czy jest to cecha OCD, czy nie, ale uważam, że czasami jestem całkowicie zablokowany, nie mogę kontynuować tego, co robię, gdy nazywam klasę (lub funkcję, przestrzeń nazw itp.), która moim zdaniem ma być używana na zewnątrz danego projektu. Na przykład API. Lub biblioteka klas narzędziowych. Jeśli nazwa nie jest do końca poprawna (moim zdaniem), po prostu nie mogę kontynuować... Utykam, próbując wymyślić właściwą nazwę. Próbowałem pisać małe aplikacje, które używałyby go, aby zobaczyć, jak wyglądają nazwy, ale to nie wydaje się pomagać ... Wiem, że nie powinno to mieć znaczenia, a zakładanie, że to dostaniesz, jest sprzeczne z jakimkolwiek nastawieniem programistycznym perfekcyjne za pierwszym razem... Po prostu czuję się bezsilny... Wszelkie wskazówki/pomysły byłyby bardzo mile widziane...


title: Dlaczego Google nie może przenieść V8 wraz z bazą kodu Chrome w C/Obj-C na iOS?

text: Google podał powód, dla którego wszystkie aplikacje na iOS muszą działać w środowisku piaskownicy, z wyjątkiem specjalnych aplikacji firmy Apple, które mogą korzystać z niektórych prywatnych interfejsów API. Tak więc Chrome na iOS używa tego, co zapewnia UIWebView, a także może wykonywać swoje funkcje interfejsu użytkownika i zewnętrzne buforowanie, aby dodać do niego coś dodatkowego. Ale dlaczego Google potrzebuje dostępu do silnika Nitro, do którego ma dostęp Safari na iOS. Czy Chrome nie może przenieść całego silnika webkita i V8 na iOS? Xamarin 2.0 zarządza portem mono (środowisko uruchomieniowe .net) w systemie iOS wraz z każdą aplikacją.


title: Jakie są najlepsze praktyki dotyczące buforowania wyników podzielonych na strony, których kolejność/właściwości mogą ulec zmianie?

text: Jaka jest najlepsza praktyka buforowania wyników wyszukiwania z podziałem na strony, których kolejność/właściwości można zmienić? Powiedzmy, że w mojej aplikacji ktoś chce zobaczyć ostatnie 20 wątków dyskusji (z 10 000). Do bazy danych zostanie wysłane żądanie za pośrednictwem `serwletu` pobrania pierwszych 20 rekordów z tabeli wątków dyskusji jako XML/JSON. Jeśli następnie chcą zobaczyć następne 20, przechodzą na następną stronę wyników, a to wywołuje kolejne żądanie uzyskania następnej partii (limit i przesunięcie = 20 itd.). W celu zmniejszenia obciążenia serwera i oczekiwania na klienta chciałbym buforować poprzednie strony wyników. Mam jednak dwa pytania: 1. Tabela, w której wyświetlane są wyniki, może być uporządkowana według więcej niż jednego atrybutu (tj. Data utworzenia wątku, autor wątku, data ostatniego posta). Oznacza to, że stwierdzenie takie jak „pierwsze 20 wyników” nie ma sensu bez kontekstu (tj. według czego porządkujemy). W jaki sposób front-end komunikuje back-endowi to, co już załadował? Moją pierwszą myślą było użycie identyfikatorów dla każdego wyniku, ale wysyłanie ich z powrotem na serwer przy kolejnych żądaniach (i filtrowanie wyników na ich podstawie) byłoby tak samo czasochłonne, jak wysyłanie wszystkiego na ślepo. W jaki sposób mogę to zrobić? 2. Co się stanie, jeśli atrybut poprzednio zwróconego wyniku (tj. najnowsza data post) uległ zmianie? Następnie potrzebujemy sposobu na sprawdzenie każdego wyniku, aby zobaczyć, czy nie został zmodyfikowany po stronie serwera od czasu jego stronicowania. Jak mogę to zrobić?


title: Czy są jakieś dobre narzędzia do wizualizacji pracy refaktoryzacji?

text: Wielu moich współpracowników jest dumnych z pisania skomplikowanych algorytmów i programów, których kompletność zajmuje dużo czasu. Ja (silnie) skłaniam się w stronę przeciwnego końca. Jestem dumny, kiedy piszę program, który nowicjusz (lub klient) może w trywialny sposób przekonać się, że jest poprawny, czytając mój kod źródłowy. Często poświęcam czas na bezlitosną refaktoryzację, przepisywanie danego kawałka kodu w kółko i w kółko, aż będę pewien, że można go szybko odczytać, wymagając tak niewielkiej znajomości wyspecjalizowanych interfejsów API (lub nawet odniesienia do słownika angielskiego) do przeanalizowania, jak to możliwe, i jest jak najbardziej zbliżony do języka naturalnego. Prowadzi to jednak do pewnych problemów, jeśli chodzi o przekonanie (nietechnicznych) klientów i pracodawców, że moja praca jest warta zainwestowanych pieniędzy. Co zaskakujące, niewiele osób jest skłonnych zapłacić dodatkowe pieniądze potrzebne do uzyskania kodu, który mogą sami sprawdzić, czy działa tak, jak im się wydaje, że działa. W tym kontekście: **Zastanawiam się, czy są jakieś dobre narzędzia do wyświetlania pracy refaktoryzacji**. Zwykle **używam git jako repozytorium kodu** i mam niemal nerwowy tik, wprowadzając nawet najmniejsze zmiany w moim lokalnym repozytorium. Jestem **dość pewien, że większość informacji wymaganych do pokazania wysiłku refaktoryzacji jest zapisana w mojej historii git**.


title: Jakie są argumenty PRZECIW za pomocą EntityFramework?

text: Aplikacja, którą obecnie buduję, wykorzystuje procedury składowane i ręcznie wykonane modele klas do reprezentowania obiektów bazy danych. Niektórzy ludzie sugerowali użycie Entity Framework i rozważam przejście na to, ponieważ nie jestem tak daleko w projekcie. Moim problemem jest to, że czuję, że ludzie opowiadający się za EF mówią mi tylko o dobrych stronach, a nie o złych :) Moje główne obawy to: * Chcemy walidacji po stronie klienta przy użyciu adnotacji danych i brzmi to, jakbym musiał tworzyć w każdym razie modele po stronie klienta, więc nie jestem pewien, czy EF zaoszczędziłby tyle czasu na kodowanie * Chcielibyśmy, aby klasy były jak najmniejsze podczas przechodzenia przez sieć, a przeczytałem, że używanie EF często zawiera dodatkowe dane, które są niepotrzebne * Mamy złożoną warstwę bazy danych, która przecina wiele baz danych i nie jestem pewien, czy EF sobie z tym poradzi. Mamy jedną wspólną bazę danych zawierającą takie elementy jak użytkownicy, kody statusu, typy itp. oraz wiele wystąpień naszych głównych baz danych dla różnych wystąpień aplikacji. Zapytania SELECT mogą i będą wykonywać zapytania we wszystkich instancjach baz danych, jednak użytkownicy mogą modyfikować tylko obiekty znajdujące się w bazie danych, nad którą aktualnie pracują. Mogą przełączać bazy danych bez ponownego ładowania aplikacji. * Tryby obiektowe są bardzo złożone i często zaangażowanych jest sporo złączeń Argumenty przemawiające za EF to: * Współbieżność. Nie musiałbym kodować w czekach, aby sprawdzić, czy rekord został zaktualizowany przed każdym zapisem * Generowanie kodu. EF może generować dla mnie modele klas częściowych i POCO, jednak nie jestem pewien, czy to naprawdę zaoszczędziłoby mi tyle czasu, ponieważ myślę, że nadal musielibyśmy tworzyć modele po stronie klienta do walidacji i niektóre niestandardowe metody analizowania. * Szybkość rozwoju, ponieważ nie musielibyśmy tworzyć procedur składowanych CRUD dla każdego obiektu bazy danych Nasza obecna architektura składa się z usługi WPF, która obsługuje wywołania bazy danych za pośrednictwem sparametryzowanych procedur składowanych, obiektów POCO, które przechodzą do/z usługi WCF i WPF klienta i samego klienta pulpitu WPF, który przekształca POCO w modele klas w celu walidacji i wiązania danych. Więc moje pytanie brzmi, czy EF jest do tego odpowiedni? Czy są jakieś pułapki związane z EF, o których nie wiem?


title: YAML: tłumaczenie swobodnego tekstu z XML

text: Studiuję YAML jako zamiennik XML, ale mam trudności z elementami zawierającymi swobodny tekst z osadzonymi elementami. Na przykład następujący dokument XML: <text> Jest to przykładowy tekst, obejmujący wiele wierszy i zawierający osadzone elementy, takie jak to i to. Istnieje również lista: <quote> <text>Tekst cytatu, obejmujący wiele wierszy i zawierający osadzone elementy, takie jak <c p="value">to</c> i to< /text> <author>Autor tego cytatu</author> </quote> Tekst jest kontynuowany tutaj. </text> Nie wiem, jak przekonwertować osadzone elementy w YAML. Rozumiem, że powyższy dokument XML jest tłumaczony na coś takiego (z wyjątkiem elementów osadzonych): text: > To jest przykładowy tekst, obejmujący wiele wierszy i ma osadzone elementy, takie jak to i to. Istnieje również lista: quote: text: > Tekst cytatu, obejmujący wiele wierszy i zawierający osadzone elementy, takie jak <c p="value">ten</c> i ten autor: Autor tego cytatu Tekst kontynuuje tutaj. Czy w niektórych miejscach wcięcia nie są potrzebne? Dziękuję Ci.


title: Jak wykorzystać projekt i cel Xcode do zarządzania produktami?

text: Na początku, miejmy nadzieję, że po terminach projekt i produkt nie zostaną pomylone. Tradycyjnie mieliśmy bazę kodu, która zwykle była głównym projektem. Dla naszych produktów stworzyliśmy jeden projekt dla każdego produktu, a te projekty z pewnością zależały od projektu głównego (bazy kodu). Kiedy produkt został wydany, stworzyliśmy gałąź wydania do archiwizacji i utrzymania. Teraz pracuję nad aplikacjami na iOS i zauważyłem, że istnieją specyficzne terminy dla Xcode, projektu i celu, które są podobne do projektu i produktu. Na pierwszy rzut oka łatwiej jest udostępniać konfigurację między produktami, aby uprościć wydania produktów, korzystając z zależności docelowych i docelowych. Z drugiej strony, w porównaniu z tradycyjnym sposobem, trudniej jest zarządzać kodem źródłowym, gałęziami itp., jeśli ilość produktów jest naprawdę duża. Czy w praktyce ktoś efektywnie używa tej wbudowanej struktury Xcode do zarządzania kodem i produktami? Jestem całkiem nowy w iOS i Xcode i szukam dobrych rad, dzięki.


title: Tworzenie aplikacji programistycznej i produkcyjnej Django

text: Właśnie zacząłem tworzyć strony internetowe i zmoczyłem stopy, tworząc podstawową aplikację na Facebooku przy użyciu Django. Zastanawiam się nad opublikowaniem aplikacji i w związku z tym potrzebuję teraz aplikacji deweloperskiej, w której mógłbym wprowadzać kolejne zmiany i wdrażać je w aplikacji produkcyjnej. Jestem w tym zupełnie nowy i byłbym naprawdę wdzięczny, gdyby ktoś mógł mnie poprowadzić, jak mam się do tego zabrać i jakie są najlepsze praktyki. (Planuję również, aby mój przyjaciel współpracował z aplikacją, więc musiałbym zintegrować git lub inne vcs w procesie, prawda?) Dzięki!


title: Praktyki CSS: negatywne pozycjonowanie

text: Jestem trochę nowicjuszem w CSS. W każdym razie zauważyłem, że niezwykle powszechną metodą stosowaną w CSS jest pozycjonowanie w negatywie lub poza ekranem, niezależnie od tego, czy chodzi o ukrywanie tekstu, wstępne ładowanie obrazów, czy o to, co masz. Nawet w witrynach SE, takich jak StackOverflow i ta witryna, w ich CSS ustawiono #hlogo a { text-indent: -999999em }. Więc chyba mam kilka pytań. * czy to poprawny CSS? czy to tylko "hack"? * czy są wady robienia rzeczy w ten sposób? * dlaczego jest to tak powszechne? czy nie ma lepszych sposobów na ukrywanie treści?


title: Jak udostępnić funkcję tylko wybranym użytkownikom

text: Dobrym przykładem tego, o co próbuję zapytać, jest nowa funkcja osi czasu Facebooka. Na początku tylko nieliczni mieli dostęp do osi czasu. Gdy funkcja stała się bardziej ugruntowana w sposobie jej działania i naprawiono w niej błędy, dodatkowi użytkownicy uzyskali dostęp do tej funkcji. W późniejszym czasie duża grupa użytkowników uzyskała dostęp do tej funkcji, a teraz jest to funkcja ogólna dla wszystkich użytkowników. W jaki sposób zespół programistów zarządza wdrażaniem tego typu funkcji? Bawiłem się pomysłem wykorzystania ustawień konfiguracyjnych do selektywnej kontroli dostępu, jeśli coś jest w fazie testowania lub produkcji za pomocą pliku konfiguracyjnego i warunkowych instrukcji if w kodzie. Teraz, chociaż jest to w porządku dla prostych funkcji, wierzę, że gdybyśmy próbowali zaimplementować to w większym zestawie funkcji, stałoby się to niemożliwe do zarządzania. Jaki byłby najlepszy sposób zarządzania wdrażaniem funkcji w ten sposób?


title: Pracodawca prosi mnie o wykorzystanie API dla całej strony internetowej?

text: Pracuję z programistą ASP.net pod kierownictwem szefa, który nie ma zbyt dużej wiedzy technicznej. Ja wykonuję front-end, a ekspert od baz danych zajmuje się backendem. Jednak ostatnio powiedział, że będzie pracował nad API dla naszej strony – zapytałem dlaczego, myśląc, że powinniśmy najpierw zrobić wersję webową, zakładając, że API jest przeznaczone dla aplikacji mobilnych. Powiedział jednak, że po prostu stworzy jedno API, które będzie działać dla wszystkich aplikacji internetowych i mobilnych, a ja zrobię w tym celu front-end. Czy to tylko ja, czy to trochę szalone? Jeśli robię front-end, oznacza to, że będą _dwa back-endy_ , ponieważ będę musiał użyć PHP lub czegoś innego, aby zwinąć jego API do witryny, co jest dwukrotnie dłuższym czasem ładowania niż normalnie. Z góry dziękuję za wszelką pomoc. Poza tym jestem „stażystą”, więc będę miał trochę, ale niezbyt duży wpływ na ten problem.


title: Jak mogę pomóc 9-latkowi w nauce tworzenia aplikacji?

text: > **Możliwy duplikat:** > Jakie są dobre narzędzia do wprowadzenia dzieci do programowania? Mój 9-latek ma obsesję na punkcie tworzenia aplikacji i nie mam pojęcia, jak mu w tym pomóc. Gdzie/jak powinien zacząć? Czy istnieją proste, ale przydatne kursy lub samouczki online? Czy musi umieć programować? A jeśli tak, jakiego rodzaju kursów programowania powinienem szukać? Dzięki za wszelką pomoc!


title: Dlaczego Java nie jest używana do tworzenia nowoczesnych aplikacji internetowych?

text: Jako zawodowy programista Java, staram się zrozumieć - dlaczego nienawiść do Javy dla nowoczesnych aplikacji internetowych? Zauważyłem trend polegający na tym, że spośród współczesnych startupów internetowych stosunkowo niewielki procent z nich używa Javy (w porównaniu z ogólną popularnością Javy). Kiedy zapytałem kilka osób o to, zazwyczaj otrzymywałem odpowiedź w stylu: „Z pasją nienawidzę Javy”. Ale tak naprawdę nikt nie wydaje się być w stanie udzielić ostatecznej odpowiedzi. Słyszałem również, że ta sama społeczność web-starterów odnosi się negatywnie do programistów Javy – mniej lub bardziej sugerując, że są powolni, nie kreatywni, starzy. W rezultacie spędziłem czas pracując nad zdobyciem Ruby/Rails, zasadniczo po to, aby dowiedzieć się, czego mi brakuje. Ale nie mogę przestać myśleć: „Mogłbym to zrobić znacznie szybciej, gdybym używał Javy”, głównie ze względu na moje względne poziomy doświadczenia. Ale także dlatego, że nie widziałem niczego krytycznego „brakującego” w Javie, co uniemożliwiałoby mi zbudowanie tej samej aplikacji. _Co prowadzi mnie do moich pytań_ : Dlaczego Java nie jest używana w nowoczesnych aplikacjach internetowych? * Czy to słabość języka? * Czy jest to niesprawiedliwy stereotyp Javy, ponieważ istnieje od tak dawna (jest niesprawiedliwie kojarzony ze starszymi technologiami i nie cieszy się uznaniem za jego „nowoczesne” możliwości)? * Czy negatywny stereotyp programistów Java jest zbyt silny? (Java nie jest już „fajna”) * Czy aplikacje napisane w innych językach są naprawdę szybsze w budowie, łatwiejsze w utrzymaniu i czy działają lepiej? * Czy Java jest używana tylko przez duże firmy, które są zbyt wolne, aby przystosować się do nowego języka?


title: Jak bezpieczne jest to, że przechowuję hasła w app.config w C# .net 4?

text: Przechowuję hasła bazy danych w app.config jako zwykły tekst. Publikuję również aplikację. Jak bezpieczne jest to hasło przechowywane w app.config? Czy mogę użyć deasemblera i go znaleźć?


title: dlaczego łatwo jest złamać obrazy weryfikacyjne, jeśli nie są zniekształcone do tego stopnia, że ludzie również mogą je źle pomylić?

text: Nie rozumiem, dlaczego ludzie lubią mówić „Obrazy musiały być zniekształcone, inaczej łatwo by je złamały”. Mówię o tych obrazach weryfikacyjnych, które musieliśmy wpisać, aby zidentyfikować, że jesteśmy ludźmi. Jakie dokładnie kroki musimy podjąć, aby przełamać nawet prosty obraz? w ten sposób: ![tutaj podaj opis obrazu](http://i.stack.imgur.com/vmPUb.png) Ok, więc chyba musieliśmy przeczytać wszystkie bajty obrazu i spróbować wydobyć jakiś sens tych bajtów? ponieważ jeśli _naprawdę_ to się robi, wydaje się to naprawdę trudne (więc co jest z tym komentarzem, że jest _łatwo złamać_), czy jest lepszy sposób na pękanie obrazów (co mimo wszystko sprawia, że jest to takie łatwe) ?


title: co to jest platforma dokowania

text: Szukam niezrozumiałej koncepcji `Docking Framework` w sieci, ale nie rozumiem jej koncepcji i korzyści. Widzę, że istnieje kilka 'Docking Framework' w java, takich jak `Netbeans Platform`, `MyDoggy` czy `Sanaware` itd., ale nie rozumiem ich korzyści. Czy możesz to wyjaśnić? Dziękuję.


title: Co jest lepsze SICP lub HTDP

text: Czytałem, że SICP (Structure and Interpretation of Computer Programs) jest trudny, a HTDP (How To Design Programs) jest lepszy jako kurs wprowadzający. Powiedziałbym, że jestem całkiem dobry z matematyki, ale nie jestem geniuszem. Więc jak trudny jest SICP, czy jest trudniejszy niż knuth lub cormen.