title: Jakich części mojej konfiguracji i kodu nie powinienem publikować?

text: Kiedy ludzie publikują kod na forach, mają tendencję do zmieniania lub zamazywania części swojego kodu. Pewnie dlatego, że chcą chronić pewne części, które mogą zostać wykorzystane, jeśli trafią w niepowołane ręce? Ale czy naprawdę jest to konieczne? Oto kilka rzeczy, które często widzę: * Zmiana nazw identyfikatorów i klas w html i css * Zmiana nazw zmiennych i funkcji w kodzie * Zamazywanie części struktury folderów * Zmiana nazw procedur składowanych i ich parametrów * Wysyłanie raczej przykładowego kodu niż prawdziwy kod Hasła i ciągi połączeń do bazy danych to oczywiste rzeczy, których nie powinieneś publikować, ale co z resztą? Czy mogę podać nazwę DB? Czy w web.config jest coś, czego nie powinieneś publikować? Co powiesz na plik .htaccess na Apache lub strukturę folderów w systemie itp. Zasadniczo pytam, które części można bezpiecznie publikować, a które nie?


title: Czy masz jakieś wytyczne dotyczące zespołu dotyczące wyjątków?

text: Mój zespół niedawno odziedziczył projekt po zespole, w którym liczba programistów spadła tak nisko, że musieli odciążyć trochę pracy. Jednym z projektów, które odziedziczyliśmy, był projekt zaśmiecony zagnieżdżonym kodem i okropną obsługą wyjątków (wyjątki były w efekcie obsługiwane jako instrukcje goto, a zatem używane jako część normalnego przepływu programu). W sumie była to włochata kula kodowa, którą ktoś kaszlał od kilku lat. Teraz już od dłuższego czasu mamy kilka wskazówek zespołowych, ale wszystkie dotyczą struktur obiektów, stylów kodowania i innych. Ale nie omówiliśmy obsługi wyjątków. Zastanawiam się więc, czy masz w swoich zespołach jakieś wytyczne dotyczące obsługi wyjątków, a jeśli tak, jak je egzekwować?


title: Czy złą praktyką jest wyprowadzanie danych wyjściowych z funkcji?

text:
Na przykład, czy powinienem robić coś takiego: <?php function output_message($message,$type='success') { ?> <p class="<?php echo $type; ?>"><?php echo $ wiadomość; ?>
 <?php } output_message('Wystąpiły błędy podczas przetwarzania twojego żądania','error'); ?> lub <?php function output_message($message,$type='success') { ob_start(); ?> <p class="<?php echo $typ; ?>"><?php echo $wiadomość; ?>
 <?php return ob_get_clean(); } echo output_message('Wystąpiły błędy podczas przetwarzania twojego żądania','error'); ?> Rozumiem, że oboje osiągają ten sam efekt końcowy, ale czy są korzyści z działania w jedną stronę w drugą? Czy to nawet nie ma znaczenia?


title: Rubin i Enterprise. Jakaś przyszłość?

text: Czy po przejęciu Heroku przez SalesForce jest jakaś szansa na zaadoptowanie Rubiego w rozwoju przedsiębiorstwa? Jeśli znasz już jakieś dobre przykłady, wskaż je.


title: Ograniczenia ODBC Lic / Potrzebujesz sposobu na obejście ograniczeń, czy są to moje myśli? Co sugerujesz?

text: Obecnie korzystamy ze starego, starszego systemu ERP (Thoroughbred), którego funkcjonalność czerpiemy z aplikacji internetowych, które projektujemy we własnym zakresie. Wchodzę w interakcję ze starszym systemem za pośrednictwem ODBC i muszę płacić za połączenie za pośrednictwem licencji. Chciałbym zbudować system pośredni, który pobierałby żądania sql i przetwarzał je tak, aby każda z naszych aplikacji mogła się z nim po prostu połączyć, aby uniknąć problemu z lic. Jaki byłby najlepszy sposób na zbudowanie tego adaptera. Myślałem o serwisie internetowym, ale szczerze mówiąc nie jestem nawet pewien technicznie, czym jest serwis internetowy. Wyobrażam sobie, że po prostu przyjmuje żądania i „robi rzeczy” z danymi, a następnie zwraca wyniki z powrotem do żądającego. Przepraszam za to, że jestem niejasny, ale tak jak powiedziałem, nie mam dużego doświadczenia w pracy z usługami sieciowymi. Może usługa sieciowa nie jest najlepszym sposobem na poradzenie sobie z tym problemem i powinienem podejść do problemu z innej strony. Moimi obecnymi mocnymi stronami są Python i turboprzekładnie, więc jeśli mogę pozostać w mojej strefie komfortu, jest to plus, ale nie jest to wymóg. Dzięki za każdy wkład!


title: Szukam porównania plików Windows, które akceptuje katalogi i filtry tylko dla kodu źródłowego

text: Istnieje kilka dobrych darmowych programów do porównywania plików, a większość z nich również porównuje katalogi. Ale to, czego szukam, to taki, w którym mogę określić filtr, taki jak * .cpp i zignorować pliki obiektów, pliki makefile, pliki wykonywalne itp. Bez konieczności ręcznego usuwania ich przed porównaniem. Jakieś sugestie?


title: Zalecane wytyczne dla konfiguracji Mercurial

text: Niedawno zainstalowałem Mercurial i bawię się nim. Ogólnie rzecz biorąc, wydaje się, że jest to świetny sposób na kontrolę wersji. Jednak rozproszony charakter jego architektury sprawia, że jest on tak elastyczny, że nie jestem do końca pewien, jaka jest idealna konfiguracja/topologia. Doskonale zdaję sobie sprawę, że pytanie typu „jaka jest idealna topologia Mercurial” nigdy nie dostanie sensownej odpowiedzi bez bardziej szczegółowych informacji, takich jak wymagania biznesowe, liczba programistów, obawy dotyczące bezpieczeństwa, charakter projektu itp. jakieś ogólne wytyczne lub „najlepsze praktyki” dotyczące konfiguracji systemu Mercurial? W szczególności interesuje mnie, czy większość firm/projektów tworzy scentralizowane, „kanoniczne” repozytorium. Mercurial nie wymaga tego, a zasadniczo można powiedzieć, że _wszystko_ jest "kanonicznym" repozytorium. (Być może można uznać repozytorium robocze głównego programisty za „kanoniczne”.) Ale czy ogólnie dobrym pomysłem jest skonfigurowanie dedykowanego serwera „kontroli źródła”, który po prostu obsługuje repozytorium kanoniczne, aby każdy programista mógł je sklonować i pracować lokalnie? Czy to jest niepotrzebne?


title: Bez praw autorskich do kodu, a następnie ponownego wykorzystania funkcji później

text: Koduję coś do mojej pracy, aby skopiować katalogi, a następnie użyć wyrażenia regularnego, aby ujednolicić wszystkie nazwy plików. Jestem programistą na studiach licencjackich na mojej uczelni i nie jestem pewien, co profesjonalny programista uznałby w tym przypadku za rozsądne. Moja praca polega głównie na realizacji badań matematycznych. Obecne zadanie wykracza poza to, co robiłem i wydaje się, że bardzo przydatne byłoby posiadanie niektórych funkcji na wypadek (najprawdopodobniej) napotkania podobnego zadania w pewnym momencie mojej kariery w przyszłości. To będzie naprawdę przydatne, ponieważ obecne nazwy plików są teraz tak popieprzone, że asystenci administratorów nie mogą nadążyć (a nawet próba zrobienia tego może spowodować więcej ludzkich błędów). Myślę, że może to nie być przydatne poza bieżącym przypisaniem, ponieważ wyrażenie regularne będzie dostosowane do nieprawidłowej nazwy pliku. Zastanawiam się, czy jest to prosta praca dla profesjonalnego kodera, dlatego staram się, aby ten program był w mojej głowie o wiele ważniejszy niż jest w rzeczywistości, czy jest to coś, co koder naprawdę chciałby chronić prawem autorskim lub w inny sposób zachowują zdolność do korzystania z tego zawsze i wszędzie, gdzie mają na to ochotę. Powiedzieli mi już, że nie ma wątpliwości, że zdobędę uznanie za pracę, którą jestem podekscytowany. Moim jedynym zmartwieniem było to, czy powinienem pomyśleć o ponownym wykorzystaniu tego kodu później, czy też to zadanie jest tak ogólne, że profesjonalny programista śmiałby się z zachowania praw do takiego kodu. Ten wątek był interesujący, ale wydaje się inny niż moja sytuacja: Jak mogę ponownie wykorzystać kod generyczny do konsultacji między firmami? EDYCJA: Floryda, USA


title: Czym są „ramy twierdzeń”?

text: Czytałem o frameworku do testowania jednostek js-test-driver, kiedy dowiedziałem się, że ludzie stojący za frameworkiem zamierzają go zintegrować z frameworkiem asercji. Co to jest struktura asercji? Czy jest to rodzaj struktury testów jednostkowych? Jeśli tak jest, co jest specyficzne dla takich ram?


title: Jakie są złe strony używania Core Data dla iOS jako ORM

text: Właśnie zaczynam używać „Core Data” w mojej aplikacji na iOS i zastanawiam się, jak wykorzystać podstawowe dane do moich potrzeb. **Jakie są cechy mojej aplikacji:** 1. Użytkownik szuka produktów proponowanych z katalogu. 2. Użytkownik może dodawać produkty do koszyka. 3. Użytkownik może dostosować każdy wybrany produkt. 4. Aby zakupić zamówienie, użytkownik musi założyć konto. 5. Użytkownik musi dodać odbiorców swojego zamówienia. 6. Użytkownik opłaca zamówienie. **Jak utrwaliłbym dane za pomocą `Core Data`:** * Jeśli użytkownik nie jest zalogowany w `iCloud` lub w moim `RESTful API`: Zachowaj dane na urządzeniu. * Jeśli użytkownik jest zalogowany w `iCloud`, ale nie w moim `RESTful API`: Utrwal dane w `iCloud`. * Jeśli użytkownik jest zalogowany w moim `RESTful API`: Utrwal dane na moim zapleczu. **Pytanie** : Po przeczytaniu kilku artykułów o `Core Data` szybko zrozumiałem, że są one bardzo szczegółowe i przepiszę wiele podobnego kodu w mojej aplikacji. Po poszukiwaniach znalazłem wspaniały artykuł o bibliotekach `Core Data` autorstwa `NSHipster` i jestem naprawdę zainteresowany użyciem biblioteki Objective-Record dla mojej aplikacji. Ale jedno zdanie w artykule `NSHipster`a ostrzega mnie o konsekwencjach używania takiej biblioteki: > Używanie Core Data jako ORM z konieczności ogranicza możliwości Core Data > i zaciemnia ich koncepcyjną czystość. Miałbym więcej informacji o " _ograniczeniu możliwości_ " korzystania z biblioteki inspirowanej `Active Records`. Nie żałowałbym wyboru użycia biblioteki Objective-Record w mojej aplikacji, jeśli może to stanowić dla mnie problem w późniejszym rozwoju funkcji. Dziękuję ! **Aktualizacja:** Dobrą rzeczą dla mnie, aby używać Core Data z biblioteką inspirowaną Active Record jest to, że muszę wykonywać wiele "żądań" wewnątrz mojej aplikacji, co pozwoli mi pisać mniej kodu.


title: Jak przeprosić, gdy zepsułeś nocną kompilację?

text: Moje pierwsze zatwierdzenie w moim projekcie spowodowało, że conocny build został zepsuty, a ludzie są wokół mnie, gdy zbliżamy się do wydania. Chcę wysłać e-mail z przeprosinami, który powinien brzmieć szczerze i jednocześnie sugerować, że to był mój pierwszy commit i że nie będzie się już więcej powtarzał. Ponieważ nie jestem native speakerem języka angielskiego, mam trudności z wymyśleniem poprawnych słów. Czy ktoś może mi pomóc?


title: Cecha a funkcja

text: Często słyszę PMów (Kierowników Projektu) mówiących o cechach i funkcjach. I jestem po prostu tak zaintrygowany, że je rozróżniam. Czasami myślę, że funkcja jest odpowiednikiem historyjki użytkownika. Coś w stylu „Jako użytkownik Robert powinien widzieć listę swoich płatności” i nazywają to funkcją. Czasami jest tak duży, jak podsystem, coś w rodzaju „możliwości wysyłania SMS-ów przez aplikację internetową”. Z drugiej strony funkcja czasami staje się tak mała jak zadanie, „implementacja grupowania cyfr dla wprowadzania liczb”, podczas gdy zdarzają się przypadki, gdy jest tak duża, jak cała operacja CRUD. Moje pytanie brzmi, jak możemy odróżnić funkcję od funkcji?


title: Formatowanie/projektowanie adresu URL MVC

text: Podczas refaktoryzacji dużej ilości kodu MVC napotkałem problem z projektem adresu URL. Na przykład załóżmy, że mamy obiekt `Miejsce` public class Venue { public long ID { get; ustawić; } public Lista<Zdarzenie> Zdarzenia { get; ustawić; } } i obiekt `Event` public class Event { public long ID { get; ustawić; } publiczne Miejsce Miejsce { get; ustawić; } } Więc moje początkowe ustawienie polegało na ustawieniu akcji w `EventController`, takiej jak publiczna lista ActionResult (długa? ID) // http://example.org/API/Events/List/12 gdzie `ID` określił miejsce, więc zwróci listę wydarzeń dla tego miejsca. Jeśli `ID` nie jest określony, zwraca listę **wszystkich** zdarzeń. Powoduje to mylący adres URL, ponieważ parametr „ID” jest niejednoznaczny i mylący. Następnie pomyślałem, aby zmienić go na publiczną listę ActionResult (długą? VenueID) // http://example.org/API/Events/List?VenueID=12, która ma o wiele więcej sensu i jest bardziej przejrzysta. Jeszcze czystszy adres URL istniałby, gdyby akcja została przeniesiona do `VenueController` i skonfigurowana jak publiczne ActionResult Events (długi? ID) // http://example.org/API/Venue/12/Events jako `ID` jasno określiłby „ID” obiektu. Problem z tym adresem URL polega na tym, że masz do czynienia głównie z obiektami `Event` w `VenueController`, co wydaje się błędne. Skłaniałem się ku pierwszej opcji (`http://example.org/API/Events/List?VenueID=12`), ponieważ chociaż druga opcja jest czystsza, wydaje mi się, że powinienem zachować strony `Event` (ponieważ widzę tę stronę List jako bardziej związaną z obiektem `Event`) w `EventController`. Jakieś zalecenia?


title: Zdobywanie praktyczności PHP z Rubiego lub Pythona

text: Mam dość dziwny problem. Uwielbiam praktyczność PHP - szczególnie, że mogę dość bezpiecznie założyć, że na dowolnym losowym serwerze będę miał dostęp do bibliotek MySQL i że mogę przejść między PHP/HTML za pomocą `<?` i `?>`. To powiedziawszy, uważam język za okropny – Ruby i Python są znacznie bardziej ekspresyjne, ale ponieważ nie są specyficzne dla sieci, brakuje im obu tych funkcji – przynajmniej używałem ich obu. Więc moje pytanie brzmi, czy jest jakiś sposób, aby uzyskać praktyczność PHP z Rubiego lub Pythona (w szczególności dwa problemy, o których wspomniałem)? Jeśli nie, to czy jest jakiś inny język, który nie wydaje się być zepsutym parserem C/C++?


title: Czy wiki naprawdę są odpowiednie do przechowywania dokumentów do tworzenia oprogramowania?

text: Wszyscy wiedzą, że dobrze udokumentowane tworzenie oprogramowania prowadzi do sukcesu. Jednak zwykle oznacza to, że dokument będzie zawierał nie tylko zwykły tekst, ale także zawartość binarną, taką jak diagram UML. I słyszałem, jak wielu ludzi tak mówi. System kontroli wersji nie jest odpowiednim miejscem dla plików binarnych. Całkowicie rozumiem i zgadzam się z problemem. Zapytałem kilku doświadczonych programistów, gdzie powinno być najlepsze miejsce do przechowywania dokumentów, a odpowiedź, którą otrzymałem, brzmiała „wiki”. Wiki jest dobra, ale rozważałem inny potencjalny problem. W jaki sposób kod źródłowy przechowywany w systemie kontroli wersji może połączyć się z powiązanym dokumentem na wiki? Powiedzmy, że ktoś klonuje repozytorium git lub mercurial. Jak może łatwo znaleźć dokument? A może po prostu coś przegapiłem? **Zaktualizowano:** Wiem, że niektóre systemy wiki mają możliwość integracji z systemami kontroli źródła. Ale moja troska nie dotyczy zdolności do integracji. Jeśli sklonowałeś kod źródłowy z repozytorium git i po chwili wsiadasz do pociągu i chcesz dalej pracować w pociągu offline (co jest dużą cechą DVCS). Wtedy nagle zdajesz sobie sprawę, że nie masz dostępu do dokumentów, ponieważ pracujesz w pociągu offline. Z drugiej strony, jeśli dokument był przechowywany w repozytorium git, miałbyś dostęp do dokumentu ze sklonowanym repozytorium.


title: XML w atrybucie innego XML

text: Dzisiaj inny programista rozmawiał ze mną o tym, jak rozwiązał problem, nad którym pracował. Rozwiązanie, które znalazł, polegało na wstawieniu ciągu znaków kodu XML do atrybutu innego elementu XML. W głowie krzyczałem „Czy to w ogóle bezpieczne i mądre?”. Według niego zostało to zrobione w wielu innych projektach w firmie, które przesyłają XML tam iz powrotem. Moje pytanie brzmi: 1. Czy to bezpieczna/inteligentna rzecz do zrobienia (xml w atrybucie xml)? 2. Jeśli nie, czy powinienem o tym wspomnieć? Jestem w firmie dopiero od 2 lat i zauważyłem wiele rzeczy, które po prostu proszą, aby kiedyś wydarzyła się poważna katastrofa (zarówno w projektach, nad którymi pracuję, jak i nie). Nie chcę być tym, który zawsze mówi, że robi coś źle... Wszelkie myśli byłyby bardzo mile widziane! **FYI - ZAKTUALIZOWANE INFORMACJE DOTYCZĄCE APLIKACJI -** Flash wywołuje ten interfejs API i analizuje XML, który otrzymuje w odpowiedzi. Nie sądzę, że Flash używa XPath ani nic, po prostu parsowanie ciągów (ale mogę się mylić). Nie pracuję nad aspektem Flash, więc nie wiem, gdzie szukać (ani nie rozumiem).


title: Stopnie informatyki i doświadczenie w świecie rzeczywistym

text: Niedawno, na zjeździe rodzinnym, uczeń szkoły średniej zapytał mnie, jak ważne jest zdobycie dyplomu z informatyki, aby dostać pracę jako programista zamiast rzeczywistego doświadczenia w programowaniu. Dzieciak pracował z Pythonem i projektem Blender, ponieważ zajmuje się tworzeniem gier i tym podobnych; wygląda na to, że ma przyzwoite kotlety programistyczne. Jako osoba, która ukończyła informatykę, moja pierwsza odpowiedź na to pytanie brzmi: „Aby dostać pracę jako programista, absolutnie MUSISZ zdobyć dyplom z informatyki!”. Jednak, gdy o tym pomyślałem, nie byłem pewien, czy moja pierwsza reakcja była częściowo spowodowana moim własnym cierpieniem jako studenta CS, czy też tym, że czuję, że tak właśnie jest. Teraz dla mnie mogę powiedzieć, że rzadko używam czegokolwiek, czego nauczyłem się na studiach, w zakresie ekstremalnie trudnej matematyki, algorytmów itp., ale wyszedłem z przyzwoitym nastawieniem i chęcią przepracowania trudnych problemów . Po prostu nie wiem, co powiedzieć temu dzieciakowi; Czuję, że powinienem mu powiedzieć, żeby zrobił dyplom CS, ale zatrudniłem tak wielu programistów, którzy specjalizowali się w takich dziedzinach, jak angielski, filozofia i inne stopnie w rodzaju sztuk wyzwolonych, nawet takich, którzy nigdy nie studiowali. W rzeczywistości mój najlepszy programista należy do tej drugiej kategorii. Zaczął pisać oprogramowanie dla swojego kościoła czy coś takiego, a potem przerodziło się to w pasję. Tak więc, chociaż wiem, że jest to jedno z tych soczystych pytań dotyczących potencjalnego głosowania w dół, jestem po prostu ciekaw, co wszyscy myślą na ten temat. Czy powiedziałbyś o tym licealistce? Być może, jeśli on / ona już dobrze zna się na programowaniu i kocha je, nie potrzebuje dyplomu CS i mógłby poszerzyć swoje horyzonty o dyplom ze sztuk wyzwolonych. Wiem, że jeden z twórców frameworka internetowego Django studiował literaturę amerykańską i jest oczywiście całkiem utalentowanym programistą. W każdym razie dzięki za uwagę.


title: Wybór wszechobecnego języka w różnych ograniczonych kontekstach

text: Jeśli moja domena ma kilka Bounded Contexts, ale tylko **JEDEN** zespół będzie pracował nad wszystkimi kontekstami, czy powinienem opracować język wszechobecny dla każdego kontekstu? czy powinienem mieć tylko jeden i zmuszać do wszystkich kontekstów? Definicja ograniczonego kontekstu z książki Evana mówi: > KONTEKST OGRANICZONY ogranicza zastosowanie konkretnego modelu, aby > członkowie zespołu mieli jasne i wspólne zrozumienie tego, co musi być > spójne i jak odnosi się do innych KONTEKSTÓW. W tym KONTEKŚCIE pracuj > nad utrzymaniem logicznego ujednolicenia modelu, ale nie martw się o możliwości zastosowania > poza tymi granicami. W innych KONTEKŚCIACH obowiązują inne modele > z różnicami w terminologii, pojęciach i regułach oraz w dialektach > JĘZYKA WSZECHSTRONNEGO. Nie rozumiem, co rozumie się przez _"dialekty WSZECHSTRONNEGO JĘZYKA"_. Czy powinienem opracować uniwersalny, wszechobecny język, a następnie zmodyfikować go dla każdego ograniczonego kontekstu? Moim głównym problemem jest to, że jeśli jeden zespół ma pracować nad całym kontekstem, może być zdezorientowany ciągłą zmianą terminologii. **AKTUALIZACJA** : Użyjmy przykładu, aby zilustrować problem. Jeśli mam 2 ograniczone konteksty „Operacje” i „Obsługa klienta” oraz encję „Zamówienie”. Klient może zażądać zwrotu pieniędzy. W kontekście Operacji nazywa się to „zwrotem”, podczas gdy w kontekście Obsługi Klienta nazywa się to „anulowaniem”. W moich modelach będę miał coś w rodzaju `order.refund()` lub `order.cancel()`. Pytanie brzmi, czy powinienem mieć 2 modele dla encji zamówienia, jeden z metodą o nazwie „refund()”, podczas gdy w innym kontekście metodę o nazwie „cancel()”? czy powinienem wymusić jedną terminologię? Realizacja procesu zwrotu może być taka sama lub inna.


title: Diagram pakietu dla projektu wzorcowego MVC?

text: Jesteśmy zobowiązani do wykonania diagramu pakietu dla naszego starszego projektu. Ponieważ nasz projekt wykorzystuje projektowanie wzorców MVC, stworzyliśmy diagram klas MVC, teraz naszym problemem jest tworzenie diagramów pakietów z naszego diagramu klas. Czy można jednocześnie posiadać pakiety z MVC? więc byłoby to coś takiego: Pakiet: Konto * Model konta * Kontroler profilu * Kontroler rejestracji * Widok profilu * Widok rejestracji Są to kontrolery, które nie mogą istnieć bez modelu konta, więc je dołączyłem. Z góry dziękuję!


title: W jakim języku do jakiej pracy?

text: Dziś zadałem sobie dość fundamentalne pytanie, no cóż.. chyba jedno. Ale Google- i SEing nie mogli dać mi odpowiedzi, której szukałem. Programy piszę już od kilku lat, ale języki, w których zostały napisane, zawsze były podawane przez starszych seniorów, klientów lub przeze mnie do nauki. Powiedzmy na przykład, że chcę napisać aplikację z podstawowymi funkcjami, takimi jak dostęp do bazy danych, wywoływanie usług internetowych i tak dalej. Jakiego języka należy używać i dlaczego? Ignorując takie czynniki jak cross-platforming, interfejs użytkownika, system DB lub usługi sieciowe są używane... wyobraź sobie coś w rodzaju czarnego ciała w fizyce. Na przykład, dlaczego powinienem używać Javy przez C++ lub Pythona przez Ruby? Nie mówiąc, że to pytanie ogranicza się do tych języków. Czy istnieją dobre powody, aby wybrać konkretny język, na przykład wydajność lub wykorzystanie pamięci, czy też w przypadku „sytuacji ciała doskonale czarnego” są to tylko osobiste preferencje, które determinują faktycznie używany język? Z góry dziękuję. ... i przepraszam, jeśli to pytanie jest ogólne.


title: Czy powinienem preferować limity czasu sesji oparte na liczbach pierwszych?

text: Podczas badania pewnych informacji dotyczących zarządzania stanem i sesją w aplikacjach internetowych natknąłem się na tę bryłkę informacji: > 67 to pierwsza użyteczna liczba pierwsza po 60. (Tak, 61 też jest liczbą pierwszą, ale > jest zbyt blisko 60, aby być przydatne.) Ustawianie limitów czasu w czasie trwania liczb pierwszych > jest powszechne, ponieważ zmniejsza prawdopodobieństwo, że dwie sesje limitów czasu będą > się nakładać. > > Oczywiście, jest to kompletna anegdota iw żaden sposób nie może być powodem > dla którego wybrali 67 minut, ale dla mnie to zawsze ma sens. Na pierwszy rzut oka wydaje mi się to całkiem sensowne i tradycyjnie nigdy nie zastanawiałem się zbyt wiele nad wariancją upływu czasu sesji, ale zastanawiam się, ile (jeśli w ogóle) ta strategia została wdrożona w ćwiczyć? Czy zmiana limitów czasu kończących się liczbami pierwszymi rzeczywiście miałaby tak duży wpływ na dłuższą metę w aplikacji na dużą skalę? A może taka zmiana przeszłaby w większości niezauważona? Innymi słowy, czy to naprawdę anegdota? A może jest to coś, co należy zdecydowanie uznać za najlepszą praktykę?


title: Jak nazywa się paradygmat programowania charakteryzujący Go?

text: Intryguje mnie sposób, w jaki Go porzuca hierarchie klas i wydaje się całkowicie porzucać pojęcie klasy w typowym sensie obiektowym. Ponadto jestem zdumiony sposobem, w jaki można definiować interfejsy bez konieczności znajomości typu, który implementuje ten interfejs. Czy są jakieś terminy, które są/mogą być użyte do scharakteryzowania tego typu metodologii programowania i paradygmatu języka (lub może jego konkretnych aspektów)? Czy paradygmat języka Go jest wystarczająco nowy i odmienny od klasycznego paradygmatu OOP i wystarczająco ważny w historii programowania komputerowego, aby uzasadnić unikalną nazwę?


title: Czy powinienem przenieść niezmiennik poza cykl?

text: Czy powinienem przejmować się przenoszeniem niezmienników poza zakres cyklu, jeśli pogarsza to czytelność kodu? Spójrzmy na prosty przykład: for (var i = 0; i < collection.Count; i++) { ... } vs. var collectionCount = collection.Count; for (var i = 0; i < collectionCount; i++) { ... } Wydajność drugiego fragmentu kodu jest lepsza lub równa pierwszej. Będzie równe tylko wtedy, gdy kolekcja ma stały rozmiar, a liczba nie jest obliczana za każdym razem. Będzie o wiele lepiej, jeśli na przykład kolekcja jest listą połączoną, która nie buforuje gdzieś swojej długości. Rozumiem, że drugie podejście raczej nie zabije wydajności mojej aplikacji (o wiele bardziej prawdopodobne, że zrobi to jakieś nieefektywne zapytanie SQL), ale jednocześnie nie czuję się komfortowo, gdy piszę drugi kawałek kodu, ponieważ brakuje mi (małej) optymalizacji. Ale jednocześnie z punktu widzenia czytelności bardziej podoba mi się pierwszy fragment kodu (mniej linii kodu, mniej zmiennych). Myślę, że to drobnostka i może nie warto o tym dyskutować, ale chciałbym poznać Twoją opinię.


title: Jak zarządzać zadaniem przeglądania zlokalizowanych ciągów przez osobę niebędącą deweloperem?

text: W .NET Framework zlokalizowane ciągi znajdują się w pliku XML (lub wielu plikach). Te pliki są częścią projektu i są zatwierdzane do kontroli źródła jak każdy inny plik kodu źródłowego. Zwykle program Visual Studio służy do wyświetlania tych plików jako tabeli i edytowania zlokalizowanych ciągów. Pracuję w małym zespole nad produktem, który powinien mieć wielojęzyczny interfejs. 1. Jako programista opracowuję zlokalizowane napisy w obu językach, ponieważ tłumaczenie może być niedokładne, 2. Inna osoba z zespołu (nie programista) sprawdza treść w obu językach i w razie potrzeby ją poprawia. Obecnym problemem jest to, że osoba niebędąca programistą nie korzystałaby ani z kontroli źródeł, ani z IDE, ponieważ byłoby to zbyt uciążliwe i trudne (kontrola wersji _jest_ trudna dla nie-deweloperów) dla tej osoby. Alternatywnym rozwiązaniem byłoby dla mnie wyeksportowanie zlokalizowanych ciągów do pliku Excel, poczekanie, aż ta osoba przejrzy Excel, a następnie ponowne zaimportowanie zmodyfikowanych ciągów. Zastrzeżeniem jest to, że mogę tworzyć inne ciągi, zmieniać nazwy istniejących itp., co utrudnia porównanie wersji lokalnej z recenzowaną. Co robić? Jak to się dzieje w innych zespołach?


title: Najlepsze praktyki w zakresie walidacji danych: jak lepiej konstruować opinie użytkowników?

text: Walidacja danych, niezależnie od tego, czy jest to obiekt domeny, forma, czy jakikolwiek inny rodzaj walidacji danych wejściowych, może teoretycznie być częścią każdego wysiłku programistycznego, bez względu na jego rozmiar lub złożoność. Czasami piszę komunikaty informacyjne lub komunikaty o błędach, które mogą wydawać się surowe lub wymagające dla niczego niepodejrzewających użytkowników, i szczerze mówiąc, uważam, że musi istnieć lepszy sposób na opisanie użytkownikowi problemu z walidacją. **Wiem, że ten temat jest subiektywny i kłótliwy.** Przeniosłem to pytanie ze StackOverflow, gdzie pierwotnie zadałem je z niewielką odpowiedzią. Zasadniczo szukam dobrych zasobów dotyczących walidacji danych i opinii użytkowników, które wynikają z tego na poziomie teoretycznym. Tematy i pytania, które mnie interesują to: 1. **Treść** * Czy mam opisywać to, co użytkownik zrobił poprawnie lub niepoprawnie, czy po prostu czego oczekiwano? * Ile szczegółów może przeczytać użytkownik, zanim się zirytuje? (np. Czy wystarczy „Nazwa użytkownika nie może przekraczać 20 znaków.”, czy też powinna być bardziej szczegółowo opisana, np. „Nazwa użytkownika nie może być pusta i musi mieć co najmniej 6 znaków, ale nie może przekraczać 30 znaków.”?) 2. ** Gramatyka** * Jak wybrać między wyrażeniami typu „nie wolno”, „nie wolno” lub „nie można”? 3. **Dostarczenie** * Może to zależeć od projektu, ale w jaki sposób informacje powinny zostać dostarczone użytkownikowi? * Czy powinien być natrętny (np. alerty JavaScript) czy przyjazny? * Czy powinny być eksponowane w widocznym miejscu? Natychmiast (tj. bez kroków potwierdzających itp.)? 4. **Logowanie** * Czy niepokoisz się błędami walidacji logów? 5. **Internacjonalizacja** * Niektóre kultury wolą lub lepiej rozumieją bezpośredniość nad subtelnością i odwrotnie (np. „Nie rób tego!” vs. „Proszę sprawdzić, co zrobiłeś”). Jak zaspokoić potrzeby większości użytkowników? 6. **Dostępność** (edytuj) * Jest to rozszerzenie tematu _dostawa_, ale jakie są najlepsze opcje przekazywania informacji zwrotnej osobom niedowidzącym (daltonizm kolorów lub pełna ślepota)? Mogę edytować tę listę, gdy myślę więcej o tym temacie, ale naprawdę interesują mnie odpowiednie techniki informacji zwrotnej od użytkowników. Szukam takich rzeczy, jak wyniki badań, wyniki ankiet itp. Przez lata opracowałem i udoskonaliłem własne techniki, z którymi użytkownicy wydają się być w porządku, ale pracuję w środowisku, w którym użytkownicy wolą dostosowywać się do tego, co Ty dać im możliwość mówienia o rzeczach, których nie lubią. Jestem zainteresowany Twoimi doświadczeniami, oprócz wszelkich zasobów, które możesz mi wskazać.


title: Problemy z projektowaniem PyQt

text: Ostatnio pracuję nad moim pierwszym prawdziwym projektem przy użyciu PyQt. Zrobiłem tylko trochę pracy w Qt dla C++, ale nic więcej niż tylko pomieszanie. Odkryłem, że powiązania Qt Pythona są zasadniczo prostym portem klas C++ do Pythona, co ma sens. Problem polega na tym, że tworzy to dużo niechlujnego, niepythonicznego kodu. Na przykład, jeśli spojrzysz na QAbstractItemModel, musisz przejść przez wiele obręczy, które zmuszają Cię do ukrycia rzeczywistego pytona. Zastanawiałem się tylko, czy istnieje zamiar napisania implementacji Qt w Pythonie, która niekoniecznie jest tylko opakowaniem? Albo przez Nokię, albo kogokolwiek innego? Bardzo lubię Qt, ale chciałbym móc pisać więcej kodu w Pythonie. Mam nadzieję, że mogę o to zapytać. Nie próbuję rozpoczynać wojny GUI ani nic takiego.


title: Jeśli spróbuję zarabiać na wolnym oprogramowaniu, co może przeszkodzić komuś w rozwidleniu tego oprogramowania i stworzeniu zastrzeżonej wersji?

text: Dopiero niedawno zacząłem dowiadywać się o napięciach między oprogramowaniem wolnym a oprogramowaniem własnościowym i byłem bardzo zdezorientowany sposobem, w jaki wolne oprogramowanie może zarabiać pieniądze. Rozumiem, że wolne oprogramowanie jest „wolne jak w mowie, a nie jak w piwie”, ale jeśli wydam program open source, a następnie spróbuję na nim zarabiać, co może przeszkodzić komuś w rozwidleniu tego oprogramowania i stworzeniu zastrzeżonej wersji? Czy jedyną rzeczą, która powstrzymuje ich od inwestowania innych członków społeczności open source w ulepszanie oprogramowania? Wygląda na to, że każde ulepszenie, jakie wprowadza wolne oprogramowanie, jest przejrzyste, więc zastrzeżony naśladowca może upewnić się, że jest zawsze na bieżąco z najnowszymi funkcjami w bezpłatnej wersji, a następnie niezależnie dodać do tego własne funkcje. Jestem zdezorientowany tym, jak wolne oprogramowanie może przetrwać w poważnej konkurencji z oprogramowaniem własnościowym.


title: Jakimi procesami kierujesz się podczas tworzenia kodu dla dużych korporacji?

text: Jestem zainteresowany poznaniem każdego procesu, którego należy przestrzegać podczas kodowania dla dużej korporacji. Na przykład byłoby miło zobaczyć, jak Ty (lub Twój kierownik) radzisz sobie * Przeglądy kodu * Wdrożenie do produkcji * Pozyskiwanie sprzętu/oprogramowania do rozwoju * Ocena dostawców * Zgodność z SOX * Przeglądy bezpieczeństwa ... lub cokolwiek innego Mogłem przegapić. Byłoby również miło zobaczyć, czy uważasz, że jest jakaś korzyść z papierkowej roboty, lub czy istnieje porównywalna alternatywa oprogramowania. Interesuje mnie wszystko, od papierkowej roboty, spotkań, rutyny, a nawet narzędzi programowych, których możesz użyć.


title: Jak przekazać klientowi skutki uboczne w RESTful API na serwerze?

text: Przez ostatnie kilka tygodni dużo myślałem o interfejsach Hypermedia REST-API. Jedyną rzeczą, której nie jestem do końca pewien, jest to, jak chcę modelować efekty uboczne po stronie serwera. W moim obecnym projekcie używam JSON + HAL jako typu zawartości i korzystam z linków i zasobów osadzonych. Na przykład: Załóżmy, że jakiś zasób A został załatany przez klienta, np. ponieważ wartość pieniężna jest aktualizowana. Załóżmy, że ten zasób jest używany przez inny zasób B. Ten zasób B reprezentuje sumę wszystkich zasobów typu A. W związku z tym zasób B zapewniłby nową wartość po aktualizacji A. Jak najlepiej przekazać to klientowi? Przychodzą mi do głowy następujące opcje: 1. Zwróć wszystkie ewentualnie zaktualizowane linki w odpowiedzi PATH, czyli w szczególności link do B. Klient spróbuje wtedy pobrać wszystkie podane linki. 2. Osadź te zasoby, które mogły zostać zaktualizowane, i podaj łącza do wszystkich innych odpowiednich zasobów. 3. Zwróć link do zasobu nadrzędnego zarówno A, jak i B, ponieważ cały stan A i B został zmieniony, a może nawet więcej. Opcja 1) wydaje się niewłaściwa, ponieważ mogę podać linki do zasobów, które tak naprawdę nie znajdują się w pobliżu A. Ponadto nie mogę odróżnić zasobów, które powinienem POBRAĆ, ponieważ zostały zaktualizowane, od zasobów, które mogą być przydatne w inny sposób ( do nawigacji, manipulowania stanem aplikacji, tworzenia nowych zasobów, ...) Opcja 2) jest w zasadzie taka sama jak 1), ale z tą zaletą, że zasób osadzony informuje mnie bezpośrednio o stanie zasobu, co jest przydatne, gdy osadzam B Opcja 3) brzmi dla mnie jak dotąd najlepiej. W tym przykładzie mogę mieć nadrzędny zasób „arkusz kalkulacyjny”, który zawiera zasoby wierszowe, takie jak A, i zasób sumowy, taki jak B. Jeśli zmienię jeden z wierszy, otrzymuję link z powrotem do arkusza kalkulacyjnego, który klient może następnie GET i albo osadzone wszystkie wiersze i sumy, albo jako linki. Może brakuje mi innych opcji. Naprawdę nie jestem pewien, jaka jest tutaj najlepsza praktyka.


title: Dlaczego „praca z plikami” jest ważnym tematem podczas nauki Celu C?

text: Czytam książkę o celu C i zastanawiałem się, jak ważny jest temat Praca z plikami w nauce programowania w szczególności na iOS? Na You Tube samouczki są bardzo krótkie, może 10 minut wideo, które uczy, jak robić rzeczy z plikami i adresami URL. Ale w książce jest bardzo długi rozdział z dużą ilością szczegółów. Podstawy pracy z plikami i adresami URL są bardzo jasne i proste, więc zastanawiałem się, kiedy naprawdę tego potrzebuję, a te informacje stają się przydatne i czy muszę teraz zagłębić się w ten temat? Główne pytanie brzmi: jeśli znam podstawy, czy mogę iść dalej i wrócić, kiedy tego potrzebuję? czy naprawdę ważne jest, aby się teraz zagłębić?


title: Wysoce skalowalne i dynamiczne aplikacje „oparte na regułach”?

text: W przypadku aplikacji dla dużych przedsiębiorstw każdy wie, że umiejętność dostosowania się do zmian jest jednym z najważniejszych aspektów projektowania. Często używam podejścia opartego na regułach, aby poradzić sobie ze zmianą logiki biznesowej, przy czym każda reguła jest przechowywana w bazie danych. Pozwala to na łatwe wprowadzanie zmian bez zagłębiania się w nieprzyjemne szczegóły. Teraz, ponieważ C# nie może Eval("foo(bar);") jest to osiągane za pomocą sformatowanych ciągów przechowywanych w wierszach, które są następnie przetwarzane w JavaScript w czasie wykonywania. Działa to dobrze, jednak jest mniej niż eleganckie i nie byłoby najprzyjemniejsze dla nikogo innego, gdy stanie się dziedzictwem. Czy jest na to bardziej eleganckie rozwiązanie? Kiedy wchodzisz w tysiące reguł, które dość często się zmieniają, staje się to prawdziwym niedźwiedziem, ale nie może to być tak rzadki problem, że ktoś nie wymyślił lepszego sposobu na zrobienie tego. Jakieś sugestie? Czy tę obecną metodę można obronić? Jakie są alternatywy? Edycja: żeby wyjaśnić, jest to duża aplikacja korporacyjna, więc bez względu na to, które rozwiązanie działa, będzie mnóstwo osób stale utrzymujących jej reguły i dane (około 10). Ponadto dane zmieniają się na tyle często, że można powiedzieć, że jakiś scentralizowany system serwerów jest w zasadzie koniecznością.


title: Zdefiniuj „gotowy do produkcji”

text: Ciekawiło mnie to od jakiegoś czasu. Co dokładnie oznacza „gotowy do produkcji” lub jego warianty? Ostatnio szukałem informacji o sqlite i znalazłem ten wątek, w którym wiele osób sugeruje, że sqlite nie jest gotowe do produkcji. Znam różnicę między rozwojem/testowaniem a produkcją; moja definicja produkcji to wszystko, co jest dostarczane klientowi lub będzie używane przez nie-programistów. Jednak wydaje się, że istnieje wiele elementów, które nie są zdefiniowane jako gotowe do produkcji. Ale w rzeczywistości mogą być idealnie dopasowane i ludzie mają do nich po prostu uprzedzenia, m.in. sqlite, python, produkty inne niż MS itp. Małe biuro czy przedsiębiorstwo? Jeden użytkownik czy wielu użytkowników? Klient kontra serwer? Gdzie rysujesz linię?


title: Optymalizacja protokołu opartego na XML

text: Niedawno zastąpiliśmy binarny protokół komunikacyjny oparty na XML (pomiędzy klientem a serwerem opartym na przeglądarce). Implementacja jest już prawie ukończona, jednak szukam sposobów na poprawę jej wydajności zarówno w celu szybszej transmisji, jak i parsowania. Jakieś pomysły ? Proszę zamieścić link wraz z odpowiedzią.


title: Czy nie-czyste interpretery nadal dają gwarancje programowania funkcjonalnego?

text: Zakładam, że implementacje/kompilatory/generowany kod C (zwany dalej generycznym „interpreterem”) dla większości funkcjonalnych języków programowania są napisane w nieczysto funkcjonalnych językach. W takim przypadku bazowy interpreter dla dowolnego języka programowania funkcjonalnego wykazuje destrukcyjne aktualizacje i jest referencyjnie nieprzejrzysty. Konstrukcje funkcjonalne mają na celu zapewnienie pewnych gwarancji, takich jak współbieżność i dowodliwość. Jeśli interpreter jest rzeczywiście programem imperatywnym, w jaki sposób może zagwarantować właściwości „braku skutków ubocznych” czystych programów funkcjonalnych? Z pewnością optymalizacje kodu funkcjonalnego przez interpreter obejmują zmianę charakteru funkcji rekurencyjnych na imperatywne? Moje pytanie brzmi: **W jaki sposób interpretatory imperatywne nadal dają gwarancje dotyczące programu funkcjonalnego, który wykonują, nie będąc z natury funkcjonalnymi?**


title: Jak wdrożyć hybrydowy model kontroli dostępu oparty na rolach?

text: Piszę aplikację web-forms-frontend dla przedsiębiorstw do użytku wewnętrznego. Ma bezpośrednią kontrolę dostępu (DAC) podszywającą się pod kontrolę dostępu opartą na rolach (RBAC). Dla celów anonimizacji nazwijmy główną jednostkę informacji przechowywanych w mojej aplikacji Dokumentem, a role w firmie Szefem, Gruntem i dyrektorem na poziomie C. Są też Zewnętrzni (np. ktoś pracujący dla naszego partnera biznesowego). Ogólna wytyczna jest taka, że wszyscy oprócz zewnętrznych powinni być w stanie czytać wszystkie dokumenty, dyrektorzy na poziomie C mogą pisać wszystko, szefowie mogą pisać dokumenty należące do ich własnego działu, a Grunts mogą pisać tylko dokumenty osobiście im przypisane. Jak dotąd dość standardowe. Ale to, czego tak naprawdę chcą użytkownicy, to możliwość robienia arbitralnych wyjątków od powyższego. Chcą, aby każda osoba w systemie mogła mieć dostęp do zapisu do dowolnego dokumentu, a zewnętrzne mogą mieć dostęp do odczytu do dowolnego dokumentu. (W rzeczywistości jest to bardziej skomplikowane, z większą liczbą ról i dokładniejszą szczegółowością uprawnień, w tym zarządzaniem tym, kto może propagować które uprawnienia innym, ale powyższy opis wystarczająco dobrze ilustruje sedno problemu). Więc to, co mam, to w zasadzie uprawnienia na poziomie osobistym, a role są tylko wygodnym sposobem na posiadanie domyślnych ustawień uprawnień na poziomie osobistym, gdy użytkownik lub dokument jest dodawany do systemu, zamiast kazać komuś wypełnić całość wiersz lub kolumnę w macierzy kontroli dostępu ręcznie. Teraz zaprojektowałem już tabelę Uprawnienia w mojej bazie danych, która zawiera FK użytkownika, FK dokumentu i kolumny dla różnych typów uprawnień. Nie jestem pewien, co powinienem zapisać w tabeli. * Alternatywa 1: Zapisuję wszystkie uprawnienia w tej tabeli (czysty DAC) i mam warstwę logiczną naśladującą RBAC. Np. po dodaniu nowego szefa wiersz dla każdego dokumentu w systemie jest dodawany do bazy danych, z uprawnieniami do odczytu dla wszystkich dokumentów i zapisu dla dokumentów swojego działu. * Alternatywa 2: zapisuję tylko odchylenia od wytycznych dotyczących roli. Więc kiedy dodawany jest nowy szef, nic nie jest zapisywane w tabeli uprawnień. Ale kiedy dyrektor daje szefowi prawa do pisania w dokumencie z innego działu, dodawany jest jeden wiersz, aby odzwierciedlić te informacje. Nie jestem pewien, która alternatywa byłaby lepsza. Pierwsza z nich wydaje się bliższa implementacji podręcznikowej, a jeśli jakaś zasada przekształciła się w podręcznik, to zwykle jest dobry powód, aby z niej korzystać. Ale w moim przypadku szkodzi to również zasadzie DRY - w końcu, jeśli informacje, które exec na poziomie C może zapisać w dokumencie X, można wyprowadzić z jego roli, zapisanie wiersza z tą informacją w DB jest zbędne. Jakie są zalety i wady każdego podejścia pod względem a) wydajności aplikacji i b) złożoności implementacji? Jakich bólów głowy mogę się spodziewać po każdym z nich? Należy pamiętać, że 1) nie planuję implementować pełnej warstwy logicznej. Cała aplikacja jest praktycznie wygodną nakładką CRUD do bazy danych, więc będę wykonywać zapytania DB dla każdego widoku strony zamiast przechowywać kolekcję obiektów Document w pamięci. (Znam zalety wzorca MVC, ale zdecydowano, że będzie to przesada dla tego projektu). 2) Programuję to w ASP .NET 4.5, więc im bliżej jestem ról, tym bardziej mogę pozwolić frameworkowi na wykonanie za mnie ciężkiej pracy. 3) Myślałem o wdrożeniu grup ortogonalnych do ról w celu zarządzania dostępem, ale w moim przypadku nie ma to sensu.


title: Jak mógłbym zasugerować zmianę standardu SQL?

text: Gdybym chciał zasugerować zmianę sposobu działania instrukcji `UPDATE` w `SQL`, jak bym to zrobił? Czy istnieje strona internetowa dla kolejnego standardu? Szukałem w Google, ale po prostu otrzymywałem stronę Wikipedii.


title: Czy należy logować się z kodu biblioteki?

text: Jeśli tworzę bibliotekę Java, czy dobrą praktyką jest wydawanie instrukcji dziennika z poziomu kodu biblioteki? Logowanie w bibliotece sprawi, że debugowanie i rozwiązywanie problemów będzie bardziej przejrzyste. Jednak z drugiej strony nie lubię zaśmiecać mojego kodu biblioteki instrukcjami logowania. Czy należy również wziąć pod uwagę wpływ na wydajność?


title: Gdzie mogę przeczytać przykładowy kod schematu?

text: Biblioteki Ediego Weitza są często przywoływane, gdy ludzie proszą o przykładowy kod w Common Lisp, taki, z którego można czytać i uczyć się. Czy są jakieś projekty lub biblioteki Scheme o otwartym kodzie źródłowym, które możesz polecić ponad inne? Pracuję w Gambicie, więc wolałbym kod bez rozszerzeń Racket. Aplikacje w grach lub obliczeniach naukowych/numerycznych byłyby plusem, ale tak naprawdę szukam tylko kodu do nauki. (Gra i kod numeryczny są dla mnie po prostu łatwiejsze do zagłębienia się, ponieważ ogólny punkt projektu jest łatwo zrozumiały.) **Edytuj:** Szukam kompletnych projektów i bibliotek, a nie pojedynczych fragmentów, takich jak te w książce. (Częściowo wynika to z tego, że czytam już SICP i szukam przykładów z rzeczywistych zastosowań, aby go uzupełnić, a nie innego źródła izolowanych funkcji/makr.)


title: Klasyfikacja języków programowania / taksonomia

text: Czy istnieje rygorystyczny sposób klasyfikacji języków programowania? Jeśli tak, to czy różne „wymiary” można określić ilościowo? (stopień czystości) Na przykład właśnie wszedłem na stronę języka Shade (nie jestem z nią w żaden sposób związany) i zobaczyłem : * "półfunkcjonalny" -> Ale na ile ten język jest półfunkcjonalny ? -> potrzeba kwantyfikacji * "pełne sprawdzanie typu" -> Czyli sprawdzanie typu może być częściowe -> można też określić ilościowo ? * Model obiektowy / brak modelu obiektowego...


title: Diagram sekwencji dla przekierowania odpowiedzi w formularzach internetowych ASP.Net

text: W formularzach internetowych asp.net mam stronę domową aspx, która ma przycisk „Przejdź”. [To jedyna kontrolka na tej stronie]. Po kliknięciu tego przycisku użytkownik zostaje przekierowany na stronę „UserProfile.aspx”. Jak możemy przedstawić to przekierowanie na diagramie sekwencji? Jakieś artykuły/blogi na ten temat?


C# wydaje się być obecnie popularny. Słyszałem, że składniowo jest prawie taki sam jak Java. Java i C++ istnieją od dłuższego czasu. Z jakich powodów powinienem wybrać C# zamiast Java i C++?


title: Czy w nowym projekcie powinniśmy wybrać Javę zamiast C#?

text: Posiadamy zespół programistów .NET (C#) z doświadczeniem od 2 do 6 lat. Od kilku lat rozwijamy aplikacje Silverlight, ASP.NET MVC i WPF. Mamy jednak nowy dwuletni projekt, co oznacza, że opracujemy aplikację HTML5 na Linuksie. Firma, dla której pracuję, chciałaby, aby wszyscy programiści w ich biurach używali tego samego języka programowania, którym jest Java. Chociaż mówi się o używaniu Mono, ale używanie tego samego języka i udostępnianie modułów, usług itp. już stworzonych w Javie jest głównym powodem przejścia na Javę. Niektórzy z twórców są zdenerwowani. Jak znaleźć coś pozytywnego w przeprowadzce, co przekona innych deweloperów? Będzie budżet szkoleniowy, ale myśl o nauce pracy z bibliotekami Java i nową platformą (Linux) będzie przestraszyć wielu facetów. Co powinienem zrobić?


title: Programowanie metodą „przeciągnij i upuść” – czy będzie latać?

text: Wszystkie znane mi języki programowania są pisane – tj. wpisywane jako długości tekstu w taki czy inny sposób. Ale zastanawiam się, czy jest jakiś język programowania, w którym można po prostu przeciągnąć i upuścić cały program; aby uzyskać pętlę, zaznacz to pole tutaj i przeciągnij je do tej sekcji „kodu” tam i tak dalej. A jeśli nie ma takiego, to czy latałby, gdyby taki został wynaleziony? Osobiście nie wierzę, że byłby to taki dobry pomysł, ale chciałbym usłyszeć, co myślisz.


title: Łączenie statyczne ze zmodyfikowanym kodem LGPL

text: Piszę bibliotekę, która łączy się ze zmodyfikowaną biblioteką LGPL, więc dwa pytania: 1. Czy muszę zrobić swój kod na LGPL w przypadku linkowania statycznego z biblioteką LGPL? 2. w przypadku dynamicznego linkowania?


title: Magazyn danych w pamięci w Haskell

text: Chcę zaimplementować magazyn danych w pamięci dla usługi sieci web w Haskell. Chcę uruchamiać transakcje w monadzie `STM`. Kiedy google _hash table steam Haskell_ otrzymuję tylko to: `Dane. Bdrzewo. HashTabela. STM.` Nazwa i złożoność modułu sugerują, że jest on zaimplementowany jako drzewo. Myślę, że tablica powinna być bardziej wydajna w przypadku zmiennych tablic mieszających. Czy istnieje powód, aby unikać używania tablicy dla tablicy haszującej `STM`? Czy mogę coś zyskać dzięki tej tabeli mieszania steam, czy powinienem po prostu użyć odnośnika steam do `IntMap`?


title: Jak należy postępować z obliczeniami w bazie dokumentów

text: Ok, więc mam program, który w zasadzie loguje błędy do bazy danych nosql. Obecnie istnieje tylko jeden model błędu i jest on przechowywany jako dokument w bazie danych nosql. Zasadniczo chcę podsumować różne błędy i sporządzić podsumowanie „rodzajów” błędów, które wystąpiły. Tradycyjnie w bazie danych SQL ta normalizacja działałaby z grupowaniami, sumami i średnimi, ale w bazie danych NoSQL zakładam, że muszę użyć mapreduce. Mój obecny model wydaje się nie pasować do zadania, jak mam zmienić sposób przechowywania „modeli”, aby ułatwić analizę statystyczną? Czy baza danych NoSQL byłaby w ogóle odpowiednim narzędziem do rozwiązywania tego typu problemów? Przechowuję rzeczy w BigTable Google AppEngine, więc są też pewne ograniczenia, o których warto pomyśleć.


title: Jak wdrożyć oprogramowanie GNU GPL z Java Web Start?

text: Wdrażam interaktywne oprogramowanie za pomocą Java Web Start. Jest to cicha, przydatna technologia wdrażania i nie chcę jej zmieniać. Poza tym mam zamiar opublikować swoje oprogramowanie na licencji GNU GPL. Zwykle, gdy użytkownik instaluje nowe oprogramowanie, jest proszony o przeczytanie warunków licencji i zaakceptowanie jej. Czy istnieje równoważny proces z Java Web Start? Jak mogę poprosić użytkownika o zaakceptowanie warunków licencji przed jej użyciem?


title: Budujesz aplikację internetową z zaszyfrowanymi wpisami w bazie danych MySQL?

text: Mam pewne doświadczenie w budowaniu stron internetowych opartych na PHP z dostępem do MySQL, przechowując zaszyfrowane dane użytkownika, ale wszystkie inne pola są zwykłym tekstem. Mój najnowszy projekt będzie wymagał przechowywania w bazie danych wrażliwych. Z których wszystko sam utrzymuję. Chcę skonfigurować system, w którym użytkownik może uzyskać dostęp do swoich własnych wpisów i zobaczyć wyniki w postaci zwykłego tekstu, ale nawet jeśli byłby w stanie uzyskać dostęp do cudzych, byłyby to zaszyfrowane, niezrozumiałe ciągi. Mam pomysł, jak to zrobić, ale być może nie jest to optymalne lub istnieją narzędzia, które pozwolą to zrobić w bardziej efektywny sposób. 1. Przechowuj nazwę użytkownika jako zwykły tekst, a hasło zaszyfrowane za pomocą sha1(). Lub oba zaszyfrowane za pomocą sha1(). 2. Weź hasło użytkownika (nie to zaszyfrowane, ale to, które wpisał, i użyj go, aby zdefiniować klucz specyficzny dla tej nazwy użytkownika i hasła, które będą następnie przechowywane jako zmienna sesji. 3. Zaszyfruj lub odszyfruj wszystkie dane użytkowników za pomocą tego klucza.Moim zdaniem, nawet jeśli ktoś uzyskał dostęp do bazy danych i zobaczył listę nazw użytkownika w postaci zwykłego tekstu i zaszyfrowanych haseł, nie mógł znaleźć konkretnego klucza, ponieważ nie jest on nigdzie przechowywany.Dlatego nawet jeśli uzyskano dostęp , nie mogli rozszyfrować zawartości wrażliwych pól bazy danych.Oczywiście opracowuję sposoby, aby i tak uniemożliwić im dostęp do bazy danych, ale jako wysiłek zbiorczy wydaje się to dobrym zestawem kroków.Proszę ekspertów skomentować to i udzielić porady?Wielkie dzięki.


title: Co musisz wiedzieć, zanim zbudujesz coś takiego jak Facebook / Twitter / YouTube?

text: Oczywiście będziesz potrzebować języka programowania! Ale jakie jeszcze rzeczy powinieneś wiedzieć, zanim zbudujesz swoje pierwsze kroki dla dużej strony internetowej, która będzie dla społeczności! * Czego jeszcze musisz się nauczyć w samym języku programowania?


title: Zaczynając od BI / analizy danych

text: Mamy mnóstwo danych o naszych klientach i chcielibyśmy dowiedzieć się o nich więcej. Pisanie zapytań w celu wyciągnięcia danych nie stanowi problemu i robimy to właśnie teraz, ale chcielibyśmy przenieść to na wyższy poziom. Ciągle słyszę o BI, analizie danych, regresji, analizie predykcyjnej itp. Jeśli więc chcemy uzyskać więcej informacji z naszych danych, od czego powinniśmy zacząć? Czy powinniśmy zajrzeć do narzędzia BI? Czy powinniśmy po prostu zacząć uczyć się analizy danych? A może zajrzyj do R? Jakieś książki, które poleciłbyś na początek? Czy powinienem wrócić do szkoły (matematyka na poziomie college'u, ale nic nadzwyczajnego - chcę się uczyć)? Czy polecasz kursy online? Docelowo chcielibyśmy otrzymać bardziej inteligentne filtry, które pozwoliłyby nam sprawniej przejrzeć nasze dane. Coś w stylu „uwzględnij tylko osoby spoza miast w stanie X i Y, ponieważ Z i Q”. Dziękuję za wszelkie sugestie, jakie możesz mieć. **EDYTUJ** : Na żądanie JeffO. Niekoniecznie chodzi o narzędzia. Więcej na przykład: Jaki powinien być następny krok, aby dowiedzieć się więcej o naszych danych, o relacjach w naszych danych, o których możemy nie wiedzieć? Lub gdzie powinniśmy zacząć badać takie rzeczy jak regresja lub analiza predykcyjna?


title: Czy to dobry pomysł, aby zawsze używać Google jako pierwszego kroku do rozwiązania problemu?

text: > **Możliwy duplikat:** > Jak ważna jest nauka efektywnego google dla programisty? Unikając długich dyskusji, jako student wyższego poziomu CS, jak mogę uciec od problemów z Googlingiem, na które natrafię? Używam go zbyt często; Pozornie sięgam po natychmiastową odpowiedź, a potem na ślepo kopiuję i wklejam kod, mając nadzieję, że zadziała. Każdy może to zrobić. Czytałem powiązane wątki o byciu lepszym programistą, ale głównie te polecają ćwiczenie na domowych projektach, co zrobiłem, ale znowu czuję, że KAŻDA napotkana ściana, od projektu po ukończenie, była utrudniona w Google. Czy profesjonaliści natychmiast „badają” swój problem? A może wy cofacie się i próbujecie sami to rozgryźć? Mówię zarówno o problemach „algorytmu/projektu”, jak i o problemach z kompilatorem.


title: Czy rekurencję można wykonywać równolegle? Czy to miałoby sens?

text: Powiedzmy, używam prostego algorytmu rekurencyjnego dla fibonacci , który byłby wykonywany jako: fib(5) -> fib(4)+fib(3) | | fib(3)+fib(2)| fib(2)+fib(1) i tak dalej Teraz wykonanie będzie nadal przebiegało sekwencyjnie. Zamiast tego, jak mógłbym to zakodować tak, aby `fib(4)` i `fib(3)` były obliczane przez utworzenie 2 oddzielnych wątków, a następnie w `fib(4)`, 2 wątki są tworzone dla `fib(3 )" i "fib(2)". To samo w przypadku podziału `fib(3)` na `fib(2)` i `fib(1)` ? (Zdaję sobie sprawę, że programowanie dynamiczne byłoby znacznie lepszym podejściem dla Fibonacciego, po prostu użyłem tego jako prostego przykładu tutaj) (jeśli ktoś mógłby udostępnić próbkę kodu również w C\C++\C#, byłoby to idealne)


title: Pinguj jeden zdalny serwer z innego zdalnego serwera

text: Wysyłanie pingów do serwera w C# jest proste, ale załóżmy, że mam serwery A, B i C. A łączy się z B. A prosi B o pingowanie C, aby sprawdzić, czy B może rozmawiać z C. A musi odczytać wynik. Teraz, po pierwsze, czy jest to możliwe bez instalowania aplikacji na B? Innymi słowy, czy mogę wykonać całą kontrolę po uruchomieniu programu na A? Jeśli tak, czy ktoś może zasugerować drogę, którą wybrałbym, aby to osiągnąć? Przyjrzałem się gniazdom, ale z przykładów, które widziałem, wymagają one do działania aplikacji klienta i serwera.


title: Czy unikanie specyfikatora dostępu prywatnego w PHP jest uzasadnione?

text: Pochodzę z Javy i pracuję z PHP od prawie roku. Pracowałem z WordPress, Zend i obecnie używam CakePHP. Przeglądałem bibliotekę Cake'a i nie mogłem nie zauważyć, że Cake pokonuje długą drogę, unikając "prywatnego" specyfikatora dostępu. Cake mówi > Staraj się jednak unikać prywatnych metod lub zmiennych na korzyść chronionych > metod. Te ostatnie mogą być dostępne lub modyfikowane przez podklasy, podczas gdy prywatne > uniemożliwiają rozszerzenie lub ponowne użycie. w tym samouczku. Dlaczego Cake nadmiernie unika specyfikatora dostępu „prywatnego”, podczas gdy dobry projekt obiektowy zachęca do jego używania, tj. do zastosowania najbardziej restrykcyjnej widoczności dla członka klasy, który nie ma być częścią jego wyeksportowanego interfejsu API? Jestem skłonny uwierzyć, że funkcje „prywatne” są trudnym testem, ale czy reszta konwencji ma uzasadnienie poza Cakeem? a może jest to po prostu konwencja Cake projektowania OO nastawiona na rozszerzalność kosztem bycia pedantem do rygorystycznego (lub tradycyjnego?) projektowania OO?


title: Pomysł na projektowanie oprogramowania dla architektury wielopoziomowej

text: Obecnie badam projekt architektury wielowarstwowej dla aplikacji internetowej w MVC3. Mam już architekturę, ale nie jestem pewien, czy jest to najlepsze, co mogę zrobić, jeśli chodzi o rozszerzalność i wydajność. Obecna architektura ma następujące komponenty * DataTier (zawiera obiekty EF POCO) * DomainModel (zawiera obiekty związane z domeną) * Global (między innymi typowymi elementami zawiera obiekty repozytorium dla CRUD do DB) * Warstwa biznesowa (logika biznesowa i interakcja między danymi a klientem i CRUD za pomocą repozytorium) * Web(Client) (który rozmawia z DomainModel i Business, ale ma również własne ViewModels do tworzenia i edycji widoków na przykład) Uwaga: Używam ValueInjector do konwertowania jednego typu jednostki na inny. (co jest narzutem w tym projekcie. Naprawdę nie lubię tego robić.) Moje pytanie brzmi, czy mam zbyt wiele poziomów w powyższej architekturze? Czy naprawdę potrzebuję modelu domeny? (Myślę, że robię to, gdy udostępniam moją logikę biznesową za pośrednictwem WCF klientom zewnętrznym). W przypadku prostej bazy danych wstawia się ją (1) tworzy ViewModel (2) Konwertuje ViewModel do DomainModel for Business, aby zrozumieć (3) Business Konwertuje go do DataModel for Repository, a następnie dane wracają w tej samej kolejności. Kilka rzeczy do rozważenia, nie szukam idealnego rozwiązania architektonicznego, ponieważ nie wychodzi. Szukam czegoś, co jest skalowalne. Powinno być możliwe do ponownego wykorzystania (np. przy użyciu wzorców projektowych, interfejsów, dziedziczenia itp.). Każda warstwa powinna być łatwo testowalna. Wszelkie sugestie i komentarze są bardzo cenione. Dziękuję,


title: Funkcje makro a funkcje statyczne w Header

text: dla wielu szybkich zadań, w których można by użyć funkcji `f(x,y)`, w zwykłym C, używane są makra. Chciałbym zapytać konkretnie o te przypadki, które można rozwiązać przez wywołanie funkcji (tj. Makra używane do inline funkcji, a nie do rozszerzenia kodu dowolnego kodu). Zazwyczaj funkcje C nie są wbudowane, ponieważ mogą być połączone z innymi plikami C. Jednak statyczne funkcje C są widoczne tylko w pliku C, w którym są zdefiniowane. Dlatego mogą być wbudowane przez kompilatory. Słyszałem, że wiele makr powinno zostać zastąpionych przez przekształcenie ich w funkcje statyczne, ponieważ daje to bezpieczniejszy kod. Czy są przypadki, w których nie jest to dobry pomysł? Znowu: nie pytaj o makra Code-Production z podobnymi konstrukcjami ##, które w ogóle nie mogą być wyrażone jako funkcja.


title: Jakie są najlepsze sposoby organizowania hierarchii widoków w interfejsach GUI?

text: Obecnie próbuję wymyślić **najlepsze techniki** organizowania **hierarchii widoków GUI** , czyli dzielenia okna na kilka paneli, które z kolei są podzielone na inne komponenty. Spojrzałem na Wzorzec Projektu Złożonego, ale nie wiem, czy mogę **znaleźć lepsze alternatywy** , więc chciałbym wiedzieć, czy użycie Wzorca Złożonego jest dobrym pomysłem, czy byłoby lepiej poszukuje innych technik. Obecnie pracuję w Java Swing, ale nie sądzę, żeby framework czy język miały na to duży wpływ. **Wszelka pomoc będzie mile widziana.** ---------EDYTUJ------------ Aktualnie opracowywałem ramkę zawierającą trzy etykiety, jeden przycisk i pole tekstowe. Po naciśnięciu przycisku zawartość w polu tekstowym zostanie przeszukana, a wyniki zapisane w trzech etykietach. Jedna z moich typowych struktur wyglądałaby następująco: MainWindow | Panel główny | Panel z polem tekstowym i etykietami. | Panel z przyciskiem wyszukiwania Teraz, jak wyjaśnia tytuł, szukałem odpowiedniego sposobu na zorganizowanie zarówno MainPanel, jak i pozostałych dwóch paneli. Ale tutaj pojawiły się problemy, ponieważ nie jestem pewien, czy organizować je jak atrybuty, czy przechowywać w jakiejś strukturze danych (np. LinkedList lub coś takiego). W każdym razie nie sądzę, aby oba moje rozwiązania były naprawdę dobre, więc zastanawiam się, czy istnieją naprawdę lepsze podejścia do radzenia sobie z tego rodzaju problemami. **Mam nadzieję, że to pomoże**


title: Metodologia określania przyczyny błędu specyficznego dla użytkownika

text: Mamy oprogramowanie, które w przypadku niektórych klientów nie pozwala na pobranie pliku. Oprogramowanie zostało opracowane w języku Python i skompilowane do pliku wykonywalnego systemu Windows. Przyczyna błędu jest nadal nieznana, ale ustaliliśmy, że klient ma aktywne połączenie internetowe. Podejrzewamy, że przyczyną jest konfiguracja sieci klienta. Tego błędu nie można powtórzyć we własnym zakresie. Jaką technikę lub metodologię należy zastosować do tego rodzaju konkretnego błędu, którego nie można powtórzyć we własnym zakresie. Ostatecznym celem jest ustalenie przyczyny tego błędu, abyśmy mogli przejść do rozwiązania. Na przykład; * Zdalne debugowanie: Utwórz wersję oprogramowania do debugowania i poproś klienta o odesłanie pliku wyjściowego debugowania. Wymaga to dużo czasu (komunikacja tam iz powrotem) i wymaga od klienta pracy i działania w odpowiednim czasie, aby odnieść sukces. * Debugowanie wewnętrzne: odwiedź klienta i ustal jego konfigurację sieciową itp. Ewentualnie opracuj serię testów skryptów przed uruchomieniem na komputerze klienta w tej samej sieci. * Inne metodologie i techniki, których nie znam?


title: Ile analizy systemowej i biznesowej powinien wykonać programista?

text: W większości miejsc, w których pracowałem, nie było formalnych analityków systemowych ani biznesowych, a programiści mieli pełnić obie role. Trzeba było zrozumieć wszystkie podsystemy i ich współzależności na wylot. Co więcej, należało również posiadać gruntowną wiedzę na temat logiki biznesowej aplikacji i wchodzić w bezpośrednią interakcję z użytkownikami w celu zbierania wymagań, odpowiadania na ich zapytania itp. W mojej obecnej pracy na przykład spędzam około 70% czasu na analizie systemu i tylko 30% programowania czasu. Uważam się za dobrego programistę, ale zmagam się z dobrym zrozumieniem reguł biznesowych złożonej aplikacji. Często powoduje to utrudnienie, ponieważ chociaż mogę pisać wydajne algorytmy i kod bezpieczny dla wątków, przegrywam z facetami, którzy mogą być przeciętnymi programistami, ale znacznie lepiej rozumieją procesy biznesowe. Więc chcę wiedzieć \- Ile wiedzy biznesowej i systemowej powinien posiadać programista? \- Jak zdobyć tę wiedzę w niezwykle złożonym systemie oprogramowania (np. aplikacjach handlowych) z kilkoma współzależnymi procesami biznesowymi, ale słabo udokumentowanymi regułami biznesowymi.


title: Nauka Javy za pomocą prostego projektu

text: O ile pamiętam czasy, kiedy uczyłem się PHP, zasugerowano zbudowanie prostego bloga lub forum po zapoznaniu się z podstawami języka. Powiedziano mi/przeczytałem, że będzie to obejmować wszystko, czego powinienem się nauczyć o PHP z książki dla początkujących. Ta rada pojawiła się w wielu miejscach, a po przejściu i pracy z PHP wydaje się całkiem dobrą radą. Teraz uczę się języka Java i czytam książkę Bruce'a Eckela „Myślenie w Javie”. Zastanawiam się, czy istnieje taki zestaw podobnych, małych projektów, które mógłbym podjąć, które obejmowałyby wszystko, co najważniejsze i większość tego, co jest omówione w książce.


title: Który wzorzec projektowy jest lepszy dla opakowania bazy danych: Zapisz w trakcie pracy lub Zapisz, gdy skończysz?

text: Wiem, że to chyba zły sposób na zadanie tego pytania. Nie mogłem znaleźć innego pytania, które by to dotyczyło. Pełne pytanie brzmi: tworzymy opakowanie dla bazy danych i mamy dwa różne punkty widzenia na zarządzanie danymi za pomocą opakowania. Po pierwsze, wszystkie zmiany wprowadzone do obiektu danych w kodzie muszą zostać utrwalone w bazie danych przez wywołanie metody „zapisz”, aby faktycznie zapisać zmiany. Drugą stroną jest to, że te zmiany powinny być zapisywane w miarę ich wprowadzania, więc jeśli zmienię właściwość, która została zapisana, zmienię inną, to również zostanie zapisana. Jakie są plusy/minusy wyboru i jaki jest „właściwy” sposób zarządzania danymi? **EDYTUJ** Aby dostarczyć więcej informacji, używamy Node.js i piszemy własny wrapper dla Neo4j, ponieważ uważamy, że obecnie dostępny nie jest kompletny lub napotkaliśmy problemy wymagające większej funkcjonalności . Biorąc to pod uwagę, przykład metody save as you go (te przykłady są w JavaScript): // DB jest zdefiniowany jako połączenie z bazą danych przez HTTP(REST) // "dane" to obiekt, który reprezentuje nowe dane węzeł var; db.getNodeById(data.id, function(err, result) { node = wynik; // Ta funkcja wykonuje opcjonalne wywołanie zwrotne jako trzeci parametr, ponieważ // oprócz ustawienia właściwości na obiekcie „węzeł” zapisuje // nowa wartość do bazy danych przez wysłanie żądania HTTP node.set("firstName", data.newFirstName); // automatyczne zapisanie także node.set("lastName", data.newLastName); // koniec tutaj jako węzeł został już zaktualizowany o Twoje zmiany. }); A przeciwny przykład to: // DB jest zdefiniowany jako połączenie z bazą danych przez HTTP(REST) // "dane" będące obiektem reprezentującym nowy węzeł var danych; db.getNodeById(data.id, function(err, result) { node = wynik; // Zmienia tylko wartość dla obiektu węzła, nic w bazie danych nie jest zmieniane node.set("imię", dane. noweImie); node.set("lastName", data.newLastName); // Zapisz wszystkie zmiany node.save(); });


title: Jak podchodzisz do szkolenia zastępcy?

text: Niedawno zapytałem o opuszczenie stanowiska i otrzymałem wiele świetnych odpowiedzi. Jednym ze wspólnych wątków było to, że bycie w pobliżu, aby wyszkolić nową osobę, było oczekiwane i może zajść daleko. Biorąc pod uwagę, że (myślę), że większość ludzi nie pozostaje w firmie przez długi czas po wypowiedzeniu, a firma zajmie trochę czasu na rozmowę/zatrudnienie jednego - to pozostawia na krótki czas, aby pomóż komuś przyspieszyć. Nigdy wcześniej nikogo nie trenowałem. Udzieliłem wielu korepetycji na uniwersytecie iw college'u, ale nauczanie języka/technologii znacznie różni się od szkolenia kogoś, kto zastąpi cię w pracy. Więc pytanie brzmi: jak wyszkolić kogoś, kto cię zastąpi w potencjalnie krótkim czasie?


title: Jak przenieść odpowiedzialność za kod na innego programistę

text: W pracy jestem w sytuacji, w której muszę przenieść odpowiedzialność za dużą bazę kodu, który odziedziczyłem, zrefaktoryzowałem i ulepszyłem na innego programistę. To pierwszy raz, kiedy muszę zrobić coś takiego i chociaż zawsze myślałem, że będzie to trywialne, faktyczne kroki, które muszę wykonać, wydają się niejasne. Baza kodu, którą prowadzę to moduł, który zawiera wiele rzeczy, takich jak * warstwa trwałości * warstwa usług * warstwa prezentacji, która niestety zawiera dużo kodu biznesowego * interfejs do interakcji z modułami również mam bardzo dobrą wiedzę założeń biznesowych przyjętych przy jego tworzeniu oraz jego zaplecze techniczne. Wiem, że mogę iść z prądem mojego umysłu i dać z siebie wszystko, ale wolę robić to w najbardziej profesjonalny sposób, jaki potrafię. Chciałbym więc prosić o radę, jak mam podejść do tej sytuacji. Czy są jakieś standardowe procedury i dobre praktyki, których mógłbym przestrzegać?


title: lista kontrolna przekazania pracy

text: Zrezygnowałem z pracy mojego starego pracodawcy, aby rozpocząć nową pracę i muszę przygotować przekazanie [dokumenty do zabrania nowy pracownik, który jeszcze nie przyjechał, a minęłoby kilka tygodni od kiedy pójdę do kiedy obsadzają stanowisko ponownie]. Więc jakie ważne punkty powinienem uwzględnić, robiłem aplikacje na iOS [ukończono w 90%] i portal internetowy [ukończono w 60%] inny inżynier IT jest tutaj, aby mógł aktualizować hasła itp. Czy powinienem użyć jakiś system, taki jak wiki, aby zostawić tam rzeczy w celu uzyskania dostępu? czy tylko normalny doktor? jakie inne rzeczy powinienem wziąć pod uwagę?


title: Wpływ kończącego się kontraktu ze znawcami i liderami projektu

text: Mam projekt od dawna. Działa od około 6 miesięcy. Projekt jest bardzo duży. Główny programista/lider zespołu zaprojektował projekt, a cały projekt jest w jego mózgu. Zna wszystkie tajniki. Wiem też prawie wszystko. Ale nie jestem tak pewny siebie jak on. Problem polega na tym, że ostatnio pobiera dość wysokie opłaty za proste poprawki błędów i małe prośby o zmianę. Martwię się, czy rozwiążę umowę, jaka będzie przyszłość projektu. Miałem 2-3 publiczne dema. Muszę wkrótce wystartować. Projekt jest wciąż w fazie rozwoju alfa. 1. Co stanie się z projektem, jeśli rozwiążę umowę? 2. Czy wysokie opłaty to dlatego, że wie, że nie mogę teraz zakończyć umowy?


title: Jakie działania podjąć, gdy ludzie odejdą z zespołu?

text: Niedawno jeden z naszych kluczowych inżynierów zrezygnował. Ten inżynier jest współautorem głównego komponentu naszej aplikacji. Nie trafiamy jeszcze na numer Truck, ale jesteśmy już blisko :) Zanim facet odejdzie, chcemy **podjąć działania niezbędne, aby jak najpłynniej odzyskać siły po tej stracie** i ostatecznie „porosnąć” resztę zespół, który umiejętnie objął części, które stworzył. _Więcej o kontekście: domena, którą obejmuje komponent i kod, nie są nauką rakietową, ale wciąż mają wiele nietrywialnych rzeczy. Niektórzy członkowie zespołu potrafią już dużo z tego zrobić, ale ci mają dużo na głowie._ Oto działania, które przychodzą mi do głowy: 1. Poprawa testów i pokrycie testów - szczególnie dla nietrywialnych rzeczy, 2. Aktualizacja wysoka dokumenty poziomu, 3. Udokumentuj wszelkie 'śmieszne rzeczy', które robi kod (musieliśmy zrobić trochę ciężkiej taśmy klejącej), 4. Dodawaj/aktualizuj dokumentację kodu - miej wszystko, co jest widoczne jako 'publicznie'. Na koniec pytania: Jak myślisz, jakie działania należy podjąć w tej sytuacji? Co zrobiłeś w takich sytuacjach? Co się dla ciebie dobrze sprawdziło lub nie?


title: Własność kodu: co mam zrobić, gdy programista odejdzie lub zespół się rozejdzie?

text: Istnieje wiele sposobów śledzenia własności kodu (tj. zbiorowy, zespołowy lub indywidualny). W przypadku własności zespołowej lub indywidualnej, jak: * śledzić własność? * radzić sobie z sytuacjami, gdy dev odchodzi lub zespół dzieli się/reorganizuje dla nowych projektów?


title: Pytania, które należy zadać, zanim ktoś odejdzie

text: Poza oczywistymi pytaniami dotyczącymi konkretnego projektu, nad którym ktoś pracuje, czy są jakieś pytania, które powinienem zadać koledze, który odchodzi z firmy? Do tej pory myślę o; * Lokalizacje rzeczy na serwerze, z którego korzysta, co może nie każdy. * Poświadczenia, które założył, których nie potrzebowalibyśmy. * Dane klienta, których jeszcze nie zapisał w naszym systemie CRM.


title: Nowy projekt od strony trzeciej i dokumentacja

text: Zamierzam zostać opiekunem projektu iOS opracowanego przez firmę zewnętrzną, a mój szef właśnie poprosił mnie o listę dokumentacji, o którą moim zdaniem powinniśmy poprosić firmę trzecią, kiedy przekażą kod. Przeszukałem to trochę i znalazłem niesamowicie różne odpowiedzi, więc pomyślałem, że zadam pytanie bardziej dopasowane do mojej konkretnej sytuacji. Pracuję w zespole 7 osób o różnym poziomie doświadczenia i jestem pewien, że w przyszłości zostanę wezwany do utrzymania lub dodania funkcji do tego projektu. O co powinienem poprosić osobę trzecią, gdy przekaże kod, aby ułatwić mi życie? AppleDoc? Diagramy UML?


title: Zrozumienie zasady wysokiej spójności dla metod w projektowaniu obiektowym

text: Wiem, że idea silnej spójności odnosi się do metod tak samo jak do klas. Żeby było jasne, kiedy mówię „silna spójność” metody, mam na myśli metodę, która wykonuje tylko jedno zadanie i robi to dobrze. Ten pomysł naprawdę działa w przypadku prostych _getters_ i _setters_. Ale czasami zwykle spotykamy metody, które wewnętrznie wykonują więcej niż jedno zadanie, chociaż wydaje się, że wykonuje jedno zadanie, jeśli spojrzysz na wyższy poziom abstrakcji. Przykładem takiej metody może być : public void startUp() { List<SubSystem> subSystems = getSubSystems(); zsynchronizowane(subSystems) { for (SubSystem subSystem : subSystems) { subSystem.initialize(); } } } A wewnątrz tych metod `subSystem#initialize()` dużo się dzieje. Czy jest to więc naruszenie zasady _wysokiej/silnej spójności_?


title: Czy istnieje termin na oprogramowanie własnościowe quasi-open source?

text: Załóżmy, że firma chce utrzymywać rozwój nowych funkcji oprogramowania wewnętrznie, ale chce upublicznić kod źródłowy poprzednich wersji, łącznie z istniejącymi funkcjami publicznymi, aby inne osoby mogły korzystać z samodzielnego używania i modyfikowania oprogramowania , a nawet ewentualnie wnieść zmiany, które można zastosować w branży programistycznej. Czy istnieje termin na tego rodzaju układ i jaki jest najlepszy sposób na jego realizację przy użyciu istniejących narzędzi i platform kontroli wersji?


title: Schema.org a mikroformaty

text: Obydwa służą temu samemu celowi: dostarczaniu słownictwa do znaczników semantycznych. Schemat jest rozpoznawany i standaryzowany… ale standard mikroformatów jest wynikiem otwartego procesu społeczności. Schemat wykorzystuje mikrodane w dokumentacji, podczas gdy mikroformaty trafiają na zajęcia. (Zauważ: mikrodane oznaczają, że element musi należeć do jednego „typu elementu”, podczas gdy mikroformaty pozwalają na zastosowanie kilku klas do tego samego elementu. Mogę oznaczyć xFolk+hAtom klasami, ale nie mikrodanymi). biało-biała sytuacja? Google mówi, że nie mogę używać obu, „ponieważ może to zmylić parser”. Jaki jest konsensus w tej sprawie?


title: Wyjaśnienie dotyczące gramatyk, lekserów i parserów

text: **Informacje w tle** ( _Maj Pomiń_ ): Pracuję nad zadaniem, które wyznaczyliśmy na uniwersytecie, w którym musimy zaprojektować gramatykę dla otrzymanego łącza DSL. Gramatyka musi być w BNF lub EBNF. Oprócz innych rzeczy jesteśmy oceniani na podstawie reguł leksykalnych w gramatyce i regułach parsowania - na przykład, czy reguły są odpowiednie dla podzbioru języka, jak obszerne są te reguły, jak jasne są te reguły. Nie rozumiem, czy zasady te są ujęte w gramatyce zdefiniowanej w BNF (to dla nas nowy temat). **Pytanie** : Czy gramatyka dla danego języka, która została zdefiniowana w BNF lub EBNF, zawiera/zawiera reguły dotyczące **_Lexical Analysis_** i/lub **_Parsing_**? ( _czy te muszą być określone gdzie indziej?_ ) Również co można by uznać za regułę leksykalną? A co można by uznać za regułę parsowania?


title: Jaka jest właściwa etykieta wydawania kompletnej przeróbki istniejącego projektu?

text: Jestem nowy w świecie open source. Projekt, nad którym pracuję, znajduje się na Github. (Tylko w celach informacyjnych) Projekt, nad którym pracuję, to wtyczka do Plex Media Server. Planuję przesłać swoją wtyczkę do Plex, aby została uwzględniona w ich „sklepie z aplikacjami”. Teraz na moje pytanie. Kiedy zaczynałem, znalazłem starszą, częściowo porzuconą wtyczkę, która robiła część tego, co chciałem, ale niezbyt dobrze. Zacząłem od współtworzenia tego repozytorium. Natychmiast zostałem współpracownikiem z pełnymi prawami do repozytorium, ponieważ obecny właściciel powiedział, że jest zbyt zajęty, aby już z nim mieszać. Jednak, gdy zacząłem zagłębiać się w kod, zdałem sobie sprawę, że jest to daremne. Istniejąca baza kodu była okropna i nie było skutecznego sposobu, aby to naprawić. Skończyło się na tym, że zaczynałem od zera. Jedynym kodem, którego użyłem w mojej nowej wtyczce, był kod, który wprowadziłem na początku. Teraz projekt jest gotowy do wydania. Jednak nie jestem pewien, jak się do tego zabrać. Moje opcje widzę następująco: 1. Utwórz nowe repozytorium i po prostu zapomnij o istniejącym. Nie jestem pewien, czy powinienem w ogóle wspomnieć o poprzednim repozytorium i jego współtwórcach. Nie użyłem żadnego z tego kodu/zasobów i stworzyłem całkowicie nową bazę kodu. Podczas gdy wtyczka robi niektóre z tych samych rzeczy, co stara, robi to w zupełnie nowy i bardziej wydajny sposób. 2. Rozwidlam istniejące repozytorium, usuwam istniejący kod i zatwierdzam nowy kod. Jestem naprawdę nowy w Git, więc nie jestem pewien, czy jest to w ogóle możliwe. 3. Zatwierdzam moje zmiany w istniejącym repozytorium i widzę, co mają do powiedzenia obecni kontrybutorzy. Z trzech opcji zdecydowanie skłaniam się ku pierwszej. ALE! Jestem nowy w open source i chcę się upewnić, że robię wszystko zgodnie z odpowiednią etykietą. Nie chcę, żeby mój pierwszy projekt wyleciał mi w twarz i stał się katastrofą. Opcja druga nie brzmi źle, ale nie jestem pewien, czy mam to zrobić. Nie jestem pewien, jak działa historia i różnice. Mówimy tylko o 500 - 1000 linijkach kodu najwyżej. Więc nie jest to ogromna baza kodów. Dzięki za każdy wkład, który możesz dostarczyć!


title: Skąd należy generować i drukować błędy interfejsu użytkownika? Logować błędy?

text: Funkcja `A()` wywołuje `B()` wywołuje `C()`, co powoduje wystąpienie błędu. Która funkcja zapisuje do dziennika, a która raportuje do użytkownika? Moją pierwszą intencją jest to, że wszystkie funkcje powinny zapisywać w dzienniku, a najbardziej wewnętrzna funkcja interfejsu użytkownika powinna być odpowiedzialna za wyprowadzanie błędu do użytkownika. Jednak _fix_ należy wykonać w `C()`, więc być może zamiast mieć bardzo długi plik dziennika, którego parsowanie zajmie trochę czasu, powinienem po prostu mieć funkcję, która napotkała błąd, rejestruje błąd i parametry zwykłem to nazywać. Podobnie nie jestem zbyt przekonany, że najbardziej wewnętrzna funkcja interfejsu użytkownika powinna generować błąd (rozważ aplikacje CLI, w przeciwieństwie do aplikacji internetowych lub GUI). To była bardziej intuicyjna decyzja, więc każdy wgląd w faktyczne „zaprojektowanie” rozwiązania byłby doceniony.


title: Gdzie w systemie obiektowym należy, jeśli w ogóle, wybierać struktury (w stylu C) zamiast klas?

text: C i najprawdopodobniej wiele innych języków dostarcza słowo kluczowe `struct` do tworzenia struktur (lub coś w podobny sposób). Są to (przynajmniej w C), z uproszczonego punktu widzenia, jak klasy, ale bez polimorfizmu, dziedziczenia, metod i tak dalej. Pomyśl o języku zorientowanym obiektowo (lub wieloparadygmatycznym) ze strukturami w stylu C. Gdzie byś je wybrał zamiast zajęć? Nie wierzę, że mają być używane z obiektami obiektowymi, ponieważ klasy wydają się zastępować ich cele, ale zastanawiam się, czy są sytuacje, w których mogłyby być preferowane w stosunku do klas w programach zorientowanych obiektowo iw jakich sytuacjach. Czy są takie sytuacje?


title: Jak zorganizowane są dane pośrednie w MapReduce?

text: Z tego, co rozumiem, każdy program mapujący wyprowadza plik pośredni. Dane pośrednie (dane zawarte w każdym pliku pośrednim) są następnie sortowane według klucza. Następnie reduktor jest przypisywany przez mastera. Reduktor odczytuje z pliku pośredniego zawierającego klucz, a następnie wywołuje redukcję przy użyciu odczytanych danych. Ale szczegółowo, jak zorganizowane są dane pośrednie? Czy dane odpowiadające kluczowi mogą być przechowywane w wielu plikach pośrednich? Co się dzieje, gdy jest zbyt dużo danych odpowiadających jednemu kluczowi, aby mógł być przechowywany w jednym pliku? Krótko mówiąc, czym partycje pośrednie różnią się od plików pośrednich i jak te różnice są traktowane w implementacji?


title: Co jest pierwsze, rubinowy kurczak czy jajko homebrew?

text: Podczas instalowania Rubiego na OsX zauważyłem, że mogę to zrobić za pomocą menedżera pakietów o nazwie Homebrew. Wydawało się to łatwą opcją, więc ją przyjąłem. Wszystko działało sprawnie. Życie było dobre. Będąc ciekawskim facetem, przyjrzałem się, jakie inne korzyści dałoby mi zainstalowanie Homebrew, iw moich badaniach odkryłem, że Homebrew jest napisany rubinem. Och, poczekaj chwilę! Jak to jest, że mogę zainstalować Rubiego używając czegoś, co jest napisane w Rubim, nie mając Rubiego w moim systemie, a po zainstalowaniu wspomnianego systemu opartego na Ruby NADAL muszę instalować Rubiego osobno? **Ostrzeżenie:** _Nie czytaj tego pytania na głos. Ryzykujesz, że singiel Kaiser Chiefs utkwi ci w głowie na resztę dnia._


title: Systemy ERP/CRM. Oparte na komputerze ? Internetowy?

text: Widziałem 2-3 ERP w akcji. Zastanawiam się, co jest lepsze. Aplikacja komputerowa lub internetowa wyświetlana w przeglądarce. Moje pierwsze doświadczenie miało miejsce z internetowym systemem ERP, kiedy miałem 14 lat. Był on oparty na sieci i strasznie powolny... Dla większości prostych zadań trzeba było wykonywać wiele kliknięć... brak obsługi klawiatury..... Strony ładowanie trwało wieki. W zeszłym roku pracowałem nad migracją do nowszego komputera starej aplikacji cobol opartej na terminalu. Komputer, który działał do dziś i nadal nie ma problemu, pochodził z 1993 roku. Interfejs użytkownika oczywiście był tekstowy. Szybkość składania zamówień była niesamowita! wystarczy wpisać nazwę klienta, a następnie 5-10 klawiszy, aby dodać produkt do zamówienia.... W porównaniu do tego ERP strona do składania zamówień Link (kliknij zamówienia sprzedaży) wydaje się strasznie powolny, aby dodać produkt... Brak klawiatury Skrót działa, aby zapisać to, co dodałeś i ogólnie uważam, że potrzebujesz 4 razy więcej czasu na złożenie zamówienia w porównaniu z interfejsem tekstowym... Konieczność używania myszy i klawiatury do tego zadania jest ZŁA i sadystyczna... Więc jak to możliwe do diabła ci ludzie kiedykolwiek używają takiego systemu ??? Więc na dłuższą metę aplikacja komputerowa wydaje się jedynym sposobem... Oczywiście przeglądarki obsługują skróty, ale sposób na pominięcie domyślnych ustawień, których używają przeglądarki, nie jest kompatybilny z innymi... To ogromny problem. Wreszcie, jeśli w najbliższej przyszłości MUSIMY/musimy korzystać z chmury, co ze skrótami klawiszowymi? Czuję się zdezorientowany... Widziałem konwertery aplikacji desktopowych na aplikacje przeglądarkowe, ale są POWOLNE jak diabli... Pytanie brzmi, co z przyjaznością dla użytkownika? Jakiej aplikacji byś użył?


title: Jak przekonać kierownictwo do wyrzucenia prototypu?

text: Uwielbiam prototypowanie jako szybki i skuteczny sposób na umieszczenie interfejsu użytkownika przed użytkownikiem. Jednak wiele razy kierownictwo przeszkadza im, a prototyp jest wciągany, kopiąc i krzycząc, do głównego nurtu rozwoju. Jak zarządzasz kierownictwem, aby tego nie robić?


title: Czy kiedykolwiek jest za stary, aby nauczyć się, jak zostać programistą?

text: Jeśli chcesz być dobrym programistą, ale zacząć programować w wieku 26 lat, czy jest jakiś sposób na zostanie dobrym programistą?


title: Jak duży może być zespół programistów mobilnych, nie będąc zbyt dużym?

text: Pracuję dla firmy, która mocno przechodzi na mobile. Większość naszych klientów dość regularnie korzysta z naszej aplikacji mobilnej. Mamy mnóstwo rzeczy, które chcemy do niego dodać – a także dostarczyć wszystkie te nowe funkcje w aplikacjach natywnych dla systemu Android i iOS. Ale zastanawiam się, jak duży możemy stworzyć zespół programistów mobilnych, nie czyniąc go zbyt dużym, aby był praktyczny. Czy możemy mieć mobilny zespół składający się z 5 osób? 10? 50? 100? Jeśli stworzenie tak wielu nowych funkcji miało dla nas sens, czy z inżynierskiego punktu widzenia jest to praktyczne? A może jest jakiś limit liczby inżynierów, którzy mogą obsługiwać jedną aplikację (na wielu platformach)?


title: Czy są jakieś darmowe narzędzia programowe, które wspomagają szacowanie kosztów oprogramowania za pomocą punktów obiektowych?

text: Szukam darmowego (lub jeśli nie ma, to płatnego) oprogramowania, które mogłoby pomóc oszacować wysiłek związany z tworzeniem oprogramowania przy użyciu punktów obiektowych. Jeśli ktoś zna jakieś inne oprogramowanie, które jest w stanie wspomóc kosztorysowanie (a jest dość szybkie i niezawodne) to również chętnie o nim usłyszę. :)


title: Czy często kłamie się w ogłoszeniach o pracę w związku z używanymi technologiami?

text: > Poszukiwane: Doświadczony programista Delphi, który utrzyma olbrzymią spuściznę > aplikacji i pomoże w migracji do C# _Później, gdy nowy pracownik zaaklimatyzuje się w swojej roli..._ "Och, ta migracja do C#? Tak, bardzo chcielibyśmy to zrobić. Ale kierownictwo jest temu przeciwne. Dobrze, że kochasz Pascala, co? Zauważyłem sporo tego w miejscu, w którym mieszkam (Szkocja) i nie jestem pewien, jak powszechne jest to w IT: firma korzysta ze starszej technologii i wiedzą, że większość programistów będzie ich unikać, aby utrzymać technologię z głównego nurtu. wznawia. Opublikują więc reklamę, w której mówią, że chcą przenieść swój produkt do jakiejś modnej nowej technologii (C#, Ruby, FORTRAN 99) i potrzebują kogoś, kto ma kontakt z obydwoma - ale migracja to tylko marchewka na patyku, wiecznie wisiał przed wygłodniałym programistą, który każdego dnia spędza na utrzymaniu starszej aplikacji. Sam tego doświadczyłem i słyszałem zbyt wiele podobnych historii do tego stopnia, że wydaje się to powszechną praktyką. Z biegiem czasu nauczyłem się, że każda firma ma jakieś problemy z dziedzictwem, ale nie rozumiem, dlaczego nie mogą być w tym szczerzy. Każdy deweloper powinien mieć zdrowy rozsądek, że stosowana technologia ma wspierać biznes, a nie odwrotnie. O ile technologia nie szkodzi w jakiś sposób biznesowi, nie widzę żadnego słusznego powodu, aby przerabiać stos oprogramowania, aby dostosować się do tego, co jest obecnie modne w branży. **Czy powiedziałbyś, że jest to powszechne?** Jeśli tak, to jak mogę wcześniej wykryć tego rodzaju wiodące reklamy?


title: Opcjonalnie korzystanie z biblioteki GPL za pośrednictwem systemowego API w aplikacji o zamkniętym kodzie źródłowym

text: Proszę wziąć pod uwagę następującą sytuację: Piszesz aplikację o zamkniętym kodzie źródłowym, nazwijmy ją A. A zależy od systemowego API (tj. dostarczanego przez system operacyjny), który z kolei jest konfigurowalny do używania różnych backendów. Każdy backend jest identyfikowany przez prostą wartość ciągu, a także wybierany za pomocą tego identyfikatora. Samo API nie jest związane żadnymi wymaganiami podobnymi do GPL. Teraz preferowany byłby określony backend (B), ale jest on objęty licencją GPL. Aplikacja działałaby bez niego, a dostępne są inne backendy, tylko z gorszą wydajnością lub innymi wadami. Czy którekolwiek z poniższych jest dozwolone? 1. Zakodowanie identyfikatora na stałe w B 2. Automatyczne wybieranie dowolnego dostępnego zaplecza, ale preferowanie B, jeśli jest dostępny 3. Pozwolenie użytkownikowi na wybór zaplecza (i zdecydowanie sugerowanie B) Czy zależałoby to również od tego, czy wysyłam A i B razem, czy tylko A i zasugerować użytkownikowi, że zainstalowanie B poprawi działanie aplikacji? Ogólnie uważam, że wszystkie trzy opcje są w porządku. ponieważ przekazanie określonego łańcucha do systemowego API raczej nie kwalifikuje się do _pracy pochodnej_ (IMHO), ale FAQ B zasadniczo stwierdza, że _nie ma znaczenia, jak wywołasz funkcję B, każde użycie czyni twój program pracą pochodną_. Czy mają rację nawet w trzech opisanych powyżej przypadkach? P.S.: Nie jest moją decyzją, aby tworzyć zamknięte źródła, więc nie można go kupić na GPL. PS 2: Pominąłem nazwy systemowego API i B, aby pytanie było bardziej ogólne, ale mogę je dodać, jeśli to robi jakąkolwiek różnicę. edit: Z innego punktu widzenia: Kiedy użytkownik (w przeciwieństwie do programisty) tworzy dzieło pochodne? W trzecim przypadku powinno być jasne, że użytkownik tworzy pracę pochodną, ponieważ zainstalował A i B oraz aktywnie wybrał B. Byłoby to zgodne z argumentami MSalters w jego komentarzu. Drugi przypadek przynajmniej wyjaśnia, że praca nie zależy od B, więc to też może być w porządku. Prawdopodobnie najbardziej w duchu GPL byłoby po prostu skontaktowanie się z autorami; jednak nie jestem pewien, czy ich wpis w FAQ jest zgodny z _rzeczywistym tekstem_ GPL.


title: Czy jest jakaś książka o algorytmach, która uczy jak seria Head First?

text: Jako programista Java muszę nauczyć się algorytmów (do programowania wyzwań). Czytałem kilka Head First Series (java należąca do mnie) i są one bardzo przyjazne dla mózgu. Zastanawiałem się więc, czy istnieje jakaś książka o algorytmach, która będzie łatwa do zrozumienia, a także dotyczy sedna każdego algo.


title: Jakie są podstawowe zagadnienia matematyczne, które programista powinien znać, aby nauczyć się algorytmów?

text: Jako inżynier elektronik nigdy nie byłem narażony na żadne algorytmy. Teraz jestem doświadczonym programistą i chcę uczyć się algorytmów. Zacząłem od CLRS. Ale byłam przytłoczona matematyką w książce. Więc jakie są minimalne tematy matematyczne, które powinienem znać, zanim zacznę Algorytmy? Czy są jakieś dobre tutoriale lub książki na ten temat? Znalazłem jedną książkę o matematyce autorstwa Donalda Knutha, ale myślę, że jest zbyt szczegółowa i trudna dla początkujących.


title: DDD i trwałość obiektów wartości; musimy denormalizować?

text: Dużo czytałem o rozwoju opartym na domenach i doszedłem do pytania, jak zachować brak wyraźnej tożsamości z obiektami wartości (VO). Podczas gdy w świecie DDD jest to wymóg (jednak nie jestem pewien, czy rozumiem pełną moc tego), stwarza problemy dla niższych warstw ORM pod względem trwałości. Tabele w większości lubią być znormalizowane. Ułatwia życie pod względem braku anomalii związanych z usuwaniem lub wstawianiem. Moje obawy pojawiają się podczas wdrażania VO; mają klucze podstawowe - tożsamości z definicji (i klucze obce do ich rodzica). Uczynienie z nich jednostek jest naruszeniem DDD na rzecz trwałości. Zamiast tego mógłbym stworzyć klasę opakowującą, która akceptuje "torbę" parametrów, a następnie dołącza je do klucza obcego każdego rodzica. Choć mechanicznie niechlujny, wydaje się, że zadziała. Czytałem wiele odpowiedzi w Internecie (również Stack Overflow) na temat denormalizacji tabel. Martwi mnie to, ponieważ teraz naruszamy wytrwałość dla DDD. Jak umożliwić istnienie VO zgodnie z ich właściwą definicją bez denormalizacji?


title: Zasoby do stworzenia szczegółowego systemu nawigacyjnego

text: Próbuję stworzyć coś w rodzaju systemu nawigacji satelitarnej turn-by-turn za pomocą zestawu iOS SDK. Otrzymuję wskazówki z serwera i rysuję je na mapie, a następnie otrzymuję aktualizacje lokalizacji z chipa GPS iPhone'a. Obecnie zaczynam od znalezienia najbliższego punktu zwrotnego, wtedy za każdym razem, gdy użytkownik znajdzie się w pewnej odległości od następnego punktu zwrotnego, podana jest wskazówka słowna i indeks punktu zwrotnego jest zwiększany. Jest to delikatny system i chciałbym uczynić go bardziej niezawodnym, abym mógł stwierdzić, kiedy użytkownik zmierza w złym kierunku itp. Zasadniczo szukam trochę literatury na temat nawigacji zakręt po zakręcie, jeśli chodzi o śledzenie postępy użytkownika i czy idą we właściwym kierunku. Myślałem, że jest dużo badań, ale wydaje mi się, że nie mogę znaleźć niczego poza prostymi samouczkami na temat korzystania z danego SDK lub API wskazówek. Czy ktoś może skierować mnie do dobrego przeglądu różnych technik stosowanych w oprogramowaniu, takim jak TomTom lub Google Maps Navigation?


title: Wzorzec projektowy dla nakładających się akcji i animacji?

text: Czy istnieje wzorzec projektowy do radzenia sobie z nakładającymi się działaniami i animacjami interfejsu użytkownika? Kilka przykładów: 1. Załóżmy, że mam interaktywny wiersz tabeli, który rozwija się, aby odsłonić dodatkową kontrolkę, gdy użytkownik ją kliknie i odwrotnie, jeśli kliknie ją ponownie. Jeśli użytkownik kliknie wiersz, gdy trwa animacja rozwijania, chcę, aby animacja przestała być animowana i wróciła do pierwotnego rozmiaru z miejsca, w którym się zatrzymała. 2. Mam zestaw wierszy z przykładu 1 w grupie. Po usunięciu ostatniego wiersza chcę, aby grupa zmniejszyła się, a następnie usunęła się w wywołaniu zwrotnym. Jednak podczas gdy grupa się zmniejsza, użytkownik nadal może dodać do niej kolejny wiersz. Jeśli tak się stanie, chcę, aby grupa przestała się zmniejszać, rozszerzyła do prawidłowego rozmiaru i dodała wiersz. 3. Co jeśli mam funkcję sortowania interfejsu użytkownika w przykładzie 2? Jeśli użytkownik kliknie przycisk sortowania, wiersze zostaną przetasowane i animowane w nowych pozycjach. Jednak nadal chcę, aby użytkownik mógł klikać wiersze tabeli, usuwać wiersze i robić wszystko, na co pozwala mój interfejs użytkownika. Interfejs użytkownika powinien zachowywać się rozsądnie, a pierwszeństwo ma animacja odtwarzania losowego. Możesz automatycznie przewijać do przodu wszystkie animacje dla elementu interfejsu użytkownika, gdy wykonywana jest na nim nowa akcja i/lub blokować dane wejściowe użytkownika we wszystkich animowanych elementach interfejsu użytkownika. Ale to wydaje mi się nieeleganckie. Jako użytkownik naprawdę podziwiam interfejsy użytkownika, które nie zacinają się ani nie blokują mi możliwości robienia tego, czego chcę — innymi słowy, interfejsy użytkownika, które zachowują się jak prawdziwe obiekty — i chciałbym zrobić to samo we własnych aplikacjach. Wydaje mi się, że musiałbyś mieć ograniczenia dla każdej akcji/animacji, aby uczynić ten system solidnym. Na przykład może być konieczne upewnienie się, że wszelkie zmiany danych/stanu/modelu zachodzą _tylko_ w wywołaniu zwrotnym do animacji, a nie wcześniej. W przykładzie 2 nie możesz usunąć grupy w modelu, gdy tylko użytkownik kliknie przycisk, aby usunąć ostatni wiersz; należy to zrobić na końcu animacji i tylko na końcu animacji. (W przeciwnym razie, jeśli użytkownik zdecyduje się dodać kolejny wiersz podczas animacji usuwania, cofnięcie usunięcia grupy byłoby bardzo trudne.) Może być również konieczne zaprojektowanie systemu animacji w taki sposób, aby w przypadku nakładania się dwóch animacji z dwóch różnych akcji wzajemnie wykluczające się właściwości będą nadal animować, jak poprzednio. (Innymi słowy, jeśli użytkownik sortuje tabelę, gdy wiersz rozwija się po kliknięciu, rozwijanie szerokości nie powinno się zatrzymać tylko dlatego, że wiersz przesuwa się do nowej pozycji). A co z początkowymi ustawieniami domyślnymi dla każdej animacji? Jeśli wiersz zanika po usunięciu, a następnie inna akcja niejawnie anuluje usunięcie, zanikanie powinno zostać zatrzymane i ponownie animowane, nawet jeśli inna akcja niekoniecznie musi o tym wiedzieć. Istnieje również wyższy poziom animacji (zmiany właściwości wizualnych) vs. akcji (sekwencje zdarzeń, z potencjalnymi zmianami modelu, które zawierają animacje). W przykładzie 2 „usuń ostatni wiersz” jest wyraźnie akcją, ponieważ końcowy wynik jest taki, że grupa zostaje usunięta. Jednak w większości bibliotek interfejsu użytkownika dodałbyś wywołanie zwrotne do animacji, łącząc te dwa. Jest to również problem w grach. Jeśli muszę wyzwolić rzut granatem po zakończeniu animacji rzutu mojej postaci, jak mam to przedstawić w kodzie? Jak umieścić rzut granatu na mojej osi czasu bez mieszania kodu modelu i widoku, jednocześnie pozwalając na spowolnienie i przyspieszenie animacji w oparciu o czynniki zewnętrzne? Im więcej o tym myślę, tym bardziej boli mnie głowa i tym bardziej jestem przekonana, że ktoś już to przemyślał dużo dokładniej niż ja. Jakieś pomysły? (W tej chwili interesuje mnie głównie ten interfejs webowy, ale interesuje mnie również ogólne podejście do moich przyszłych, nie-webowych projektów.)


title: Powszechna praktyka przesyłania nazwanych parametrów w Tcl

text: Używając Tcl8.5, jaka jest powszechna praktyka przenoszenia **nazwanych** zmiennych do proc/metody? Coś, co będzie podobne do definiowania członków klasy podczas tworzenia instancji obiektu klasy _[incr Tcl]_. Coś takiego: # Przekazywanie 3 parametrów: "cześć", "jak" i "robi". procName -hello world -jak ty -robisz dzisiaj # Możemy łatwo dodać lub usunąć dowolne parametry do/z dowolnej lokalizacji **Edit #1:** Taki sam przykład jak powyżej, ale bardziej podobny do pythona: procName hello=world how=you robić=dzisiaj


title: Dopasowywanie ciągów i sufiksów z listy sufiksów

text: Mam problem ze znalezieniem algorytmu, który dopasowuje (lub nie pasuje) podciąg ciągu do sufiksu z listy sufiksów. Odnajdywane przeze mnie trafienia dotyczą drzew sufiksów i tablic sufiksów, ale nie są one dokładnie tym, czego szukam. Moim szczególnym problemem jest w pełni kwalifikowana nazwa hosta - prawdopodobnie zniekształcona - i próba dopasowania sufiksu dostarczonego na liście zakazanych sufiksów opublikowanej przez Mozillę. Jako konkretny przykład, biorąc pod uwagę `w.x.y.z.example.com`, muszę zidentyfikować go jako nazwę hosta `w`, domenę `example.com` i wiedzieć, że `example.com` jest prawidłową domeną. Jako degeneratywny przykład, być może będę musiał wziąć `example.com` i wiedzieć, że jest to domena bez hosta i że dopasowanie jej do `*.com` byłoby błędne. Negatywne przypadki pogarszają się tylko wtedy, gdy uwzględnisz przyrostki, takie jak `pvt.k12.ma.us`, `nasushiobara.tochigi.jp`, `公司.cn` i `السعودیة`. Ostateczną aplikacją będzie nazwa hosta DNS pasująca do certyfikatów X509. Stąd powód, dla którego mogą być zniekształcone dane wejściowe od złoczyńców. Myślę, że ten algorytm powinien działać w _m log n_. _log n_ dla każdego wyszukiwania na [posortowanej] liście sufiksów i _m_ dla każdej etykiety DNS. Myślę, że to może być przypadek nie dostrzegania lasu przez drzewa. Czy ktoś zna wydajny algorytm dopasowywania podciągów z listy sufiksów?


title: W jaki sposób (s) jest niski poziom LLVM?

text: W jaki sposób (s) jest niski poziom LLVM (Maszyna wirtualna niskiego poziomu)? (W momencie pisania tego tekstu nie znalazłem tego rozszerzenia skrótu „LLVM” na jego stronie internetowej, ale na Wikipedii). czy działa na "niższym poziomie" niż inne narzędzia? Jako (rodzaj) „ilustrację” tego, czy LLVM jest niższym poziomem niż JVM i CLR, czy jest tylko _zaprojektowany_ do zastosowań „niższego poziomu”?


title: Klient pyta plik źródłowy oprogramowania układowego

text: Ostatnio moja firma została poproszona przez klienta o opracowanie płyty sterującej, która zawiera oprogramowanie układowe i opracowanie układu PCB. Po zakończeniu opracowywania klient będzie co roku kupował płyty sterujące w określonej ilości. Jesteśmy teraz na etapie zawierania umowy, klient chce, aby moja firma przekazała zarówno pliki źródłowe oprogramowania układowego, jak i pliki układu PCB po opracowaniu. Moglibyśmy przekazać pliki układu PCB, ale nie chcemy udostępniać plików oprogramowania układowego, ponieważ obawiamy się, że mogą znaleźć stronę trzecią, która wyprodukuje płytę sterowania, abyśmy mogli nic nie mieć. Jednak z punktu widzenia klienta obawiają się, że mogą znaleźć się w sytuacji ryzyka, jeśli moja firma z jakiegoś powodu przestanie sprzedawać deski. Czy istnieje jakaś „powszechna” praktyka zawierania umowy w tym zakresie?