title: Celuję w krótkie projekty, ale sromotnie zawodzą w projektach, które wymagają wytrwałości

text: Wiem, że to kwestia zarządzania czasem. Dobrze radzę sobie w krótkich zadaniach, ale sromotnie mi się nie udaje, jeśli chodzi o projekty, które wymagają wielu godzin pracy do wykonania dzień po dniu. Nie mogę kodować więcej niż 10 minut, chyba że jest termin. Trochę błądzę, wracam i koduję. Zajmuje mi to absurdalnie dużo czasu nawet przy prostym projekcie. Brakuje mi wytrwałości. Mam pracę dyplomową w grudniu. Im więcej czasu spędzę, tym lepsza będzie moja publikacja. Zastanawiałem się, czy może mógłbym uzyskać pomoc, jak kodować uporczywie? Po prostu wstaję z krzesła i zaczynam robić inne rzeczy, gdy widzę błąd lub gdy mam moduł, który wymaga myślenia i zabiera mi dużo czasu, aby wrócić, usiąść i wrócić myślami do kodu. Jakieś rady, jak poprawić swoje umiejętności wytrwałego kodowania?


title: Czy zmiana typu zmiennej w trakcie procedury w dynamicznie typowanym języku jest złym stylem?

text: W Pythonie (i czasami PHP), gdzie zmienne nie mają ustalonych typów, często wykonuję "przekształcenia typów" na zmiennej w części logiki mojego kodu. Nie mówię (koniecznie) o prostych rzutach, ale o funkcjach, które zmieniają typ zmiennej, pozostawiając ją w zasadzie reprezentującą tę samą wartość lub dane. Na przykład, mógłbym napisać taki kod podczas wykonywania żądania internetowego, używając zmiennej `response` do przechowywania obiektu addurlinfo, następnie zawartości ciągu tego obiektu i słownika zwróconego przez parsowanie ciągu jako JSON: response = urlopen( some_url) attach response.info().type == 'application/json' response = response.read() logger.debug('Otrzymano po odpowiedzi JSON: ' + odpowiedź) response = json.loads(response) do_something(response) (Ok, to trochę wymyślony przykład, ale myślę, że dobrze pokazuje ten pomysł). Mam wrażenie, że jest to lepsze niż używanie trzech oddzielnych nazw zmiennych, ponieważ a) oznacza to, że zmienna „odpowiedź” zawiera w zasadzie te same informacje, po prostu „przekształcona” w inny typ, oraz b) wskazuje, że wcześniejsze obiekty są Będą potrzebne w dalszej części funkcji, ponieważ poprzez ponowne przypisanie ich zmiennej uczyniłem je niedostępnymi dla późniejszego kodu. Kompromis, jak sądzę, polega na tym, że czytelnik może być zdezorientowany co do typu zmiennej w danym momencie. Czy to zły styl i czy powinienem używać trzech różnych zmiennych w powyższym przykładzie, zamiast przypisywać je do jednej? Czy jest to standardowa praktyka w językach dynamicznie typowanych, czy nie? Nie widziałem wystarczająco dużo kodu innych ludzi, aby wiedzieć.


title: Termin dla pojedynczego pliku punktu końcowego/obiektu C++

text: Słyszałem kilka terminów dla C++ "Codepoint" (którego najczęściej używam) lub pliku `.cpp`, który jest kompilowany do pliku obiektowego. Na przykład, pliki `.cpp` mogą zawierać inne pliki `.cpp` (lub dowolny inny plik, tak długo, jak się kompiluje), ale podczas kompilacji jest tak naprawdę tylko jeden 'główny' plik kodu, który jest używany/generowany . Wiem, że jest powszechnie akceptowany termin, po prostu nie pamiętam, co to jest. Jaki jest akceptowany termin dla końcowego pliku `.c`/`.cpp` używanego do generowania pliku obiektowego?


title: Jak ustalić, czy język programowania jest gadatliwy czy zwięzły?

text: Języki programowania często można opisać jako **pełne** lub **zwięzłe**. Z mojego punktu widzenia język gadatliwy jest łatwy do odczytania i zrozumienia, podczas gdy język zwięzły jest zwięzły i schludny, ale trudniejszy do odczytania. _Czy w definicjach należy uwzględnić inne kwestie?_ Wygląda na to, że większość popularnych współczesnych języków programowania jest gadatliwa, a te dwa terminy są używane tylko do opisania języka jako mniej więcej w stosunku do innego języka. _Jak możemy określić, czy język programowania jest bardziej gadatliwy/zwięzły niż inny?_ Przykład: Czy C# jest bardziej gadatliwy niż Java?


title: Równoległość: wybór modelu komunikacji

text: **Zastrzeżenie:** Jeśli nie interesuje Cię równoległość (w klastrach), to pytanie prawdopodobnie nie jest dla Ciebie interesujące i prawdopodobnie nie jest warte przeczytania. **TL;DR:** Szukam modelu komunikacji (najlepiej zgodnego z `MPI`), który skutecznie zapewnia, że każda linia danych jest przetwarzana raz. Przeczytaj także następny akapit, aby dowiedzieć się, co rozumiem przez linię danych. Rozważmy następujący problem: Algorytm pobiera wiersz danych (w moim przypadku tablicę liczb całkowitych o stałym rozmiarze) i tworzy różne wiersze danych, które następnie muszą być przetwarzane przez ten sam algorytm. Każda _unikalna_ linia danych musi zostać przetworzona tylko raz, ponieważ wynik jest czysto deterministyczny. Zbiór unikalnych linii danych jest skończony, więc po skończonej liczbie rekurencyjnych wywołań tego algorytmu tworzy cały zbiór. Celem jest znalezienie tego zestawu. Zaimplementowałem już algorytm i zaimplementowałem również zrównoleglenie. Oczywiście, ponieważ musimy przetworzyć każdą _unikalną_ linię danych, za każdym razem wszystkie aktualnie nieprzetworzone linie danych mogą być przetwarzane równolegle przez różne procesory. Z drugiej strony, zrównoleglenie wprowadza problem powstrzymywania różnych procesorów od wykonywania nadmiarowej pracy. Trywialna implementacja wysyłałaby linie danych do procesorów, zbierała wszystkie wyniki i ponownie dystrybuowała. Może to być nieefektywne, ponieważ (prawdopodobnie duże) listy wyników muszą zostać połączone przed wykonaniem jakichkolwiek dalszych prac. Jeśli wszystkie listy zostaną zwrócone mniej więcej w tym samym czasie, urządzenie nadrzędne jest przytłoczone samą ilością danych, podczas gdy wszystkie urządzenia podrzędne są bezczynne, aż do zakończenia łączenia. Mój (o ile sądzę, ulepszony) model komunikacji jest nadal w zasadzie Master-Slave: Oto, co robi Master: Rozsyła początkowy fragment linii danych do urządzeń podrzędnych Podczas gdy istnieje co najmniej jeden aktywny slave dla każdego aktywnego urządzenia podrzędnego Żądaj linii danych, jeśli slave nie ma ustawionej linii danych jako slave nieaktywny, przerwa w przeciwnym razie, jeśli linia danych została wcześniej przetworzona przerwa endif, jeśli istnieje nieaktywny slave, wyślij linię danych do nieaktywnego slave i oznacz to slave jako aktywne, wyślij do wysyłającego slave powiadomienie, aby nie przetworzyć linię danych w przeciwnym razie powiadom urządzenie slave o przetworzeniu właśnie wysłanej linii danych endif endif endfor endwhile Każdy slave robi to: while true czekaj na żądanie, jeśli linia danych jest dostępna wyślij ją czekaj, aż master powie, czy linia powinna być tutaj przetwarzana przetwórz jeśli konieczne ry wróć do początku else powiadom master czekaj aż master wyśle linię danych przetwórz odebraną linię wróć do początku endif Urządzenie slave zarządza własną lokalną listą przetworzonych i nieprzetworzonych linii danych. Dla każdego żądania jeden element z nieprzetworzonych jest przenoszony do przetworzonych. Przechowywane są tylko unikalne wpisy z obu list. Podsumowując: tylko mistrz wie o pełnym zestawie przetworzonych linii. slave przetwarza linię danych wtedy i tylko wtedy, gdy master mówi, że nie była ona wcześniej przetwarzana. Master nie wie o wynikach dla każdej linii danych, dopóki nie zażąda wszystkich dostępnych linii od każdego slave. O ile mi się wydaje, ten model komunikowania listy przetwarzanych linii danych jest dość wydajny, ale jestem nowy w świecie zrównoleglania, zwłaszcza w świecie zrównoleglania w klastrze. Jakie są inne sposoby wydajnej komunikacji linii danych między kilkoma procesorami, aby zapewnić, że każda linia danych jest przetwarzana dokładnie raz? To pytanie w zasadzie nie jest związane z kombinacją `C++` i `MPI`, chociaż każda odpowiedź odzwierciedlająca sposób działania interfejsu przekazywania wiadomości jest bardzo mile widziana.


title: Wyjaśnienie dokumentu funkcjonalnego Pythona

text: Czytam ponownie ten http://docs.python.org/2/howto/functional.html dokument i uderzam w ten wiersz: „...Niestety, sprawdzanie poprawności programów jest w dużej mierze niepraktyczne i nieistotne dla oprogramowania Pythona. Nawet trywialne programy wymagają kilkustronicowych dowodów; dowód poprawności dla umiarkowanie skomplikowanego programu byłby ogromny i niewiele lub żaden z programów, których używasz na co dzień ( **interpreter Pythona** , twój parser XML, twoja przeglądarka internetowa) może okazać się poprawny. Nawet gdybyś spisał lub wygenerował dowód, pojawiłaby się kwestia weryfikacji dowodu; może jest w tym błąd i błędnie uważasz, że udowodniłeś poprawność programu. /Nacisk mój na część dotyczącą interpretera Pythona/ Co to oznacza, że nie można udowodnić, że interpreter Pythona jest poprawny? Czy to dlatego, że byłby to długi dowód, czy w zasadzie nie można go udowodnić, ala twierdzenie Gödla? Czy korzystanie z Interpretera jest więc użyteczną fikcją, że przez cały czas, gdy go używamy, przez cały czas może się mylić i co oznaczałoby błędność? Mam na myśli, że tłumacz udzielił mi poprawnych odpowiedzi na temat arytmetyki całkowej, jak dotąd... Doceniam wyjaśnienie.


title: Listy polecające od klientów?

text: Wkrótce odchodzę z pracy i szukam listów polecających. Mój problem polega na tym, że współpracowałem ściślej z moimi klientami niż mój kierownik projektu (nie techniczny) lub kierownik (klienci zwykle rozmawiają ze mną pierwsi i rzadko, nawet jeśli CC mój lead, jeśli nie). Tak więc w tym przypadku klient widział moją pracę bliżej niż moje kierownictwo i może lepiej poświadczyć moje umiejętności, umiejętności komunikacyjne i wydajność. Czy rekomendacje od klientów są opłacalne, czy też zostaną w dużej mierze odrzucone? Po drugie, czy mogą być bardziej przydatne niż listy od kierowników, którzy tak naprawdę w ogóle nie znają Twojej pracy? Uwaga: mam już list od jedynego współpracownika, z którym naprawdę pracowałem, ale chcę uzyskać więcej niż jeden na dokładkę.


title: Aspekty prawne implementacji specyfikacji Java w innych językach programowania

text: Planuję zaimplementować oficjalną specyfikację Javy w innym języku programowania. Czy byłoby to naruszenie praw autorskich? Hipotetyczne przykłady: * biblioteka "wrapper" **JMX** dla C++, która może kontrolować aplikację Java przez JMX i używa podobnych pojęć i nazw klas/metod jak implementacja Java * API i implementacje **JavaMail** (dla różne biblioteki sieciowe .Net) dla C#


title: Wprowadzanie dużych zmian stopniowo

text: Obecnie pracujemy nad całkowitą przebudową front-endu i back-endu naszej aplikacji internetowej. Zrobiliśmy to, ponieważ trzeba było wprowadzić wiele zmian w schemacie bazy danych, a także w doświadczeniu użytkownika. Teraz prawie skończyliśmy remont i zastanawiam się, czy moglibyśmy przyjąć bardziej stopniowe podejście? Rozpoczęliśmy nową linię kodu dla tej zmiany i teraz musimy opracować dobry plan migracji danych, aby upewnić się, że stare dane zostaną poprawnie przeniesione do nowego schematu. Podjęliśmy decyzję o stworzeniu osobnej linii kodu, ponieważ sądziliśmy, że jeśli wprowadzimy stopniowe zmiany w schemacie, będzie więcej przestojów w witrynie. Oddzielny cykl rozwojowy skróciłby ten przestój do ostatniego dnia, w którym przeprowadzamy migrację danych. I oczywiście niesie to ze sobą większe ryzyko. Jakie są dobre podejścia do tego problemu na przyszłość, jeśli kiedykolwiek będziemy musieli przeprowadzić kolejny poważny remont? Pożądane byłoby podejście przyrostowe.


title: wzorzec nasłuchiwania zdarzeń w api - co powinno zrobić dwukrotne dodanie tego samego nasłuchiwacza?

text: Podczas projektowania interfejsu API, który zapewnia interfejs nasłuchiwania zdarzeń, wydaje się, że istnieją dwa sprzeczne sposoby traktowania wywołań dodawania/usuwania detektorów: 1. Wiele wywołań addListener doda tylko jednego detektora (jak dodanie go do zestawu); można usunąć za pomocą jednego wywołania removeListener. 2. Wiele wywołań addListener doda słuchacza za każdym razem (jak dodanie go do listy); musi być zrównoważony przez wiele wywołań removeListener. Znalazłem przykład każdego z nich: (1) - Wywołanie DOM addEventListener w przeglądarkach dodaje słuchaczy tylko raz, po cichu ignorując prośby o dodanie tego samego słuchacza po raz drugi oraz (2) - zachowanie jQuery `.on` dodaje słuchaczy wiele razy . Wydaje się, że większość innych interfejsów API odbiornika używa (2), takich jak odbiorniki zdarzeń SWT i Swing. Jeśli wybrana jest opcja (1), pojawia się również pytanie, czy powinno to zakończyć się niepowodzeniem po cichu, czy z błędem, gdy pojawi się żądanie dwukrotnego dodania tego samego detektora. W moich implementacjach zwykle trzymam się (2), ponieważ zapewnia on czystszy interfejs typu setup/teardown i ujawnia błędy, w których 'setup' jest wykonywany nieumyślnie dwukrotnie i jest zgodny z większością implementacji, które widziałem. To prowadzi mnie do mojego pytania - czy istnieje konkretna architektura lub inny podstawowy projekt, który lepiej nadaje się do innej implementacji? (tj: dlaczego istnieje inny wzorzec?)


title: Ciągle zawodzą mi ręce w części wywiadu, sugestie?

text: Więc mam kilka programów/stron w moim portfolio. Zarabiają pieniądze, ale nie za dużo. Postanowiłem więc zdobyć doświadczenie zawodowe, głównie aplikując na stanowiska junior development Java/PHP. Problem w tym, że poprawnie odpowiadam na wszystkie pytania techniczne i umawiamy się na wykonanie „testu” z kodowania, ostatniej fazy rozmowy kwalifikacyjnej. Nigdy nie mogę się zrelaksować i przemyśleć, co kończy się bardzo powolnym wykonywaniem testu. LUB czasami po prostu uderzam w blok i bardzo trudno mi myśleć na nogach. Nie rozumiem tego, ponieważ inne rzeczy, które napisałem, rozwiązywały znacznie bardziej złożone problemy, podczas gdy „Test” jest w rzeczywistości brutalnie prosty, tak jak pisanie i testowanie palindromu. Innym razem dadzą mi test logiczny z przepływami do operacji matematycznych i znowu nie będę mógł tego zrobić w wyznaczonym przez nich czasie. Wiem, że umiem pisać sprzedające się oprogramowanie/strony internetowe, które mogą generować niewielkie przychody i znajdować sposoby rozwiązywania problemów, ale mam duże trudności z prostymi testami kodowania w rozmowach kwalifikacyjnych. Jakieś sugestie?


title: Szukam rekomendacji lub porad, jak usprawnić nasz przepływ pracy?

text: Pracuję w zespole, a korporacja depta nam po szyjach, aby stać się bardziej wydajnymi, ponieważ projekty zajmują nam średnio ponad 6 miesięcy. Niedawno zostałem zatrudniony (rozwój zaplecza) i wydaje mi się to bardzo niezorganizowane. Niestety, będąc nowicjuszem, nie mam zbyt wiele głosu. Chciałbym zaproponować nowy przepływ pracy i mam nadzieję, że uzyskam poradę, która może wywrzeć pozytywny wpływ/wrażenie? **Aktualny przebieg pracy:** 1. Sprzedaż - dokonuje sprzedaży. Omawia z wyprzedzeniem wszelkie potencjalne problemy z rozwojem. 2. Sprzedaż, projektowanie i kopiowanie spotykają się z klientem na sesję strategiczną. Rozwój jest zachęcany tylko wtedy, gdy oczekuje się pojawienia się pytań związanych z programowaniem. 3. Projekt tworzy kilka makiet, które następnie zatwierdza klient. 4. Copy pisze/sprawdza treść, tworzy listę słów kluczowych dla SEO, również zaakceptowaną przez klienta. 5. Projekt tworzy wewnętrzne strony i umieszcza kopię w PSD. 6. Front end development tworzy szablon zawierający całą zawartość i wszystkie funkcjonalności po stronie klienta, zatwierdzone przez klienta. 7. Back-end development tworzy bazy danych, programuje stronę i podpina CMS/zarządzanie treścią. 8. Development szkoli klienta na zapleczu i jeśli zostanie zatwierdzony, dodaje analizy i uruchamia witrynę. 9. Rozwój nadal zapewnia wsparcie klienta, jeśli jest to konieczne. **Proponowany przebieg pracy:** 1. Sprzedaż - dokonuje sprzedaży. Omawia z wyprzedzeniem wszelkie potencjalne problemy z rozwojem. 2. Sprzedaż, projektowanie, kopiowanie i rozwój spotykają się z klientem na sesji strategicznej, niezależnie od tego, czy w grę wchodzi programowanie, czy nie. 3. Projekt tworzy kilka makiet, które następnie zatwierdza klient. 4. Programiści przeglądają zatwierdzoną makieta i omawiają wszelkie potencjalne problemy z CMS/projektem strony wewnętrznej. 5. Projektowanie może teraz działać na stronach wewnętrznych, podczas gdy zarówno kopiowanie treści, jak i programowanie front-end tworzy początkowy szablon. 6. Po zakończeniu wewnętrznych stron i/lub kopii, front end kończy szablon. Zarówno kopia, jak i frontend mogą być jednocześnie zatwierdzane przez klienta. 7. Back-end development tworzy bazy danych, programuje stronę i podpina CMS/zarządzanie treścią. 8. Development szkoli klienta na zapleczu i jeśli zostanie zatwierdzony, dodaje analizy i uruchamia witrynę. 9. Rozwój nadal zapewnia wsparcie klienta, jeśli jest to konieczne.


title: Licencje na oprogramowanie komercyjne a osobiste

text: Jeśli pracuję dla firmy i piszę dla niej kod, ale zdecyduję się kupić narzędzie dla siebie i używać go do pisania kodu dla firmy, czy potrzebuję licencji komercyjnej lub osobistej? Konkretnie w tym przypadku pytam o WebStorm IDE JetBrains mają Komercyjne (Dla firm i organizacji) oraz Osobiste (Dla indywidualnych programistów). Jestem indywidualnym programistą pracującym dla firmy!


title: Testowanie interfejsu użytkownika aplikacji internetowej Azure na iPadzie

text: Pracuję nad debugowaniem mojej aplikacji mobilnej. Występuje określone wymaganie/problem związany z interfejsem dotykowym typu „przeciągnij i upuść” na iPadzie. Jestem w fazie prób i błędów, próbując dowiedzieć się, jak to naprawić (co oznacza, że nie mam pojęcia, jak rozwiązać problem, który widzę). Jedynym sposobem, w jaki udało mi się sprawdzić, jak przetestować moją aplikację na urządzeniu przenośnym, jest wdrożenie jej w moim wystąpieniu testowym platformy Azure, ponieważ emulator obliczeniowy platformy Azure zawsze uruchamia witryny w ramach 127.0.0.1. Jest to naprawdę denerwujące, ponieważ każde wdrożenie na platformie Azure zajmuje ponad 10 minut. Więc moje pytanie brzmi, jak do cholery ludzie robią rozwój mobilny na tej platformie? Znalazłem kilka osób sugerujących, że mógłbym skonfigurować odwrotne proxy za pomocą skrzypka, aby zezwolić na połączenia zdalne, ale jak dotąd nie byłem w stanie tego uruchomić. Czy jest jakiś słodki symulator ios, którego nie udało mi się znaleźć? Czy czegoś mi brakuje?


title: Narzędzia Code Review – używać czy nie?

text: W moim zespole programistów robimy przeglądy kodu, ale moim zdaniem nie we właściwy sposób. Problemy, na które cierpi nasz proces: 1. Nie ma wystarczającej ilości czasu na właściwy przegląd kodu. 2. Wykonywanie recenzji nie jest obowiązkowe – wiele razy po prostu się tego nie robi. 3. Twórcy siedzą razem do recenzji, ze względu na brak innego prostego mechanizmu do robienia tego "offline" bez poświęcania czasu obu programistom. Moje pytanie brzmi: czy integracja narzędzia do przeglądów kodu może poprawić powyższe punkty? Czy to nie jest potrzebne? Chciałbym usłyszeć od pozytywnych/negatywnych doświadczeń.


title: Czy sektor finansowy różni się od innych sektorów pod względem fragmentacji językowej?

text: ## Wybory językowe dużych korporacji Po prawie 12 latach pracy w sektorze finansowym, zarówno w dużych, jak i małych firmach, moje nadrzędne wrażenie, z wyjątkiem Goldman Sachs, jest takie, że **fragmentacja** (lub bardziej pozytywne kręcenie się rzeczami, **różnorodność** ) to nazwa gry. W ramach jednej firmy możemy zobaczyć C, C++, Smalltalk, Java, J++, Perl, C# i wiele innych. Nawet teraz słyszę o dużych wahaniach _w kierunku_ używania języków, które istnieją od 30 lat, ale które nie są rozpowszechnione w firmie (np. możliwej do uniknięcia fragmentacji; jeśli język nie był odpowiedni 5 lat temu, to dlaczego teraz?) m Zainteresowany przez * Czy duże, skoncentrowane na technologii firmy spoza sektora finansowego są tak rozdrobnione, jak te z niego działające? * Dlaczego doszło do tego rozdrobnienia? * Czy _firmy tworzące oprogramowanie_ są podzielone? ## Stanowisko Javy Mam wrażenie, że Java w dużej mierze „wygrała” pierwszą dekadę tego stulecia w sektorze finansowym, który (prawdopodobnie) był świadkiem największej historycznej ekspansji systemów. Przez „wygrana” rozumiem po prostu, że był to najpopularniejszy wybór dla nowych systemów w tej dekadzie. Byłbym wdzięczny za wskazanie wszelkich **dowodów** dotyczących tych punktów, a zwłaszcza porównań sektorowych. _PS. Moje powody do zadania tego pytania są takie, że będę wygłaszał wykład ze studentami w Londynie o budowaniu finansowych systemów informatycznych. Chciałbym móc umieścić moje doświadczenia związane z finansowym IT w szerszym kontekście i nie chcę dokonywać szerokich uogólnień._


title: Użytkownicy i role: Gdzie umieścić queryUsersWithRole()?

text: Mam dwie klasy modeli `User` i `Role` oraz dwóch menedżerów/DAO (`UserManager` i `RoleManager`) plus metodę, która daje mi wszystkich użytkowników z określoną rolą (`List<User> getUsersWithRole(Role)`) . Do którego menedżera należy ta metoda i dlaczego?


title: Jak wybrać między git a Mercurial

text: Zarówno Git, jak i Mercurial są DVCS i to świetnie. Zastanawiam się, czy istnieje lista konkretnych sytuacji, w których jeden z tych systemów jest preferowany, coś w stylu „W programowaniu mobilnym na wiele platform git jest lepszy, ponieważ…”.


title: Jaka jest najbardziej podstawowa i prosta platforma do wspólnego rozwoju (projekt PHP)?

text: Muszę pracować z 4-5 programistami na dość przeciętnej aplikacji PHP przy użyciu codeignitera. Jesteśmy w 5 różnych lokalizacjach w jednym mieście, a wszyscy programiści nie są zbyt dobrze wykształceni i zakładam, że większość z nich nigdy nie korzystała z żadnego systemu kontroli wersji. Czy możesz polecić jakąś bardzo łatwą do zdobycia platformę do współpracy przy takim projekcie? Mówię o czymś, co jest tylko odrobinę bardziej wyrafinowane niż udostępniony folder skrzynki.


title: Google Analytics i prywatność klientów

text: Pracuję w firmie zajmującej się sprzedażą aplikacji webowych SaaS do spraw kadrowych i finansowych. Nasi klienci to konta kluczowe, którym z oczywistych względów gwarantujemy prywatność ich danych. Musimy tworzyć statystyki użytkowania naszych aplikacji przez klientów (które linki są najczęściej klikane? Jakie przeglądarki są najczęściej używane? Jaka jest średnia rozdzielczość ekranu? itp.). Osobiście korzystam z Google Analytics w swoich witrynach. GA jest bardzo potężnym i kompletnym rozwiązaniem. Ale rodzi pytania o prywatność. * Czy miałeś już ten problem? * Czy udało Ci się narzucić swoim klientom? jak? * Jeśli nie, czy użyłeś alternatywy? czy opracowałeś własne narzędzia pomiarowe statystyki?


title: Formularze sieci Web ASP.NET są złe lub czego mi brakuje?

text: Jako facet od PHP ostatnio musiałem napisać pająka na stronie asp.net. Byłem naprawdę zaskoczony odmiennym podejściem do ajaksu i obsługi formularzy. Na przykład w witrynach PHP, z którymi pracowałem, usunięcie wpisu w bazie danych wyglądałoby następująco: GET delete.php?id=&confirm=yes i odzyskaj „sukces” w jakiejś formie (w przypadku ajax, prawdopodobnie odpowiedź json). W tej aplikacji asp.net możesz zamiast tego opublikować formularz, zawierający wszystkie dane wejściowe na stronie, z ogromnymi __VIEWSTATE i __EVENTVALIDATION. Byłoby to ponad 10 razy większe niż powyżej. Odpowiedź byłaby ponownie kompletna, ze stopką zawierającą pewne ustrukturyzowane dane, które javascript przeanalizuje i wyświetli wynik. Ponownie cała strona jest wysyłana, a następnie wyrzucana (?), ponieważ jest już wyświetlana. Dlaczego nie wysłać po prostu stopki z danymi do przeanalizowania (nie jest to json ani xml, ale oddzielona lista). Naprawdę nie rozumiem, dlaczego miałbyś projektować system w ten sposób. Zwykle masz szybkiego klienta i dość szybki serwer, ale naprawdę wolne połączenie. Dlaczego nie ograniczyć transferu danych do minimum? Dlaczego te ogromne __VIEWSTATE i __EVENTVALIDATION? Wygląda na to, że wszystko jest zrobione tak, aby gadatliwie i w sposób skomplikowany. Naprawdę nie widzę sensu, a to zwykle oznacza, że czegoś mi brakuje. Więc proszę mi powiedzieć, jakie są powody tego projektu i jakie ma zalety (i słabe strony)? (Tak, wiem, że __VIEWSTATE służy do określenia, jaki typ konfiguracji formularza powinien zostać odesłany z powrotem na serwer. Ale DLACZEGO jest to potrzebne?) Proszę zachować tę dyskusję ściśle techniczną i unikać konfliktów. * * * Aktualizacja: Proszę wybaczyć nieco zrzędliwe pytanie. Próbowałem wyjaśnić swój pogląd, aby uzyskać lepszą odpowiedź. Nie mówię, że asp.net jest zły, mówię, że nie rozumiem znaczenia tych pojęć. Zwykle oznacza to, że muszę się czegoś nauczyć, zamiast błędnych pojęć. Doceniam wyjaśnienia, że "nie musisz robić tego w asp.net", przeczytam o MVC i innych technologiach .net. Jednak większość z powodów, dla których ta strona (ta, o której wspomniałem), ma być napisana tak, jak jest. Jest napisany przez profesjonalistów dla dużej organizacji z dużo większym doświadczeniem niż ja. Wszelkie wyjaśnienia dotyczące ich (ewentualnego) wyboru projektu byłyby mile widziane.


title: Jak trudne jest podniesienie Pythona i Django dla web developera Java/.NET?

text: Właśnie rozpocząłem nową pracę kilka miesięcy temu w małej firmie, w której obecnie kieruję wszystkimi obecnymi i przyszłymi działaniami rozwojowymi. Osobiście mam wieloletnie doświadczenie w projektowaniu i tworzeniu oprogramowania głównie z perspektywy Java, ale także z perspektywy .NET. Z łatwością zacząłem korzystać z .NET w późniejszej karierze i nie wymagałem dosłownie żadnego treningu, aby zacząć działać, a ponadto pomogło mi to naprawdę uchwycić i docenić uniwersalność wielu najlepszych praktyk i wspólnych tematów, widząc dwie różne perspektywy do rozwiązania tego samego problemu. Mój szef ma na boku firmę startową i bez ujawniania zbyt wielu informacji potrzebował średnio zaawansowanej aplikacji internetowej, która integruje się z Google Maps w celu tworzenia tras. Zamówił aplikację internetową, której obiecali za dużo, znacznie gorzej dostarczyli i przekroczył termin, obecnie walczy o odzyskanie przynajmniej części zainwestowanych pieniędzy. Ma kod źródłowy witryny w takiej postaci, w jakiej jest teraz, ale ma listę rzeczy, które chciałby naprawić i dodać, zanim zacznie z nią korzystać. Zapytał mnie, czy chciałbym to zrobić na boku za dodatkową gotówkę, ale problem polega na tym, że strona została napisana w Pythonie przy użyciu Django, w którym nie mam żadnego doświadczenia. Powiedziałem mu, że naprawdę nie jestem do tego najlepszą osobą, ponieważ nie mam praktycznie nic o Pythonie ani Django i musiałbym nauczyć się tego od zera. Uważam, że nie byłoby sprawiedliwe, gdybym obciążał go godzinami za mój czas, gdybym wykorzystywał ten czas na naukę języka i platformy. Na podstawie podsumowania mojego poziomu doświadczenia, jak trudno lub ile czasu zajęłoby mi to podniesienie? Jeśli uważasz, że to strata czasu, czy ktoś mógłby polecić jakąś sugestię, gdzie znaleźć doświadczonych programistów WWW w Pythonie? Pieniądze go teraz martwią, więc nie ma już największego budżetu. Dzięki za sugestie!


title: Czy powinienem zawsze Convert.ToInt32 moje liczby całkowite uwzględniać potencjalne liczby całkowite dopuszczające wartość null?

text: Jeśli moja baza danych MSSQL zawiera typ danych, który ma wartość NULL (tj. null jest dozwolony), to ORM, takie jak EntityFramework w moim przypadku, tworzą obiekty .NET, które są dopuszczalne do wartości null. To jest świetne, a sposób, w jaki używam wartości nullable, wygląda następująco: **C#** int? niektóreInt = 5; int newInt = jakasInt.Value; // woot **VB.NET** Dim someInt As Integer? Dim newInt As Integer = someInt.Value ' hura Jednak ostatnio musiałem dokonać zmiany w bazie danych, aby pole Id nie było już NULL (nullable). Oznacza to, że `.Value` jest teraz zepsute. Jest to uciążliwe, jeśli właściwość Id jest często używana. Jednym z rozwiązań, o którym pomyślałem, jest po prostu użycie `Convert.ToInt32` w polach identyfikatora, więc nie ma znaczenia, czy int jest dopuszczalny, czy nie. **C#** int newInt = Convert.ToInt32(someInt); // zawsze kompiluje **VB.NET** Dim newInt As Integer = Convert.ToInt32(someInt) ' zawsze się kompiluje Czy to złe podejście i czy są jakieś alternatywy?


title: Łatwy sposób na zaangażowanie nie-programistów (tj. projektantów) do korzystania z kontroli wersji?

text: Jakie są kluczowe sposoby zaangażowania Twojego zespołu w korzystanie z kontroli wersji podczas programowania, tworzenia stron internetowych lub w inny sposób? Odmawiam pracy bez niego, co oznacza, że każdy zaangażowany w projekt również musi z niego korzystać. To po prostu dobra praktyka. Graficzne interfejsy użytkownika, takie jak Tower, pomogły, ale koncepcja tego spotkała się z gniewem (postawa „nie moja praca!”), nieśmiałością lub po prostu z nieużywania go (zamiast tego używa FTP, omijanie kontroli wersji, powiedzmy, dewelopera lub wdrażania ). Edycja: Powinienem był trochę wyjaśnić, że nie mam na myśli tylko obrazów/PSD.


title: W projektowaniu API, kiedy używać/unikać polimorfizmu ad hoc?

text: Sue projektuje bibliotekę JavaScript, `Magician.js`. Jego podporą jest funkcja, która wyciąga `Królika` z przekazanego argumentu. Wie, że jej użytkownicy mogą chcieć wyciągnąć królika z „ciągu”, „liczby”, „funkcji”, a może nawet z „elementu HTML”. Mając to na uwadze, _mogła_ zaprojektować swoje API w następujący sposób: # Ścisły interfejs Magician.pullRabbitOutOfString = function(str) //... Magician.pullRabbitOutOfHTMLElement = function(htmlEl) //... Każda funkcja w powyższym przykładzie wiedzieć, jak obsłużyć argument typu określonego w nazwie funkcji/nazwa parametru. Może też zaprojektować to w następujący sposób: # Interfejs "ad hoc" Magician.pullRabbit = function(anything) //... `pullRabbit` musiałby uwzględniać różnorodność różnych oczekiwanych typów, które mógłby być, a także (oczywiście) nieoczekiwanym typem: Magician.pullRabbit = function(anything) { if (anything === undefined) { return new Rabbit(); // znikąd } else if (isString(cokolwiek)) { // więcej } else if (isNumber(anything)) { // więcej } // itd. }; To pierwsze (ścisłe) wydaje się bardziej jednoznaczne, być może bezpieczniejsze i być może bardziej wydajne — ponieważ nie ma żadnych kosztów ogólnych związanych ze sprawdzaniem typu lub konwersją typu. Ale to drugie (ad hoc) wydaje się prostsze, patrząc na to z zewnątrz, ponieważ „po prostu działa” z dowolnym argumentem, który konsument API uzna za wygodny do przekazania. **Aby uzyskać odpowiedź na to pytanie** , chciałbym zobaczyć konkretne plusy i minusy jednego z tych podejść (lub zupełnie innego podejścia, jeśli żadne z nich nie jest idealne), aby Sue wiedziała, jakie podejście przyjąć podczas projektowania biblioteki swojej biblioteki. API.


title: Dlaczego tak nazwano Inversion of Control?

text: Słowa „odwrócenie” lub „kontrola” w ogóle nie są używane do zdefiniowania odwrócenia kontroli w definicjach, które widziałem. ## Definicje Wikipedia > inwersja sterowania (IoC) to technika programowania, wyrażona tutaj w kategoriach programowania obiektowego, w którym sprzężenie obiektów jest wiązane w > czasie wykonywania przez obiekt asemblera i zazwyczaj nie jest znane w czasie kompilacji > za pomocą analizy statycznej. ~http://en.wikipedia.org/wiki/Inversion_of_control Martin Fowler > Odwrócenie kontroli to powszechny wzorzec w społeczności Java, który pomaga > połączyć lekkie kontenery lub łączyć komponenty z różnych projektów > w spójną aplikację. ~ _w oparciu o_ > http://www.martinfowler.com/articles/injection.html _(przeredagowane)_ * * * Dlaczego więc Inversion of Control nazywa się Inversion of Control? Jaka kontrola jest odwracana i przez co? Czy istnieje sposób na zdefiniowanie odwrócenia kontroli za pomocą terminologii: **_invert_** i **_control_**?


title: Ciekawe zadania nieprogramistyczne dla programistów

text: To pytanie jest związane z moimi innymi pytaniami zadanymi społeczności HN http://news.ycombinator.com/item?id=2450143 Oto podsumowanie powyższego wątku: Zapytałem społeczności HN, czy powinniśmy dać wolne 2 i 4 soboty na nasze programiści? W tej chwili mamy wolne tylko 1 i 3 soboty i pracujemy nad innymi. LUB Powinniśmy mieć trochę zabawy, wydarzeń, projektów dla zwierząt, filmów, nieformalnych spotkań indywidualnych itp. w te 2 soboty? Co powinno być lepszą opcją dla naszej 7-letniej, małej firmy usługowej IT zatrudniającej 50 programistów? Otrzymałem wiele dobrych odpowiedzi. Większość z nich mówi „Daj im OFF” :) Nadal chcę spróbować dać te 2 soboty programistom, aby zrobili własne rzeczy. Mogą poprawić komunikację, umiejętności pisania, pisać blogi, pracować nad projektami dla zwierząt itp. Chciałem wiedzieć, jakie inne czynności nieprogramistyczne możemy wykonać dla programistów. Jestem pewien, że otrzymam dużo więcej dobrych odpowiedzi od tej społeczności :) Aktualizacja: Cóż, myślę, że nie wszystkim się to podobało. Dzięki za komentowanie i odpowiadanie mimo wszystko. Ale myślę, że będzie ci bardzo trudno zrozumieć kontekst, przez który przechodzę. Moim błędem jest to, że nie potrafiłem tego tutaj właściwie wyjaśnić. Praca w soboty jest dość powszechna w krajach rozwijających się, takich jak Indie. Macie szczęście, że zostaliście wyzwoleni dużo wcześniej niż my (zakładając, że pochodzicie z USA i rozwiniętych krajów europejskich). Twoi pradziadowie i pradziadkowie zbudowali twój kraj pracując prawdopodobnie 7 dni w tygodniu, a ty zarabiasz teraz na ich ciężkiej pracy pracując 5 dni w tygodniu. A niektórzy z was mogą teraz proponować 4 dni w tygodniu. Wciąż musimy nadrabiać zaległości i nie możemy sobie pozwolić na wolny czas w pracy w ograniczonej liczbie godzin tygodniowo. Prawdopodobnie nasze dzieci lub wnuki będą cieszyć się pracą konsekwentnie 4 lub 5 dni w tygodniu. Nie mam tutaj nic przeciwko 5 dni w tygodniu lub 4 dni w tygodniu. Ale mamy o wiele więcej obszarów do udoskonalenia jako programiści i jako osoby. Angielski nie jest naszym językiem ojczystym, musimy ciężko pracować nad poprawą angielskiego. Umiejętności pisania, ulepszenia techniczne, jest tak wiele rzeczy, nad którymi musimy popracować. I nie każdy programista jest tak zmotywowany do samodzielnego działania. Potrzebują wskazówek. Chcemy spędzić te 2 dni, pomagając im w tym dla ich własnego dobra. Firma nie zarobi na tych 2 dniach. Tak, na dłuższą metę przyniesie to również korzyści firmie, ale przyniesie im to więcej korzyści. Więc przyszedłem tutaj, aby zrozumieć od ekspertów takich jak wy, co programiści mogą zrobić, aby się poprawić. My jako firma im w tym pomożemy. Bez obrazy dla nikogo, ale mam nadzieję, że to wyjaśnia, dlaczego zadałem to pytanie.


title: Efektywny system szablonów

text: Tworzę system zarządzania treścią i potrzebuję porady, jaką strukturę tematów powinienem przyjąć. Kilka opcji (To nie jest pełna lista): 1. Styl Wordpress: * kontroler decyduje, jaki szablon załadować na podstawie żądania użytkownika, np.: strona główna / archiwum artykułów / strona pojedynczego artykułu itp. * każdy z tych szablonów jest niepowiązane z innymi szablonami i muszą istnieć w motywie * twórca motywu decyduje, czy chce korzystać z wewnętrznych szablonów (takich jak „pasek boczny”, „element paska bocznego”) i dołącza je ręcznie tam, gdzie według niego są potrzebne. 2. Styl Drupala: * kontroler daje kontrolę twórcy motywu tylko nad wewnętrznymi szablonami; jeśli nie istnieją, wraca wewnętrznie do niektórych domyślnych szablonów (uważam, że jest to bardzo restrykcyjne) 3. Styl Funky: * kontroler ładuje tylko szablon „index.php” i dostarcza tagi warunkowe dla programistów motywów, których może użyć włączyć wewnętrzne szablony, jeśli chce. Wśród tych stylów lub innych jaki styl systemu szablonów pozwala na szybkie opracowanie i bardziej zwięzły projekt i wdrożenie.


title: Czy MVC dotyczy tylko sieci?

text: Jest to prawie natychmiastowe, gdy rozmawiam z programistami o kontrolerze widoku modelu ( **MVC**), mówią, że wysyłasz żądanie do adresu URL, a serwer buduje jednostkę (MODEL) i zapewnia wizualną reprezentację tego modelu. * Czy to oznacza, że MVC **jest tylko dla sieci**, czy też spotkałem ludzi, którzy są tylko programistami, którzy używają MVC do pisania aplikacji internetowych? * Czy istnieją zastosowania MVC w aplikacjach typu desktop? * Jestem nowy w paradygmacie i chciałbym wiedzieć o jakimkolwiek superzestawie MVC


title: Używanie .exe programu z licencją GNU General Public License w wersji 2.0 w celach komercyjnych

text: Mam pytanie do kogoś, kto jest ekspertem na temat licencji "GNU General Public License w wersji 2.0". Tworzę program, a mój kod korzysta z innego programu ("HoboCopy"), wewnątrz którego jest ta jedna licencja. Ściągnąłem tylko .exe tego jednego programu i zastanawiam się, czy jest ok z licencją, jeśli mój szef będzie sprzedawał program, który zrobiłem bez kodu, oczywiście chce go sprzedać jak normalny program, tylko .exe do użycia. Sprawdziłem na takie pytanie i żadnych dopasowań. Przepraszam, wiem, że w dużym licencyjnym filmie dokumentalnym jest prawdopodobnie napisana odpowiedź na moje pytanie, ale wybacz mi, że nie chcę tego wszystkiego czytać, może ktoś już to wie i może mi powiedzieć lub ostatecznie powiedzieć mi dokładnie, gdzie Mogę znaleźć odpowiedź na moje pytanie. Z góry dziękuję. EDIT: Po opublikowaniu mojego posta przeczytałem ten: GNU GENERAL PUBLIC LICENSE jako część produktu komercyjnego. Wygląda na to, że dostałem odpowiedź, że może to sprzedać. I nie muszę podawać swojego źródła i źródła HoboCopy (nawet ja go nie mam). Może ktoś mnie upewni.


title: Kodowanie arytmetyczne a precyzja numeryczna maszyny

text: Podczas dzielenia przedziałów dla kodowania arytmetycznego, najgorszy scenariusz jest taki, że końcowy przedział będzie miał rozmiar `2^(1-n)`, gdzie `n` jest liczbą unikalnych symboli, które kodujesz. Osiągnie to granicę precyzji maszyny, przy użyciu zwykłych typów danych, bardzo szybko: Na przykład stworzyłem implementację JavaScript, która psuje się po zakodowaniu około 15 znaków! Ponieważ jest to dość ograniczające, w jaki sposób kodeki mogą to obejść? * Kodować [bardzo] krótkie bloki, w granicach maszyny, i łączyć je razem? To zwiększy koszty. * Używać typów innych niż natywne z dowolną precyzją? To będzie powolne. * Coś innego?...


title: Prawa autorskie dotyczące fragmentów kodu i większych ilości kodu

text: Projektuję publiczne repozytorium kodu. Użytkownicy będą mogli publikować i edytować dowolną ilość kodu, od fragmentów kodu po **całe wieloplikowe projekty**. Mam kilka poważnych obaw prawnych w związku z tym: * **Nie pozwany/zamknięty** \- Uważam, że ta witryna byłaby znacznie łatwiejszym celem niż wyśledzenie pojedynczego użytkownika do pozwania. Rozejrzałem się trochę i zauważyłem, że linki do informacji prawnych w stopce każdej strony są powszechne. Jakie konkretne czynności powinienem zrobić — i co robi witryna taka jak YouTube (w której przez cały czas widzę materiały chronione prawem autorskim) — w celu ochrony? * **Cytowanie źródeł i edytowanie kodu źródłowego** \- Jeśli użytkownik chce opublikować kod, który nie jest jego, jakie obawy/zabezpieczenia powinienem mieć? Czy link wystarczy i czego potrzebuję dalej, aby umożliwić edycję kodu (na przykład w celu ulepszenia)? Co może się stać, jeśli użytkownik opublikuje kod chroniony prawem autorskim bez cytowania go? * **Duże fragmenty kodu** \- Na jakie różnice prawne powinienem zwracać uwagę, gdy ilość rośnie? * **Bez bałaganu licencji na stronę** \- Chciałbym mieć jedną licencję (np. RosettaCode), która ułatwia interakcję na stronie. Chcę, aby kod można było opublikować _i edytować_. Zajrzałem trochę do licencji CreativeCommons StackOverflow i mówi, że > Jeśli zmienisz, przekształcisz lub stworzysz na tej pracy, możesz dystrybuować > powstałe dzieło tylko na tej samej lub podobnej licencji do tej. A w kodzie Rosetta: > Całe oprogramowanie znalezione w kodzie Rosetta powinno być uważane za potencjalnie > niebezpieczne. Używaj na własne ryzyko. Należy pamiętać, że cały kod w kodzie Rosetta jest > objęty licencją GNU Free Documentation License, podobnie jak wszelkie zmiany dokonane przez > współtwórców. Zobacz Rosetta Code:Copyrights, aby uzyskać szczegółowe informacje. Jakie inne licencje są takie? * **Komercjalizacja witryny** \- W jaki sposób mogę i nie mogę zarabiać na witrynie zawierającej taki kod? Cały kod będzie widoczny publicznie. Pierwsze myśli to wyświetlanie reklam lub zarabianie na opłatach za zaawansowane funkcje.


title: Logistycznie, jak zarządzasz osadzonym SQL?

text: Moja obecna aplikacja ma problemy z ORM-em, a my polegamy na dość nieoczywistym języku SQL do wyrażania zapytań, których ORM nie może. Czy istnieją najlepsze praktyki w zakresie zarządzania zapytaniami SQL? Na przykład, gdzie zwykle znajdują się one w stosunku do innych części kodu? Czy są one w oddzielnych plikach `.sql`, czy edytujesz je bezpośrednio w innych plikach źródłowych? Jeśli to drugie, czy twoje IDE (lub edytor) pozwala na podświetlanie składni? Czy istnieją schematy dla Vima lub Eclipse, które będą wykonywać podświetlanie składni SQL za pomocą zestawu znaczników (takich jak `#begin sql` i `#end sql` lub coś podobnego?)


title: Łączenie artykułów z podobnymi

text: Tworzę stronę, na której ludzie mogą pisać na niszowy temat. To prawie jak blog, jednak obszar, o którym wspomniałem, to mała nisza z (miejmy nadzieję) pasjonatami. Chcę funkcjonalności, w której ktoś raz opublikuje swój artykuł. Osoby o podobnym doświadczeniu mogą zostać powiadomione, aby mogły o tym poczytać. Teraz moje pytanie brzmi - jak określić podobne artykuły? Wiem, że tagowanie to sposób - tak jak tutaj w stackexchange i będę go wdrażał. Ale załóżmy, że ludzie nie tagują lub tagują niepoprawnie, trudno będzie sobie pozwolić na całe wrażenia użytkownika. Czy ktoś ma jakieś wskazówki, jak dopasowywać artykuły inne niż metoda tagowania?


title: Jak zorganizować skrypty narzędziowe w zespole programistycznym?

text: W moim zespole programistycznym jest wiele skryptów narzędziowych / narzędziowych wokół wszystkich członków. Skrypty te są przeznaczone głównie do konkretnych zadań i nie powinny być częścią naszego SCM (perforce). Jak powinniśmy zorganizować te skrypty narzędziowe i fragmenty, aby je rozpowszechniać i umożliwić innym członkom dostęp do nich? Czy istnieją dobre narzędzia do udostępniania, organizowania i dokumentowania skryptów i fragmentów w zespole? Twoje zdrowie.


title: Sortuj tablicę w określonej kolejności - nie rosnąco/malejąco

text: Pracuję nad algorytmem, który działa najlepiej, jeśli dane wejściowe są do niego przekazywane w określonej kolejności, więc chcę je posortować w ten sposób. Różnica jest na tyle drastyczna, że rozważam ponowne posortowanie tablicy. Rozważ tablicę „a” o długości „n”. Chcę posortować to w następujący sposób i zwrócić tablicę indeksów `a` zamiast wartości: definiuję inną tablicę `w`, również o długości `n`. Chcę posortować tak, aby pierwszy element był najbliżej pierwszego elementu `w`. Następnie z pozostałych elementów (wyłączając ten, który już został posortowany), drugi element jest najbliższy drugiemu elementowi `w` i tak dalej. Na przykład „a = {5,5, 6,5, 2,4, 3,1}”, „w = {1, 2, 6, 5}”. `2.4` jest najbliżej `1`, więc `output[0] = 2`, indeks `2.4`. `2.4` jest najbliżej `2`, ale jest już przetworzony, więc wybierz `3.1`, `output[1] = 3`. Następnie przychodzą „0” i „1”, w tej kolejności. „0” jest wybierane, ponieważ jest pierwsze, chociaż oba są w równej odległości. Tak więc „wyjście = {2, 3, 0, 1}” i posortowana tablica byłaby „posortowana = {2.4, 3.1, 5.5, 6.5}” (każdy indeks jest używany do znalezienia odpowiedniego elementu). Myślę tylko o brutalnym wymuszaniu tego algorytmu. Czy można to zrobić w bardziej efektywny sposób?


title: Wzorzec lub rozwiązanie do korzystania z klas z innym interfejsem w ten sam sposób

text: To, co chciałbym osiągnąć, to używanie klas (teraz dwie, później więcej) z innym interfejsem w ten sam sposób, więc unikałbym podejmowania decyzji opartych na interfejsie na przykład na wyższych poziomach, nie chcę widzieć takich rzeczy jak this: if ($class instanceof 'ThisInterface') { $thisInterfaceImplementation->doStuff(); } Zamiast tego chciałbym wywołać metodę typu $class->doStuff() i umieścić decyzje w opakowaniu typu class. Chciałbym również uniknąć pustych metod. Zastanawiam się nad użyciem Wrappera lub Adaptera (a może Observera), ale jestem ciekaw, może jest na to lepszy sposób. Aby być bardziej przejrzystym, oto małe wyjaśnienie, co staram się rozwiązać. Budujemy aplikację, która ma komunikować się z drukarniami. Oznacza to, że musimy dodać dodatkowe strony do arkuszy wydruku (lub nie, a może w inny sposób), być może musimy zmienić nazwy plików pdf na ftp w ten lub inny sposób lub wcale. Mamy kilka decyzji do podjęcia w oparciu o drukarki (na naszych interfejsach), ale na różnych etapach lub procesach, dlatego uważam, że wzorzec Strategy nie byłby dobrym rozwiązaniem (a musiałbym tworzyć puste metody lub używać tych if) Wzorzec Observer wydaje się rozwiązywać wszystkie moje „problemy”, ale w tym przypadku może być przesadą. Dzięki temu mógłbym po prostu wysyłać zdarzenia w punktach, w których muszę podjąć decyzję, i tylko obserwatorzy, którzy zapisali się na to zdarzenie, zrobiliby niezbędne rzeczy. Żadnych pustych metod, niewiele problemów z różnymi interfejsami. Z drugiej strony, dla każdego zdarzenia rozesłalibyśmy tylko jedno miejsce w kodzie, więc wydaje się to być „nietrafionym użyciem” tego wzorca. Wszelkie porady byłyby mile widziane!


title: Komunikacja między aplikacją C# a C++ DLL

text: Obecnie buduję streamer audio i mam CPP .dll, z którego korzystam z funkcji wewnątrz GUI WPF C#. Program musi radzić sobie z różnego rodzaju zdarzeniami, takimi jak * Zmniejszanie/zwiększanie głośności * Manipulowanie pasmami korektora Do tego momentu używałem nazwanych zdarzeń, aby poradzić sobie z tym problemem. Jaki byłby lepszy sposób obsługi wszystkich tych zdarzeń, od GUI do .dll? System zdarzeń, którego używam (.dll tworzy wątek, który jest w WaitForMultipleObjects), czy byłoby lepiej/mądrzejszy/bardziej korzystny, czy po prostu lepiej byłoby użyć zamiast tego nazwanego potoku?


title: Czy to mini-DSL do ukrywania haseł URI jest zgodne ze specyfikacją URI?

text: # Hasła widoczne w identyfikatorach URI Aplikacja przechowuje identyfikatory URI używane do przesyłania plików przez SFTP, FTP, FTPS i SCP. Wiele z tych identyfikatorów URI zawiera hasła, na przykład: sftp://someuser:sekrit@host.example.com/ Te identyfikatory URI są widoczne dla zbyt wielu osób. Nie możemy ukryć adresów e-mail przed tymi osobami. # Minijęzyk do pobierania haseł z URI Używając mini-DSL, możemy określić części adresu e-mail, których nie chcemy pokazywać: sftp://someuser:<<CONFIG:customers/widgitco/password> >@host.example.com/ Program, który wykonuje transfer plików, będzie szukał instancji tego mini-DSL w URI, przeanalizował je, wyszukał odpowiednie ciągi ze źródeł zastrzeżonych i podstawił te ciągi do URI. Załóżmy na przykład, że ograniczone źródło zawiera tę parę klucz/wartość: customers/widgitco/password: moresekrit Następnie, po zastąpieniu, identyfikator URI powinien mieć postać: sftp://someuser:moresekrit@host.example.com/ Każda instancja mini -DSL w URI będzie oddzielone `<<` i `>>`. Szczegóły mini-DSL między `<<` i `>>` mogą się zmieniać w celu spełnienia przyszłych wymagań; jedynym wymaganiem byłoby, aby nie zawierała ona `>>`. Pozwoliłoby to osiągnąć mój cel, jakim było zmniejszenie ujawnienia tych haseł. # Czy ten mini-język jest kruchy? * Czy istnieją poprawne identyfikatory URI FTP/FTPS/SFTP/SCP, które łamią ten schemat? * Czy są w ogóle prawdopodobne? * Która mini-DSL jest mniej podatna na uszkodzenie przez prawidłowe identyfikatory URI?


title: Czy niewłaściwe jest posiadanie szerokiego źródła aplikacji dla powiązania listy rozwijanej?

text: Combobox WPF musi powiązać kolekcję z jej ItemsSource i czymś, z czym ma powiązać wybrany element lub wartość. Do tej pory umieściłem zarówno kolekcję, jak i wybrane właściwości wartości, które wiążę w ViewModel, który jest odpowiedzialny za dany widok hostujący Combobox. Ostatnio przeglądałem, jak zaimplementowałem MVVM w moich poprzednich projektach i zauważyłem pewne rzeczy, z których nie jestem zadowolony. Jednym z nich jest to, że jeśli wiele widoków wymaga tego samego ComboBox, to każdy skojarzony ViewModel ma swoją własną kopię kolekcji. Pomyślałem, że byłoby lepiej uwidocznić kolekcję na poziomie aplikacji i po prostu podać właściwość do powiązania wybranej wartości w każdym odpowiednim ViewModel. Sposób, w jaki widzę, jak to działa, to posiadanie pojedynczego ViewModel, który jest utrzymywany przez cały okres istnienia aplikacji. Ten ViewModel miałby wszystkie standardowe kolekcje, które nie są specyficzne dla poszczególnych ViewModel. Ponieważ używam Entity Framework, miałby własny kontekst, więc właściwości Selected Item musiałyby być powiązane z kluczem obcym jednostki zamiast właściwości nawigacji, ponieważ różne ViewModels nie będą współużytkować kontekstów. Stamtąd mogłem hermetyzować różne kolekcje w ResourceDictionary jako zestaw StaticResources, a następnie użyć ich do powiązania z ItemsSource różnych ComboBoxów w całej aplikacji. Moje pytanie jest takie; Czy to szalone/głupie? Nauczyłem się WPF/MVVM z wielu źródeł i nigdy nie jestem pewien, czy odbiegam od ogólnie przyjętych praktyk. Moje myśli stojące za tym wszystkim były takie, że posiadanie jednego źródła umożliwiłoby wielu modelom widoku posiadanie zsynchronizowanego zestawu rozwijanych kolekcji. Jeśli zmienię kolekcję w jednym miejscu, reszta pokaże te same zmiany, ponieważ wszystkie są powiązane z jednym źródłem. Wcześniej potrzebowałem mediatora, aby zachować spójność między ViewModels. Ponadto zapewniłaby prostą, scentralizowaną i możliwą do powiązania klasę singleton do przechowywania zmiennych o zasięgu aplikacji, takich jak aktualnie zalogowany użytkownik. Czy jest w tym oczywista wada, której może mi brakować? W przeszłości zaimplementowałem mój wzorzec MVVM bez żadnej zewnętrznej walidacji. To działa, tylko z kilkoma bólami wzrostu... ale jestem pewien, że mógłby bardzo skorzystać na recenzowaniu.


title: Czy dobrą praktyką jest nazywanie zwracanej zmiennej „wynikiem”?

text: Czy dobrą praktyką jest wywoływanie zmiennej zwracanej przez metodę z nazwą zmiennej `result`? Na przykład: public Zorglub oblicz() { Zorglub wynik = [...] [...] zwróć wynik; } A może powinienem nazwać go według jego typu? publiczny Zorglub oblicz() { Zorglub zorglub = [...] [...] return zorglub; } Widziałem oba na wolności, jeśli muszę wybrać jeden, jakie powody mogą sprawić, że wolę to pierwsze lub drugie (lub jakąkolwiek lepszą nazwę)? Myślę głównie o Javie.


title: Zliczaj unikalnych odwiedzających według grupy odwiedzanych miejsc

text: Mam do czynienia z problemem liczenia unikalnych gości grup miejsc. Oto sytuacja: mam _odwiedzających_, którzy mogą odwiedzać _miejsca_. Na przykład mogą to być internauci odwiedzający strony internetowe lub klienci odwiedzający restauracje. Odwiedzający może odwiedzić tyle miejsc, ile chce, a jedno miejsce może odwiedzić kilku odwiedzających. Gość może przychodzić w to samo miejsce kilka razy. Miejsca należą do _grup_. Grupa może oczywiście zawierać kilka miejsc, a miejsca mogą należeć do kilku grup. Biorąc pod uwagę, że dla każdego odwiedzającego możemy mieć listę odwiedzonych miejsc, w jaki sposób mogę uzyskać liczbę unikalnych odwiedzających na grupę miejsc? Przykład: mam gości A, B, C i D; i mam miejsca x, y i z. Mam te listy odwiedzin: [ A -> [x,x,y,x], B -> [], C -> [z,z], D -> [y,x,x,z] ] liczba unikalnych odwiedzających na miejsce jest dość prosta: [ x -> 2, // A i D odwiedzili x y -> 2, // A i D odwiedzili y z -> 2 // C i D odwiedzili z ] Ale jeśli mam te grupy: [ G1 -> [x,y,z], G2 -> [x,z], G3 -> [x,y] ] Jak mogę uzyskać te informacje? [ G1 -> 3, // A, C i D odwiedzili x lub y lub z G2 -> 3, // A, C i D odwiedzili x lub z G3 -> 2 // A i D odwiedzili x lub y ] Dodatkowe uwagi: 1. Miejsc jest tak wiele, że nie jest możliwe przechowywanie informacji o każdej możliwej grupie; 2. Nie ma problemu, jeśli dokonuje się przybliżeń. Nie potrzebuję 100% precyzji. Szybki algorytm, który mówi mi, że w grupie było 12345 wizyt zamiast 12543 jest lepszy niż powolny algorytm podający dokładną liczbę. Powiedzmy, że odchylenie może wynosić ~5%. 3. Mam skończoną liczbę odwiedzających i skończoną liczbę miejsc. Nie mam zbyt wielu miejsc (na razie około 60, ale może wzrosnąć do 200), ale mam całkiem sporo odwiedzających (szacuje się na 50 milionów i ta liczba może wzrosnąć do 200 milionów w ciągu najbliższych miesięcy). Czy istnieje algorytm lub klasa algorytmów, które rozwiązują tego typu problem?


title: Czy możemy zmniejszyć zamieszanie w narzędziach porównywania opartego na wierszach, dodając do kodu adnotacje kilkoma unikalnymi tokenami?

text: Powiedzmy, że mam procedurę1() { --body pierwszej procedury-- } Następnie zmieniam jej nazwę na `procedure2` i tworzę `procedure1` nad nią: procedure1() { --body drugiej procedury-- } procedure2() { --body pierwszej procedury-- } Nie raz, gdy narzędzie porównywania wierszowego podświetli kod od `--body drugiej procedury` aż do `procedure2() {` jako **nowy kod** wewnątrz ` procedura1”. Na pewno tak się stanie, ponieważ większość narzędzi diff jest nieświadoma podstawowej struktury kodu źródłowego. Narzędzia porównywania oparte na AST również nie mogą działać zbyt dobrze, z kilku powodów i wiem, że ludzie naprawdę chcą narzędzia porównywania _semantycznego_, ale tak się nie stanie. Nie widziałem jednak dyskusji na temat tego, czy byłoby praktyczne opisywanie kodu w taki sposób, aby narzędzie różnicujące oparte na liniach mogło zrozumieć podstawową strukturę kodu źródłowego. Na przykład mógłbym wrzucić do kodu kilka UUID, tak: //BeginBlock{E999A3BF-626E-428F-A2C1-6AFF0CD22BF2} procedure1() { --body pierwszej procedury-- } //EndBlock I zmodyfikowany kod wyglądałby tak: //BeginBlock{7C734F0A-92F4-45EB-B653-DBB9A0F18354} procedure1() { --body drugiej procedury-- } //EndBlock //BeginBlock{E999A3BF-626E-428F-A2C1-6AFF0CD22BF2} procedure2 () { --body pierwszej procedury-- } //EndBlock Chodzi o to, aby przypisać pewne tokeny (unikalne w pliku lub projekcie) do pewnych znaczników, które odzwierciedlałyby część struktury kodu źródłowego. IDE może automatycznie aktualizować te adnotacje, co może pomóc narzędziu porównywania w lepszym wykrywaniu zmian strukturalnych. Narzędzie zeskanuje kod raz, aby zidentyfikować sekcje programu (i sposób ich przenoszenia), a następnie porównać te bloki o tym samym identyfikatorze. Czy uważasz, że takie podejście jest praktyczne?


title: Czy Scrum ma sens przy wdrażaniu nowego backendu kompilatora?

text: Mam istniejący język, który muszę przenieść na nową platformę. Prawdopodobnie spróbuję tego, zmieniając backend istniejącego kompilatora. Przepisanie backendu to sporo pracy. Nie widzę sposobu na rozbicie tego na sensowne historie bez naruszania kryteriów INVEST. Nie widzę, jak każda historia może być negocjowana - wszystkie są wymagane dla działającego kompilatora. Wszystkie historie mają jednakowy priorytet i nie ma znaczenia, w jakiej kolejności je dostarczam. Muszę zrobić je wszystkie. Niektóre części oprogramowania, które wdrażam, mają niższy priorytet niż inne i widzę, że możemy je dostarczać stopniowo. Istnieje jednak istotny rdzeń, którym jest Must Have. Planuję podążać za Scrumem, ale czy po prostu przechodzę przez ruchy? Czy istnieją zalecane praktyki dla tego rodzaju projektu?


title: Architektura oprogramowania — od projektu do udanego wdrożenia

text: Jak idzie temat; kiedy architekt oprogramowania odłoży projekt na wysokim poziomie i podejście do oprogramowania, które ma być tworzone od podstaw, w jaki sposób zespół zapewnia, że zostanie ono pomyślnie wdrożone? Moim zdaniem należy wykonać następujące czynności * Właściwe zrozumienie wymagań * Ustalenie praktyk i wytycznych dotyczących kodowania * Regularne przeglądy kodu w celu upewnienia się, że wytyczne są przestrzegane * Ponowne przeglądanie fazy wymagań i wprowadzanie niezbędnych zmian w projekcie na podstawie danych wejściowych klienta jeśli są jakieś zmiany w wymaganiach * Właściwa dokumentacja tego, co jest robione w kodzie * Właściwa dokumentacja wymagań i zmian w nich * Wreszcie implementacja projektu za pomocą kodu zorientowanego obiektowo tam, gdzie jest to właściwe Czy coś przegapiłem? Chciałbyś usłyszeć wszelkie błędy, z których nauczyłeś się w swoich doświadczeniach projektowych. Co poszło nie tak, co można było zrobić lepiej. Dzięki za poświęcenie czasu...


title: Jaka jest dobra technika szacowania dla wstępnych szacowań wysokiego poziomu?

text: Obecnie korzystam z Planning Pokera, aby wykonać nasze szczegółowe szacunki. Działa to świetnie, ale opiera się na dość szczegółowym podziale pracy. Często potrzeba 6-8 tygodni, aby uzyskać wystarczająco szczegółowy projekt i podział pracy. Odkryłem, że 6-8 tygodni analizy jest często marnowane, ponieważ szacunki są tak wysokie, że kontynuowanie projektu nie ma sensu z ekonomicznego punktu widzenia. Myślę, że dostarczenie z góry oszacowania na wysokim poziomie z szerokim zakresem może być lepszym rozwiązaniem, aby wyeliminować te niepewne przypadki biznesowe. Jakie narzędzia i techniki istnieją dla wstępnych szacunków wysokiego poziomu? W tej chwili po prostu wybieram poprzedni projekt, który „czuje” tak samo i zapewnia zakres -50%/+100%.


title: Zaawansowane generyki .NET i od czego zacząć?

text: Przeglądałem kod C#, który ma wiele typów ogólnych (i ogólnych z rodzajami...) i zajmuje mi więcej czasu na grok kodu. Znam bandę czterech wzorców i znam niektóre wzorce przedsiębiorczości ptactwa (ucząc się ich na bieżąco). 1. Czy są jakieś techniki, które mógłbyś zasugerować podczas rozwiązywania takich systemów? 2. Czy są jakieś zasoby do tworzenia takich systemów?


title: Konwencje nazewnictwa Java a konwencje nazewnictwa C++/C

text: Jestem programistą Java, który zaczyna poznawać coraz więcej C++/C (tak, wiem, że są inne, wyrozumiałam się). Jedna rzecz, która wydała mi się dziwna, to różne konwencje nazewnictwa używane przez te języki. W Javie bardzo często można zobaczyć coś takiego: int someVariable = someFunction(someParameterToPass); Jednak w C++/C wyglądałoby to nieco inaczej: int jaka_zmienna = jaka_funkcja(jakiś_parametr_do_przekazania); Powodem, dla którego pytam, jest to, że (sam, bez zespołu) właśnie rozpocząłem duży projekt przy użyciu C ++, a teraz używam konwencji nazewnictwa Java w moim kodzie (do tego jestem przyzwyczajony). Ale potem dodaję do mojego kodu kilka zewnętrznych bibliotek, które mieszają ze sobą konwencje nazewnictwa. Rozumiem kod łatwo i używam różnic, aby odróżnić mój kod od kodu biblioteki. Czy powinienem zmienić konwencję nazewnictwa ze względu na czytelność na inne (podczas gdy LOC jest stosunkowo niski), czy pozostać przy tym, co robię teraz (ponieważ jestem jedynym programistą)? **Uwaga -** mój kod został zrecenzowany, jednak recenzenci skupili się głównie na funkcji kodu. Nie wspomnieli o mieszanych konwencjach, a ja ich o to nie pytałem. Nie mieli też doświadczenia w zmianie konwencji nazewnictwa.


title: Czy w javascript i innych językach, w których brakuje kompilatora, testowanie jednostek jest dobrą metodą zapewnienia poprawnej składni i nazewnictwa zmiennych?

text: Pracowałem nad średniej wielkości aplikacją internetową, która bardzo intensywnie wykorzystuje javascript. Mam tendencję do wprowadzania typowych błędów na 10 wierszy kodu z nieznaną nazwą zmiennej lub nazwą funkcji z innego modułu\przestrzeni nazw lub zapominając o powrocie i innych typowych błędach. Zauważyłem, że jako efekt uboczny moich testów qunit otrzymuję sporo informacji zwrotnych dotyczących naprawiania tych błędów. Czy testowanie jednostkowe jest typowym sposobem nadrabiania kompilatora w językach dynamicznych?


title: Jak ulepszyć środowisko programistyczne dla optymalnej produktywności?

text: Jako początkujący programista spędzam godziny, a czasem nawet dni na biurku, czytając kod, pisząc kod, skupiając się, dostając bólów głowy i tak dalej. Udokumentowałem się na temat stanu komputera i kupiłem ergonomiczną klawiaturę i myszkę, jednak ponieważ chcę zrobić karierę w programowaniu, to pytanie ciągle przychodzi mi do głowy. Wszyscy wiemy, że programowanie to ciężka praca, szczególnie z punktu widzenia zdrowia. Programiści spędzają godziny, a czasem nawet nie śpią, mają problemy zdrowotne i zaburzenia odżywiania, ponieważ _muszą_ wykonać swoją pracę. Mój przykład może być czysto wyjątkowy. Pytanie jednak niekoniecznie dotyczy zdrowia, ale produktywności. Czytałem artykuły, które mówiły, że muzyka terapeutyczna może pomóc mózgowi myśleć sprawniej i być bardziej produktywnym. Prawdziwe pytanie brzmi, jak sugeruje tytuł (podpowiedź): jak ulepszyć środowisko programistyczne dla optymalnej produktywności? Czy są jakieś konkretne zasady, których powinienem przestrzegać podczas programowania, aby pomóc mi się skoncentrować i zachować bystry umysł, dzięki czemu mogę tworzyć lepszy kod?


title: Próbując trochę zaciemnić, jak mam podejść do tego konkretnego przypadku?

text: Obecnie mam zadanie, które naprawdę przekracza moje granice, więc potrzebuję pomocy, jak do tego podejść. 1. Mamy zestaw 25 wyników 2. Używamy wtyczki jquery do pionowego przewijania tych 25 wyników, kontener wyświetla pięć wyników na raz. 3. Podczas przeglądania kodu źródłowego strony możesz zobaczyć kod html dla wszystkich 25 wyników. Oczywiście wtyczka jquery sprawia, że są one widoczne lub nie. 4. Zadanie polega na tym, aby tylko pięć zestawów wyników było wyświetlanych w dowolnym momencie podczas przeglądania kodu źródłowego. Cała reszta wyników musi pochodzić z javascriptu lub innej techniki. Więc jakoś muszę albo: 1. Wysłać pulę 25 wyników do JS i wygenerować informacje div w locie LUB 2. Jakiś rodzaj skryptu czasowego, który pobiera pięć wyników na raz i wyświetla je. Ale to wszystko musi stale przewijać się w pionie, więc to również jest brane pod uwagę. Więc staram się zrozumieć, jak powinienem do tego podejść: jednym z pomysłów, jaki miałem, było uruchamianie wywołania ajax co pięć lub dziesięć sekund, w którym skrypt php generuje pięć nowych wyników, a następnie wyświetla je w odpowiednim div. Jest to powolne i zasadniczo oznaczałoby stronę, która stale wysyła wywołania ajaxowe. losowe wyniki pochodzą ze skryptu php, który analizuje kanał XML. Tak naprawdę szukam tylko mapy drogowej lub kilku koncepcyjnych wskazówek, jak można do tego podejść.


title: Czy powinienem używać klucza złożonego dla tej tabeli?

text: Moja baza danych będzie przechowywać słowa, więc najważniejsza jest tabela słów. Tabela Rhyme zawiera listę słów, z którymi dane słowo idealnie się rymuje. Składa się z trzech pól: RhymeID - klucz podstawowy. WordID - klucz obcy łączący z tabelą Word Rhyme - niekluczowa liczba całkowita, która odnosi się do innego rekordu w tabeli Word. Np. „kot” ma WordID 009, „nietoperz” ma WordID 014, a „fat” ma WordID 035, dwa rekordy w tabeli Rhyme mogą wyglądać tak: RhymeId - WordId - Rhyme 001 - 009 (kot) - 014 (bat) 002 - 009 (cat) - 035 (fat) Pytanie brzmi, czy należy ustawić WordId jako klucz podstawowy, aby utworzyć klucz złożony z RhymeId? Czy potrzebuję go do jednoznacznej identyfikacji każdego rekordu? Nie mam praktycznego doświadczenia z bazami danych, ta jest jeszcze na etapie planowania.


title: Jak mogę przetestować wyszukiwarkę pod kątem nietypowego ludzkiego języka?

text: Piszemy wyszukiwarkę od podstaw w dość nietypowym języku, aramejskim, głównie w celach edukacyjnych, ale także dlatego, że w danym języku jest dostępnych niewiele zasobów. Silnik jest/będzie napisany w Pythonie i: 1. Jest wyszukiwarką w ludzkim języku. 2. Nie chodzi o płacenie komuś za wykonanie testów, ale o znalezienie sposobu na rozwiązanie problemu programowo (jeśli to możliwe) głównie w celach edukacyjnych. Chcielibyśmy automatycznie przetestować, czy wyszukiwarka działa sprawnie, ale bez znajomości języka zastanawialiśmy się, czy istnieją narzędzia lub sposoby na jej przetestowanie, aby uzyskać statystyki. Gdybyśmy mieli użytkowników mówiących w tym języku, moglibyśmy poprosić ich o ocenę wyników wyszukiwania, ale nie mając tego, jakie są inne sposoby testowania wyszukiwarki?


title: Kiedy używać [Pure] na konstruktorze?

text: Uczę się o kontraktach kodu w .NET i próbuję zrozumieć ideę czystych konstruktorów. Dokumentacja kontraktów kodu stwierdza: > Wszystkie metody wywoływane w kontrakcie muszą być czyste; oznacza to, że > nie mogą aktualizować żadnego istniejącego stanu. Metoda pure może > modyfikować obiekty, które zostały utworzone po wejściu do metody pure. A dokumentacja `PureAttribute` stwierdza: > Wskazuje, że typ lub metoda jest czysta, to znaczy, że nie dokonuje > widocznych zmian stanu. Rozumiem te stwierdzenia, jeśli chodzi o metody, ale co z konstruktorami? Załóżmy, że masz taką klasę: public class Foo { public int Wartość { get; ustawić; } public Foo (wartość int) { this.Value = wartość; } } Ten konstruktor oczywiście wpływa na stan nowego obiektu `Foo`, ale nie ma innych skutków ubocznych (np. nie manipuluje żadnymi parametrami ani nie wywołuje żadnych metod, które nie są czyste). Czy to kandydat do „[Pure]” czy nie? Jakie znaczenie ma umieszczenie atrybutu `[Pure]` w konstruktorze i kiedy powinienem to zrobić we własnym kodzie?


title: Alternatywa dla statycznej własności/metody abstrakcyjnej

text: Ponieważ próba ich użycia spowoduje błąd, jakie jest obejście, aby uzyskać taki sam efekt jak one? Moja klasa podstawowa: public abstract class IPacket { public abstract int Identyfikator { get; ustawić; } public abstract void Handle(); } Klasa potomna: public class DoSomething : IPacket { public override int Identyfikator { get { return 1; } } public override void Handle() { // Zrób coś } } Routing pakietów przychodzących: Dictionary<Byte, IPacket> Packets = new Dictionary<byte, IPacket> { {DoSomething.Identifier, DoSomething} // <-- Not Possible } ; Pakiety[ID].Obsługa(); Zasadniczo otrzymuję pakiet z serwera, który zawiera identyfikator. Używam tego identyfikatora, aby znaleźć program obsługi tego pakietu ze słownika i przekazać pakiet do jego programu obsługi.


title: Czy można automatycznie przekonwertować kod z języka niskiego poziomu na język wysokiego poziomu?

text: Widziałem kilka aplikacji, które twierdzą, że konwertują kod Java do prawidłowego C lub nawet C++. Bez wątpienia możliwa jest konwersja z języka wysokiego poziomu na język niskiego poziomu. Przynajmniej teoretycznie, czy można dokonać odwrotności bez żadnych czynności ręcznych? Na przykład: * Konwersja zespołu do C lub kodu maszynowego do zespołu? * Języki opisu sprzętu (HDL) do montażu? (która kiedykolwiek jest najniższa?) * C do C#?


title: Czy naprawdę musimy oszczędzać kod źródłowy?

text: Podczas hackowania jakiegoś narzędzia do analizy statycznej zdałem sobie sprawę, że mogę znacznie ułatwić zadanie (nieistotne dla tego pytania), zapisując pliki źródłowe w locie, gdy były edytowane. Na początku wydawało mi się to dziwne, ale będąc leniwym kotem, faktycznie to zrobiłem i okazuje się, że jest to całkiem przydatne : * nie ma potrzeby sprawdzania, czy wszystkie pliki zostały zapisane przed uruchomieniem kompilatora/interpretera * zmusza cię do wielu szczegółowych zatwierdzeń bardziej regularnie Mój redaktor zachowywał się w ten sposób od kilku dni, nigdy nie miałem tak czystej historii commitów i jeszcze się nie sparzyłem. Czy w czasach DVCS, kiedy zapisując, mamy na myśli zatwierdzenie, czy uważasz, że ręczne zapisywanie plików jest nadal stosowną praktyką?


Czy Narzędzia dla programistów Chrome są odpowiednim substytutem Firebuga? Uczę się tworzyć proste aplikacje internetowe przy użyciu Django. Książka, którą posiadam, zaleca instalację Firefoksa/Firebuga. Jestem przyzwyczajony do Chrome i chciałem wiedzieć, czy muszę się przełączyć, czy też narzędzia dla programistów Chrome zawierają wszystkie podstawowe funkcje Firebug.


title: Czy mogę używać pakietów na licencji GPL, LGPL, MPL z moją aplikacją i uczynić ją zamkniętą?

text: Widziałem, jak firma używa BusyBox, a także używa na nim pakietów Gpl + Lgpl + Mpl, a następnie ma na nim własną aplikację. Ich aplikacja jest zamkniętym pakietem źródłowym. Kupujesz urządzenie, ale jego zamknięte źródło. Jak to się dzieje, że GPL zmieszana z LGPL+MPL staje się zamkniętym źródłem? Myślałem, że zasada jest?? A może się mylę lub ta informacja jest nieprawidłowa?: > GPL: Jeśli używasz jej w swojej aplikacji, musisz wydać ją na > GPL. To nie znaczy, że nie możesz go również sprzedawać (jak na przykład > sprzedają płyty CD z Linuksem), ale musisz również udostępnić kod źródłowy za darmo. > To może działać dla ciebie, ale prawdopodobnie nie. >> LGPL: Jeśli używasz go w swojej aplikacji, nadal możesz mieć zamkniętą, licencjonowaną aplikację. Ale jeśli zmodyfikujesz bibliotekę LGPL >, musisz wydać swoje modyfikacje na licencji LGPL, nawet jeśli twoja aplikacja > może pozostać zamkniętym źródłem.


title: Jakie są te wszystkie typy licencji dla aplikacji?

text: Zastanawiam się nad stworzeniem kilku aplikacji dla Linuksa (głównie Ubuntu) i mam zamiar sprzedać kilka w Centrum Oprogramowania Ubuntu i zaoferować kilka aplikacji za darmo. Te bezpłatne aplikacje będą pomniejszymi programami używanymi głównie do zabawy i/lub dla niewielkiej wygody w codziennych zadaniach (powiedzmy, lista rzeczy do zrobienia). Jaka jest odpowiednia licencja, której powinienem użyć do tego? Jeśli chodzi o aplikacje płatne, będą one bardziej zorientowane na biznes (np. oprogramowanie do podejmowania decyzji). Jaki jest dla nich odpowiedni typ licencji? Naprawdę nie rozumiem tych wszystkich licencji (słyszałem o Creative Commons, GNU itp., ale nie mam pojęcia). I mam nadzieję, że te aplikacje zrobię w PyGTK i Quickly, a niektóre w Javie. Więc jeśli ktoś mógłby oświetlić ten temat, jestem bardzo wdzięczny.


title: Czy podjęcie pracy w domenie oprogramowania dla przedsiębiorstw zmniejszy moje szanse na późne przejście na oprogramowanie konsumenckie?

text: Zaoferowano mi pracę z kampusu w domenie Enterprise s/w. Jestem w konflikcie z samym sobą decydując, czy powinienem podjąć tę pracę, ponieważ jestem ogólnie zainteresowany s/w konsumentów w firmach, które zachęcają do wkładu open source. Moje pytanie brzmi, czy będzie mi trudno później (może za rok lub dwa) zmienić domenę i przejść na firmy zajmujące się oprogramowaniem B2C (Business to Consumer). Czy moje dotychczasowe doświadczenia z oprogramowaniem dla przedsiębiorstw będą przeciwko mnie?


title: Dane prawie w czasie rzeczywistym i aplikacja internetowa

text: Mam komputer, który zapisuje 100 różnych punktów danych na serwerze OPC. Napisałem prostego klienta OPC, który potrafi odczytać wszystkie te dane. Mam front-endową witrynę internetową w innej sieci, z której chciałbym korzystać z tych danych. Mógłbym łatwo ustawić klienta OPC, aby wysyłał dane do serwera SQL i strona internetowa mogłaby z niego czytać, ale byłoby to dużo zapisów. Gdybym chciał, aby dane były aktualizowane co 10 sekund, zapisywałbym do bazy danych co 10 sekund. (Prawdopodobnie mógłbym po prostu zserializować 100 punktów, aby uzyskać 1 zapis / 10 sekund, ale to również ograniczy moją możliwość późniejszego wyszukiwania danych). To rozwiązanie nie skalowałoby się zbyt dobrze. Gdybym miał 100 takich komputerów, sytuacja szybko wymknęłaby się spod kontroli. Oczywiście jestem tutaj daleko poza moją ligą i nie mam doświadczenia w pracy z dużą ilością takich danych. Jakie mam opcje i co powinienem zbadać?


title: Jak poradziłbyś sobie z programem wyszukiwania wzorców?

text: Żeby było jasne, nie sądzę, aby to pytanie lepiej pasowało do stackoverflow.com, ponieważ nie ma jednej odpowiedzi, ale szeroki zakres możliwych rozwiązań, co czyni to pytanie o wiele bardziej subiektywnym z natury. Byłem ciekaw, jak poradzicie sobie z programem do wyszukiwania wzorców, czyli wykonałbym następujące operacje: 1. Wprowadzam dane wejściowe. 2. Program przewiduje moje następne dane wejściowe na podstawie wszystkich poprzednich danych wejściowych. 3. Spłucz. Powtarzać. Ponieważ ilość danych wejściowych, które mógłbym dostarczyć, jest tak zróżnicowana, w tym puste ciągi, konwencjonalne środki, takie jak przełączniki lub wyrażenia regularne, są niedostępne, ponieważ wymagałoby to posiadania wyobrażenia informacji o tym, czego się spodziewać. Myślałem o jakiejś formie algorytmu genetycznego, ale nawet wtedy nie mam pojęcia, jak podejść do problemu tego kalibru. Myślę, że niezbędny byłby mechanizm sprzężenia zwrotnego, a także poinformowanie programu, jak blisko było. Ktoś musiał wcześniej zrobić podobny program?


title: Czy istnieją wzorce projektowe GUI lub interfejsu użytkownika?

text: Byłem ciekaw wzorców projektowania GUI, więc przeszukałem i uzyskałem kilka informacji, w tym listę wzorców interfejsu użytkownika dla sieci. Ta witryna zawierająca wzorce interfejsu użytkownika mówi, że: > Wzorce interfejsu użytkownika to rosnąca kolekcja Zasad projektowania interfejsu użytkownika oraz > Wzorce użyteczności interfejsu użytkownika obecne w aplikacjach i witrynach internetowych > dzisiaj. Czy istnieją inne wzorce projektowe do konstruowania stron internetowych lub innych interfejsów użytkownika? Czy są jakieś książki, które opisują te wzorce? Szczególnie interesują mnie wzorce do tworzenia pulpitu Windows i tworzenia stron internetowych na platformie .NET.


title: Projekt samochodu zorientowany obiektowo

text: Kiedy uczę się do rozmowy kwalifikacyjnej, często otrzymywałem tego rodzaju pytania OOD. Ale z mojej perspektywy TDD myślę, że rozsądne byłoby zapytać o przypadki użycia (lub wymagania dla) samochodu. W przeciwnym razie istnieje mnóstwo sposobów na zaprojektowanie samochodu. Czy coś mi umyka? Jak poradziłbyś sobie z tego rodzaju pytaniami podczas rozmowy kwalifikacyjnej?


title: Czy jest coś specjalnego do rozważenia podczas pisania własnej klasy wyjątków w C++?

text: Gdybym chciał zaimplementować własną wersję std::exception bez uzasadnionego powodu, czy są jakieś szczególne rzeczy związane z implementacją tego rodzaju obiektu, o których powinienem wiedzieć? Wydaje się, że jest to dość prosta rzecz, która jest w większości otoką ciągów... Oto moja dotychczasowa implementacja: #pragma Once; #include <string> class MyException { public: MyException(const std::wstring&); virtual ~MyException(){} virtual MyException& operator=(const MyException& rhs); virtual const std::wstring& what(){return msg;}; prywatne: std::wstring msg; }; MyException::MyException(const std::wstring& message) :msg(message) { } MyException& MyException::operator=(const MyException& rhs) { if(this == &rhs) { return *this; } msg = rhs.msg; zwróć *to; }


title: Różnica między programowaniem rozszerzalnym a programowaniem rozszerzalnym?

text: Czym dokładnie różni się „programowanie rozszerzalne” od „programowania rozszerzalnego”? Wikipedia stwierdza, co następuje: Społeczność języka Lisp pozostała oddzielona od rozszerzalnego języka, najwyraźniej dlatego, jak zauważył jeden z badaczy, każdy język programowania, w którym programy i dane są zasadniczo wymienne, można uznać za język rozszerzalny [sic!] . ... widać to bardzo łatwo > z faktu, że Lisp był używany jako język rozszerzalny od lat. Jeśli dobrze to rozumiem, jest napisane: „Lisp jest rozszerzalny, oznacza, że Lisp nie jest rozszerzalny”. Więc co oznaczają te dwa terminy i czym się różnią?


title: Zakładając „czysty kod/architekturę”, czy istnieje różnica w „wysiłku” między tworzeniem aplikacji internetowych w PHP lub Java/J2EE?

text: Klient poprosił nas o oszacowanie nakładu pracy przy wyborze PHP jako języka implementacji dla jego następnej aplikacji internetowej. Spędziliśmy około tygodnia zgłębiając PHP, prototypowanie, testowanie itp., Jesteśmy całkiem nowi w tym języku - być może hakowaliśmy go w przeszłości, ale chodźmy z PHP-noobami, ale ekspertami od tworzenia aplikacji (z braku lepszego, mniej pochlebne słowo :) Wygląda na to, że jeśli piszemy, czyścimy, konserwowalny kod, przestrzegamy separacji obaw, wzorców architektury korporacyjnej (DAO itp.) „wysiłek” w stworzeniu obiektowej aplikacji webowej opartej na PHP wydaje się być taki sam dla wersji opartej na Javie. Oto nasze _równanie_ do oszacowania nakładu pracy (czas opracowania/dostarczenia): ConstructionEffort = f(analiza, projektowanie, kodowanie, testowanie, przegląd, wdrażanie) Porównaliśmy w szczególności szacunki nakładu pracy podczas tworzenia aplikacji korporacyjnej z następującymi elementami: 1. PHP + CakePHP /CodeIgniter (czy powinniśmy wziąć pod uwagę inne?) 2. Java + Spring + Restlet Jest to aplikacja typu end-to-end: 1. Klient: Javascript/jQuery + HTML/CSS 2. Warstwa środkowa/Logika biznesowa - _(Nadal oceniam PHP /Java)_ 3. Baza danych: MySQL Szacunkowe nakłady pracy pierwszej i trzeciej warstwy są stałe i względnie niezależne od technologii warstwy środkowej. Na wysokim poziomie, z początkowym podziałem na historyjki użytkownika żądanych funkcji, jak również SWAG wysokiego poziomu na samej liczbie klas/SLOC, które byłyby wymagane dla PHP nie różnią się zbytnio od tego, co jest wymagane w PHP to samo w Javie. Czy to jest poprawne? Opieramy nasze wstępne szacunki na wstępnym prototypowaniu/kodowaniu, które zrobiliśmy w PHP - obecnie pomijamy biegłość w języku jako czynnik, ponieważ będzie to początkowa przeszkoda, a nie długoterminowa przeszkoda IMHO (mamy również wystarczająco dużo czasu, aby w miarę biegle posługiwać się PHP). Interesuje mnie poznanie perspektywy programistów w odniesieniu do wysiłku przy tworzeniu podobnych aplikacji w jednym z języków, aby uzasadnić wybór jednego z nich. Czy czegoś tu brakuje? Wygląda na to, że sprzeciwiamy się powszechnemu przekonaniu, że PHP jest _szybciej_ wprowadzać na rynek (lub jesteśmy bardzo biegli w Javie, a nasza wizja jest przyćmiona). Wygląda na to, że nie oszczędza żadnego wysiłku związanego z kodowaniem/programowaniem z tego, z czym się bawiliśmy.


title: Czy można napisać zbyt wiele twierdzeń?

text: Jestem wielkim fanem pisania czeków „asert” w kodzie C++ jako sposobu na wyłapanie przypadków podczas programowania, które nie mogą się zdarzyć, ale zdarzają się z powodu błędów logicznych w moim programie. Ogólnie jest to dobra praktyka. Zauważyłem jednak, że niektóre pisane przeze mnie funkcje (będące częścią złożonej klasy) mają 5+ asercji, co wydaje się potencjalnie złą praktyką programistyczną, jeśli chodzi o czytelność i łatwość utrzymania. Myślę, że to nadal jest świetne, ponieważ każdy z nich wymaga ode mnie myślenia o pre- i post-warunkach funkcji, a one naprawdę pomagają wyłapywać błędy. Jednak chciałem to opublikować, aby zapytać, czy istnieje lepszy paradygmat wyłapywania błędów logicznych w przypadkach, gdy konieczna jest duża liczba sprawdzeń. **Komentarz Emacsa** : Ponieważ Emacs jest moim ulubionym środowiskiem IDE, nieco wyszarzam wyrażenia attach, co pomaga zredukować wrażenie bałaganu, jaki mogą zapewnić. Oto co dodaję do mojego pliku .emacs: ; wyszarz opakowanie "assert(...)" (add-hook 'c-mode-common-hook (lambda () (font-lock-add-keywords nil '("\\<\\(assert\() .*\);\\)" 1 '(:foreground "#444444") t))))) ; wyszarzaj elementy wewnątrz nawiasów nieco jaśniejszym kolorem (add-hook 'c-mode-common-hook (lambda () (font-lock-add-keywords nil '("\\<assert\\(\).). *\);\\)" 1 '(:foreground "#666666") t)))))


title: Czy wzorzec MVVM został powszechnie przyjęty w rzeczywistych projektach Silverlight?

text: Wzorzec MVVM jest ostatnio gorącym słowem i planuję nauczyć się i refaktoryzować mój istniejący projekt do tego wzorca. Nie mam doświadczenia i przewidywania potencjalnego ryzyka. Czy naprawdę czerpiecie wiele korzyści ze wzorca MVVM w rzeczywistych projektach? Czy warto dokonać refaktoryzacji istniejącego nie-MVVM (głównie przy użyciu plików Code-Behind) do wzorca MVVM?


title: Wyjaśnienie, jak działa napisany przez Ciebie kod

text: Zostałem poproszony o stworzenie dla niezależnego projektu gry Monopoly w Javie. Po zakończeniu ten sam gość poprosił mnie o stworzenie czterech diagramów UML, z których mógłby zrozumieć, jak działa gra. Do tej pory wszystko poszło dobrze, ale jego trzecia prośba przysporzyła mi pewnych problemów. Teraz chce, żebym napisał dla niego na około 20-25 stronach, jak działa kod gry, żeby mógł go zrozumieć. Programuję od około roku i nigdy wcześniej nie zostałem o to poproszony. Nawet nie wiem od czego zacząć, od której części kodu mam zacząć to wyjaśniać? Zasadniczo jestem do niczego w pisaniu. Czy jest jakiś przewodnik, który mógłby pomóc mi osiągnąć to, czego potrzebuję? Stworzyłem już diagram sekwencji przypadków użycia, diagram klas i diagram aktywności.


title: Wykorzystanie Javadoc w prawdziwych projektach

text: Zastanawiam się, czy Javadoc jest używana w prawdziwych projektach, co mówi o tym twoje doświadczenie?


title: Zależności systemu budowania biblioteki C

text: Ta debata pojawiła się na liście dyskusyjnej projektu, w który jestem zaangażowany. Niestety w tej chwili jesteśmy dość małą grupą, więc chcę zapytać szerszą publiczność. Piszemy bibliotekę C (dla arytmetyki o dowolnej precyzji) i badamy systemy budowania. Obecnie mamy skrypt bash, który rozpaczliwie potrzebuje pracy. Uważam, że nie możemy używać autotools itp. z powodu licencji (bsd vs gpl). Zasugerowałem więc, abyśmy używali nowoczesnego języka skryptowego, takiego jak python lub perl. Pytanie brzmi: czy posiadanie czegoś takiego jak perl lub python w czasie kompilacji jest obecnie _nierealistyczną zależnością_ od platform uniksopodobnych?


title: Czy istnieje korelacja między niektórymi praktykami inżynierii oprogramowania a historiami sukcesu inżynierii oprogramowania?

text: Czytałem książkę Leonarda Mlodinowa „Spacer pijaka: jak losowość rządzi naszym życiem” i jest to naprawdę pouczająca lektura. Książka zajmuje się prawdopodobieństwami i ludzkim rozumowaniem. I powiedzmy, dla porządku, że chociaż niektóre rzeczy czasami działają, jest szansa, że rzeczy, o których myślałeś, że to działa, nie są związane z tym, co faktycznie sprawiło, że to działało. > Prawdopodobieństwa są nieintuicyjne. Jednak podsunęło mi to pewien pomysł. Powinny już istnieć badania na ten temat, które próbowałyby określić ilościowo wyniki przedsięwzięć inżynierii oprogramowania (co oczywiście jest trudnym problemem samym w sobie). A te badania powinny wskazywać, jakie praktyki inżynierii oprogramowania są naprawdę ważne z punktu widzenia wymiernego sukcesu. tj. * Zespół, który używa TDD, jest „ten” znacznie mniej prawdopodobny, aby mieć „tego rodzaju” problem. * Zespół, który stosuje zasady SOLID, jest znacznie mniej prawdopodobny, aby mieć „tego rodzaju” problem. * itp. itp. To, czego szukam, to praktyki inżynierii oprogramowania, które wykazują silną korelację między wdrożeniem a sukcesem. Jestem przekonany, że te rzeczy istnieją, ale są trudne do zdobycia i dlatego stawiam to pytanie. Jakie badania lub praktyki znasz, które mają silną korelację między wdrożeniem a sukcesem (gdzie sukces jest **trochę arbitralny**, ale myślę, że masz pomysł)? > Jeśli zamierzamy sprzedać ten pomysł, że inżynieria oprogramowania jest lepsza niż > kodowanie kowbojskie, myślę, że potrzebujemy dowodów.


title: Czy wymagane są rozmowy kwalifikacyjne na staż w zakresie oprogramowania/programisty?

text: Czy firmy przeprowadzają wywiady z potencjalnymi praktykantami zajmującymi się oprogramowaniem lub programowaniem? Czy jakieś firmy korzystają z wywiadów wideo? Dziękuję.


title: Pakowanie zewnętrznego interfejsu API — połączenia wzorca bramy

text: Mając zewnętrzny interfejs API z bardzo nieporęcznym obiektem z wieloma różnymi obowiązkami — decydujemy się na opakowanie za pomocą małych, łatwych do zarządzania obiektów z jedną odpowiedzialnością. To jest wzór bramy (chyba). Więc za każdym razem, gdy to zrobisz, pojawi się pewnego rodzaju „połączenie”, w którym będziesz musiał połączyć się z zasobem. Co więcej, aplikacje wywołujące mogą chcieć pozostawić otwarte jedno połączenie i używać go z wieloma obiektami (z tymi małymi, łatwymi do zarządzania obiektami z jedną odpowiedzialnością, które stworzyliśmy). Jaką formę powinno przybrać to połączenie? Czy to połączenie powinno być innym obiektem? Czy powinien zostać przekazany do konstruktora małych obiektów opakowujących? A może obiekty opakowujące powinny dziedziczyć z obiektu połączenia? Lub zagregować? A co ze szczególnym przypadkiem, w którym możemy mieć tylko jedno połączenie na aplikację?


title: Badania adopcji oprogramowania open source

text: Nie jestem w 100% pewien, czy jest to właściwe, ale uważam, że obszar studiów jest szczególny dla programistów, ponieważ jest to oprogramowanie typu open source. Jeśli lepiej jest opublikować gdzieś indziej, powiedz to, a ja go tam opublikuję. * * * Czy ktoś może wskazać mi właściwy kierunek badań na temat firm i konsumentów korzystających z oprogramowania open source? Idealnie, chciałbym uzyskać informacje jakościowe na temat tego, dlaczego obie strony zdecydowały się (nie) adoptować oprogramowanie open source, ale surowe liczby też są dobre. Mile widziane byłyby również wszelkie istotne doświadczenia i studia przypadków od użytkowników.


title: Dlaczego wybierasz XYZ? - Czy to ważne pytanie w wywiadzie?

text: Mam dość pytania od ankieterów - Dlaczego wybrałeś „XYZ” (organizację ankieterów). Czy w dzisiejszym świecie IT ktoś szuka FIRMY. Mam na myśli to, co myślą ankieterzy? że ktoś z nieba będzie szukał ich towarzystwa i desperacko chce z nimi pracować. Wielokrotnie stawiałem czoła temu samemu pytaniu. Nie rozumiem, co na to odpowiedzieć. Czy ktoś może tu pomóc...


title: Jak nazywa się ta transformacja tablicy?

text: Zacznij od tablicy tablic; w tym przypadku mają one różne długości, aby zademonstrować technikę, ale nie muszą. [[1,2,3,4], [5,6,7], [8,9,10], [11,12,13,14,15]] Na drugim końcu transformacji masz tablica tablic, gdzie pierwsza tablica zawiera pierwszy element z każdej z oryginalnych tablic, druga tablica zawiera drugi element z każdej z oryginalnych tablic i tak dalej. [[1,5,8,11], [2,6,9,12], [3,7,10,13], [4,14], [15]] Czy istnieje termin matematyczny lub CS dla tego operacja?


title: Czy powinienem pozwolić moim użytkownikom pisać BnfExpressions, aby rozszerzyć moją gramatykę?

text: ## Przedmowa Projektuję język szablonów (proszę pominąć mowę nie/dlaczego??). Jednym z głównych celów tego języka jest rozszerzalność. W moim języku są 2 główne elementy. „Tagi” i „Dyrektywy”. Znaczniki w większości odwzorowują znaczniki 1 do 1 na znaczniki HTML, z wyjątkiem kilku z nich, które robią nieco więcej. „Dyrektywy” to rzeczy takie jak warunkowe i pętle for/while. "Tagi" są proste, ponieważ wszystkie mają taką samą strukturę: `nazwa_znacznika(arg1=wartość1, arg2=wartość2) { treść }`. Dyrektywy są bardziej skomplikowane, ponieważ wyglądają tak: `dyrektywa(tutaj wszystko może się udać) { treść }`. ## Pytanie Próbuję zdecydować, jak pozwolić użytkownikom (innym programistom używającym języka szablonów) pisać własną dyrektywę -- tj. Zdefiniować część "wszystko może tu trafić". Używam Irony do analizowania mojego języka. Czy powinienem dać im ten sam poziom dostępu i zdefiniować ich własne `BnfExpression` (wymagając od nich nauczenia się trochę Irony/EBNF), czy powinienem po prostu rzucić im ciąg (rzeczy między `(` i `)`) i niech analizują go tak, jak chcą? ## Moje obawy Ten pierwszy jest być może potężniejszy i łatwiejszy w obsłudze (kiedy już się o tym przekonasz), ale może też potencjalnie dać im zbyt dużą moc (nie musieliby zatrzymywać się przy następnym `)` \-- cóż , chyba że najpierw usunąłem wewnętrzny ciąg, a potem w zasadzie pozwoliłem im zdefiniować pod-gramatykę, aby tylko to przeanalizować). Nie wiem, jak do tego podejść. ## Więcej o tagach Dla porównania, użytkownicy mogą zdefiniować „tagi” w następujący sposób: class ANode : HtmlNode { public ANode(AttrDict attrs, params TagNode[] children) : base("a", attrs, children) { } } najbardziej podstawowy przykład, który po prostu rozszerza zdefiniowany przeze mnie HtmlNode. Bardziej skomplikowany może zdefiniować niektóre domyślne atrybuty lub zrobić coś wyszukanego z elementami potomnymi lub wygenerować wiele tagów HTML.


title: Wywiady obejmujące algorytmy i struktury danych

text: Chcę zacząć szukać pracy w świetnych firmach i mam cztery lata rozwoju korporacji korporacyjnych, trzy lata w C#.NET i prawie rok w Ruby On Rails, JS, itp... Ale kiedy szukam pytań do rozmowy kwalifikacyjnej z Google , Amazon, Fog Creek, DropBox, itp. są naprawdę skierowane do studentów, którzy wychodzą świeżo po studiach i wciąż pamiętają, czym było programowanie dynamiczne i algorytmy Dijkstry ... ale ja nie! :( Minęło trochę czasu dla mnie ... Jeśli potrzebuję algorytmu sortowania, albo go wygoogluję, albo jest już biblioteka i metoda, która robi to za mnie. Więc co mam zrobić? Czy zdają sobie sprawę, że ten facet nie pochodzi z college'u i będzie zadawał bardziej ogólne pytania dotyczące architektury oprogramowania lub nie! Powinienem wrócić do mojej starej książki o strukturach danych z magazynu i przeczytać ją? W takim razie, jakie książki i język poleciłbyś, aby doskonalić moje umiejętności?


title: Którą licencję mam wybrać?

text: Pracuję nad silnikiem (jeszcze nie zacząłem go kodować, ale lubię mieć wszystko zrobione jak najszybciej, a ponieważ nie jestem w stanie teraz zacząć go kodować, pracuję nad tymi drobiazgami) i chcę licencjonować kod. Na razie myślę o pozostawieniu projektu open-source, ale później może zmienię go na własność, więc zastanawiałem się, jaka byłaby najlepsza licencja dla projektu open source (to jest projekt offline, to znaczy C++/ oparte na Lua, a nie projekt webowy), a także licencję własnościową na później, na wypadek, gdybym naprawdę ją zastrzegł (szukałem obu typów licencji, ale z tego, co zrozumiałem, muszę zrobić licencję własnościową sam, co rejestrowanie praw autorskich, kontraktowanie prawnika itp. i nie chcę marnować pieniędzy na ten projekt, przynajmniej na razie). Chciałbym, aby użytkownicy mieli możliwość modyfikowania, używania części mojego kodu i używania całego mojego silnika w swoich projektach (w przypadku licencji open-source oczywiście licencja własnościowa będzie miała inne prawa, ale płatne) ALE KIEDYKOLWIEK PODAŁEM KOD JEST SKOPIOWANY/ZMODYFIKOWANY Z MOJEGO SILNIKA I NIE JEST ICH KODEM.


title: Wyzwanie architektoniczne: Jak napisać instalator skryptów typu open source do uruchomienia w przeglądarce?

text: Obecnie mam instalator, który działa, ale muszę przepakować aplikacje open source i zhakować wszystko, aby instalator je zainstalował. Chcę móc korzystać z metody instalacji aplikacji bez konieczności hakowania i przepakowywania. Więc myślę o przepisaniu tego. Umożliwi to użytkownikowi z niewielkim lub zerowym doświadczeniem technicznym instalowanie aplikacji open source (tj. WordPress, Joomla, Drupal itp.). Jest kilka wymagań, które chcę spełnić: * Instalacja powinna uruchomić proces instalacji skryptów, aby upewnić się, że baza danych jest poprawnie skonfigurowana, a hasła używają domyślnych procesów szyfrowania haseł aplikacji. * Możliwość śledzenia postępów i zgłaszania wszelkich błędów. * Możliwość uruchamiania aktualizacji dla przyszłych wydań. * Możliwość usunięcia aplikacji, jeśli ktoś uzna, że już jej nie chce. * Jedyny dostęp, jaki na pewno będę miał do zdalnego serwera użytkowników, to przez FTP. Myślałem o użyciu Selenium. Jeśli jednak zostałeś poproszony o ręczne zakręcenie kodu w PHP, jak byś to zrobił? **AKTUALIZACJA DO WYJAŚNIENIA:** Instalator pobierze ustawienia skryptów z formularza w przeglądarce wypełnionego przez użytkownika końcowego. Proces instalacji (który działa w tle i łączy się przez FTP z serwerem użytkownika) będzie następnie przetwarzać instalację. (tj. SimpleScripts, Installatron, Softaculous, Fantastico, WebPub itp.) Próbuję wymyślić, jak zaprojektować najczystszy i najprostszy możliwy proces instalacji. Musi tworzyć bazy danych, instalować aplikację za pomocą metody instalacji skryptów (tak jakby użytkownik uruchamiał ją ręcznie) itd. Mam nadzieję, że to wyjaśnia wyzwanie.


title: Procesy: dokumentowanie zmiany specyfikacji

text: Trochę tła: pracuję w stosunkowo małej (<10 programistów) firmie technologicznej, która w zasadzie produkuje jeden produkt, który stale ewoluuje i jest dodawany. Produkt jest gotowym produktem klient/serwer, gdzie uruchamiamy serwer, a klientami są aplikacje mobilne działające na różnych platformach (Android, iOS, WinMo itp.). Większość specyfikacji i dokumentacji jest utrzymywana w wewnętrznej Wiki. Za każdym razem, gdy dodajemy nową funkcję lub rozszerzamy istniejącą do aplikacji klienckich, proces przebiega mniej więcej tak: 1. Specyfikacja. bo zmiana jest produkowana. Ogólnie rzecz biorąc, te specyfikacje są bardzo mało szczegółowe, często składają się z kilku historyjek użytkownika: „Jako użytkownik chcę...” 2. Ta funkcja jest zaimplementowana na jednej platformie. Która platforma często zależy od tego, który programista jest w danym momencie najbardziej wolny, ponieważ różni programiści specjalizują się w różnych platformach. 3. Gdy funkcja zostanie mniej więcej ukończona na wiodącej platformie, zostanie przeniesiona na inne platformy. Ponieważ początkowa specyfikacja jest tak ogólna, krok 2 zwykle wymaga podjęcia wielu bardziej szczegółowych decyzji - formatów plików, co zrobić, gdy coś pójdzie nie tak, itp. Decyzje są zazwyczaj podejmowane po konsultacji z kierownikiem projektu. Problem, jaki mamy, polega na tym, że nie ma prawdziwej procedury zapewniającej, że decyzje podjęte w kroku 2 rzeczywiście zostaną udokumentowane. W idealnym świecie odpowiedzialność może spaść na kierownika projektu, ale ponieważ jest on również dyrektorem firmy, szczerze mówiąc nie ma czasu! Moje pytanie brzmi: **Czy ktoś może zasugerować proces (lub procesy), których moglibyśmy użyć, aby zapewnić, że te decyzje zostaną udokumentowane?** Bardzo dobrze jest powiedzieć „po prostu zaktualizuj wiki, gdy zapadną decyzje”, ale względy rzeczywiste (czas presja, przerwy w radzeniu sobie z problemami z obsługą użytkownika itp.) często powodują, że się o tym zapomina.


title: Śledzenie piractwa komputerowego w celu oceny siły środków antypirackich

text: Szukałem w tym wątku, jak można zapobiegać piractwu komputerowemu. Zawiera szereg ciekawych sugestii, począwszy od ochrony przed kopiowaniem po udostępnianie darmowych wersji i nic dziwnego, że żadna z nich nie zadowoli Cię w 100%. Być może warto będzie poeksperymentować z każdym z popularnych środków antypirackich, aby ocenić sukces. Czy istnieją wiarygodne ankiety, które wskazują na powodzenie lub niepowodzenie takich działań? Co więcej, ankiety są często stronnicze z powodu niezliczonych czynników i być może sam twórca oprogramowania powinien spróbować ocenić sukces lub porażkę określonego środka. Jeśli zdecyduję się skorzystać z drugiej opcji, co sugerowałbyś, aby uzyskać twarde dane o wzorcach piractwa programowego dla _mojego_ konkretnego produktu?


title: Co oznacza piaskownica?

text: Sanboxing jest wymieniony jako jedna z wielu funkcji bezpieczeństwa w specyfikacji HTML5 . Czy ktoś może wyjaśnić, co oznacza piaskownica? Czy odnosi się tylko do HTML, czy też do JavaScript?


title: Projektowanie mechanizmu reguł biznesowych

text: Mam wymóg, w którym do danych w Excelu należy zastosować 10 reguł. Jeśli Reguła 1 i Reguła 2 zawiodą, pozostałe reguły nie są sprawdzane. Ale jeśli Reguła 1 i Reguła 2 przejdzie, reszta wszystkich Reguł powinna zostać zweryfikowana, a jeśli zostaną znalezione jakiekolwiek błędy – powinny zostać zarejestrowane. Czy istnieje jakiś wzorzec projektowy, którego mogę użyć, aby ten silnik reguł był elastyczny w dodawaniu tych 10 reguł i zamknięty dla wszelkich dodatkowych łańcuchów w bieżącej regule. Myślałem o czymś w rodzaju wzoru dekoratora. Czy to pomoże mi to osiągnąć?


title: Wzór „Opakowanie kolekcji” – czy jest to powszechne?

text: Inne moje pytanie dotyczyło enkapsulacji struktur danych składowych wewnątrz klas. Aby lepiej zrozumieć _to_ pytanie, przeczytaj _to_ pytanie i spójrz na omawiane podejście. Jeden z facetów, który odpowiedział na to pytanie, powiedział, że podejście jest dobre, ale jeśli dobrze go zrozumiałem - powiedział, że powinna istnieć klasa tylko do pakowania kolekcji, a nie zwykła klasa oferująca kilka publicznych metody tylko w celu uzyskania dostępu do kolekcji członków. Na przykład zamiast tego: class SomeClass{ // wręcz odsłania konkretną kolekcję. Rzeczy[] niektóreKolekcja; // pominięto inne rzeczy Thing[] getCollection(){return someCollection;} } Albo tak: class SomeClass{ // hermetyzuje kolekcję, ale rozszerza publiczny interfejs klasy. Rzecz[] jakaśKolekcja; // pominięta funkcjonalność klasy. rzecz publiczna getThing(int index){ return someCollection[index]; } public int getSize(){ return someCollection.length; } public void setThing(int index, Rzecz){ jakaśKolekcja[indeks] = rzecz; } public void removeThing(int index){ someCollection[index] = null; } } Będziemy mieli to: // hermetyzacja kolekcji - w innej klasie, dedykowanej do tego. class SomeClass{ CollectionWrapper someCollection; CollectionWrapper getCollection(){return someCollection;} } class CollectionWrapper{ Thing[] someCollection; rzecz publiczna getThing(int index){ return someCollection[index]; } public int getSize(){ return someCollection.length; } public void setThing(int index, Rzecz){ jakaśKolekcja[indeks] = rzecz; } public void removeThing(int index){ someCollection[index] = null; } } W ten sposób wewnętrzna struktura danych w `SomeClass` może się zmieniać bez wpływu na kod klienta i bez zmuszania `SomeClass` do oferowania wielu publicznych metod tylko w celu uzyskania dostępu do wewnętrznej kolekcji. Zamiast tego robi to „CollectionWrapper”. Np. jeśli kolekcja zmienia się z tablicy na `List`, wewnętrzna implementacja `CollectionWrapper` zmienia się, ale kod klienta pozostaje taki sam. Ponadto `CollectionWrapper` może ukryć pewne rzeczy przed kodem klienta — na przykład może uniemożliwić mutację w kolekcji przez brak metod `setThing` i `removeThing`. **To podejście do oddzielenia kodu klienta od konkretnej struktury danych wydaje się IMHO całkiem dobre.** Czy to podejście jest powszechne? Jakie są upadki? Czy jest to stosowane w praktyce?


title: Globalizacja informacji geograficznej w projektowaniu danych

text: W tej chwili buduję bazę danych / modele / modele widoków i nie mogę wymyślić dobrej nazwy zmiennej do zdefiniowania jako odpowiednika „stanu” w innych krajach. Obecnie mam `Country` i `City`, które są dość powszechne. Wiem, że Kanada ma „Prowincję”, a Francja „Departament” zamiast stanów. W jaki sposób wyabstrahowaliście lokalizację użytkownika? Myślałem o „FirstDegree”, „SecondDegree”, „ThirdDegree”, ale to zbyt niejasne. Jakie są popularne nazwy pól, które widziałeś w przeszłości?


title: Jaki jest dobry sposób na przechowywanie danych geograficznych do obliczania odległości

text: Jaki byłby najlepszy sposób przechowywania danych w bazie danych do obliczeń geograficznych? Załóżmy, że mam tabelę „ItemsForSale” sparowaną z tabelą „Użytkownicy”, która przechowuje ich lokalizację geograficzną. Wiem, że mogę użyć szerokości i długości geograficznej, aby wyszukać elementy, które znajdują się w pewnym promieniu mili, używając formuły Lamberta dla długich linii lub formuły Haversine, ale nie jestem pewien, czy istnieje lepsze podejście do tego.


title: Permutacje tablicy

text: Mam tablicę liczb całkowitych o długości 20, wypełnioną czternastoma zerami, dwiema jedynkami, dwiema dwójkami i dwiema trójkami. Jest tak: [0,0,0,3,0,2,0,0,3,0,0,0,1,0,2,0,0,1,0,0]. Potrzebuję sposobu na wymienienie wszystkich jego 20!/(14! 2! 2! 2!) permutacji, bez powtórzeń. (Zauważ, że na liście są zduplikowane elementy!) Po prostu szukam odpowiedniego pomysłu, nie jest konieczne pisanie kodu. Ale jeśli wolisz pisać kod, rozumiem tylko C i Javę. Dziękuję :)