title: Który język programowania jest najlepszy do rozpoczęcia nauki/nauki programowania?

text: Ponieważ to pytanie jest zamknięte, podejmę próbę, która faktycznie spełnia wszystkie 6 wymagań. Na naszym wydziale na razie zaszła duża zmiana na zajęciach „informatyka”. Kiedyś uczyliśmy Javy, ale zostanie to zastąpione przez Matlab (a klasa będzie nazywać się "Scientific Computing"). Osobiście nie jestem zwolennikiem tego pomysłu, ponieważ: * Matlab nie jest darmowy, co utrudnia uczniom zdobywanie praktycznego doświadczenia. Mogą na kampusie lub przez VPN, ale nie na własnych komputerach. * ~~Matlab nie jest nawet prawdziwym językiem programowania, ale środowiskiem matematycznym, które wyróżnia się w tym, ale zawodzi w niczym innym.~~ * ~~Matlab nie nadaje się do ogólnych koncepcji programowania.~~ edytuj: te dwa ostatnie punkty wydawały się nieco mocno sformułowane. Matlab bardzo się rozwinął, odkąd się z nim ostatnio spotkałem. Teraz też miałem problem z Javą, która okazała się dla wielu uczniów prawdziwym bólem na przysłowiowym zapleczu, głównie ze względu na gadatliwość. Jeśli chodzi o ogólny kurs programowania, myślę, że te punkty są ważne: * wszystkie podstawowe pojęcia programowania * raczej prosta składnia bez zbytniej gadatliwości * możliwość łatwego programowania zarówno proceduralnego, jak i obiektowego * krótka pętla informacji zwrotnej na temat twojego programowania * udowodnione przydatność w wielu zastosowaniach, zwłaszcza w świecie naukowym (bioPerl, bioConductor, bioPython, bioJava, ...), dzięki czemu mogą być wykorzystywane do praktycznej pracy podczas studiów. **Jakie są twoje wyobrażenia o najlepszym nauczaniu języka na poważnym poziomie (stąd nie pseudojęzyki używane w szkole podstawowej lub średniej, mówię o poziomie licencjackim na uniwersytecie)?** * * * zredagowano, aby zachować pytanie więcej ogólny. Pierwotnie wspomniałem o R, Pythonie lub Perlu, a :R jest może mniej dobrym wyborem, ponieważ jest to język zwektoryzowany. To nie jest ogólne, więc może być zbyt szczegółowe. **edytuj:** Uważam to za błogosławieństwo, ale argumentem tutaj było to, że zwektoryzowany język nie jest wystarczająco ogólny do celów dydaktycznych, ponieważ ludzie mieliby kłopoty, przechodząc do Perla i Pythona. Nie mówię też o edukacji statystycznej, mówimy o studentach pierwszego stopnia licencjata. Każdy kierunek, każdy rodzaj. Po prostu dodałem osobiste doświadczenie.


title: Jak udokumentować aplikację wielowarstwową?

text: Muszę stworzyć strukturę dokumentacji dla starszej aplikacji i nie jestem pewien, jak ją zorganizować. **Cele dokumentacji** : * Lista przypadków użycia * Przebieg programu dla każdego przypadku użycia. ( _Schemat blokowy wszystkich kroków logicznych wykonywanych przez kod dla konkretnego przypadku użycia_ ). * O ile to możliwe, wyjaśniono _dlaczego_ stosuje się określoną logikę biznesową/kodową. * Format dokumentacji, jeśli to możliwe, nie powinien wymagać instalowania nowego narzędzia, aw najlepszym przypadku powinien być czytelny w formacie Word lub PDF (aby firmy mogły to łatwo sprawdzić). * Niektóre pytania, na które należy odpowiedzieć, korzystając z dokumentacji: "Jaką logikę biznesową wykonuje kod dla danego przypadku użycia?";"Czy ten kod jest zbędny w innym miejscu w aplikacji?"; "Jeśli zmienię ten kod, jakich przypadków użycia dotyczy to?"; **Charakterystyka aplikacji** : (ogólnie jest trochę niechlujna, prezentacja i logika biznesowa są nieco mieszane w prawie każdej warstwie) * Prezentacja w formularzach sieci Web .NET przy użyciu kontrolek sieciowych (GridViews, ObjectDataSource, Reports) i JavaScript (jQuery, jQuery-ui ) na stronach *.aspx * Kod po stronie serwera w języku C# w *.aspx.cs do obsługi zdarzeń ogłaszania zwrotnego. * C# Code-Pages i oddzielny projekt zintegrowany z aplikacją WebApplication dostarczającą logikę biznesową jako część aplikacji internetowej * SQL Server do utrwalania danych (Master-Data DB, Data Staging DB) * Widoki zawierające niektóre dane z innych serwerów * C# CLR zespoły dla logiki biznesowej wdrożone na serwerze SQL i niektóre pomniejsze procedury składowane/wyzwalacze SQL * Struktura plików na tym samym serwerze, co baza danych SQL, która obsługuje archiwizację, import danych z plików. * Interfejs plików do SAP (którego jeszcze nie do końca rozumiem). **Do tej pory...** Zacząłem dokumentować w programie Word. Mam osobny plik Word dla Front-Endu i struktury bazy danych/pliku. Każdy plik zaczynam od przypadków użycia (zainicjowane przez użytkownika są zadaniami zaplanowanymi w pliku bazy danych), po których następuje struktura kodu. Każdy przypadek użycia ma hiperłącze do schematu blokowego/wyjaśnienia kodu, który jest wykonywany jako pierwszy, który ma hiperłącze do schematu blokowego/wyjaśnienia kodu, który następnie jest wykonywany, itd. Robię to, aby każda część kodu była udokumentowane tylko raz i że inne części dokumentacji kodu mogą się z nią łączyć, jeśli wykonają ją w aplikacji. **Problemy** : * Nie mogę nawigować wstecz od hiperłączy ( _tj. Nie mogę odpowiedzieć na pytanie: „Jeśli zmienię ten kod, to na jakie Przypadki Użycia będzie to miało wpływ”. Mogę tylko przejść od Case to Code, a nie na odwrót._ ) * Dokument Word jest już niezgrabny i niechlujny po tym, jak ledwo zacząłem w nim pisać. **Pytanie** : Jak mogę udokumentować tę wielowarstwową aplikację bez robienia wielkiego bałaganu?


title: Jak efektywnie pracować zdalnie w małej firmie?

text: Chciałbym wiedzieć, jakie doświadczenia z telepracą mieli inni w pełnym wymiarze godzin? Jakie narzędzia i procesy oprogramowania pomogły zachować spójność oraz zmaksymalizować współpracę i produktywność?


title: Czy możemy zagwarantować, że program nigdy się nie zepsuje?

text: Mamy tutaj system. Ostatnio w jednym z numerów w wygenerowanym przez system raporcie jest błędna kalkulacja. Dzięki naszemu doświadczeniu od kilku lat nigdy nie napotkaliśmy żadnego problemu/błędu w tym systemie. Ponieważ twórca tego systemu już odszedł, trudno jest namierzyć programy. Ale zweryfikowaliśmy dane wejściowe, ustawienie i są one prawidłowe. Teraz moje pytanie brzmi, czy program komputerowy nagle się zepsuje bez żadnego logicznego powodu? Jeśli uderzę w serwer, czy jedna z liczb, które oblicza komputer, stanie się inną liczbą i sprawi, że obliczenia będą błędne? Zgadzam się, że mój pomysł jest dość szalony, ale chcę tylko wiedzieć, skąd możemy wiedzieć, że problem nie jest spowodowany przez program i dane wejściowe, ale przez inne czynniki? PS Ten szalony system nie ma dziennika.


title: Czy mogę usunąć wersaliki i skrócić wyłączenie odpowiedzialności na mojej licencji?

text: Używam licencji MIT dla określonego fragmentu kodu. Teraz ta licencja ma duże zastrzeżenie we wszystkich wielkich literach: OPROGRAMOWANIE JEST DOSTARCZANE "TAK JAK JEST", BEZ JAKICHKOLWIEK GWARANCJI, WYRAŹNYCH LUB DOROZUMIANYCH, W TYM MIĘDZY INNYMI GWARANCJI... ... Widziałem zastrzeżenie zwykle pisane wielką literą na licencji zlib (zauważ, że znajduje się nad tekstem licencji), a nawet oprogramowanie bez żadnego zastrzeżenia (co oznacza, jak rozumiem, że rzeczywiście istnieje gwarancja?), ale chciałbym trochę pozyskać porady od zaufanej strony. Po prostu nie znalazłem żadnego. _Informacja o licencji dla innych plików_ GNU zawiera następujące wyłączenie odpowiedzialności: > Ten plik jest oferowany w stanie, w jakim jest, bez żadnej gwarancji. Krótkie i proste. Dlatego moje pytanie: Czy istnieją jakieś zaufane źródła wskazujące, że krótkie, a nie długie i zwykle pisane, a nie wielkie litery (lub nawet jedno lub drugie) są bezpieczne we wszystkich jurysdykcjach, którymi powinienem się zajmować? Na potrzeby tego pytania oprogramowanie zostało wydane w Unii Europejskiej, jeśli ma to jakiekolwiek znaczenie.


Jaka jest różnica między przyszłością a obietnicą? (W Akka i Gpars.) Wyglądają one dla mnie tak samo, ponieważ blokują i zwracają wartość przyszłości po wywołaniu get i obietnicy uzyskania wyniku przyszłości.


title: Wybór technologii do rozwoju międzyplatformowego (komputer stacjonarny i telefon)?

text: Jestem głównie programistą Microsoft, ale jest kilka małych projektów, którymi chciałbym się zająć, a które skorzystałyby z bycia międzyplatformowym. Platformy, na które chcę kierować to: Windows, Linux, Mac, Android i najlepiej iPhone, sieć (działająca w przeglądarce). Potrzebuję 3D (w przybliżeniu poziom wsparcia obserwowany w czymś takim jak Minecraft (nie piszę Minecraft)), trochę sieci. Jestem prawie pewien, że Java będzie działać na wszystkich z wyjątkiem iPhone'a. Patrząc na „powiązane pytania” powyżej, oferowane jest QT (bez przeglądarki lub telefonu), a także HTML/CSS/Javascript (3D? Pakiet dla komputerów stacjonarnych?) Inną alternatywą jest posiadanie oddzielnych wersji dla osobnych platform, opracowanych z niektórymi kod tam, gdzie to możliwe. Ta opcja nie jest czymś, o czym nic nie wiem. Czy ktoś ma doświadczenie z tego rodzaju zagadką? Uznałem, że tutaj jest lepsze niż SO, ponieważ wyobrażam sobie, że istnieją kompromisy, które wykraczają poza wybór techniczny. Wreszcie, nie jest to operacja komercyjna, więc niektóre z bardzo drogich narzędzi międzyplatformowych nie wchodzą w rachubę, chyba że oferują jakąś edycję społecznościową.


title: Jakich błędów w zarządzaniu oprogramowaniem należy unikać, aby ludzie nie nienawidzili dostawcy?

text: Poprzednie pytanie o to, dlaczego ludzie nienawidzą Microsoftu, zostało zamknięte. Jest to próba postawienia nieco bardziej konstruktywnego pytania na tej samej zasadzie. Ten jest jednak zarówno szerszy, jak i węższy. Jest bardziej ogólny, ponieważ dotyczy ogólnie dostawców oprogramowania, a nie tylko firmy Microsoft. Jest węższy, ponieważ zajmuje się tylko zarządzaniem oprogramowaniem. Więc jakie kroki należy podjąć (i/lub unikać) w zarządzaniu poszczególnymi produktami oprogramowania, aby zapewnić, że nie tylko poszczególne produkty, ale firma jako całość jest szanowana/lubiana/postrzegana w pozytywnym świetle?


title: Czy Product Owner jest również programistą w Twoim zespole?

text: Jestem zdezorientowany co do odpowiedzialności PO. Byłem programistą w zespole Game Feature Team, ale także PO. Codzienna praca programisty to prawie pełny etat, więc muszę pracować z czasem, aby wypełnić swoje obowiązki PO, a odpowiedzialność PO wydaje się być sprzeczna z myślami programisty. Jako PO wybiorę więcej funkcji w następnym sprincie. W przeciwnym razie powiem sobie, żeby tego nie robić, ponieważ jestem członkiem zespołu, który rozwija te funkcje. Ta sytuacja sprawia, że jestem zdezorientowany, więc chcę usłyszeć od was kilka pomysłów. Jestem nowy w Scrum i Game Dev (około półtora roku), a także tutaj i po angielsku.


title: Przywództwo nie widzi wartości w standardowym procesie konfiguracji maszyny i nowej orientacji na programistów

text: Około 3 miesiące temu nasz główny web developer i projektant (ta sama osoba) opuścił firmę, bardziej zielone pastwiska były powodem odejścia. Dobre dla nich, mówię. Mój problem polega na tym, że jego dział był całkowicie nieudokumentowany. Od odejścia lidera jest ciężko, jest dużo wiedzy zarówno teoretycznej, którą wykorzystujemy przy cytowaniu nowych projektów, jak i technicznej/wdrożeniowej naszych istniejących produktów, którą straciliśmy w wyniku jego odejścia. Moją normalną rolą jest jako menedżer produktu (dla naszych produktów) oraz jako analityk biznesowy dla niektórych naszych prac konsultingowych opartych na projektach. Nauczyłem się kodować w ciągu ostatniego roku i starając się dalej iść do przodu, podjąłem zadanie skonfigurowania laptopa jako maszyny programistycznej z nadzieją na zaimplementowanie niektórych łatwiejszych żądań funkcji i naprawienie niektórych żadnych przemyślanych błędów, które trafiają do naszego systemu biletowego. Ale nikt nie wie, jak wziąć nowy komputer z systemem Windows i skonfigurować go do bezproblemowej współpracy z naszymi aplikacjami produkcyjnymi. Poprosiłem mojego szefa, który nadal jest w kontakcie z deweloperem, który odszedł, o udokumentowanie i utworzenie procesu wdrażania nowego dewelopera, instalację oprogramowania, wymagane pakiety, proces wdrożenia na serwery aplikacji produkcyjnych itp. Żadne z to istnieje, a ja kręcę się, próbując sprawić, by mój komputer działał jako funkcjonalna maszyna programistyczna. Ale wydaje się, że nie rozumie potrzeby istnienia takiego procesu. Najwyraźniej nowy programista, który zastąpił tego, który odszedł, używał maszyny, która była wstępnie skonfigurowana dla naszego środowiska, więc nawet nowy programista nie mógł skonfigurować nowej maszyny, jeśli dodamy innego programistę. Moje pytanie składa się z dwóch części: 1. Czy nie mylę się, zakładając, że proces na pokładzie i skonfigurowanie nowego komputera, aby był częścią naszego ekosystemu rozwoju, powinien istnieć? 2. Czy jestem jęczącym dzieckiem i czy powinienem sam wymyślić proces i stworzyć dokument?


title: Jak definiuje się przejrzystość w kontekście architektury brokera?

text: Chciałbym wiedzieć, jak definiowana jest przejrzystość i jaka jest jej miara w kontekście architektury brokerskiej. Na przykład: z punktu widzenia programisty dystrybucja [w architekturze brokera] jest przejrzysta. rozmawiasz z brokerem w taki czy inny sposób i wprowadza to model obiektowy, w którym usługi dystrybucji są hermetyzowane w obiektach.


title: Czy jest jakiś sposób na szybsze rozwiązywanie błędów? Właśnie dostałem ostrzeżenie od mojego szefa

text: Mój szef właśnie powiedział mi, że w poniedziałek otrzymam negatywną ocenę wyników. Chce ze mną porozmawiać o tym, dlaczego jestem taki wolny i dlaczego mój wskaźnik naprawy błędów jest tak niski. Uwielbiam programować i rozwiązywać problemy, ale tak naprawdę uważam, że moja praca jest naprawdę bardzo ciężka. Właściwie jestem programistą od około 10 lat. Ale to jest moja pierwsza wielowątkowa praca z wbudowanym Linuksem - jestem tu od 2 lat i dla wszystkich jest oczywiste, że wciąż mam problemy. I myślę, że stałem się tak zdemoralizowany i zepchnięty na margines, że straciłem dużo ognia, który miałem na początku pracy. Czy ktoś był kiedyś w podobnej sytuacji i jak zamierzasz zwiększyć swój wskaźnik naprawy błędów? * * * Aktualizacja: miałem recenzję. Zostałem objęty 3-miesięcznym „programem rozwoju pracowników” (typu wspomnianego przez Dunka). Nie jestem pewien, czy mogę to odwrócić. Ale nawet jeśli muszę iść dalej, wiele się nauczyłem z tego doświadczenia. ## Kolejna aktualizacja Minęło już około 6 tygodni od pierwszej recenzji. Moja rada dla każdego, kto znajduje się w takiej samej sytuacji, to być wystarczająco pokornym, aby przyjąć krytykę i uczyć się na błędach. I nie bać się wyglądać głupio. Zadawaj mnóstwo pytań. Niech ludzie wiedzą, że próbujesz się uczyć i pytaj, aż zrozumiesz. Ale bądź przygotowany, że to się nie uda. Konstruuję portfolio kodu... i daję mu najlepsze zdanie. ## Jeszcze jedna aktualizacja Niechętnie umieszczam to tutaj, ponieważ obawiam się, że nie będę w stanie odesłać przyszłych pracodawców do mojego profilu stackoverflow... Ale tak czy inaczej, może to zainteresować kogoś, kto czyta to pytanie, ale właściwie straciłem pracę kilka tygodni temu. Jestem w trakcie doskonalenia wszystkich umiejętności, których potrzebuję - wiele skorzystałem z podanych tutaj porad.


title: Odwiedzanie punktów na osi liczbowej przy minimalizacji kosztów niezwiązanych z odległością

text: Potrzebuję pomocy w rozwiązaniu tego problemu z ACM ICPC. Moim obecnym pomysłem jest modelowanie tego jako problemu z najkrótszą ścieżką, który jest opisany w opisie problemu. **Problem** Istnieją pojemniki na odpady nuklearne `N = 1000` umieszczone wzdłuż jednowymiarowej linii liczbowej w _różnych_ pozycjach od `-500 000 do 500 000`, z wyjątkiem `x=0`. Zadaniem osoby jest zebranie wszystkich pojemników na śmieci. W każdej sekundzie, w której pojemnik na odpady nie jest odbierany, emituje 1 jednostkę promieniowania. Osoba zaczyna od „x = 0” i może przemieszczać „1” jednostkę na sekundę, a zbieranie odpadów zajmuje znikomą ilość czasu. Chcemy znaleźć minimalną ilość emitowanego promieniowania podczas zbierania wszystkich pojemników. **Przykładowe dane wejściowe:** `4` Kontenery znajdujące się w `[-12, -2, 3, 7]`. Najlepszą kolejnością zbierania tych pojemników jest `[-2, 3, 7, -12]`, przy minimalnej emisji `50` jednostek. Wyjaśnienie: osoba przechodzi do `-2` w 2 sekundy iw tym czasie emitowane są `2 jednostki` promieniowania. Następnie przechodzi do „3” (odległość: „5”) tak, że beczka wypuszcza „2 + 5 = 7” jednostek promieniowania. Potrzebuje `4` więcej sekund, aby dostać się do `x = 7` gdzie beczka wyemitowała `2 + 5 + 4 = 11` jednostek. Potrzebuje `19` sekund, aby dostać się do `x = -12` gdzie beczka wyemitowała `2 + 5 + 4 + 19 = 30` jednostek. `2 + 7 + 11 + 30 = 50`, co jest odpowiedzią. **Uwagi** Istnieje oczywiste rozwiązanie „O(N!)”. Badałem jednak metody zachłanne, takie jak przejście do najbliższego lub przejście do najbliższego klastra, ale te nie zadziałały. Myślałem o tym problemie od dłuższego czasu i wymodelowałem go jako problem z przeszukiwaniem grafów: 1. Wstawiamy `0` jako pozycję bazową (to będzie stan początkowy) 2. Następnie sortujemy pozycje od najmniejszej do największej. 3. Następnie wykonujemy BFS/PFS, gdzie `stan` składa się z * Dwóch liczb całkowitych `l` i `r` reprezentujących ciągły zakres w posortowanej tablicy pozycji, którą już odwiedziliśmy * Liczbę całkowitą `loc`, która mówi nas, niezależnie od tego, czy jesteśmy na lewym czy prawym punkcie końcowym zakresu * Liczbę całkowitą `time`, która mówi nam, jak upłynął czas * Liczbę całkowitą 'cost', która mówi nam o całkowitym koszcie do tej pory (na podstawie odwiedzonych węzłów) 4 Z każdego stanu możemy przejść do [l - 1, r] i [l, r + 1], odpowiednio podkręcając pozostałe 3 liczby 5. Stan końcowy to [0, N], sprawdzając obie pozycje końcowe. Wydaje się jednak, że „[L, R, loc]” nie definiuje jednoznacznie stanu i musimy przechowywać „L, R, loc i time”, jednocześnie minimalizując „koszt” w każdym z nich. Prowadzi to do algorytmu wykładniczego, który wciąż jest zbyt wolny. Czy ktoś może mi pomóc rozwinąć mój pomysł lub popchnąć go we właściwym kierunku? **Edycja:** Może można to zamodelować jako problem dynamicznej optymalizacji programowania? Myśląc o tym, ma te same problemy, co rozwiązanie wyszukiwania wykresów - tylko dlatego, że obecny „koszt” jest niski, nie oznacza, że jest to optymalna odpowiedź na ten podproblem, ponieważ „czas” również ma duży wpływ na odpowiedź. Greedy nie działa: mam zachłanny algorytm selekcji, który szacuje koszt przeprowadzki w określone miejsce (np. jeśli poruszamy się w prawo, podwajamy odległości do lewej beczki i tak dalej). Czy możesz przeprowadzić wyszukiwanie priorytetowe za pomocą heurystyki? Heurystyka mogłaby łączyć koszt bieżącej podróży z czasem, jaki upłynął.


title: Jak zintegrować wyniki wyszukiwania Google w aplikacji spring mvc

text: Oto, co staram się zrobić (a wyszukiwanie podobnych nie przyniosło nigdzie żadnych wyników): Na mojej stronie - podaj pole wprowadzania, które przeszuka google w poszukiwaniu wyników. Chcę wyświetlić te wyniki na mojej stronie i dostosować adres URL tych wyników wyszukiwania. Tak więc za każdym razem, gdy użytkownik kliknie wyświetlony wynik, moja aplikacja (wewnętrznie wyszuka strony profilu i) zapewni przyszły kierunek działania. Jedyną integracją google jest dostarczanie wyników wyszukiwania (i prawdopodobnie współrzędnych mapy) Env: Spring mvc, jsp, hibernate. Czy ktoś może doradzić, jak mogę to osiągnąć? Nie mam od czego zacząć, ale czytałem o niestandardowej wyszukiwarce Google, ale myślę, że służy ona tylko do wyszukiwania w Twojej witrynie lub przekierowywania użytkowników do odpowiednich witryn znalezionych w wyniku.


title: Jak radzić sobie z kluczami programisty, które nie powinny być czytelne dla człowieka w Twojej aplikacji? (przykład: konkretny konflikt z twitter api i twitter gem)

text: Jak radzić sobie z kluczami programisty, które nie powinny być czytelne dla człowieka w Twojej aplikacji? Na stronie deweloperów Twittera, pod My Access Token jest napisane: „Zachowaj tajemnicę oauth_token_secret. Razem z tajemnicą klienta OAuth, te klucze nigdy nie powinny być czytelne dla człowieka w twoich aplikacjach”. Jednak niesamowity klejnot twittera ( https://github.com/jnunemaker/twitter ) mówi, aby utworzyć inicjator za pomocą tego: Twitter.configure do |config| config.consumer_key = TWÓJ_CONSUMER_KEY config.consumer_secret = TWÓJ_CONSUMER_SECRET config.oauth_token = TWÓJ_TOKEN_OAUTH config.oauth_token_secret = TWÓJ_KONSUMENT_TOKEN_SECRET end Co robisz z tego typu konfliktem? Nie możesz po prostu zresetować oauth_token i oauth_token_secret, o ile wiem, musisz stworzyć zupełnie nową aplikację do Twittera. Martwiłem się, ponieważ zamierzam rozpocząć współpracę z niektórymi programistami freelancerami i na początek nie chciałbym im ufać moimi prywatnymi kluczami/tokenami aplikacji. Dziękuję.


title: Jaka jest logika filtrowania/odkażania danych wejściowych?

text: Zawsze uważałem, że sprawdzanie poprawności danych wejściowych jest bardziej logiczne niż ich filtrowanie. Sposób odpowiedniego filtrowania danych zależy od sytuacji, dlatego IMO należy to robić na wyjściu lub podczas zapisu do bazy danych. Widzę jednak, że niektóre frameworki zapewniają automatyczne filtry XSS dla przychodzących danych POST i GET. Jaka jest logika tego rozwiązania? Nie widzę w tym żadnych korzyści poza zapewnieniem szybkiego i łatwego rozwiązania „leniwym” programistom. A może jest jakiś konkretny powód bezpieczeństwa, którego nie rozumiem?


title: Utrzymuj aplikację internetową po odejściu jedynego programisty

text: Mam śmiertelną chorobę i jest bardzo duża szansa, że do końca roku nie będę już na tym świecie. Stworzyłem aplikację internetową, która jest szeroko wykorzystywana w mojej rodzinnej firmie (małym sklepie fryzjerskim). Żaden członek mojej rodziny nie posiada umiejętności programowania ani administrowania systemem. Nie mam bliskich przyjaciół z tymi umiejętnościami. Firma osiąga co najwyżej 10 tys. zysku netto rocznie. W rzeczywistości zyski firmy mogą sobie pozwolić tylko na pensje 3 pracowników (ojca, matki i siostry), a te są dość niskie i maleją z roku na rok z powodu kryzysu finansowego. W rzeczywistości nie jestem pracownikiem firmy mojej rodziny, pracuję dla normalnej firmy programistycznej. Aplikację opracowałem w wolnym czasie, aby im pomóc. Jak dotąd nie obchodzi mnie, czy inna firma również korzysta z mojej aplikacji, czy nawet sama aplikacja utraci moje prawo własności. Chcę tylko, aby firma mojej rodziny mogła nadal z niego korzystać, co oznacza wsparcie administracji systemem, jeśli coś pójdzie nie tak, i rozwój nowych funkcji/błędów. Chciałabym prosić o podanie środków, które moim zdaniem mógłbym podjąć w celu zagwarantowania jak największej ciągłości wniosku. Technologie aplikacji to: Platforma: Tomcat (Java), MySQL i Linux Frameworks: głównie JPA i ZK


title: Jak mogę skutecznie wyjaśnić techniczne koncepcje nietechnicznemu szefowi, kiedy nie jestem dobrym mówcą?

text: ## Przedmowa Pracuję jako web developer dla dużej firmy zajmującej się handlem detalicznym, która sprzedaje towary mniejszym detalistom za pośrednictwem swojej witryny e-commerce, rozwijającej się zarówno dla e-commerce, jak i intranetu. Głównym źródłem zysków jest sprzedaż przez e-commerce, a następnie doraźne zarządzanie klientami przez dział marketingu. Nasz dział (tworzenie stron internetowych) podlega bezpośrednio najwyższemu kierownictwu (AD, CEO, itp.). ## Mój problem Mimo że mój bezpośredni przełożony jest byłym programistą, który rozumie różne problemy związane z programowaniem, kierownik działu jest marketroidem, który nie rozumie nic na temat programowania. Uważa, że wszystko, co nie przynosi korzyści w krótkim czasie, jest stratą czasu i nie jest wartościowe, a jego zachowanie szkodzi nam, programistom. Główny problem polega na tym, że nie jestem w stanie wyjaśnić pojęć technicznych lub problemów osobom nietechnicznym, więc nie udaje mi się przekonać go, co powinienem zrobić, a co nie, lub co ułatwi mi i usprawni pracę. ## Moje pytania Czytając podobne pytania zrozumiałem, że powinienem * Nie sprawiać, by czuł się głupi. * Nie wyglądam na niesubordynację. * Nie wyglądam, jakbym próbował pominąć moją pracę. Ale jak do diabła mam to zrobić? * Jak mogę przekroczyć tę „kulturową” lukę? * Jak mogę mówić jego językiem? * Jak najlepiej przekazać mu, że rzecz X powinna być zrealizowana w sposób Y, że rzecz W nie jest dobrym pomysłem, a narzędzie Z jest dla nas czymś naprawdę przydatnym? * Czy jest jakiś dobry materiał na temat radzenia sobie z menedżerami nietechnicznymi? Niektóre z odpowiedzi sugerują przykłady, które może zrozumieć, ale wydaje mi się, że te odpowiedzi są trochę niejasne, nie wymyślę niczego przyzwoitego. Ostatnio zaczynam myśleć, że może powinniśmy wziąć udział w zajęciach z marketingu albo kupić książkę o inżynierii społecznej Mitnicka... :\ ## Strzeż się Pozwól mi powstrzymać tych, którzy zaczynają krzyczeć „pozwól swojemu menedżerowi się nim zająć”. Kiedy mój menedżer nie poradzi sobie z nim, to my, deweloperzy, poniesiemy konsekwencje. Tak więc pomaganie mojemu szefowi w przejmowaniu tematu jest pomaganiem sobie w utrzymaniu zdrowego rozsądku, a na pewno jest to coś wartego zachodu. ## Kilka przykładów * Zarówno hasło użytkownika intranetu, jak i klientów e-commerce są zapisywane w postaci zwykłego tekstu w bazie danych i muszą być zmieniane co sześćdziesiąt dni. To dla mnie nonsens: poza wszystkimi konsekwencjami nieszyfrowania haseł przed ich zapisaniem, zmuszanie użytkownika do zmiany hasła co dwa miesiące jest błaganiem o używanie słabych haseł. (Uważa, że to pierwsze nie stanowi problemu i że częsta zmiana hasła jest bezpieczniejsza.) * Gdy klient się loguje, wszystkie informacje o użytkowniku są zapisywane w pliku cookie, a używanie wszędzie HTTPS jest tylko obciążeniem. To też nie ma dla mnie sensu: przy każdym żądaniu odbijamy około 75 KB plików cookie, zamiast wyszukiwać dane użytkownika z bazy danych, a sniffując plik cookie (np. Niezabezpieczone Wi-Fi) możesz podszywać się pod użytkownika i kupować rzeczy ( nawet naprawdę drogie rzeczy) pod jego nazwiskiem, ale szyfrowany jest tylko proces logowania. (To pierwsze nie jest warte refaktoryzacji, a drugie nie stanowi dla niego problemu.) * Kolega szybko zajmuje się zgłoszeniami problemów, ponieważ pracuje w firmie od dwunastu lat, wiele narzędzi, które mu „powierzono”, zostało opracowanych przez go i mówi użytkownikowi „nie rób X” zamiast naprawiać problem w kodzie, a my, którzy pracujemy tu od roku lub dwóch, zarządzamy narzędziami napisanymi przez byłych pracowników i przekopujemy się przez kod, aby naprawić problem zostanie przeżuty, aby uzyskać wyższe średnie czasy rozwiązywania. (Mówi nam, że powinniśmy być szybsi, tak jak on, ponieważ czas poświęcony na rozwiązywanie zgłoszeń problemów nie jest opłacalny, ale nie pozwoli na odbudowanie najbardziej kiepskich narzędzi, co na dłuższą metę zaoszczędziłoby czas). * Problem śledzenie a la Redmine jest postrzegane tylko jako upływ czasu, ponieważ nie „produkuje” żadnych namacalnych korzyści, ale utknęliśmy na zapamiętywaniu dos i problemów na papierze lub .txt i utrzymywaniu arkuszy kalkulacyjnych modyfikacji jako odniesienia.


title: XSLT i możliwe alternatywy

text: Spojrzałem na XSLT do przekształcenia jednego pliku XML w inny (HTML itp.). Teraz, gdy widzę korzyści wynikające z XSLT (będącego standardowym i używanym narzędziem), jestem niechętny z kilku powodów * Procesory XSLT wydają się być dość duże / zasobożerne * XML to zła notacja do programowania i to właśnie jest XSLT wszystko o. Nie chcę tu trollować XSLT, chociaż chcę tylko wskazać, czego w nim nie lubię, aby dać ci wyobrażenie o tym, czego oczekiwałbym od alternatywy. Mając trochę Lispowego tła, zastanawiam się, czy istnieją lepsze sposoby na przekształcenia struktury drzewa w oparciu o trochę seplenienia. Widziałem odniesienia do DSSSL, niestety większość linków dotyczących DSSSL jest martwa, więc już trudno jest zobaczyć jakiś kod, który to ilustruje. Czy DSSSL jest nadal używany? Pamiętam, że kiedyś zainstalowałem openjade, kiedy sprawdzałem rzeczy z docbooka. Post na blogu Jeffa Atwooda wydaje się sugerować użycie Ruby zamiast XSLT. Czy istnieją rozsądne sposoby wykonywania przekształceń XML podobnych do XSLT w języku programowania innym niż XML? Byłbym otwarty na dane wejściowe * Przydatne biblioteki dla języków skryptowych, które ułatwiają transformacje XML * zwłaszcza (ale nie wyłącznie) języki transformacji podobne do lisp, lub Ruby itp. Kilka rzeczy, które znalazłem do tej pory: * Kilka miejsc na web wskazał Linq jako możliwą alternatywę. Całkiem ogólnie mam wszelkiego rodzaju klasyfikacje, także tych, którzy mieli najlepsze doświadczenia z XSLT. * Dla schematu http://cs.brown.edu/~sk/Publications/Papers/Published/kk-sxslt/ i http://www.okmij.org/ftp/Scheme/xml.html


title: Jak długo ktoś powinien brać udział w zajęciach z języka, w którym nie planuje pracować zawodowo?

text: Spóźniłem się z zapisaniem się na zajęcia na początku ostatniego semestru, więc zapisałem się na jedyne zajęcia z programowania, jakie mogłem znaleźć w C++. Po dobrych wynikach w tej klasie zostałem dopuszczony do średnio zaawansowanego C#, co, jak się dowiedziałem, było tym, czego potrzebowałem na studiach. Wziąłem też średniozaawansowany C++, myśląc, że obydwa sprawią, że będzie łatwiej. Miałem rację. W przyszłym semestrze przejdę do ASP.NET i chociaż naprawdę lubię C++, nie jestem pewien, czy pomoże mi to ogólnie w mojej przyszłej edukacji w C#. Mam też opcję przejścia do javy, więc korzystałbym jednocześnie z ASP.NET i javy. Czy więc biorę C++, Javę, oba, czy nie? i dlaczego?


title: Dlaczego krótkie, int i długie wynaleziono w C?

text: Mam problem ze zrozumieniem, jakie były dokładne cele tworzenia typów danych „short”, „int” i „long” w C? Powodem, dla którego pytam, jest to, że nie wydaje się, aby ich rozmiary były ograniczone -- mogą mieć dowolny rozmiar, o ile na przykład `short` jest mniejszy niż `int`. W jakich sytuacjach, na przykład, powinieneś użyć `unsigned int` lub `unsigned long` zamiast `size_t`, gdy nie daje to żadnej nadziei na kompatybilność binarną? (Jeśli nie znasz rozmiaru, to skąd wiesz, kiedy wybrać który?)


title: Kto powinien wspierać i utrzymywać infrastrukturę rozwojową?

text: Chciałbym wiedzieć, jakie są doświadczenia innych ludzi z zarządzaniem infrastrukturą programistyczną. Mówię o takich rzeczach jak serwer kompilacji, centralne repozytorium git itp. Każda infrastruktura, o której użytkownicy końcowi prawdopodobnie nawet nie wiedzieliby, że istnieje, ale która jest niezbędna dla zespołu programistów. 1. Czy twoje zespoły dev/devops/ops uważają je za równie ważne jak „prawdziwe” systemy produkcyjne? 2. Co się dzieje, gdy ktoś upada (zarówno pod względem konsekwencji, jak i procesów odzyskiwania)? 3. Kto powinien być odpowiedzialny za zarządzanie nimi? Uwaga: aby skomplikować sprawy (zwłaszcza (3) powyżej, nasze „zespoły” są małe, około pięciu lub sześciu deweloperów i tylko jeden administrator systemowy. Dlatego jest dużo przechodzenia z nas deweloperów do operacji, szczególnie wraz z nadejściem ruchu i technologii "devops" Zastrzeżenie - jestem autorem tego wpisu na blogu na ten temat.


title: Gdzie są publikowane języki programowania?

text: Czytałem, że każdego roku powstaje wiele nowych języków programowania, jednak nigdy nie widziałem ani jednego. Gdzie dokładnie te rzeczy są publikowane? Czy istnieje jakaś witryna, która je śledzi? (nie mam zamiaru uczyć się takich języków - jestem tylko zainteresowany)


title: Czy powinienem dbać o nadmiarowość Junit podczas korzystania z setUp() z adnotacją @Before?

text: Mimo że programiści przeszli z junit 3.x na 4.x, nadal widzę następujące 99% czasu: @Before public void setUp(){/*jakiś kod konfiguracji*/} @Po public void tearDown(){/ *jakiś kod porządkowy*/} Żeby wyjaśnić moją kwestię... w Junit 4.x, gdy runnery są poprawnie skonfigurowane, framework odbierze adnotacje `@Before` i `@After` bez względu na metodę Nazwa. Dlaczego więc programiści wciąż używają tych samych konwencjonalnych nazw junit 3.x? **Czy jest coś złego w utrzymywaniu starych nazw podczas używania adnotacji** (poza tym, że czuję, że deweloperzy nie wiedzą, jak to naprawdę działa i na wszelki wypadek użyj tej samej nazwy ORAZ również adnotacji)? **Czy jest jakaś szkoda w zmianie nazw** na coś _być_ bardziej znaczącego, na przykład `eachTestMethod()` (które wygląda świetnie z @Before, ponieważ brzmi 'przed każdą metodą testową') lub `initializeEachTestMethod()`? **Co robisz i dlaczego?** Wiem, że to drobiazg (i dla niektórych może być nawet nieistotny), ale zawsze jest to w mojej głowie, kiedy piszę test i widzę to. Chcę albo podążać za tym wzorem, albo nie, ale chcę wiedzieć, dlaczego to robię, a nie tylko dlatego, że robi to 99% moich kolegów programistów.


title: Wywiad techniczny i umiejętności programisty

text: To, co powiem, może mieć nieco kontrowersyjny charakter, ale dzisiaj jestem bardzo zniechęcony – więc o to zapytam. Właśnie odbyłem rozmowę kwalifikacyjną z dużą firmą technologiczną na staż, gdzie zadano mi wiele typowych pytań do rozmowy kwalifikacyjnej zorientowanych na algorytm. Teraz, biorąc pod uwagę moje pochodzenie, uważam się za silnego w algorytmach (dostałem też dobre oceny z algorytmów na poziomie magisterskim - rzeczy obejmujących NP- kompletność i poza nią (algorytmy przybliżające i randomizowane), ale niestety oblałem wywiad. Nie mogłem pomyśl o bardzo skutecznej metodzie rozwiązania problemu ze sznurkami w około 10 minut. Po zakończeniu wywiadu wypiłem szklankę wody, zjadłem banana, odprężyłem się i spróbowałem ponownie rozwiązać problem. I vola! odpowiedź Mogłem dotrzeć w mniej niż 5 minut. A najgorsze z tego wszystkiego - byłem na tym torze, a ankieter wspomniał o tym, ale zbyt wiele mnie podgrzało. Całe moje doświadczenie skłoniło mnie do myślenia o wywiadach technicznych. Miałem trochę pytania i chciałem je zadać na tym forum - 1. Czy naprawdę można ocenić czyjeś zdolności techniczne w pół godziny? Szczerze? A może to tylko rzut kostką? 2. Czy techniczne pytania do rozmowy kwalifikacyjnej mierzą zdolność rozwiązywania problemów? punkt jest bardzo dyskusyjna? Jako doktorantka wiem, że rozwiązywanie problemów matematycznych polega na rozwiązaniu czegoś, o czym nigdy wcześniej nie słyszałeś. Z drugiej strony pytania typu - scalanie dwóch połączonych list w posortowanej kolejności, czy drukowanie wszystkich elementów drzewa binarnego na k-tym poziomie stają się "zwykłymi ćwiczeniami", gdy ktoś wcześniej zobaczył rozwiązanie lub rozwiązał problem? 3. Czy ludzie, którzy śpiewają w tych wywiadach, stają się świetnymi programistami? Czy nadal projektują zgrabne silniki gier, biblioteki graficzne, piszą szybkie frameworki fork-join? Czy istnieją dowody wskazujące na pozytywną korelację między dobrymi wynikami wywiadów technicznych a faktyczną umiejętnością programowania? Czy te wywiady są bardziej nastawione na znalezienie osoby typu „załatwianie spraw” (Spolsky)? Mogę się założyć, że wielu naukowców publikujących przełomowe pomysły w - ICML, VLDB, Mobicom - obleje te wywiady. Ale mogę cię zapewnić, że są to jedni z najmądrzejszych ludzi, jakich znajdziesz na tej planecie. Jestem głównie na uczelni (studentka) - więc bardzo docenię spostrzegawczość kogoś po drugiej stronie ogrodzenia. Ktoś, kto faktycznie przeprowadza te wywiady? [Ok wszyscy. Dzięki za wszystkie miłe i przemyślane odpowiedzi. Ponieważ nie chcę zadawać kolejnego pytania, poproszę o odpowiedź na to pytanie za mnie. Załóżmy, że kandydat X ma dobre publiczne portfolio prac, w których przyczynił się do jakiegoś znanego projektu open source, gdzie - możesz rzeczywiście sprawdzić jego łatki, zweryfikować zamknięte przez niego błędy i przyjrzeć się projektom, które stworzył. W takim przypadku pytanie brzmi, jak dużą wagę chcesz nadać swojej publicznie dostępnej/weryfikowalnej pracy w porównaniu z tym, jak dobrze radzi sobie z odpowiedzią na bardzo wymyślone pytanie z wywiadu na temat drzewa binarnego w czasie poniżej 15 minut?]


title: Proste pytania dotyczące apache i cgi

text:
Właśnie uczę się używania cgi w plikach html. Czytałem wiele rzeczy w sieci, ale większość z nich dotyczy drzew, a za mało o lesie. Uczę się odgórnie i mam problemy ze zrozumieniem, co się dzieje z cgi, apache i html. W tej chwili używam Pythona jako języka skryptowego cgi, ale jeśli chcesz odpowiedzieć za pomocą perla, poradzę sobie z tym. Oto MWE za nieudany test, który przeprowadziłem. HTML: (plik to getname.html)    <form method="POST" action="./test.py">
Twoje imię: <input type= "text" name="firstname">
Kliknij tutaj, aby przesłać formularz: <input type="submit" value="Prześlij"> <input type="hidden" name="session" value="1f9a2"> < /form>   Python: (plik to test.py) #!/usr/bin/python import sys, os, os.path, Shutil, string, fileinput import cgi, cgitb print "Content- type: text/html\n" form = cgi.FieldStorage() f = open('./testOutput', 'w') if form.has_key("firstname"): f.write(form["firstname"]) else: f.write("Niepowodzenie") f.close() Wygląda więc na to, że informacje wprowadzone przez użytkownika w formularzu są umieszczane w zmiennej o nazwie "imię" (w rzeczywistości jest to para klucz-wartość w coś podobnego do skrótu w języku skryptowym (w Pythonie jest to słownik). Ta zmienna jest następnie wysyłana jako dane wejściowe do skryptu cgi (test.py) i skrypt jest uruchamiany. Ale to się nie dzieje. Kiedy klikam przycisk „Prześlij” w pliku html, skrypt test.py jest wyświetlany w przeglądarce i skrypt nie jest uruchamiany. BTW, powodem, dla którego piszę skrypt do pliku, jest to, że mogę zobaczyć, czy zostanie uruchomiony. Kiedy uruchamiam test.py z wiersza poleceń, działa dobrze. Fakt, że test.py jest wyświetlany w mojej przeglądarce wskazuje, jak sądzę, że Apache nie działa, jest źle skonfigurowany lub ma problemy z uprawnieniami. O ile widzę, żadna z tych rzeczy nie jest prawdziwa, ale mogę się mylić. Oto moje pytania: 1) dlaczego apache w ogóle jest zaangażowany? Czy konieczne jest przesłanie do skryptu zmiennych zebranych w formularzu html? Jeśli tak, dlaczego? Wiem, że html to tylko język znaczników, ale pomyślałem, że tag „form” ma możliwość wysłania zmiennej do skryptu i uruchomienia skryptu. 2) Czy istnieje sposób na przetestowanie konfiguracji Apache? Czy Apache może używać 127.0.0.1 jako „ServerName” (tj. ServerName 127.0.0.1: 80 w moim pliku httpd.conf) Zasadniczo, chcę po prostu pisać skrypty cgi dla niektórych stron internetowych, które ręcznie koduję i testuję je na moim domowym laptopie. Wygląda na to, że nie wiem, jak to zrobić i przydałaby mi się pomoc. TIA.


title: Czy zmiana rozmiaru obrazów za pomocą CSS może być dobra?

text: Po przeczytaniu Czy zmiana rozmiaru obrazów w CSS nadal jest złym pomysłem?, pomyślałem o podobnym pytaniu. (zbyt podobne? czy to powinno być zamknięte?) Powiedzmy, że musisz użyć 10 różnych rozmiarów zdjęć produktów w swojej witrynie i masz 20 000-30 000 różnych zdjęć produktów, czy powinieneś użyć 10 różnych plików dla każdego rozmiaru? a może 5 różnych plików i użyj CSS do zmiany rozmiaru pozostałych 5? Czy kiedykolwiek istniałaby kombinacja, która byłaby dobra? A może powinieneś zawsze tworzyć osobne pliki obrazów? Jeśli użyjesz CSS do zmiany ich rozmiaru, zaoszczędzisz na pamięci (w GB), ale będziesz mieć niewielki wzrost przepustowości i wolniejsze ładowanie obrazów (ale jeśli obrazy są buforowane i wyświetlasz oba rozmiary obrazu, czy użyjesz mniejszej przepustowości i masz szybsze ładowanie?) (Ale oczywiście nie chcesz używać CSS do zmiany rozmiaru obrazów w witrynach mobilnych).


title: Czy w programowaniu funkcjonalnym proste funkcje istotne dla domeny (np. sortowania) powinny być reifikowane?

text: Czy w funkcjonalnej aplikacji zwykłe funkcje wyższego poziomu należy zawinąć w nazwy znaczące dla domeny, czy pozostawić je „nagie”? Na przykład, jeśli masz listę adresów, a „posortowane według kodu pocztowego” jest powszechnym porządkiem mającym znaczenie dla domeny (docelowe przesyłki pocztowe itp.), lepiej jest napisać: val sortedCustomers = customers.sort((a,b) => (a.zipCode porównaj do b.zipCode) < 0) A może lepiej utworzyć funkcję `sortedByZip(cs : Iterable[Klient]) : Seq[Klient]`? Tworzenie funkcji ma tę zaletę, że jest (w najmniejszym stopniu) bardziej abstrakcyjna, ale ma tę wadę, że jest nieprzejrzyste, tworzy nazwę do zapamiętania itp. Pytam w kontekście znaczącej profesjonalnej bazy kodu, takiej, dla której zamierzasz żyć lat, być jak najbardziej konserwowalnym, być „wiernym” oczekiwaniom programistów funkcjonalnych itp.


title: Czy programiści są bardziej produktywni w nocy?

text: Osobiście nie śpię późno w nocy, kodując i ciesząc się pracą nad osobistymi projektami. Moi inni koledzy też czują to samo i lubią kodować w nocy. Jednak nie chodzi o pasję do osobistych hobby, raczej naprawdę czuję, że jestem bardziej produktywna w nocy. Myślę, że jest coś w nocy, może w jej ciemności, może w jej ciszy, może jest jeszcze jedna cecha, która sprawia, że programiści stają się bardziej produktywni. Czy jest w tym trochę prawdy? Dlaczego niektórzy programiści uważają, że są bardziej produktywni w nocy? Czy istnieje jakiś dowód naukowy na uzasadnienie tej propozycji? Może coś w stylu „w nocy światło monitora jest mniej szkodliwe” lub „naturalne powietrze w nocy ma więcej tlenu, dlatego jest bardziej odpowiednie dla procesu myślenia” lub coś w tym rodzaju. > ### Uwaga moderatora: > > Pytanie dotyczy **dowodów naukowych** i innych cytowanych > informacji na ten temat. Odpowiedzi, które nie zawierają wspierających > odniesień, zostaną usunięte. To jest _nie_ ankieta, w której powinieneś dzielić się, kiedy > budzisz się i w jakich porach dnia jesteś produktywny.


title: Kiedy mówią, że to open source, oznacza to, że mogę robić im zdjęcia?

text: kiedy mówią, że projekt jest open source (np. LifeRay), czy to znaczy, że mogę wziąć z tego projektu wszystko, czego chcę? Chcę użyć niektórych ikon używanych w portalu LifeRay do własnych (komercyjnych) aplikacji. Czy to legalne?


title: Czy istnieje sposób, aby uniemożliwić innym kradzież twojego projektu open source i wykorzystanie go do osiągnięcia zysku?

text: To może wydawać się głupim pytaniem, ale tak naprawdę nie mogę znaleźć odpowiedzi. Tytuł mówi wszystko. Załóżmy, że masz odtwarzacz muzyki o otwartym kodzie źródłowym, ktoś przychodzi, kopiuje go, dodaje funkcje, modyfikuje interfejs itp. i sprzedaje. Nikt by się nie dowiedział. Więc jak to działa? Powiązane: sam pracuję nad niektórymi projektami, aby uczynić mnie bardziej zdolnym do zatrudnienia, więc pracodawcy mogą spojrzeć na mój kod, ale w przypadku niektórych z nich nie mam ochoty przesyłać ich do repozytorium online, np. Sourceforge, i czynić je widocznymi dla ogółu społeczeństwa.


title: Dlaczego w książkach takich jak Head First Java zaleca się edytory tekstu zamiast IDE dla początkujących?

text: Jestem programistą z pewnym doświadczeniem w C++ i uczę się Javy. W większości książek o Javie (jak Head First Java) autorzy proszą czytelników o trzymanie się z dala od IDE i zalecają używanie dobrego edytora tekstu, ale nie mogłem znaleźć przekonującego powodu poza faktem, że początkujący może być przytłoczony wieloma opcjami rzucony od razu. Jednak zacząłem używać Eclipse po napisaniu kilku małych programów i myślę, że narzędzia takie jak autouzupełnianie, wbudowana pomoc w debugowaniu itp. sprawiają, że nauka jest lepszym doświadczeniem. Chciałbym wiedzieć, które podejście jest lepsze i czy coś mi brakuje, używając IDE zamiast edytora tekstu.


title: Zwięzły leniwy wzór inicjalizacji

text: # Tło Często używam następującego leniwego wzorca inicjalizacji: public class Clazz { private Object object; private Object getObject() { Object object = this.object; if( object == null ) { object = createObject(); setObject( obiekt ); } zwraca obiekt; } public Object setObject( Object object ) { this.object = obiekt; } protected Object createObject() { return new Object(); } } Zmienne składowe są zawsze używane bezpośrednio dwa razy (w akcesorach), co obejmuje wywołania wewnętrzne. Pozwala to również podklasom na wstrzykiwanie nowego zachowania przez nadpisanie metody `createObject()`. # Problem Jest to dużo kodu, który zapewnia, że każda zmienna składowa jest zawsze inicjowana. # Pytanie Jaki mechanizm Javy (cukier składniowy) może uprościć kod? Na przykład Scala ma słowo kluczowe `lazy`. # Pomysły Idealnie chciałbym zakodować: public class Clazz { @lazypolymorph private Object object; public Clazz() { // Używa obiektu... System.out.println( getObject().toString() ); } } Kompilator następnie ujawniłby publiczny mutator, prywatny akcesor wartości i chronioną polimorficzną metodę tworzenia (używaną przez akcesora wartości), zgodnie z typowymi konwencjami nazewnictwa Java wprowadzonymi w sekcji tła.


title: Programista Terminowość vs Wysiłek

text: Zespół inżynierów, w którym pracuję, ma bardzo wyluzowane podejście do godzin pracy. Ludzie przychodzą o 6 rano io 11 rano i pracują, aż wszystko zostanie zrobione, gdy jest to konieczne. Inżynierowie będą rutynowo pracować do późna, w weekendy itp., gdy pojawią się pilne problemy (i zbliżają się terminy). Niedawno firma zdecydowała się wdrożyć inicjatywę „podstawowych godzin pracy”, która jest zasadniczo niezgodna z podejściem zespołu inżynierskiego „zrób to”. Jaki byłby dobry sposób na wyeksponowanie charakteru ciężkiej pracy wykonywanej przez zespół reszcie firmy w taki sposób, aby: a) nie wychodziło to na samozachwalanie b) nie zachęcało do rozwoju brak kultury równowagi między życiem zawodowym a prywatnym


title: Jak znaleźć liczbę punktów o tych samych minimalnych odległościach na matrycy?

text: Próbuję znaleźć liczbę punktów w macierzy o tych samych minimalnych odległościach. Zacznij od macierzy MxN, gdzie M i N < 50000\. Podany jest zestaw stałych punktów wraz z odpowiadającymi im współrzędnymi. Problem polega na znalezieniu takiej ilości punktów w matrycy, że minimalna odległość od dowolnego punktu w zbiorze może być osiągnięta przez co najmniej dwa punkty w zbiorze. Odległość mierzy się przesuwając jedną jednostkę w czasie w poziomie lub w pionie. Nie możesz poruszać się po przekątnej. Przykład wyjaśni sprawę. Powiedzmy, że mamy 3 punkty stałe: (1,3), (3,1) i (3,6). Tutaj punkt (3,3) byłby jednym punktem, ponieważ minimalna odległość wynosi 2 jednostki i można ją osiągnąć dla pierwszych dwóch stałych punktów w zestawie. Jednak punkt (4,4) nie spełnia wymagań. Chociaż odległość od (1,3) i (3,1) jest taka sama, 4 jednostki, minimalna odległość wynosi 3 jednostki. Mój pomysł polegał na użyciu dowolnego punktu o współrzędnych całkowitych, który leży na dwusiecznej odcinka łączącego każdy parametr, jako punktu, który spełniłby nasze wymagania. Ale uważam, że wiele fałszywie dodatnich punktów spełnia wymagania, ale nie leży na prostopadłej dwusiecznej. Metody siłowe nie zadziałają, ponieważ musimy sprawdzić miliard odległości dla każdego punktu i to cholernie trudne zadanie do wykonania. Jak mam się zająć rozwiązaniem tego problemu?


title: Znalezienie definicji tego antywzorca

text: Pracując nad dużym i wielopoziomowym projektem oprogramowania, właśnie znalazłem powtarzający się antywzorzec występujący w kodzie. Po szybkim przeszukaniu nie mogłem znaleźć jego definicji w Wikipedii ani w innych źródłach, więc chciałbym zapytać, czy istnieje znany anty-wzorzec dla naszej obecnej sytuacji. Wyjaśnię to zarówno w sposób ogólny, jak i na przykładzie. Ogólnie rzecz biorąc, ten antywzór można nazwać jak włoskie wyrażenie „scaricabarile” (dosł. _przerzucanie pieniędzy_, unikanie odpowiedzialności i dawanie jej komuś pod sobą). ![Śmieszny obrazek opisujący to](http://i.stack.imgur.com/Td3JI.png) Jeśli w [sub]projekcie jest kilka osób i są one zorganizowane w łańcuchu odpowiedzialności, ktoś na górze poziomy mogą zdecydować o celowym unikaniu rozwiązania problemu projektowego i pozostawieniu go osobie znajdującej się obok niego, która mogłaby to powtórzyć i ostatecznie „pozostawić ostatniego programistę w bałaganie złożoności rozwoju”. Antywzorzec pojawia się, gdy okazuje się, że gdyby osoba na szczycie łańcucha rozwiązała problem samodzielnie, podwładni wykonaliby znacznie mniej pracy i przeróbek. Sytuacja w świecie rzeczywistym (ogólnie): tworzysz usługę średniego poziomu, która obsługuje połączenia z front-endu i musi wykonać kilka wywołań do różnych usług zaplecza (baza danych, usługa sieciowa, przechowywanie plików, usługi zlecane na zewnątrz). ..), które nie są zbyt dobrze udokumentowane. Gdy otrzymasz pole wejściowe, którego od razu nie możesz obsłużyć samodzielnie, zamiast pytać o dalsze informacje, po prostu umieszczasz je w interfejsie front-middle-end i wymagasz od frontendowca dostarczenia tego parametru, który zostanie przekazany nieprzetworzone do zaplecza. Facet od frontonu może być zmuszony do wykonania kilku wywołań do usług, aby uzyskać pojedynczą wartość, którą w innym przypadku może uzyskać warstwa środkowa za pomocą kilku wywołań/instrukcji. W moim przypadku (zakładając, że w interfejsie środkowego back-tier'a wszystkie wartości są traktowane jako `string` i proszę nie komentować tego, ponieważ są powody), odkryłem, że usługi back-endu wymagają pól takich jak `order`, `flagDescription` które mogą być uważane za odpowiednio wyliczenia `rosnące`, `malejąco` i `boolean`. Jednym z problemów jest zakodowanie wyliczenia. Co usługa przyjmuje jako wartości? „ASC”/„DESC”? „A”/„D”? „0”/„1”? Tylko programiści BE wiedzą. W rzeczywistości **ostatecznie** odkryliśmy, że pierwotny programista ME był zbyt leniwy, aby poprosić o szczegółowe informacje o możliwych wartościach tych pól. Zamiast tego umieścił je w interfejsie frontowo-środkowym jako dwie „struny”, pozostawiając chłopaków z FE gniewnie pytających „gdzie wybieramy wartości tych pól?”. Opiszę inny przypadek na fikcyjnym przykładzie: załóżmy, że zewnętrzna usługa zaplecza definiuje operację jako `doSomethingOnAPerson(string socialSecurityNumber, string phoneNumber, Date birthdate)`, twoja tabela DB „Persons” identyfikuje osoby za pomocą unikalnego identyfikatora i zawiera wszystkie te informacje. W pewnym momencie FE zna tylko identyfikator osoby i kilka informacji, które są niewystarczające do wykonania pełnego połączenia. Jednak warstwa środkowa ujawnia tę samą sygnaturę, co back-end, zamiast prostszego `doSomethingOnAperson(long personID)`, które można zaimplementować jako wywołanie bazy danych, po którym następuje wywołanie usługi. Ponieważ ME jest już wdrożony, zmusza to pracowników FE do zażądania przeróbki nowej usługi w celu pobrania brakujących informacji w celu wywołania usług pośrednich, lub w innych przypadkach zażądania ponownego opracowania usługi w celu zmiany podpisu i wykonania przeoczona operacja. Mówiąc ogólnie, _pierwotny programista nie poświęcił czasu na rozwiązanie [bardzo prostego/uproszczonego] problemu uzyskania wymaganych informacji z najmniejszych dostępnych informacji, ale zdecydował się **przekazać pieniądze** FE_ W kilka słów, lepszy projekt i dużo więcej uwagi mogło zapobiec **obu** sytuacjom. W rzeczywistości pierwsza z nich doprowadziła również do problemów przy przechodzeniu z symulowanego środowiska na **testy integracyjne**. Chciałbym wyjaśnić zespołowi, że zrobiliśmy źle, przerzucając pieniądze między sobą, zamiast rozwiązywać problemy. ## Czy znajdujesz popularną definicję tego, co opisałem do tej pory? Czy możesz mi pomóc znaleźć _artykuły_ na ten temat, jeśli zostało to już udokumentowane?


title: Całkowicie pomylony z obiektami obiektowymi — jak pokonać przeszkodę dla początkujących?

text: Czytałem i pracowałem nad ćwiczeniami z książki Steve'a Lotta _Building Skills in Python_. Jednak na samym **pierwszym** ćwiczeniu dotyczącym OOP utknąłem całkowicie. **Zestaw problemów jest tutaj** : http://www.itmaybeahack.com/book/python-2.6/html/p03/p03c01_class.html#class- definition-exercises **Moja próba** (kod źródłowy): # Wycena zapasów Klasa OOP StockBlock(object): def __init__(self, datazakupu =0, cenazakupu =0, udziały=0): self.date = datazakupu self.price = cenazakupu self.shares = udziały def __str__(self): return " Cena: %2f \tData: %s \tShares: %d" % (self.price, self.date, self.shares) def getpurchvalue(self): return self.price * self.shares def getsalevalue(self, saleprice) : return cena sprzedaży * self.shares def getroi(self, cena sprzedaży): return (self.getsalevalue() - self.getpurchvalue()) / self.getpurchvalue() blocksGM = [ StockBlock(purchdate = "25-Jan-2001", cena zakupu = 44,89, akcje = 17), StockBlock(data zakupu = "25-kwi-2001", cenazakupu = 46,12, akcje = 17), blok giełdowy(datazakupu = "25-lip-2001", cenazakupu = 52,46, akcje = 15), blok giełdowy(datazakupu = "25-październik-2001", cenazakupu = 37,73, akcje = 21) , ] blokiEK = [BlokZakupu(datazakupu = "25-sty-2001",cenazakupu = 35,86, udziały = 22), BlokZakupu(datazakupu = "25-kwi-2001",cenazakupu = 37,66, udziały = 21), BlokZakupu(datazakupu = "25-Jul-2001",cenazakupu = 38.57, akcje = 20), StockBlock(datazakupu = "25-październik-2001",cenazakupu = 27.61, akcje = 28), ] class Pozycja(obiekt): def __init__(self , name, symbol, *blocks): """Zaakceptuj kolekcję instancji StockBlock.""" self.name = nazwa self.symbol = symbol self.blocks = bloki def __str__(self): return "Symbol: %s \tTotal Udziały: %d \tCena całkowita: %d " % (self.symbol, self.blocks[1], self.blocks[2]) def getpurhvalue(self): wartość = 0 dla zapasów w self.blocks: wartość += stock.getpurchvalue() zwracana wartość def getsalevalue(self, cena sprzedaży): wartość = 0 dla zapasów w self.blocks : value += stock.getsalevalue(saleprice) zwraca wartość def getroi(self, saleprice): (self.getsalevalue() - self.getpurvalue()) / self.getpurchvalue() portfolio = [ Position("General Motors", " GM", blocksGM), Position("Eastman Kodak", "EK", blocksEK), Position("Gąsienica", "CAT", [StockBlock(data zakupu = "25-Oct-2001", cenazakupu = 42,84, udziały = 18 )]) ] # wyświetl poszczególne zakupione bloki oraz wartość zakupu bloku def main(): dla pozycji w portfelu: StockBlock(pozycja) main() W książce nie ma rozwiązania, więc nie mogę tego sprawdzić. Wygląda na to, że zupełnie nie rozumiem OOP? To jest po prostu takie frustrujące i nie wiem, co powinienem zrobić, aby kontynuować... Moje pytanie brzmi: kiedy całkowicie utknąłem w nauce programowania, jakie strategie mogą mi pomóc przezwyciężyć problem? Myślę, że to ważne pytanie, ponieważ sam uczę się programowania. Nie mogę poprosić nauczyciela ani przyjaciela o pomoc (ponieważ nie mam takich, którzy są programistami).


title: Prawidłowo doceniasz rozwój?

text: Rozpocząłem dyskusję na StackOverflow na początku tego tygodnia na temat jednego z moich projektów roboczych i tego, jak poprawnie go poprowadzić. Ale wydaje się, że ten stos jest bardziej odpowiednim miejscem do zadawania tego rodzaju pytań, więc oto moje ostatnie pytanie dotyczące mojego projektu: **Jak oceniasz swoją pracę? / Jak oceniasz to pod względem finansowym?** Pracuję nad całkiem fajnym projektem z dwoma innymi znajomymi i osobami, które znamy, proszą nas o wcześniejszy dostęp i ile kosztowałby nas miesięcznie dostęp do niego . Niestety nie udało mi się odpowiedzieć na to proste pytanie ze względu na to, że nie zgadzam się ze znajomymi w tym konkretnym temacie. Dla mnie rachunek w wysokości 80$/miesiąc/kontrakt wydaje się rozsądny i odpowiedni dla naszego docelowego rynku (instytucje i korporacje), ale mój partner wolałby naliczyć opłatę w wysokości 500$/miesiąc/kontrakt. Nasz projekt to asset manager w trybie SAAS i nie sądzę, żeby nasi potencjalni klienci byli gotowi zapłacić więcej niż 90$/miesiąc/kontrakt, nawet jeśli mają dużo pieniędzy ze względu na swoją sytuację. Tak więc naprawdę chciałbym mieć kilka opinii i porad na tego rodzaju pytania. PS: Jeśli mój post nie znajduje się na odpowiednim stosie, możesz mi powiedzieć. PS2: Bardzo przepraszam, jeśli nie jestem całkowicie krystalicznie czysty, nie jestem rodowitym Anglikiem, jeśli czegoś nie rozumiesz, jak wyżej, możesz mnie zauważyć i przeformułuję.


title: Zawsze utrzymywanie 2 osób ekspertów w każdym kawałku kodu

text: Rozmawiałem o pracę w firmie, w której powiedzieli, że ich polityka polega na upewnieniu się, że co najmniej 2 osoby rozumieją dowolny fragment kodu, na wypadek, gdyby jedna z nich „wyjechała na wakacje”. Powiedzieli też, że niektórzy ludzie nie wytrzymują w tej firmie dłużej niż kilka miesięcy, chociaż wielu zostało od lat. Myślę, że rozumiem przesłanie: mają skłonność do natychmiastowego zwalniania ludzi, którzy nie lubią kultury pracy lub nie integrują się ze swoimi klikami. Ale czy istnieje inna interpretacja? Dziękuję.


title: Jakie są zasady projektów open source?

text: Chociaż jest to ogólnie przyjęte przez organizacje takie jak OSI i FSF, co jest i nie jest oprogramowaniem typu open source (zasadniczo warunki licencji kodu źródłowego), jakie są zasady przewodnie dla projektów open source? Inne ruchy związane z oprogramowaniem mają zasady, takie jak Manifest Agile. Wydaje się, że open source ma pewne wspólne wartości (takie jak przejrzystość, współpraca itp.). Czy są one gdzieś udokumentowane?


title: Które etapy procesu analizy wymagań w inżynierii wymagań mobilnych są najtrudniejsze?

text: Prowadzę badania dotyczące formułowania modelu analizy wymagań jako etapu inżynierii wymagań dla rozwoju aplikacji mobilnej poprzez uwzględnienie jej ograniczeń i potrzeb (zwinność itp.), to co staram się rozgryźć to to, które części tego procesu (analiza wymagań dla rozwoju mobilnego) są najtrudniejsze (więc mogę się bardziej skupić) i czy jest jakiś etap, który Twoim zdaniem powinienem uwzględnić lub wykluczyć (np. niektórzy mogą pomyśleć, że jakość plan może, ale nie musi być konieczny itd.) dla wyjaśnienia poniżej znajduje się lista kilku obszarów, na których mogę się skupić (przy okazji Twoje sugestie mogą być czymś z poniższej listy). -Specyfikacja wymagań -Prototypowanie -Priorytetyzacja wymagań -Koncentracja na funkcjach jakości


title: Czy podpięcie API zostało wykonane zgodnie z potrzebami, aby Stuxnet działał? nie sądzę

text: Zastrzeżenie: jestem studentem nauk politycznych i starałem się jak najlepiej zrozumieć szczegóły techniczne; jeśli nadal brzmię naiwnie, przeocz to. W raporcie firmy Symantec na temat Stuxnet autorzy twierdzą, że gdy robak zainfekuje 32-bitowy komputer z systemem Windows, na którym jest zainstalowany WINCC, Stuxnet robi wiele rzeczy i specjalnie przechwytuje funkcję `CreateFileA()`. Ta funkcja jest drogą, którą robak wykorzystuje do infekowania plików projektu .s7p używanych do programowania sterowników PLC. tj. gdy programista PLC otwiera plik z rozszerzeniem .s7p, sterowanie przenosi do przechwyconej funkcji `CreateFileA_hook()` zamiast `CreateFileA()`. Gdy Stuxnet przejmie kontrolę, potajemnie wstawia bloki kodu do PLC bez wiedzy programistów i ukrywa je przed jego wzrokiem. Należy jednak zauważyć, że istnieje jeszcze jedna funkcja o nazwie `CreateFileW()`, która wykonuje to samo zadanie co `CreateFileA()`, ale obie działają na różnych zestawach znaków. „CreateFileA” działa z zestawem znaków ASCII, a „CreateFileW” działa z szerokimi znakami lub zestawem znaków Unicode. Farsi (język Irańczyków) to język, który wymaga zestawu znaków Unicode, a nie znaków ASCII. _Zakładam, że twórcy jakiegokolwiek znanego oprogramowania komercyjnego (np. WinCC), które będzie sprzedawane w wielu krajach, wezmą pod uwagę „Lokalizację” i/lub „Internacjonalizację” podczas jego tworzenia, aby produkt zawiódł -bezpieczny_ tj. twórcy oprogramowania używaliby „UNICODE” podczas kompilowania swojego kodu, a nie tylko „ASCII”. Dlatego myślę, że `CreateFileW()` zostałby wywołany w systemie WINCC w Iranie zamiast `CreateFileA()`. Czy sie zgadzasz? Moje pytanie brzmi: jeśli Stuxnet podpiął tylko funkcję `CreateFileA()`, to na podstawie powyższego założenia istnieje duża szansa, że w ogóle nie zadziałała? Myślę, że moje wątpliwości zostaną wyjaśnione, jeśli: moje założenie okaże się błędne lub raport firmy Symantec okaże się niepoprawny. Proszę o pomoc w wyjaśnieniu tej wątpliwości. Edycja: dla większej jasności mojego pytania i tego, czego szukam. Czy jest możliwe, aby edytor WinCC STL był zaprogramowany w następujący sposób? //Pseudokod zaczyna się if (locale == ASCII Dependent) //jak USA, Wielka Brytania, Australia itd. { CreateFileA(); //z odpowiednimi parametrami } else if (locale == UNICODE Dependent) //jak Bliski Wschód, Chiny, Japonia itd. { CreateFileW(); //z odpowiednimi parametrami } //Pseudokod kończy się Jeśli to możliwe, to czy oznacza to, że Stuxnet działałby poprawnie w USA, ale nie w Chinach, Japonii czy Iranie?


title: Jak programy takie jak JAVA i C++ przechowują zmienne w bazie danych, czy nadal używa MySQL jak w PHP?

text: Wyobrażam sobie, że muszą mieć jakieś zapytanie, aby przejść do bazy danych, a może się mylę i mogą po prostu zapisać je na swoim komputerze? Czy MySQL jest przeznaczony tylko do obsługi skryptów po stronie serwera?


title: Kiedy mówisz płynnie w C++?

text: Widzę, że wiele firm wymaga tych samych umiejętności. Umiejętność ta jest często opisywana w następujący sposób: > _"Od kandydatów wymaga się płynnego posługiwania się językiem C++."_ Nigdy tak naprawdę nie rozumiem, co _płynność_ oznacza dla programowania. Więc moje pytanie brzmi: kiedy mówisz płynnie w języku programowania?


title: Czego nauczono się o uczynieniu wariancji częścią typu?

text: W Javie wariancja typów sparametryzowanych jest wskazywana w zależności od tego, jak jest używana: <A extends B,B> void store(ArrayList<B> lista, A elem) { list.add(elem); } Podczas gdy w Scali jest to oznaczone w deklaracji klasy za pomocą `+` lub `-`. Chciałbym wiedzieć, teraz, kiedy Scala istnieje już od jakiegoś czasu, jakie są doświadczenia ludzi z uczynieniem wariancji właściwością tego typu? Czy ogólnie jest wystarczająco elastyczny na to, co chcesz robić? Czy są aspekty, które zrobiłbyś inaczej, wiedząc to, co wiesz teraz?


title: Kiedy tworzysz oprogramowanie, kiedy zaczynasz myśleć/projektować współbieżne sekcje?

text: Kierując się zasadą, aby nie optymalizować zbyt wcześnie, zastanawiam się, w którym momencie projektowania/rozwoju oprogramowania zaczynasz myśleć o możliwościach współbieżności? Mogę sobie wyobrazić, że jedną strategią byłoby napisanie pojedynczej aplikacji wątkowej i poprzez profilowanie zidentyfikowanie sekcji, które są kandydatami do równoległego uruchamiania. Inną strategią, którą trochę widziałem, jest rozpatrywanie oprogramowania w grupach zadań i równoległe wykonywanie niezależnych zadań. Jednym z powodów, dla których warto o to zapytać, jest oczywiście to, że jeśli poczekasz do końca i tylko zrefaktoryzujesz oprogramowanie, aby działało jednocześnie, możesz uporządkować rzeczy w najgorszy możliwy sposób i mieć na głowie ważne zadanie. Jakie doświadczenia pomogły ustalić, kiedy rozważasz zrównoleglenie w swoim projekcie?


title: Jakie są typowe możliwości optymalizacji algorytmów — matematyczne lub inne?

text: Jakie są typowe możliwości optymalizacji algorytmicznej, o których wszyscy powinni wiedzieć? Niedawno przeglądałem/recenzowałem kod z aplikacji i zauważyłem, że wydaje się, że działa ona znacznie wolniej niż może. Winowajcą okazała się następująca pętla, ... float s1 = 0.0; for (int j = 0; j < rozmiar; ++j) { float diff = a[j] - b[j]; s1 += (różnic*różnic * c[j]) + log(1.0/c[j]); } ... To jest równoważne, ∑j { (aj-bj)2*cj \+ log(1/cj) } Za każdym razem, gdy program jest uruchamiany, ta pętla jest wywoływana prawdopodobnie ponad 100 tys. logowanie i dzielenie skutkuje bardzo dużym spadkiem wydajności. Szybkie spojrzenie na reprezentację sigma pokazuje, że istnieje trywialna poprawka — zakładając, że pamiętasz swoje tożsamości logarytmów na tyle dobrze, aby je zauważyć, ∑j { (aj-bj)2*cj \+ log(1/cj) } = ∑j { (aj-bj)2*cj } + ∑j { log(1.0/cj) } = ∑j { (aj-bj)2*cj } + log(1.0/(Πjcj)) i prowadzi do znacznie wydajniejszy fragment kodu, ... float s1 = 0.0; pływak s2 = 1,0; for (int j = 0; j < rozmiar; ++j) { float diff = a[j] - b[j]; s2 *= c[j]; s1 += (różnic*różnic * c[j]); } s1 += log(1.0/s2); ... doprowadziło to do bardzo dużego przyspieszenia i powinno było trafić do pierwotnej implementacji. Zakładam, że tak się nie stało, ponieważ pierwotni programiści albo nie byli świadomi, albo nie byli „aktywnie świadomi” tego prostego ulepszenia. To sprawiło, że zacząłem się zastanawiać, jakie inne, podobne, powszechne okazje i _ja_ tracę lub przeoczam, i jak mogę nauczyć się je lepiej dostrzegać? Nie interesują mnie złożone przypadki brzegowe dla poszczególnych algorytmów, ale raczej przykłady takie jak ten powyżej, które dotyczą tego, co można uznać za „oczywiste” koncepcje, które pojawiają się często, ale inne mogą nie.


title: Funkcjonować jak właściwości C#?

text: Zastanawiałem się, jak działają właściwości C# i mogą działać. Znam cel, do którego pierwotnie zaprojektowano właściwości C#, co z pewnością jest przydatne. Jednak zamiast tego w tym pytaniu porównuję je bardziej abstrakcyjnie do funkcji i innych elementów programowych. Najpierw zastanawiałem się, czy możliwe jest, a jeśli tak, to dlaczego nie, mieć funkcję taką jak właściwość C#. Na przykład: bajt n = 4; test bajtów // własność { get { return n; } zbiór { n = wartość; } func { n++; } } Użyj w następujący sposób: // n to 4 bajty n2 = test; // pobierz test = 2; // zestaw // n to teraz 2 test; // funkcja // n jest teraz 3 'n++' w tym przykładzie jest używane tylko jako prosta demonstracja. Zauważyłem również, że jest miejsce na więcej polimorfizmu niż tylko w typach parametrów funkcji. Na przykład posiadanie rozpoznawania przeciążenia przez typ zwracany, pobieranie/ustawianie i prywatne/publiczne. public test { get { } get byte { } private get byte { } get bool { } get myType { } set byte { } set myType { } func { } func(bool) { } func(byte, myType) { } // itd... } Powyższy przykład definiuje "test" wraz z dość drobnymi szczegółami dotyczącymi różnych implementacji do używania testu na różne sposoby. Więcej przykładów: Tylko do odczytu: byte test { get { } } Funkcja taka jak: test { func { } } Funkcja taka jak z polimorfizmem parametrów, zwraca bajt: byte test { func(bool) { } func(myType, Int16) { } } Zachowuje się różnie w zależności od przypisanego typu: test { set bool { } set myType { } } Funkcja jak i może zwrócić wartość lub nie, w zależności od kontekstu, w którym jest używana: test { byte get { } func(bool) { } func(byte, byte, myType) { } } Dodatkowa możliwość uporządkowania wyrażeń i kodu powinna być oczywista. Jednak wezwano mnie do znalezienia konkretnych zastosowań. Jednym z przykładów tego, jak można to wykorzystać, jest równość. Tam, gdzie oczekiwany jest bool, na przykład w wyrażeniu „if”, zachowanie można zdefiniować jako „==”, jednak gdy albo nie ma do czego wrócić, albo zwrot jest inny niż bool, zachowanie będzie zamiast być „=”. if (n.equals(4)) // if n == 4 n.equals(2); // n = 2 Inny przykład jest następujący: class moja_lista<T> { List<T> store; public count { get { // chyba że widać inaczej, // użyj wersji Int32. liczba zwrotów (Int32); } get byte { byte n = 0; ForEach(var e w magazynie) n++; powrót n; } pobierz Int32 { Int32 n = 0; ForEach(var e w magazynie) n++; powrót n; } private get { // Implementacja "count get", która występuje tylko // w przypadku użycia count z wnętrza klasy // my_list. } func { print store.Count(); } set int { if (wartość == 0) list.Clear(); } } }


title: W którym momencie deweloperzy powinni zaangażować się w trójkątną relację między klientem, agencją projektową i samymi deweloperami?

text: Wyobraź sobie, że jest projekt do wykonania. Ten projekt obejmuje trzy strony: klienta, organizację deweloperską (taką, dla której pracujesz) i agencję projektową. Agencja projektowa jest podwykonawcą klienta. Rola agencji projektowej jest w dużej mierze odpowiedzialna za stylizację; jednak w przeszłości projektanci ci wykonywali prace niespełniające standardów, takie jak szerokie stosowanie ukierunkowania id w css zamiast ukierunkowania na klasę itp. W którym momencie programiści powinni zaangażować się w trójkątną relację między klientem, agencją projektową i sobą? Jakich spotkań lub komunikacji spodziewałbyś się w tym momencie?


title: Czy istnieją przepisy wymagające sposobu przechowywania haseł?

text: Biorąc pod uwagę niedawne naruszenie danych Sony i inne wydarzenia, czy istnieją jakieś faktyczne przepisy lub regulacje dotyczące przechowywania haseł? Myślę, że są z kartami kredytowymi, nie wolno ci przechowywać 3-cyfrowego klucza czy czegoś takiego. Czy przechowywanie haseł w postaci zwykłego tekstu bez ostrzeżenia użytkownika jest nielegalne? A może trzeba zastosować jakiś poziom szyfrowania? Czy są jakieś standardowe wytyczne, do których każdy może mnie skierować?


title: Liczba kombinacji półlosowych / permutacji przy danym zbiorze ograniczeń

text: ### Tło: W internacie, w którym pracuję, jest około 60 uczniów. Doradca poprosił mojego kolegę i mnie, abyśmy wymyślili lepszy sposób na ustalenie miejsca do kolacji niż ręcznie. Chciałby zadania na resztę roku szkolnego. Poprosił nas również o rozwiązanie niektórych problemów, o których słyszał od studentów i wykładowców. ### Ograniczenia: * Większość uczniów nie pochodzi z USA, więc gdy są otoczeni przez osoby tej samej narodowości (np. przy stole), mówią językiem, w którym biegle władają, zamiast ćwiczyć angielski, * Skargi są składane, gdy uczniowie siedzieli przy danym stole „zbyt wiele” razy, * lub jeśli siedzą przy tym samym stole więcej niż dwa razy z rzędu, * a niektórzy uczniowie nie dogadują się, więc nie mogą usiąść razem. ### Dane wejściowe: W czasie wykonywania program jest dostarczany z: * Zestawem osób, * Zestawem stołów oraz * Każdy stół ma inną liczbę miejsc (powtórzenie jest dozwolone) Rozmiar obu zestawów oraz wielkość każdej tabeli nie zmienia się między każdym przypisaniem. ### Testy: Używam 18 osób różnych narodowości i 4 stoły o rozmiarach od 3 do 6 włącznie. Wybrałem liczby, które moim zdaniem miały sens dla tego zestawu danych: * Nie więcej niż 3 osoby tej samej narodowości mogą siedzieć razem naraz * Żadna osoba nie może usiąść przy stole więcej niż 4 razy ### Wyniki: Przeprowadziłem generator około 15 razy bez zmiany danych wejściowych. Za każdym razem przychodzi od 6 do 12 „tygodni” zadań. ### Pytania: (od najmniej do najważniejszego) 1. Dlaczego otrzymuję inną liczbę wygenerowanych zadań za każdym razem, gdy uruchamiam program? Zestaw danych nie zmienia się między uruchomieniami. 2. Jak znaleźć... * minimalną liczbę osób tej samej narodowości, które mogą zasiąść przy danym stole, * minimalną całkowitą liczbę zasiadania przy danym stole, jednocześnie * maksymalizując liczbę generowanych zadań? 3. Jak mogę zagwarantować, że są to rzeczywiście prawidłowe liczby? ### Edytuj: Za każdym razem, gdy generuję nowe przypisanie, wywołuję `Collections.shuffle(List)` na liście osób w celu losowania ich kolejności. Następnie przekazuję listę stołów i osób do metody wstecznej opartej na implementacji ośmiu królowych kapilida na github, aby przypisać ludzi do stołów.


title: Jak rozwijają się projekty open-source?

text: Znam wiele oprogramowania, które jest open-source. Przynajmniej część z tego ktoś, gdzieś musiał sam napisać pierwszą wersję. Jak dobre oprogramowanie open source staje się dobrze znane? Najbardziej interesują mnie pierwsze kroki. W jaki sposób oprogramowanie napisane przez jedną osobę zyskuje pierwszych nowych współpracowników? Szukam praktycznej porady. Rozpocząłem tutaj projekt o nazwie aodbm. Jakie kroki mogę podjąć, aby zapewnić mu najlepszy możliwy start?


title: Diagram komponentów, co dalej?

text: Pracuję nad aplikacją na iPhone'a i stworzyłem schemat komponentów. Zdefiniowałem interfejsy dla każdego komponentu. Na przykład mam komponent AI i zrobiłem dla niego kilka interfejsów. Jak mam postępować? Czy powinienem stworzyć diagram klas, aby przejść do szczegółów, powinienem przejść do szczegółów każdego interfejsu, czy po prostu zacząć implementować moje interfejsy? Jestem trochę zdezorientowany, jak postępować.


title: Jak utworzyć usługę sieci Web .NET do przesyłania plików?

text: Muszę utworzyć usługę sieci Web przy użyciu platformy .NET do akceptowania przesyłania plików. Jakie są dostępne opcje, aby to zrobić w C#? Jakie jest najlepsze podejście do użycia? Czy możesz dostarczyć mi blogi/próbki kodu/referencje do dalszej lektury?


title: Czy przeprowadzasz walidację katalogów podczas ich rekursywnego usuwania?

text: Jak rekursywnie usuwać ścieżki danych utworzonych przez aplikację? Sam proces usuwania jest banalny. Pytanie brzmi, czy wykonujesz dodatkową walidację? A jeśli tak, to jakiego? Z jednej strony może to po prostu niewygodne zadanie do wykonania, ale z drugiej wyobraź sobie, że program ma błąd i coś przekazuje „c:” do funkcji rekurencyjnej, czy też jest przepełnienie pamięci i jakieś dane ulega zepsuciu, powodując obcięcie ścieżek, nad którymi pracujesz itp. Czy istnieje w ogóle sposób na czystą walidację?


title: Co w pseudokodzie oznacza :=?

text: Sekcja zatytułowana Algorithmic Implementation ma następujący kod: // Zwróć próbki wyjściowe filtra dolnoprzepustowego RC, podane próbki wejściowe, // przedział czasowy dt i stałą czasową funkcja RC lowpass(real[0..n] x, real dt, real RC) var real[0..n] y var real α := dt / (RC + dt) y[0] := x[0] dla i od 1 do n y[i] := α * x[i ] + (1-α) * y[i-1] zwraca y co oznacza :=?


title: Dlaczego referencje są rzadko używane w PHP?

text: Mam trochę wiedzy o C++ i wiem, że wskaźniki są tam powszechnie używane, ale zacząłem patrzeć na otwarty kod źródłowy PHP i nigdy nie widzę kodu używającego referencji w metodach. Zamiast tego kod zawsze używa wartości zwracanej zamiast przekazywania referencji do zmiennej do metody, która następnie zmienia wartość tej zmiennej i po prostu ją zwraca. Czytałem, że używanie referencji zużywa mniej pamięci, więc dlaczego nie są używane w PHP?


title: Zorientowane obiektowo kontra zorientowane na funkcję do projektowania zaplecza w PHP?

text: Jestem ciekaw, ponieważ obecnie korzystam z funkcji wyłącznie na moich stronach internetowych. Wzorzec MVC jest bardzo interesujący i wiem, że Code Igniter wykorzystuje klasy, które działają bardzo dobrze. Chcę być w stanie utrzymać mój kod tak czysty, jak to możliwe, i pomyślałem o próbie przeniesienia moich funkcji do klas. Obecnie rozdzielam pliki logiką, więc mam funkcje, które wyprowadzają html z argumentami, które przekazują dowolną zawartość dynamiczną, oraz funkcje, które obsługują dane wejściowe użytkownika. Posiadam również funkcje, które współdziałają z bazą danych. Wymagam i dołączam niezbędne pliki pomiędzy nimi. Jak można się domyślić, krąży wiele argumentów. To prowadzi mnie do chęci wypróbowania stylu OOP w PHP, który mogę zrobić to samo bez posiadania kodu html wewnątrz rzeczywistej klasy. Naprawdę nie chcę słyszeć nic o frameworkach, ponieważ chodzi o nauczenie się i włączenie tych pomysłów do mojej własnej strony internetowej. Biorąc to pod uwagę, jestem dość nowy w tworzeniu stron internetowych, więc nie rozumiem wielu różnych stylów tworzenia logiki stron internetowych. Chciałbym dowiedzieć się, jak najlepiej wyczyścić mój kod w OOP? EDYCJA: Jest dość oczywiste, że ludzie mają silne odczucia dotyczące ram. Postanowiłem więc wyjaśnić to bardzo jasno; MOJA STRONA JEST PROJEKTEM DO NAUKI. CHCĘ TYLKO UCZYĆ SIĘ Z TEGO. DLATEGO nie chcę używać frameworka, ponieważ bardziej sensowne jest dla mnie, aby dowiedzieć się, jak to wszystko działa, zanim ułatwię sobie życie i faktycznie użyję frameworka. RAMY DLA WIĘKSZYCH SOLIDNYCH PROJEKTÓW. Dziękuję Ci.


title: Zmniejszenie ustaleń Valgrinda (wartość niezainicjowana)?

text: Próbuję uruchomić jakiś kod przez Valgrind. Kod zależy od OpenSSL, a OpenSSL czyni Valgrind bezużytecznym z powodu niezainicjowanych wartości. Wiem, gdzie jest zastosowanie PRNG OpenSSL, ale w tej chwili dostaję setki innych. Chciałbym spróbować uruchomić narzędzie nad źródłami OpenSSL, które inicjuje wartości. A więc: int* p; intn; zmienia się na: int* p = NULL; int n = 0; **Pytanie** : Czy ktoś wie o narzędziu do wykonywania zbiorczej inicjalizacji na deklaracjach prymitywów? Cieszę się, że mogę wykonać niepotrzebną inicjalizację i później zlecę jej usunięcie przez optymalizator. To zadanie optymalizatorów. Jeśli chodzi o kompletność, „szybkość” nigdy nie była dla mnie największym zmartwieniem. Bardziej interesuje mnie "poprawność" i zapewnienie jej. Dla mnie nie ma znaczenia, jak szybko ktoś dotrze do odpowiedzi, jeśli się myli.


title: Jak rozwiązać adres URL na określonym serwerze DNS?

text: Obecnie mam problem z projektem. Rozpoznaję adresy URL na wielu serwerach DNS przy użyciu serwera node.js. Do tego momentu wszystko jest w porządku. Jednak niektórzy dostawcy usług internetowych ograniczają przychodzące żądania z adresów IP spoza ich zakresu. Jak więc mogę zmodyfikować moje żądanie do tych konkretnych serwerów DNS, aby wyglądało, że jestem jednym z ich klientów? Jeśli dobrze rozumiem żądanie DNS, nie ma takich rzeczy jak nagłówek x-forwarded-for, jakie miałoby żądanie HTTP. Czy można to osiągnąć? A może mam do czynienia z prawdziwym blokerem? (Mam nadzieję, że jestem na właściwej wymianie stosów dla tego pytania)


title: Czy potencjalnie szkodzę swojej karierze, przyjmując stanowisko testera dewelopera?

text: Tło: Jeśli nie czytałeś zbyt wiele z tego, co napisałem tutaj, to: * Jestem samodzielnym programistą * Rozwijam się zawodowo przez ~3 lata, osobiście od 13 * Kocham swoją pracę * Od góry do- na dole uważam, że cały proces tworzenia oprogramowania jest interesujący, zabawny i ekscytujący (z małym wyjątkiem marketingu) * Nienawidzę środowiska, w którym się teraz znajduję i musiałem odejść Teraz: złożyłem podanie na stanowisko programisty Inżynier w Test, który potencjalnie płaci znacznie więcej niż teraz zarabiam (~70%), znajduje się gdzieś, gdzie naprawdę chciałbym być i wygląda na firmę, w której naprawdę chciałbym pracować (ciekawy produkt, dobre narzędzia, mądrzy ludzie - zostałem polecony przez dotychczasowego pracownika). Więc oczywiście mam nadzieję, że dostanę tę pozycję. Nie chcę jednak zostać zaszufladkowany jako programista testowy, ponieważ czasami mogą mieć złą reputację jako nie są dobrymi programistami „produkcyjnymi” (nie jestem pewien, dlaczego ... i to może być złe, ale to jest klimat, który mam) już). Wolałbym, aby moja ścieżka kariery skończyła się na stanowisku senior dev/lead dev za 5-10 lat. Jeśli dostanę** stanowisko, czy istnieje możliwość zranienia tej upragnionej ścieżki? ** Wyprzedzam siebie. Wiem. Nawet nie miałem jeszcze wywiadu. Jestem niespokojny. Mimo to dobrze rozmawiam i myślę, że mam wiedzę/doświadczenie na to stanowisko.


title: Jaka byłaby rola „inżyniera oprogramowania w teście”?

text: > **Możliwy duplikat:** > Stanowisko Microsoft SDET > Jak trudno jest przejść z inżyniera testów oprogramowania na > inżyniera oprogramowania? Rozmawiałem o stanowisko Inżyniera Oprogramowania, ale niestety nie zaoferowano mi stanowiska. Firma powiedziała, że byli pod wrażeniem mnie i Inwasa tuż za drugim kandydatem i chcieli, żebym wszedł i porozmawiał o innej roli, Inżyniera Oprogramowania w Testach. Więc moje pytanie jest tak naprawdę zgodne z tytułem: Jaka jest rola inżyniera oprogramowania w teście? Jak wyobrażasz sobie, jaki rodzaj pracy wiązałbyś się z taką rolą? Czy objęcie takiej roli ograniczy mnie do przejścia na zwykłą inżynierię oprogramowania?


title: Czy jakiekolwiek oprogramowanie jest objęte gwarancją?

text: > OPROGRAMOWANIE JEST DOSTARCZANE „TAK JAK JEST”, BEZ JAKIEJKOLWIEK GWARANCJI [blah blah > blah]. To jest wszędzie. **Czy jest jakieś oprogramowanie, które wyraźnie zawiera gwarancje**, które można traktować poważnie? To znaczy: * Dostarczone przez grupę/firmę, która ma **zasoby** do obsługi roszczeń gwarancyjnych, a nie wujka Boba. * Zapewnia coś „**przydatnego**”, takiego jak zgodność z ACID lub ISO, a nie ochrona przed uderzeniami meteorów.


title: Jak poprawić szkolenie uczniów w zakresie konserwacji?

text: Utrzymywalność jest główną stawką profesjonalnego tworzenia oprogramowania. Rzeczywiście, utrzymanie jest prawie zawsze najdłuższą częścią cyklu życia oprogramowania, ponieważ trwa od wydania projektu do końca czasów. Ponadto projekty będące w trakcie utrzymania stanowią znaczną większość ogólnej liczby projektów. Według http://www.vlegaci.com/298/interesting-statistics-%E2%80%93-numbers-of-programrs-in-maintenance-vs-development/ odsetek projektów będących w utrzymaniu wynosi około 2 /3. Niedawno natknąłem się na to pytanie, gdzie facet wygląda na dość zdziwionego, gdy odkrywa, że jego praca polega głównie na konserwacji. Następnie zdecydowałem się otworzyć dyskusję (w języku francuskim) na głównej stronie francuskiej społeczności profesjonalistów zajmujących się tworzeniem oprogramowania (http://www.developpez.com/). Dyskusja jest zatytułowana „Czy studenci są wystarczająco dobrze przygotowani do realiów profesjonalnego tworzenia oprogramowania?” i dotyczy głównie **utrzymania**. Zwrócono uwagę, że przynajmniej we Francji ludzie nie są wystarczająco przygotowani, aby stawić czoła konserwacji w obu jej aspektach: * utrzymuj istniejący kod * stwórz kod możliwy do utrzymania Moje pytanie odnosi się do tej dyskusji i ma na celu znalezienie dobrego sposobu na naucz pielęgnowalności. * Jak możemy uczyć pielęgnowalności? * Jakie ćwiczenia byś zaproponował? * Jeśli byłeś dobrze przeszkolony w zakresie konserwacji, jakiego rodzaju kursy uczęszczałeś? [edytuj] Po pewnym nieporozumieniu myślę, że muszę wyjaśnić moje pytanie. Jako lider projektu i programista często pracuję z praktykantami lub świeżo upieczonymi studentami. Kiedyś sama byłam świeżo upieczona. Chodzi o to, że uczniowie zwykle nie są zaznajomieni z zasadami, takimi jak SOLID, które zwiększają łatwość utrzymania projektu. Często napotykamy poważne trudności w rozwijaniu projektów (niska łatwość utrzymania). To, czego szukam, to konkretny akademicki przykład udanego nauczania o znaczeniu pielęgnowalności i tworzeniu lepszego kodu w odniesieniu do tego konkretnego punktu; lub ewentualne sugestie dotyczące poprawy sposobu szkolenia uczniów.


title: Śmierć technologii OOP

text: Wiele razy słyszałem o programowaniu aspektowym, głównie o tym, że jest to technologia "nowej generacji" w programowaniu i "zabije" OOP. Czy to jest poprawne? Czy OOP umrze lub jaki może być tego powód?


title: Czy powielanie kodu jest złem koniecznym w C?

text: Jestem raczej nowy w C i zastanawiam się, czy powielanie kodu jest złem koniecznym, jeśli chodzi o pisanie wspólnych struktur danych i ogólnie C? Mógłbym na przykład spróbować napisać ogólną implementację dla `mapy skrótów`, ale zawsze uważam, że wynik końcowy jest bałaganiarski. Mógłbym również napisać specjalistyczną implementację tylko dla tego konkretnego przypadku użycia, aby kod był przejrzysty i łatwy do odczytania i debugowania. To ostatnie oczywiście prowadziłoby do powielania kodu. Czy ogólne implementacje są normą, czy piszesz różne implementacje dla każdego przypadku użycia?


title: Jak zwolnić do App Store jako osoba fizyczna

text: Napisałem aplikację na iOS i chciałbym ją udostępnić w App Store. Jestem osobą indywidualną, więc nie jest to wydawane przez firmę ani nic innego, tylko przeze mnie. Czy to typowe, że wydajesz darmową aplikację pod własnym nazwiskiem? Jeśli tak, jakie informacje o prawach autorskich należałoby przesłać?


title: Jak mogę uzyskać informacje zwrotne od zewnętrznych programistów?

text: Jeden z naszych zewnętrznych programistów odchodzi po pomyślnym ukończeniu **krótkiego (1 miesiąc) projektu**, na który został zakontraktowany. Chciałbym uzyskać od niego informację zwrotną, przeprowadzając wywiad wyjściowy, aby dowiedzieć się, co może być lepsze w naszej organizacji i procesie rozwoju. Jakie pytania mogę zadać, aby uzyskać od niego szczegółowe informacje zwrotne, a nie tylko niejasne odpowiedzi?


title: Chcę opanować ASP.NET — na jakich koncepcjach powinienem się skoncentrować/Jakie koncepcje najbardziej cenisz?

text: Tego lata rozpoczynam pracę w ASP.NET 4 (C#). Planuję pracować z pewnym starszym kodem, a także MVC. Chcę zacząć biegać. Dobrze rozumiem HTML/CSS/Javascript i całkiem dobrze rozumiem sam C#, zasady projektowe, wzorce projektowe i rozumiem strony główne, podstawowe MVC2 i kod źródłowy formularzy internetowych. * Twoim zdaniem, jakie aspekty ASP.NET są najważniejsze do opanowania dla aplikacji internetowych? * Co najbardziej cenisz w korzystaniu z ASP.NET? * Czy masz zalecenia dotyczące zrozumienia wewnętrznych elementów samego ASP.NET?


title: Konwersja z sieci na PhoneGap

text: Przeglądałem `Dokumentację PhonGap` o tym, jak spakować `HTML/JS/CSS` do specyficznej dla platformy ``aplikacji natywnej``. Utrzymywali osobną dokumentację dla osobnych wersji `Cordova`, co wydaje się w porządku. Zasadniczo rozumiem większość rzeczy. Ale zamieszanie, które mam, to rozbieżność lub utrata informacji w dokumentacji od starszych do nowszych. Na przykład, jeśli spojrzysz na tę dokumentację dla wersji `2.1.0` o konfigurowaniu projektu Android i przewiniesz trochę w dół, wspomnieli o takich rzeczach: * W katalogu głównym twojego projektu utwórz dwa nowe katalogi: * /libs * assets/www * Skopiuj cordova-2.0.0.js z pliku Cordova wcześniej do asset/www * Skopiuj cordova-2.0.0.jar z pliku Cordova wcześniej do /libs * Skopiuj folder xml z pliku Pobierz Cordova wcześniej do /res .... * Zmień rozszerzenie klasy z Activity na DroidGap * Zamień linię setContentView() na super.loadUrl("file:///android_asset/www/index.html"); ... i tak dalej, w którym wyraźnie wymieniono kroki, które należy wykonać podczas migracji lub tworzenia aplikacji na konkretną platformę. Ale w górę od `wersji 2.1.0` brakuje tych informacji. Podobnie jak w nowszych dokumentacjach, wszystko, co mają, to tylko „zwykłe elementy konfiguracji Androida i android hello world”, które oczywiście możemy znaleźć w oficjalnej dokumentacji Androida. Próbowałem przeszukać całą dokumentację dla tej wersji i nie mogłem znaleźć żadnych informacji dotyczących kroków, o których wspomniałem powyżej w starszej dokumentacji. W przeciwnym razie skąd czytelnicy mieliby znać te kroki? Czy coś mi tu brakuje, czy też podali?


title: Pamięć podręczna podczas opracowywania lub kończenie rozwoju, a następnie pamięć podręczna?

text: Jestem nowy w buforowaniu i nie używałem go w moich projektach. Chciałbym wiedzieć, co jest najlepszą praktyką w buforowaniu. Czy buforowanie powinno być wykonywane podczas programowania lub kończenia rozwoju, a następnie buforować wszystko?


title: Czy „dług procesowy” jest terminem, z którym ludzie pracują?

text: W wyniku retrospektywy odkrywaliśmy gorsze sposoby tworzenia oprogramowania. Wpadliśmy na pomysł, który był świetny i spróbowaliśmy go. Pozostaliśmy przy nim podczas opracowywania dużej aktualizacji, która trwała 3 miesiące. Po retrospekcji z inżynierami utrzymania ruchu okazało się, że nasz pomysł nie działa dla nich (przedyskutowaliśmy z nimi, zanim wypróbowaliśmy ten pomysł, a także pomyśleliśmy, że to świetny pomysł). Doszliśmy do porozumienia, lepiej wrócić do starej sytuacji. Zespół odpowiedzialny za aktualizację jest rozmontowany, a inżynierowie utrzymania ruchu nie mają na to czasu (chociaż ich kierownik projektu zgodził się zainwestować czas). Znajdujemy się teraz w sytuacji, w której inżynierowie utrzymania ruchu płacą odsetki za każdym razem, gdy trzeba dokonać drobnej aktualizacji. Jest to bardzo podobne do długu technicznego, ale nie ma nic wspólnego z samym produktem. Czy nazywa się to długiem procesowym, czy też określa się je terminem „dług techniczny”? A jaki byłby dobry sposób na poradzenie sobie z tym? (Jakieś inne lub konkretne pomysły, aby były widoczne dla menedżerów produktu?) PS Pomysł polegał na migracji bazy danych VSS 4 produktów do SVN. Baza danych mocno opiera się na współdzielonych plikach i jest bałaganem do rozplątywania i wlewania użytecznej struktury SVN. Jest to bardzo sprzeczne z intuicją, ale wydaje się, że niektóre rzeczy są lepiej przechowywane w VSS.


title: Jakie są dobre zasoby do debugowania/deasemblacji zastrzeżonego oprogramowania?

text: Od czasu do czasu napotykam różne błędy w oprogramowaniu własnościowym, z którym muszę wchodzić w interakcje. Aby przebrnąć przez te błędy, muszę opracować różne obejścia. Czy istnieje dobra książka do debugowania/deasemblacji oprogramowania własnościowego, aby napisać lepsze obejścia?


title: Określ ilościowo wartość dla zarządzania

text: Mamy dwa różne starsze systemy (w tym przypadku usługi okien), które robią dokładnie to samo. Oba te systemy mają niewielkie różnice w różnych aplikacjach, które służą. Obie podstawowe funkcje tych systemów znajdują się we wspólnej bibliotece. W większości przypadków aktualizacje występują w bibliotece współdzielonej i po prostu wdrażamy zaktualizowaną bibliotekę w obu tych systemach. Same systemy rzadko się zmieniają. Ponieważ oba te systemy robią zasadniczo to samo, nasz zespół programistów chciałby skonsolidować te dwa systemy w jedną usługę. Co mogę zrobić, aby przekonać kierownictwo do przeznaczenia czasu na takie zadanie? Niektóre z punktów, które zauważyłem to: * Łatwiejsza konserwacja * Skrócenie czasu testowania/QA Niestety, to nie wystarczy. Chcieliby, abyśmy przekazali im twarde liczby dotyczące liczby godzin, które zaoszczędzą w przyszłości i jak przyspieszy to przyszły rozwój. Ponieważ większość pracy jest wykonywana we współdzielonej bibliotece, a same systemy nigdy się nie zmieniają, trudno nam określić, ile godzin to zaoszczędzi. Jakie argumenty mogę przedstawić, aby uzasadnić dodatkową pracę w celu konsolidacji tych systemów?


title: Ciągła integracja za pomocą Docker

text: Jedną z głównych zalet platformy Docker jest izolowane środowisko, które zapewnia, i chcę wykorzystać tę zaletę w przepływie pracy ciągłej integracji. „Normalny” przepływ pracy CI wygląda mniej więcej tak: * Repozytorium odpytywania o zmiany * Ściąganie z repozytorium * Zależności instalacji * Uruchamianie testów image * Uruchom obraz dockera jako kontener * Uruchom testy * Zabij kontener dockera Mój problem dotyczy kroku „uruchom testy”: ponieważ Docker jest środowiskiem izolowanym, intuicyjnie chciałbym traktować go jako jedno; oznacza to, że preferowaną metodą komunikacji są gniazda. Działa to jednak dobrze tylko w określonych sytuacjach (na przykład aplikacja internetowa). Podczas testowania różnego rodzaju usług (na przykład usługi działającej w tle, która komunikowała się tylko z bazą danych), wymagane byłoby inne podejście. Jak najlepiej podejść do tego problemu? Czy jest to problem z projektem mojej aplikacji i czy powinienem zaprojektować ją w sposób bardziej TDD, zorientowany na usługi, który zawsze nasłuchuje na jakimś gnieździe? A może powinienem zrezygnować z izolacji i zrobić coś takiego: * Odpytaj repozytorium o zmiany * Ściągnij z repozytorium * Zbuduj obraz dockera * Uruchom obraz dockera jako kontener * Otwórz sesję SSH w kontenerze * Uruchom testy * Zabij kontener dockera SSH'ing do pojemnika wydaje mi się brzydkim rozwiązaniem, ponieważ wymaga głębokiej znajomości zawartości pojemnika, a tym samym przełamania izolacji. Chciałbym usłyszeć różne podejścia SO do tego problemu.


title: Jak zweryfikować krytyczne dane wejściowe, których nie można zweryfikować?

text: Jak można uniemożliwić użytkownikom tworzenie błędnych zestawów danych wejściowych, gdy nie ma praktycznego sposobu sprawdzenia danych wejściowych? ### Scena Modyfikuję mały pakiet ERP napisany w Visual FoxPro. Jedna część pakietu zajmuje się drukowaniem manifestów samochodów ciężarowych i faktur, które mają być wysyłane wraz z kierowcami na ich trasach dostaw. Procedura drukowania, gdy nic nie zostanie podane jako dane wejściowe, będzie próbowała wydrukować wszystko, co spowoduje marnowanie ryz i ryz papieru do drukarki na szybką drukarkę. Nie jestem w stanie przepisać żadnego z elementów interfejsu GUI, ani nie mogę dostosować żadnych frameworków, zestawów narzędzi lub innego zewnętrznego kodu do użycia w tej sytuacji. Powody są związane z polityką biurową, proszę nie sugerować, że mogę nadpisać istniejące ramy ERP, ponieważ nie jest to dla mnie opcja. ### Problem Użytkownicy znajdują się w środowisku o dużej presji i krytycznym znaczeniu czasu. Każdy proces mierzony jest w minutach, a nawet sekundach, co oznacza, że muszę maksymalnie skrócić czas przetwarzania. Ze względu na to środowisko i możliwe elementy rozpraszające, użytkownicy _często_ ignorują okna dialogowe, naciskając klawisz [Enter], co powoduje, że fokus szybko porusza się po formularzu i ostatecznie ląduje na przycisku akcji dla okna dialogowego wprowadzania danych, co powoduje uruchomienie automatycznego wydruku . Dane wejściowe składają się z zakresu dat, zakresu marszruty i zakresu zamówienia sprzedaży. Danych wejściowych dla zakresu dat nie można automatycznie ustawić na „dzisiejszą datę”, ponieważ wymagane jest częste drukowanie wstecz. Ponadto użytkownicy końcowi pracują o północy, tj. przerzucanie dat sprawia, że jest to niepraktyczne bez fałszowania procedury, która automatycznie wykrywa zmianę itp. Dane wejściowe dla tras nie mogą być zakodowane na stałe ani nie można ich wywnioskować z tras, które już zostały wysłane, ponieważ wymagane są ponowne wydruki (patrz wyżej). Dane wejściowe dla zamówień sprzedaży mają znaczenie tylko w przypadku drukowania pojedynczych zamówień lub określonych zakresów. Tak więc, szczerze mówiąc, _nie ma praktycznego sposobu sprawdzania poprawności danych wejściowych_. Nie można zablokować przycisku akcji, który uruchamia drukowanie. Wszelkie sugestie dotyczące umieszczenia okna dialogowego blokującego przed użytkownikiem zostaną zignorowane. Nie mogę dyskutować, dlaczego nie jest to opcja, poza tym, że koncepcja została już omówiona w innym miejscu na stronie (z innego punktu widzenia) i została odrzucona. Blokowanie wydruków, gdy wszystkie wejścia są puste, zostało odrzucone jako decyzja projektowa, ponieważ oprogramowanie _musi_ uwzględnić to jako funkcję. ### Użytkownicy Użytkowników wielokrotnie proszono, aby tego nie robili. Często ignorują tę radę. Wywołanie tego niefortunnego zdarzenia nie jest czymś, czym zajmą się ich brygadziści/kierownicy, więc nie ma presji, aby zakończyć zachowanie. ### Organizacja, której nie mam nic do powiedzenia w sprawie przepływu pracy, tylko modyfikacja istniejących komponentów oprogramowania, na które ma wpływ ten przepływ pracy. ### Dostawca Dostawca pozyskuje pakiet jako instalację niestandardową od oryginalnego dostawcy oprogramowania. Dostawca wymaga, aby wszystkie zmiany w kodzie zostały odesłane do niego w celu integracji z ich bazą kodu. Znaczące zmiany w architekturze spowodują wzrost przyszłych kosztów podczas migracji wersji ze względu na rozległe dostosowywanie; w niektórych przypadkach programiści powiedzieli mi nawet, że całkowicie zignorują tak duże zmiany i zrobią, co im się podoba. ### Oprogramowanie, którego nie mam do powiedzenia w wyborze lub instalacji oprogramowania, więc zmiana platformy nie wchodzi w rachubę. Jeśli chodzi o środowisko oprogramowania, każda wydrukowana faktura jest jednym telefonem. Nie istnieje funkcja drukowania wsadowego, a ze względu na sposób, w jaki funkcja drukowania jest zintegrowana z systemem (a także pewne dziwactwa językowe), nie jest możliwe utworzenie opakowania wsadowego wokół tego interfejsu API. Co więcej, ta część programu wywołuje inny program, który drukuje fakturę, który z kolei wywołuje API drukowania raportu, które drukuje pojedynczą fakturę. Okropny projekt, wiem. Formularze wejściowe są dziwną kombinacją nagłówka formularza, który jest pozbawiony pól wejściowych, ale może zawierać inne elementy GUI. Pola wejściowe są definiowane w czasie wykonywania. ### Cel Oprogramowanie uchroni użytkowników przed błędnym drukowaniem wszystkich dokumentów. Jak byś rozwiązał ten problem?


title: Czy pójście do szkoły wyższej zaszkodzi twojej karierze inżyniera?

text: Studiuję inżynierię oprogramowania i mam zamiar zostać jednym i pozostać nim. Jednak uwielbiam również logikę, teorię obliczalności, teorię automatów i podobne zagadnienia matematyczne z informatyki i chciałbym zrobić przynajmniej tytuł magistra _w pewnym momencie_ po ukończeniu studiów, aby dokładniej przestudiować te tematy. To jest naprawdę coś, co chcę zrobić dla siebie, a nie dlatego, że wniesie to coś do mojej kariery jako inżyniera oprogramowania (a nie oszukujmy się – też nie), ale obawiam się, że kilka lat nieobecności pole będzie mile widziane i utrudni mi to, że tak powiem, powrót na konia. Czy to prawda? Jak _do_ reagują pracodawcy na taką nieobecność?


title: rozmowa kwalifikacyjna na staż, ale myślę, że mogę być nieprzygotowana

text: Mam rozmowę kwalifikacyjną na stanowisko stażowe C++. Teraz chodzi o to, że wziąłem dwie z trzech czwartych podstawowych klas CS (w C++) na moim lokalnym college'u i omówiliśmy podstawy, aż do tablic, wskaźników, list połączonych, rekurencji itp. (w zasadzie wszystkie klasy Waltera Savitcha Absolutna książka C++). Rozmawiałem z ankieterem przez telefon i powiedział, że wywiad będzie zawierał pytania techniczne o drzewa, haszy, prawdopodobnie jakieś algorytmy sortujące i inne tego typu rzeczy. Mam mniej niż tydzień na przygotowanie się do rozmowy kwalifikacyjnej. Co mogę zrobić, aby zapoznać się z absolutnymi, nagimi podstawami wspomnianych wcześniej tematów pytań do rozmowy kwalifikacyjnej? A może to tylko strata czasu, zanim wezmę następne zajęcia, które obejmują wszystkie te rzeczy?


title: Strategie projektowania przechowywania i walidacji numerów seryjnych

text: Piszemy oprogramowanie do śledzenia Foo Widgets. Każdy widżet Foo ma numer seryjny. Numer seryjny to 32-znakowy ciąg alfanumeryczny. Ciąg jest podzielony na pięć zestawów. Każdy zestaw jest oddzielony myślnikiem (więc s/n ma 32 znaki NIE licząc myślników). Na przykład: 11111111-1111-1111-1111-111111111111. Ale to może się zmienić, ponieważ nasze oprogramowanie w rzeczywistości nie tworzy numerów seryjnych. Chciałbym poznać różne strategie przechowywania numeru seryjnego i sprawdzania poprawności numeru seryjnego przez użytkownika w interfejsie użytkownika. Na początek chciałbym porozmawiać o strategiach przechowywania numeru seryjnego w naszym systemie. Ten problem pojawił się w Foo Widgets Incorporated i pojawił się spór dotyczący tego, czy powinniśmy przechowywać każdy numer seryjny z myślnikami czy bez. Myślę, że najbardziej elastycznym sposobem na zrobienie tego (ale może nie najprostszym) byłoby przechowywanie numeru seryjnego bez myślników, przechowywanie schematu numeru seryjnego (jako wyrażenie regularne), a następnie utworzenie identyfikatora, który jest używany do śledzić, który schemat jest używany (więc później, jeśli producent go zmieni, możemy obsługiwać ten i być może oba schematy jednocześnie). Kontrargumentem było to, że myślniki „są częścią danych” i że „nie przypominają numeru telefonu”. Mam problem ze zrozumieniem tego punktu widzenia.